h264dec: Fix POC calculation for type 0
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Thu, 5 Nov 2020 23:09:06 +0000 (18:09 -0500)
committerSeungha Yang <seungha@centricular.com>
Tue, 17 Nov 2020 10:00:39 +0000 (19:00 +0900)
This is mostly for future use as it only fixes the caclulation for interlaced
cases, the case of frame seemed correct already.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1812>

gst-libs/gst/codecs/gsth264decoder.c

index 353fc5d..9fdca7c 100644 (file)
@@ -1229,15 +1229,21 @@ gst_h264_decoder_calculate_poc (GstH264Decoder * self, GstH264Picture * picture)
             picture->pic_order_cnt_msb + picture->pic_order_cnt_lsb;
       }
 
-      if (picture->field != GST_H264_PICTURE_FIELD_TOP_FIELD) {
-        if (GST_H264_PICTURE_IS_FRAME (picture)) {
-          picture->bottom_field_order_cnt =
-              picture->top_field_order_cnt +
+      switch (picture->field) {
+        case GST_H264_PICTURE_FIELD_FRAME:
+          picture->top_field_order_cnt = picture->pic_order_cnt_msb +
+              picture->pic_order_cnt_lsb;
+          picture->bottom_field_order_cnt = picture->top_field_order_cnt +
               picture->delta_pic_order_cnt_bottom;
-        } else {
-          picture->bottom_field_order_cnt =
-              picture->pic_order_cnt_msb + picture->pic_order_cnt_lsb;
-        }
+          break;
+        case GST_H264_PICTURE_FIELD_TOP_FIELD:
+          picture->top_field_order_cnt = picture->pic_order_cnt_msb +
+              picture->pic_order_cnt_lsb;
+          break;
+        case GST_H264_PICTURE_FIELD_BOTTOM_FIELD:
+          picture->bottom_field_order_cnt = picture->pic_order_cnt_msb +
+              picture->pic_order_cnt_lsb;
+          break;
       }
       break;
     }