h264: fix reference list count less than num_ref
authorWind Yuan <feng.yuan@intel.com>
Wed, 30 Jan 2013 05:23:03 +0000 (13:23 +0800)
committerzhongcong <congx.zhong@intel.com>
Sat, 2 Mar 2013 07:36:21 +0000 (15:36 +0800)
Sometimes RefPicListX_count may be less than num_ref_idx_lX.
There's not enough reference pictures in dpb.

gst-libs/gst/vaapi/gstvaapidecoder_h264.c

index 1d8dea3..087a029 100755 (executable)
@@ -1916,6 +1916,8 @@ exec_picture_refs_modification_1(
         num_refs                       = slice_hdr->num_ref_idx_l1_active_minus1 + 1;
     }
     ref_list_count = *ref_list_count_ptr;
+    if (num_refs > ref_list_count)
+        num_refs = ref_list_count;
 
     if (!GST_VAAPI_PICTURE_IS_FRAME(picture)) {
         MaxPicNum  = 1 << (sps->log2_max_frame_num_minus4 + 5); // 2 * MaxFrameNum
@@ -2112,7 +2114,7 @@ init_picture_refs(
         num_refs = 1 + slice_hdr->num_ref_idx_l1_active_minus1;
         for (i = priv->RefPicList1_count; i < num_refs; i++)
             priv->RefPicList1[i] = NULL;
-        priv->RefPicList1_count = num_refs;
+        //priv->RefPicList1_count = num_refs;
 
         // fall-through
     case GST_VAAPI_PICTURE_TYPE_P:
@@ -2120,7 +2122,7 @@ init_picture_refs(
         num_refs = 1 + slice_hdr->num_ref_idx_l0_active_minus1;
         for (i = priv->RefPicList0_count; i < num_refs; i++)
             priv->RefPicList0[i] = NULL;
-        priv->RefPicList0_count = num_refs;
+        //priv->RefPicList0_count = num_refs;
         break;
     default:
         break;