]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/gst-plugin-ducati.git/commitdiff
ducativc1dec: when dropping frames, drop only bframes
authorAlessandro Decina <alessandro.decina@collabora.co.uk>
Tue, 31 Jan 2012 12:03:34 +0000 (13:03 +0100)
committerAlessandro Decina <alessandro.decina@collabora.co.uk>
Tue, 31 Jan 2012 12:03:34 +0000 (13:03 +0100)
src/gstducativc1dec.c

index afd73430b2395605b7774543cf0574ae351a4e1d..2c4067135b22393eb3be2cf062ff9708b26ee5d5 100644 (file)
@@ -39,6 +39,7 @@
 
 #define PADX  32
 #define PADY  40
+#define GST_BUFFER_FLAG_B_FRAME (GST_BUFFER_FLAG_LAST << 0)
 
 
 GST_BOILERPLATE (GstDucatiVC1Dec, gst_ducati_vc1dec, GstDucatiVidDec,
@@ -218,6 +219,19 @@ gst_ducati_vc1dec_handle_error (GstDucatiVidDec * self, gint ret,
   return ret;
 }
 
+static gboolean
+gst_ducati_vc1dec_drop_frame (GstDucatiVidDec * self, GstBuffer * buf,
+    gint64 diff)
+{
+  gboolean is_bframe = GST_BUFFER_FLAG_IS_SET (buf,
+      GST_BUFFER_FLAG_B_FRAME);
+
+  if (diff >= 0 && is_bframe)
+    return TRUE;
+
+  return FALSE;
+}
+
 /* GstElement vmethod implementations */
 
 static GstStateChangeReturn
@@ -287,6 +301,7 @@ gst_ducati_vc1dec_class_init (GstDucatiVC1DecClass * klass)
   bclass->push_input =
       GST_DEBUG_FUNCPTR (gst_ducati_vc1dec_push_input);
   bclass->handle_error = GST_DEBUG_FUNCPTR (gst_ducati_vc1dec_handle_error);
+  bclass->drop_frame = GST_DEBUG_FUNCPTR (gst_ducati_vc1dec_drop_frame);
 }
 
 static void