From d8cb235fe48fee007fa9563e01150558752332ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Fri, 30 Mar 2012 12:10:15 +0200 Subject: [PATCH] audiodecoder: Rename ::event() to ::sink_event() and add ::src_event() --- gst-libs/gst/audio/gstaudiodecoder.c | 50 ++++++++++++++++++++-------- gst-libs/gst/audio/gstaudiodecoder.h | 9 +++-- 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c index 882f071130..3eef6af8db 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.c +++ b/gst-libs/gst/audio/gstaudiodecoder.c @@ -282,6 +282,8 @@ static GstStateChangeReturn gst_audio_decoder_change_state (GstElement * element, GstStateChange transition); static gboolean gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event); +static gboolean gst_audio_decoder_src_eventfunc (GstAudioDecoder * dec, + GstEvent * event); static gboolean gst_audio_decoder_sink_event (GstPad * pad, GstObject * parent, GstEvent * event); static gboolean gst_audio_decoder_src_event (GstPad * pad, GstObject * parent, @@ -372,8 +374,10 @@ gst_audio_decoder_class_init (GstAudioDecoderClass * klass) "Perform packet loss concealment (if supported)", DEFAULT_PLC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - audiodecoder_class->event = + audiodecoder_class->sink_event = GST_DEBUG_FUNCPTR (gst_audio_decoder_sink_eventfunc); + audiodecoder_class->src_event = + GST_DEBUG_FUNCPTR (gst_audio_decoder_src_eventfunc); } static void @@ -1622,8 +1626,8 @@ gst_audio_decoder_sink_event (GstPad * pad, GstObject * parent, GST_DEBUG_OBJECT (dec, "received event %d, %s", GST_EVENT_TYPE (event), GST_EVENT_TYPE_NAME (event)); - if (klass->event) - ret = klass->event (dec, event); + if (klass->sink_event) + ret = klass->sink_event (dec, event); else { gst_event_unref (event); ret = FALSE; @@ -1690,15 +1694,9 @@ gst_audio_decoder_do_seek (GstAudioDecoder * dec, GstEvent * event) } static gboolean -gst_audio_decoder_src_event (GstPad * pad, GstObject * parent, GstEvent * event) +gst_audio_decoder_src_eventfunc (GstAudioDecoder * dec, GstEvent * event) { - GstAudioDecoder *dec; - gboolean res = FALSE; - - dec = GST_AUDIO_DECODER (parent); - - GST_DEBUG_OBJECT (dec, "received event %d, %s", GST_EVENT_TYPE (event), - GST_EVENT_TYPE_NAME (event)); + gboolean res; switch (GST_EVENT_TYPE (event)) { case GST_EVENT_SEEK: @@ -1729,10 +1727,11 @@ gst_audio_decoder_src_event (GstPad * pad, GstObject * parent, GstEvent * event) /* ... though a non-time seek can be aided as well */ /* First bring the requested format to time */ if (!(res = - gst_pad_query_convert (pad, format, cur, GST_FORMAT_TIME, &tcur))) + gst_pad_query_convert (dec->srcpad, format, cur, GST_FORMAT_TIME, + &tcur))) goto convert_error; if (!(res = - gst_pad_query_convert (pad, format, stop, GST_FORMAT_TIME, + gst_pad_query_convert (dec->srcpad, format, stop, GST_FORMAT_TIME, &tstop))) goto convert_error; @@ -1745,7 +1744,7 @@ gst_audio_decoder_src_event (GstPad * pad, GstObject * parent, GstEvent * event) break; } default: - res = gst_pad_event_default (pad, parent, event); + res = gst_pad_event_default (dec->srcpad, GST_OBJECT_CAST (dec), event); break; } done: @@ -1759,6 +1758,29 @@ convert_error: } } +static gboolean +gst_audio_decoder_src_event (GstPad * pad, GstObject * parent, GstEvent * event) +{ + GstAudioDecoder *dec; + GstAudioDecoderClass *klass; + gboolean ret; + + dec = GST_AUDIO_DECODER (parent); + klass = GST_AUDIO_DECODER_GET_CLASS (dec); + + GST_DEBUG_OBJECT (dec, "received event %d, %s", GST_EVENT_TYPE (event), + GST_EVENT_TYPE_NAME (event)); + + if (klass->src_event) + ret = klass->src_event (dec, event); + else { + gst_event_unref (event); + ret = FALSE; + } + + return ret; +} + /* * gst_audio_encoded_audio_convert: * @fmt: audio format of the encoded audio diff --git a/gst-libs/gst/audio/gstaudiodecoder.h b/gst-libs/gst/audio/gstaudiodecoder.h index 42606fd182..25d56d8759 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.h +++ b/gst-libs/gst/audio/gstaudiodecoder.h @@ -194,9 +194,12 @@ struct _GstAudioDecoder * any pending samples and not yet returned decoded data. * @hard indicates whether a FLUSH is being processed, * or otherwise a DISCONT (or conceptually similar). - * @event: Optional. + * @sink_event: Optional. * Event handler on the sink pad. Subclasses should chain up to * the parent implementation to invoke the default handler. + * @src_event: Optional. + * Event handler on the src pad. Subclasses should chain up to + * the parent implementation to invoke the default handler. * @pre_push: Optional. * Called just prior to pushing (encoded data) buffer downstream. * Subclass has full discretionary access to buffer, @@ -240,7 +243,9 @@ struct _GstAudioDecoderClass GstFlowReturn (*pre_push) (GstAudioDecoder *dec, GstBuffer **buffer); - gboolean (*event) (GstAudioDecoder *dec, + gboolean (*sink_event) (GstAudioDecoder *dec, + GstEvent *event); + gboolean (*src_event) (GstAudioDecoder *dec, GstEvent *event); gboolean (*open) (GstAudioDecoder *dec);