From bb1dd8aabac18f1884b1b1e2bee1a0edb42f8f5d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 29 Sep 2011 10:37:32 +0200 Subject: [PATCH] omxvideodec: Add API for subclasses to prepare/convert frames --- omx/gstomxvideodec.c | 13 +++++++++++++ omx/gstomxvideodec.h | 1 + 2 files changed, 14 insertions(+) diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c index 9849a85..23a2870 100644 --- a/omx/gstomxvideodec.c +++ b/omx/gstomxvideodec.c @@ -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 diff --git a/omx/gstomxvideodec.h b/omx/gstomxvideodec.h index e4b6c8f..f342feb 100644 --- a/omx/gstomxvideodec.h +++ b/omx/gstomxvideodec.h @@ -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); -- 2.7.4