ducatih264dec: use num-reorder-frames to size the frame backlog array
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Tue, 9 Oct 2012 13:04:46 +0000 (14:04 +0100)
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Tue, 9 Oct 2012 13:06:54 +0000 (14:06 +0100)
Using the number of reference frames is incorrect, I did not realize
when I wrote this code that all frames may not be used as reference,
and so the numbers may differ.

src/gstducatih264dec.c

index d7149fbef30582d80b1285fe0cc1dce81a3d975a..9b553505bcf599c3eee66ef2359767fdb43807e1 100644 (file)
@@ -306,18 +306,21 @@ gst_ducati_h264dec_set_sink_caps (GstDucatiVidDec * self, GstCaps * caps)
 
   structure = gst_caps_get_structure (caps, 0);
   if (structure) {
 
   structure = gst_caps_get_structure (caps, 0);
   if (structure) {
-    gint num_ref_frames = -1;
+    gint num_ref_frames = -1, num_reorder_frames = -1;
     if (gst_structure_get_int (structure, "num-ref-frames", &num_ref_frames)
         && num_ref_frames >= 0) {
       ((IH264VDEC_Params *) self->params)->maxNumRefFrames = num_ref_frames;
     if (gst_structure_get_int (structure, "num-ref-frames", &num_ref_frames)
         && num_ref_frames >= 0) {
       ((IH264VDEC_Params *) self->params)->maxNumRefFrames = num_ref_frames;
-
-      if (num_ref_frames > MAX_BACKLOG_FRAMES) {
+    }
+    if (gst_structure_get_int (structure, "num-reorder-frames",
+            &num_reorder_frames)
+        && num_reorder_frames >= 0) {
+      if (num_reorder_frames > MAX_BACKLOG_FRAMES) {
         h264dec->backlog_maxframes = MAX_BACKLOG_FRAMES;
         GST_WARNING_OBJECT (self,
             "Stream needs %d frames for reordering, we can only accomodate %d",
         h264dec->backlog_maxframes = MAX_BACKLOG_FRAMES;
         GST_WARNING_OBJECT (self,
             "Stream needs %d frames for reordering, we can only accomodate %d",
-            num_ref_frames, MAX_BACKLOG_FRAMES);
+            num_reorder_frames, MAX_BACKLOG_FRAMES);
       } else {
       } else {
-        h264dec->backlog_maxframes = num_ref_frames;
+        h264dec->backlog_maxframes = num_reorder_frames;
         GST_INFO_OBJECT (self, "Num frames for reordering: %d",
             h264dec->backlog_maxframes);
       }
         GST_INFO_OBJECT (self, "Num frames for reordering: %d",
             h264dec->backlog_maxframes);
       }
@@ -329,7 +332,7 @@ gst_ducati_h264dec_set_sink_caps (GstDucatiVidDec * self, GstCaps * caps)
     h264dec->backlog_maxframes =
         gst_ducati_h264dec_get_max_dpb_size (self, caps);
     GST_WARNING_OBJECT (self,
     h264dec->backlog_maxframes =
         gst_ducati_h264dec_get_max_dpb_size (self, caps);
     GST_WARNING_OBJECT (self,
-        "num-ref-frames not found on caps, defaulting to %d",
+        "num-reorder-frames not found on caps, defaulting to %d",
         h264dec->backlog_maxframes);
   }
 
         h264dec->backlog_maxframes);
   }