On 1/11/2021 5:45 PM, Mark Thompson wrote:
+static int FUNC(vui_parameters)(CodedBitstreamContext *ctx, RWContext
*rw,
+                                H266RawVUI *current)
+{
+    int err;
+
+    flag(vui_progressive_source_flag);
+    flag(vui_interlaced_source_flag);
+    flag(vui_non_packed_constraint_flag);
+    flag(vui_non_projected_constraint_flag);
+    flag(vui_aspect_ratio_info_present_flag);
+    if (current->vui_aspect_ratio_info_present_flag) {
+        flag(vui_aspect_ratio_constant_flag);
+        ub(8, vui_aspect_ratio_idc);
+        if (current->vui_aspect_ratio_idc == 255) {
+            ub(16, vui_sar_width);
+            ub(16, vui_sar_height);
+        }
+    } else {
+        infer(vui_aspect_ratio_constant_flag, 0);
+        infer(vui_aspect_ratio_idc, 0);
+    }
+    flag(vui_overscan_info_present_flag);
+    if (current->vui_overscan_info_present_flag)
+        flag(vui_overscan_appropriate_flag);
+    flag(vui_colour_description_present_flag);
+    if (current->vui_colour_description_present_flag) {
+        ub(8, vui_colour_primaries);
+        ub(8, vui_transfer_characteristics);
+        ub(8, vui_matrix_coeffs);
+        flag(vui_full_range_flag);
+    } else {
+        infer(vui_colour_primaries, 2);
+        infer(vui_transfer_characteristics, 2);
+        infer(vui_matrix_coeffs, 2);
+        infer(vui_full_range_flag, 0);
+    }
+    flag(vui_chroma_loc_info_present_flag);
+    if (current->vui_chroma_loc_info_present_flag) {
+        if (current->vui_progressive_source_flag &&
+            !current->vui_interlaced_source_flag) {
+            ue(vui_chroma_sample_loc_type_frame, 0, 6);
+        } else {
+            ue(vui_chroma_sample_loc_type_top_field, 0, 6);
+            ue(vui_chroma_sample_loc_type_bottom_field,  0, 6);
+        }
+    }

These are inferred as 6 when not present?

6 only happened when ChromaFormatIdc = 1, others are not defined.
and 6 is the unspecific value in the spec...
Do we really need to infer it :)

To match the colour description cases probably yes?

"When vui_chroma_loc_info_present_flag is equal to 0, vui_chroma_sample_loc_type_frame is not present and is inferred to be equal to 6, which indicates that the location of the chroma samples is unknown or unspecified or specified by other means not specified in this Specification. When vui_chroma_sample_loc_type_top_field and vui_chroma_sample_loc_type_bottom_field are not present, the values of vui_chroma_sample_loc_type_top_field and vui_chroma_sample_loc_type_bottom_field are inferred to be equal to vui_chroma_sample_loc_type_frame."

So the correct implementation i think would be

    flag(vui_chroma_loc_info_present_flag);
    if (current->vui_chroma_loc_info_present_flag) {
        if (current->vui_progressive_source_flag &&
            !current->vui_interlaced_source_flag) {
            ue(vui_chroma_sample_loc_type_frame, 0, 6);
            infer(vui_chroma_sample_loc_type_top_field,
                  current->vui_chroma_sample_loc_type_frame);
            infer(vui_chroma_sample_loc_type_bottom_field,
                  current->vui_chroma_sample_loc_type_frame);
        } else {
            infer(vui_chroma_sample_loc_type_frame, 6);
            ue(vui_chroma_sample_loc_type_top_field, 0, 6);
            ue(vui_chroma_sample_loc_type_bottom_field,  0, 6);
        }
    } else {
        infer(vui_chroma_sample_loc_type_frame, 6);
        infer(vui_chroma_sample_loc_type_top_field,
              current->vui_chroma_sample_loc_type_frame);
        infer(vui_chroma_sample_loc_type_bottom_field,
              current->vui_chroma_sample_loc_type_frame);
    }

Also, you also need to infer the default value of almost everything when sps_vui_parameters_present_flag is 0. See section D.8 and how h265 does it with the vui_parameters_default() custom function.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to