omxvideodec: Add API for subclasses to prepare/convert frames
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 29 Sep 2011 08:37:32 +0000 (10:37 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 29 Sep 2011 08:44:20 +0000 (10:44 +0200)
omx/gstomxvideodec.c
omx/gstomxvideodec.h

index 9849a85..23a2870 100644 (file)
@@ -1134,18 +1134,31 @@ gst_omx_video_dec_handle_frame (GstBaseVideoDecoder * decoder,
 {
   GstOMXAcquireBufferReturn acq_ret = GST_OMX_ACQUIRE_BUFFER_ERROR;
   GstOMXVideoDec *self;
+  GstOMXVideoDecClass *klass;
   GstOMXBuffer *buf;
   GstBuffer *codec_data = NULL;
   guint offset = 0;
   GstClockTime timestamp, duration, timestamp_offset = 0;
 
   self = GST_OMX_VIDEO_DEC (decoder);
+  klass = GST_OMX_VIDEO_DEC_GET_CLASS (self);
 
   GST_DEBUG_OBJECT (self, "Handling frame");
 
   timestamp = frame->presentation_timestamp;
   duration = frame->presentation_duration;
 
+  if (klass->prepare_frame) {
+    GstFlowReturn ret;
+
+    ret = klass->prepare_frame (self, frame);
+    if (ret != GST_FLOW_OK) {
+      GST_ERROR_OBJECT (self, "Preparing frame failed: %s",
+          gst_flow_get_name (ret));
+      return ret;
+    }
+  }
+
   while (offset < GST_BUFFER_SIZE (frame->sink_buffer)) {
     /* Make sure to release the base class stream lock, otherwise
      * _loop() can't call _finish_frame() and we might block forever
index e4b6c8f..f342feb 100644 (file)
@@ -77,6 +77,7 @@ struct _GstOMXVideoDecClass
 
   gboolean (*is_format_change) (GstOMXVideoDec * self, GstOMXPort * port, GstVideoState * state);
   gboolean (*set_format)       (GstOMXVideoDec * self, GstOMXPort * port, GstVideoState * state);
+  GstFlowReturn (*prepare_frame)   (GstOMXVideoDec * self, GstVideoFrame *frame);
 };
 
 GType gst_omx_video_dec_get_type (void);