rtp: fix for API changes in the base classes

This commit is contained in:
Wim Taymans 2011-06-13 13:25:49 +02:00
parent ea16d8a4d8
commit b0fbb1725f
13 changed files with 37 additions and 249 deletions

View file

@ -4,7 +4,6 @@ libgstrtp_la_SOURCES = \
fnv1hash.c \ fnv1hash.c \
gstrtp.c \ gstrtp.c \
gstrtpchannels.c \ gstrtpchannels.c \
gstrtpdepay.c \
gstrtpac3depay.c \ gstrtpac3depay.c \
gstrtpac3pay.c \ gstrtpac3pay.c \
gstrtpbvdepay.c \ gstrtpbvdepay.c \
@ -148,7 +147,6 @@ noinst_HEADERS = \
gstrtpmp4gpay.h \ gstrtpmp4gpay.h \
gstrtpmp4adepay.h \ gstrtpmp4adepay.h \
gstrtpmp4apay.h \ gstrtpmp4apay.h \
gstrtpdepay.h \
gstasteriskh263.h \ gstasteriskh263.h \
gstrtpqcelpdepay.h \ gstrtpqcelpdepay.h \
gstrtpqdmdepay.h \ gstrtpqdmdepay.h \

View file

@ -21,7 +21,6 @@
#include "config.h" #include "config.h"
#endif #endif
#include "gstrtpdepay.h"
#include "gstrtpac3depay.h" #include "gstrtpac3depay.h"
#include "gstrtpac3pay.h" #include "gstrtpac3pay.h"
#include "gstrtpbvdepay.h" #include "gstrtpbvdepay.h"
@ -94,9 +93,6 @@
static gboolean static gboolean
plugin_init (GstPlugin * plugin) plugin_init (GstPlugin * plugin)
{ {
if (!gst_rtp_depay_plugin_init (plugin))
return FALSE;
if (!gst_rtp_ac3_depay_plugin_init (plugin)) if (!gst_rtp_ac3_depay_plugin_init (plugin))
return FALSE; return FALSE;

View file

@ -55,7 +55,8 @@ static GstStateChangeReturn gst_rtp_ac3_pay_change_state (GstElement * element,
static gboolean gst_rtp_ac3_pay_setcaps (GstBaseRTPPayload * payload, static gboolean gst_rtp_ac3_pay_setcaps (GstBaseRTPPayload * payload,
GstCaps * caps); GstCaps * caps);
static gboolean gst_rtp_ac3_pay_handle_event (GstPad * pad, GstEvent * event); static gboolean gst_rtp_ac3_pay_handle_event (GstBaseRTPPayload * payload,
GstEvent * event);
static GstFlowReturn gst_rtp_ac3_pay_flush (GstRtpAC3Pay * rtpac3pay); static GstFlowReturn gst_rtp_ac3_pay_flush (GstRtpAC3Pay * rtpac3pay);
static GstFlowReturn gst_rtp_ac3_pay_handle_buffer (GstBaseRTPPayload * payload, static GstFlowReturn gst_rtp_ac3_pay_handle_buffer (GstBaseRTPPayload * payload,
GstBuffer * buffer); GstBuffer * buffer);
@ -142,11 +143,12 @@ gst_rtp_ac3_pay_setcaps (GstBaseRTPPayload * payload, GstCaps * caps)
} }
static gboolean static gboolean
gst_rtp_ac3_pay_handle_event (GstPad * pad, GstEvent * event) gst_rtp_ac3_pay_handle_event (GstBaseRTPPayload * payload, GstEvent * event)
{ {
gboolean res;
GstRtpAC3Pay *rtpac3pay; GstRtpAC3Pay *rtpac3pay;
rtpac3pay = GST_RTP_AC3_PAY (gst_pad_get_parent (pad)); rtpac3pay = GST_RTP_AC3_PAY (payload);
switch (GST_EVENT_TYPE (event)) { switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS: case GST_EVENT_EOS:
@ -160,10 +162,10 @@ gst_rtp_ac3_pay_handle_event (GstPad * pad, GstEvent * event)
break; break;
} }
gst_object_unref (rtpac3pay); res =
GST_BASE_RTP_PAYLOAD_CLASS (parent_class)->handle_event (payload, event);
/* FALSE to let the parent handle the event as well */ return res;
return FALSE;
} }
struct frmsize_s struct frmsize_s

View file

@ -54,7 +54,7 @@ static GstStaticPadTemplate gst_rtp_bv_pay_src_template =
static GstCaps *gst_rtp_bv_pay_sink_getcaps (GstBaseRTPPayload * payload, static GstCaps *gst_rtp_bv_pay_sink_getcaps (GstBaseRTPPayload * payload,
GstPad * pad); GstPad * pad, GstCaps * filter);
static gboolean gst_rtp_bv_pay_sink_setcaps (GstBaseRTPPayload * payload, static gboolean gst_rtp_bv_pay_sink_setcaps (GstBaseRTPPayload * payload,
GstCaps * caps); GstCaps * caps);
@ -173,7 +173,8 @@ mode_changed:
/* we return the padtemplate caps with the mode field fixated to a value if we /* we return the padtemplate caps with the mode field fixated to a value if we
* can */ * can */
static GstCaps * static GstCaps *
gst_rtp_bv_pay_sink_getcaps (GstBaseRTPPayload * rtppayload, GstPad * pad) gst_rtp_bv_pay_sink_getcaps (GstBaseRTPPayload * rtppayload, GstPad * pad,
GstCaps * filter)
{ {
GstCaps *otherpadcaps; GstCaps *otherpadcaps;
GstCaps *caps; GstCaps *caps;

View file

@ -175,13 +175,11 @@ gst_rtp_celt_depay_setcaps (GstBaseRTPDepayload * depayload, GstCaps * caps)
res = gst_pad_set_caps (depayload->srcpad, srccaps); res = gst_pad_set_caps (depayload->srcpad, srccaps);
gst_caps_unref (srccaps); gst_caps_unref (srccaps);
gst_buffer_set_caps (buf, GST_PAD_CAPS (depayload->srcpad));
gst_base_rtp_depayload_push (GST_BASE_RTP_DEPAYLOAD (rtpceltdepay), buf); gst_base_rtp_depayload_push (GST_BASE_RTP_DEPAYLOAD (rtpceltdepay), buf);
buf = gst_buffer_new_and_alloc (sizeof (gst_rtp_celt_comment)); buf = gst_buffer_new_and_alloc (sizeof (gst_rtp_celt_comment));
gst_buffer_fill (buf, 0, gst_rtp_celt_comment, sizeof (gst_rtp_celt_comment)); gst_buffer_fill (buf, 0, gst_rtp_celt_comment, sizeof (gst_rtp_celt_comment));
gst_buffer_set_caps (buf, GST_PAD_CAPS (depayload->srcpad));
gst_base_rtp_depayload_push (GST_BASE_RTP_DEPAYLOAD (rtpceltdepay), buf); gst_base_rtp_depayload_push (GST_BASE_RTP_DEPAYLOAD (rtpceltdepay), buf);
return res; return res;

View file

@ -58,7 +58,7 @@ static GstStateChangeReturn gst_rtp_celt_pay_change_state (GstElement *
static gboolean gst_rtp_celt_pay_setcaps (GstBaseRTPPayload * payload, static gboolean gst_rtp_celt_pay_setcaps (GstBaseRTPPayload * payload,
GstCaps * caps); GstCaps * caps);
static GstCaps *gst_rtp_celt_pay_getcaps (GstBaseRTPPayload * payload, static GstCaps *gst_rtp_celt_pay_getcaps (GstBaseRTPPayload * payload,
GstPad * pad); GstPad * pad, GstCaps * filter);
static GstFlowReturn gst_rtp_celt_pay_handle_buffer (GstBaseRTPPayload * static GstFlowReturn gst_rtp_celt_pay_handle_buffer (GstBaseRTPPayload *
payload, GstBuffer * buffer); payload, GstBuffer * buffer);
@ -157,7 +157,8 @@ gst_rtp_celt_pay_setcaps (GstBaseRTPPayload * payload, GstCaps * caps)
static GstCaps * static GstCaps *
gst_rtp_celt_pay_getcaps (GstBaseRTPPayload * payload, GstPad * pad) gst_rtp_celt_pay_getcaps (GstBaseRTPPayload * payload, GstPad * pad,
GstCaps * filter)
{ {
GstCaps *otherpadcaps; GstCaps *otherpadcaps;
GstCaps *caps; GstCaps *caps;

View file

@ -1,159 +0,0 @@
/* GStreamer
* Copyright (C) <2005> Wim Taymans <wim.taymans@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
/* Element-Checklist-Version: 5 */
#include "gstrtpdepay.h"
GST_DEBUG_CATEGORY_STATIC (rtpdepay_debug);
#define GST_CAT_DEFAULT (rtpdepay_debug)
static GstStaticPadTemplate gst_rtp_depay_src_rtp_template =
GST_STATIC_PAD_TEMPLATE ("srcrtp",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("application/x-rtp")
);
static GstStaticPadTemplate gst_rtp_depay_src_rtcp_template =
GST_STATIC_PAD_TEMPLATE ("srcrtcp",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("application/x-rtcp")
);
static GstStaticPadTemplate gst_rtp_depay_sink_rtp_template =
GST_STATIC_PAD_TEMPLATE ("sinkrtp",
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("application/x-rtp")
);
static GstStaticPadTemplate gst_rtp_depay_sink_rtcp_template =
GST_STATIC_PAD_TEMPLATE ("sinkrtcp",
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("application/x-rtcp")
);
static GstCaps *gst_rtp_depay_getcaps (GstPad * pad);
static GstFlowReturn gst_rtp_depay_chain_rtp (GstPad * pad, GstBuffer * buffer);
static GstFlowReturn gst_rtp_depay_chain_rtcp (GstPad * pad,
GstBuffer * buffer);
G_DEFINE_TYPE (GstRTPDepay, gst_rtp_depay, GST_TYPE_ELEMENT);
static void
gst_rtp_depay_class_init (GstRTPDepayClass * klass)
{
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
GST_DEBUG_CATEGORY_INIT (rtpdepay_debug, "rtpdepay", 0, "RTP decoder");
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_rtp_depay_src_rtp_template));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_rtp_depay_src_rtcp_template));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_rtp_depay_sink_rtp_template));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_rtp_depay_sink_rtcp_template));
gst_element_class_set_details_simple (gstelement_class,
"Dummy RTP session manager", "Codec/Depayloader/Network/RTP",
"Accepts raw RTP and RTCP packets and sends them forward",
"Wim Taymans <wim.taymans@gmail.com>");
}
static void
gst_rtp_depay_init (GstRTPDepay * rtpdepay)
{
/* the input rtp pad */
rtpdepay->sink_rtp =
gst_pad_new_from_static_template (&gst_rtp_depay_sink_rtp_template,
"sinkrtp");
gst_element_add_pad (GST_ELEMENT (rtpdepay), rtpdepay->sink_rtp);
gst_pad_set_getcaps_function (rtpdepay->sink_rtp, gst_rtp_depay_getcaps);
gst_pad_set_chain_function (rtpdepay->sink_rtp, gst_rtp_depay_chain_rtp);
/* the input rtcp pad */
rtpdepay->sink_rtcp =
gst_pad_new_from_static_template (&gst_rtp_depay_sink_rtcp_template,
"sinkrtcp");
gst_element_add_pad (GST_ELEMENT (rtpdepay), rtpdepay->sink_rtcp);
gst_pad_set_chain_function (rtpdepay->sink_rtcp, gst_rtp_depay_chain_rtcp);
/* the output rtp pad */
rtpdepay->src_rtp =
gst_pad_new_from_static_template (&gst_rtp_depay_src_rtp_template,
"srcrtp");
gst_pad_set_getcaps_function (rtpdepay->src_rtp, gst_rtp_depay_getcaps);
gst_element_add_pad (GST_ELEMENT (rtpdepay), rtpdepay->src_rtp);
/* the output rtcp pad */
rtpdepay->src_rtcp =
gst_pad_new_from_static_template (&gst_rtp_depay_src_rtcp_template,
"srcrtcp");
gst_element_add_pad (GST_ELEMENT (rtpdepay), rtpdepay->src_rtcp);
}
static GstCaps *
gst_rtp_depay_getcaps (GstPad * pad)
{
GstRTPDepay *src;
GstPad *other;
GstCaps *caps;
src = GST_RTP_DEPAY (GST_PAD_PARENT (pad));
other = pad == src->src_rtp ? src->sink_rtp : src->src_rtp;
caps = gst_pad_peer_get_caps (other);
if (caps == NULL)
caps = gst_caps_copy (gst_pad_get_pad_template_caps (pad));
return caps;
}
static GstFlowReturn
gst_rtp_depay_chain_rtp (GstPad * pad, GstBuffer * buffer)
{
GstRTPDepay *src;
src = GST_RTP_DEPAY (GST_PAD_PARENT (pad));
GST_DEBUG ("got rtp packet");
return gst_pad_push (src->src_rtp, buffer);
}
static GstFlowReturn
gst_rtp_depay_chain_rtcp (GstPad * pad, GstBuffer * buffer)
{
GST_DEBUG ("got rtcp packet");
gst_buffer_unref (buffer);
return GST_FLOW_OK;
}
gboolean
gst_rtp_depay_plugin_init (GstPlugin * plugin)
{
return gst_element_register (plugin, "rtpdepay",
GST_RANK_SECONDARY, GST_TYPE_RTP_DEPAY);
}

View file

@ -1,55 +0,0 @@
/* GStreamer
* Copyright (C) <2005> Wim Taymans <wim.taymans@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef __GST_RTP_DEPAY_H__
#define __GST_RTP_DEPAY_H__
#include <gst/gst.h>
G_BEGIN_DECLS
#define GST_TYPE_RTP_DEPAY (gst_rtp_depay_get_type())
#define GST_IS_RTP_DEPAY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_DEPAY))
#define GST_IS_RTP_DEPAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_DEPAY))
#define GST_RTP_DEPAY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_DEPAY, GstRTPDepay))
#define GST_RTP_DEPAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_DEPAY, GstRTPDepayClass))
typedef struct _GstRTPDepay GstRTPDepay;
typedef struct _GstRTPDepayClass GstRTPDepayClass;
struct _GstRTPDepay {
GstElement element;
GstPad *sink_rtp;
GstPad *sink_rtcp;
GstPad *src_rtp;
GstPad *src_rtcp;
};
struct _GstRTPDepayClass {
GstElementClass parent_class;
};
gboolean gst_rtp_depay_plugin_init (GstPlugin * plugin);
GType gst_rtp_depay_get_type(void);
G_END_DECLS
#endif /* __GST_RTP_DEPAY_H__ */

View file

@ -54,7 +54,7 @@ GST_STATIC_PAD_TEMPLATE ("src",
static gboolean gst_rtp_g722_pay_setcaps (GstBaseRTPPayload * basepayload, static gboolean gst_rtp_g722_pay_setcaps (GstBaseRTPPayload * basepayload,
GstCaps * caps); GstCaps * caps);
static GstCaps *gst_rtp_g722_pay_getcaps (GstBaseRTPPayload * rtppayload, static GstCaps *gst_rtp_g722_pay_getcaps (GstBaseRTPPayload * rtppayload,
GstPad * pad); GstPad * pad, GstCaps * filter);
#define gst_rtp_g722_pay_parent_class parent_class #define gst_rtp_g722_pay_parent_class parent_class
G_DEFINE_TYPE (GstRtpG722Pay, gst_rtp_g722_pay, G_DEFINE_TYPE (GstRtpG722Pay, gst_rtp_g722_pay,
@ -177,7 +177,8 @@ no_channels:
} }
static GstCaps * static GstCaps *
gst_rtp_g722_pay_getcaps (GstBaseRTPPayload * rtppayload, GstPad * pad) gst_rtp_g722_pay_getcaps (GstBaseRTPPayload * rtppayload, GstPad * pad,
GstCaps * filter)
{ {
GstCaps *otherpadcaps; GstCaps *otherpadcaps;
GstCaps *caps; GstCaps *caps;

View file

@ -181,7 +181,7 @@ gst_rtp_g726_pay_setcaps (GstBaseRTPPayload * payload, GstCaps * caps)
GST_DEBUG_OBJECT (payload, "selected base encoding %s", encoding_name); GST_DEBUG_OBJECT (payload, "selected base encoding %s", encoding_name);
/* now see if we need to produce AAL2 or not */ /* now see if we need to produce AAL2 or not */
peercaps = gst_pad_peer_get_caps (payload->srcpad); peercaps = gst_pad_peer_get_caps (payload->srcpad, NULL);
if (peercaps) { if (peercaps) {
GstCaps *filter, *intersect; GstCaps *filter, *intersect;
gchar *capsstr; gchar *capsstr;

View file

@ -49,7 +49,7 @@ GST_STATIC_PAD_TEMPLATE ("src",
static GstCaps *gst_rtp_ilbc_pay_sink_getcaps (GstBaseRTPPayload * payload, static GstCaps *gst_rtp_ilbc_pay_sink_getcaps (GstBaseRTPPayload * payload,
GstPad * pad); GstPad * pad, GstCaps * filter);
static gboolean gst_rtp_ilbc_pay_sink_setcaps (GstBaseRTPPayload * payload, static gboolean gst_rtp_ilbc_pay_sink_setcaps (GstBaseRTPPayload * payload,
GstCaps * caps); GstCaps * caps);
@ -175,7 +175,8 @@ mode_changed:
/* we return the padtemplate caps with the mode field fixated to a value if we /* we return the padtemplate caps with the mode field fixated to a value if we
* can */ * can */
static GstCaps * static GstCaps *
gst_rtp_ilbc_pay_sink_getcaps (GstBaseRTPPayload * rtppayload, GstPad * pad) gst_rtp_ilbc_pay_sink_getcaps (GstBaseRTPPayload * rtppayload, GstPad * pad,
GstCaps * filter)
{ {
GstCaps *otherpadcaps; GstCaps *otherpadcaps;
GstCaps *caps; GstCaps *caps;

View file

@ -58,7 +58,8 @@ static GstStateChangeReturn gst_rtp_mpa_pay_change_state (GstElement * element,
static gboolean gst_rtp_mpa_pay_setcaps (GstBaseRTPPayload * payload, static gboolean gst_rtp_mpa_pay_setcaps (GstBaseRTPPayload * payload,
GstCaps * caps); GstCaps * caps);
static gboolean gst_rtp_mpa_pay_handle_event (GstPad * pad, GstEvent * event); static gboolean gst_rtp_mpa_pay_handle_event (GstBaseRTPPayload * payload,
GstEvent * event);
static GstFlowReturn gst_rtp_mpa_pay_flush (GstRtpMPAPay * rtpmpapay); static GstFlowReturn gst_rtp_mpa_pay_flush (GstRtpMPAPay * rtpmpapay);
static GstFlowReturn gst_rtp_mpa_pay_handle_buffer (GstBaseRTPPayload * payload, static GstFlowReturn gst_rtp_mpa_pay_handle_buffer (GstBaseRTPPayload * payload,
GstBuffer * buffer); GstBuffer * buffer);
@ -139,11 +140,12 @@ gst_rtp_mpa_pay_setcaps (GstBaseRTPPayload * payload, GstCaps * caps)
} }
static gboolean static gboolean
gst_rtp_mpa_pay_handle_event (GstPad * pad, GstEvent * event) gst_rtp_mpa_pay_handle_event (GstBaseRTPPayload * payload, GstEvent * event)
{ {
gboolean ret;
GstRtpMPAPay *rtpmpapay; GstRtpMPAPay *rtpmpapay;
rtpmpapay = GST_RTP_MPA_PAY (gst_pad_get_parent (pad)); rtpmpapay = GST_RTP_MPA_PAY (payload);
switch (GST_EVENT_TYPE (event)) { switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS: case GST_EVENT_EOS:
@ -157,10 +159,10 @@ gst_rtp_mpa_pay_handle_event (GstPad * pad, GstEvent * event)
break; break;
} }
gst_object_unref (rtpmpapay); ret =
GST_BASE_RTP_PAYLOAD_CLASS (parent_class)->handle_event (payload, event);
/* FALSE to let the parent handle the event as well */ return ret;
return FALSE;
} }
static GstFlowReturn static GstFlowReturn

View file

@ -58,7 +58,8 @@ static gboolean gst_rtp_mpv_pay_setcaps (GstBaseRTPPayload * payload,
GstCaps * caps); GstCaps * caps);
static GstFlowReturn gst_rtp_mpv_pay_handle_buffer (GstBaseRTPPayload * static GstFlowReturn gst_rtp_mpv_pay_handle_buffer (GstBaseRTPPayload *
payload, GstBuffer * buffer); payload, GstBuffer * buffer);
static gboolean gst_rtp_mpv_pay_handle_event (GstPad * pad, GstEvent * event); static gboolean gst_rtp_mpv_pay_handle_event (GstBaseRTPPayload * payload,
GstEvent * event);
#define gst_rtp_mpv_pay_parent_class parent_class #define gst_rtp_mpv_pay_parent_class parent_class
G_DEFINE_TYPE (GstRTPMPVPay, gst_rtp_mpv_pay, GST_TYPE_BASE_RTP_PAYLOAD); G_DEFINE_TYPE (GstRTPMPVPay, gst_rtp_mpv_pay, GST_TYPE_BASE_RTP_PAYLOAD);
@ -135,11 +136,12 @@ gst_rtp_mpv_pay_setcaps (GstBaseRTPPayload * payload, GstCaps * caps)
} }
static gboolean static gboolean
gst_rtp_mpv_pay_handle_event (GstPad * pad, GstEvent * event) gst_rtp_mpv_pay_handle_event (GstBaseRTPPayload * payload, GstEvent * event)
{ {
gboolean ret;
GstRTPMPVPay *rtpmpvpay; GstRTPMPVPay *rtpmpvpay;
rtpmpvpay = GST_RTP_MPV_PAY (gst_pad_get_parent (pad)); rtpmpvpay = GST_RTP_MPV_PAY (payload);
switch (GST_EVENT_TYPE (event)) { switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS: case GST_EVENT_EOS:
@ -153,10 +155,10 @@ gst_rtp_mpv_pay_handle_event (GstPad * pad, GstEvent * event)
break; break;
} }
gst_object_unref (rtpmpvpay); ret =
GST_BASE_RTP_PAYLOAD_CLASS (parent_class)->handle_event (payload, event);
/* FALSE to let the parent handle the event as well */ return ret;
return FALSE;
} }
static GstFlowReturn static GstFlowReturn