codecparsers: h264: fix calculation of the frame cropping rectangle.
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>
Mon, 8 Jul 2013 16:44:24 +0000 (18:44 +0200)
committerSebastian Dröge <slomo@circular-chaos.org>
Tue, 9 Jul 2013 10:15:07 +0000 (12:15 +0200)
Fix calculation of the frame cropping rectangle, and more precisely
the actual cropped height. The frame_crop_top_offset subtraction
was not scaled up with SubHeightC.

Also clean-up variables to align more with (7-18) to (7-21).

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
gst-libs/gst/codecparsers/gsth264parser.c

index eb754b5..7c9148e 100644 (file)
@@ -1565,18 +1565,19 @@ gst_h264_parse_sps (GstH264NalUnit * nalu, GstH264SPS * sps,
   sps->height = height;
 
   if (sps->frame_cropping_flag) {
+    const guint crop_unit_x = subwc[sps->chroma_format_idc];
+    const guint crop_unit_y =
+        subhc[sps->chroma_format_idc] * (2 - sps->frame_mbs_only_flag);
+
     width -= (sps->frame_crop_left_offset + sps->frame_crop_right_offset)
-        * subwc[sps->chroma_format_idc];
-    height -= (sps->frame_crop_top_offset + sps->frame_crop_bottom_offset
-        * subhc[sps->chroma_format_idc] * (2 - sps->frame_mbs_only_flag));
+        * crop_unit_x;
+    height -= (sps->frame_crop_top_offset + sps->frame_crop_bottom_offset)
+        * crop_unit_y;
 
     sps->crop_rect_width = width;
     sps->crop_rect_height = height;
-    sps->crop_rect_x =
-        sps->frame_crop_left_offset * subwc[sps->chroma_format_idc];
-    sps->crop_rect_y =
-        sps->frame_crop_top_offset * subhc[sps->chroma_format_idc] * (2 -
-        sps->frame_mbs_only_flag);
+    sps->crop_rect_x = sps->frame_crop_left_offset * crop_unit_x;
+    sps->crop_rect_y = sps->frame_crop_top_offset * crop_unit_y;
 
     GST_LOG ("crop_rectangle x=%u y=%u width=%u, height=%u", sps->crop_rect_x,
         sps->crop_rect_y, width, height);