diff options
author | Sjoerd Simons <sjoerd@luon.net> | 2007-05-01 16:13:58 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2007-05-01 16:13:58 +0000 |
commit | f34fce9df4b7d3ae1472f347c536c29c10f7e97b (patch) | |
tree | f31032285d8b8469f7140830d4b62aea7d2fb557 /gst/rtp/gstrtpmp4vpay.c | |
parent | baa94a9b422ab8d20b9d1f993045f61cd7f90f2c (diff) |
gst/rtp/gstrtpmp4vpay.*: Handle NEWSEGMENT and FLUSH events. Fixes #434824.
Original commit message from CVS:
Patch by: Sjoerd Simons <sjoerd at luon dot net>
* gst/rtp/gstrtpmp4vpay.c: (gst_rtp_mp4v_pay_init),
(gst_rtp_mp4v_pay_empty), (gst_rtp_mp4v_pay_event):
* gst/rtp/gstrtpmp4vpay.h:
Handle NEWSEGMENT and FLUSH events. Fixes #434824.
Diffstat (limited to 'gst/rtp/gstrtpmp4vpay.c')
-rw-r--r-- | gst/rtp/gstrtpmp4vpay.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/gst/rtp/gstrtpmp4vpay.c b/gst/rtp/gstrtpmp4vpay.c index 41e90096..fd626002 100644 --- a/gst/rtp/gstrtpmp4vpay.c +++ b/gst/rtp/gstrtpmp4vpay.c @@ -84,6 +84,7 @@ static gboolean gst_rtp_mp4v_pay_setcaps (GstBaseRTPPayload * payload, GstCaps * caps); static GstFlowReturn gst_rtp_mp4v_pay_handle_buffer (GstBaseRTPPayload * payload, GstBuffer * buffer); +static gboolean gst_rtp_mp4v_pay_event (GstPad * pad, GstEvent * event); static GstBaseRTPPayloadClass *parent_class = NULL; @@ -159,10 +160,17 @@ gst_rtp_mp4v_pay_class_init (GstRtpMP4VPayClass * klass) static void gst_rtp_mp4v_pay_init (GstRtpMP4VPay * rtpmp4vpay) { + GstPad *sinkpad; + rtpmp4vpay->adapter = gst_adapter_new (); rtpmp4vpay->rate = 90000; rtpmp4vpay->profile = 1; rtpmp4vpay->send_config = DEFAULT_SEND_CONFIG; + + sinkpad = GST_BASE_RTP_PAYLOAD_SINKPAD (rtpmp4vpay); + + rtpmp4vpay->old_event_func = sinkpad->eventfunc; + gst_pad_set_event_function (sinkpad, gst_rtp_mp4v_pay_event); } static void @@ -243,6 +251,12 @@ done: return TRUE; } +static void +gst_rtp_mp4v_pay_empty (GstRtpMP4VPay * rtpmp4vpay) +{ + gst_adapter_clear (rtpmp4vpay->adapter); +} + static GstFlowReturn gst_rtp_mp4v_pay_flush (GstRtpMP4VPay * rtpmp4vpay) { @@ -452,6 +466,34 @@ gst_rtp_mp4v_pay_handle_buffer (GstBaseRTPPayload * basepayload, return ret; } +static gboolean +gst_rtp_mp4v_pay_event (GstPad * pad, GstEvent * event) +{ + GstRtpMP4VPay *rtpmp4vpay; + gboolean ret; + + rtpmp4vpay = GST_RTP_MP4V_PAY (gst_pad_get_parent (pad)); + + GST_DEBUG ("Got event: %s", GST_EVENT_TYPE_NAME (event)); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_NEWSEGMENT: + gst_rtp_mp4v_pay_flush (rtpmp4vpay); + break; + case GST_EVENT_FLUSH_STOP: + gst_rtp_mp4v_pay_empty (rtpmp4vpay); + break; + default: + break; + } + + ret = rtpmp4vpay->old_event_func (pad, event); + + g_object_unref (rtpmp4vpay); + + return ret; +} + static void gst_rtp_mp4v_pay_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) |