decoder: hevc: Fix the picture addition in dpb() based on spec H265 v3 (04/2015)
authorSreerenj Balachandran <sreerenj.balachandran@intel.com>
Fri, 4 Sep 2015 19:02:55 +0000 (22:02 +0300)
committerSreerenj Balachandran <sreerenj.balachandran@intel.com>
Fri, 4 Sep 2015 19:02:55 +0000 (22:02 +0300)
This fix is based on the V3 vesion of spec which was missing in older versions.

When the current picture has PicOutputFlag equal to 1, for each picture in the
DPB that is marked as "needed for output" and follows the current picture in output order,
the associated variable PicLatencyCount is set equal to PicLatencyCount + 1 (C.5.2.3).

https://bugzilla.gnome.org/show_bug.cgi?id=754010

gst-libs/gst/vaapi/gstvaapidecoder_h265.c

index 4bd947e..ba2ab39 100644 (file)
@@ -816,12 +816,14 @@ dpb_add (GstVaapiDecoderH265 * decoder, GstVaapiPictureH265 * picture)
   guint i = 0;
 
   /* C.5.2.3 */
-  while (i < priv->dpb_count) {
-    GstVaapiFrameStore *const fs = priv->dpb[i];
-    tmp_pic = fs->buffer;
-    if (tmp_pic->output_needed)
-      tmp_pic->pic_latency_cnt += 1;
-    i++;
+  if (picture->output_flag) {
+    while (i < priv->dpb_count) {
+      GstVaapiFrameStore *const fs = priv->dpb[i];
+      tmp_pic = fs->buffer;
+      if (tmp_pic->output_needed)
+        tmp_pic->pic_latency_cnt += 1;
+      i++;
+    }
   }
 
   if (picture->output_flag) {