avtp: Use nicely abstracted process function in base depayloader class
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9412>
This commit is contained in:
parent
0398e376b0
commit
134ff5b45f
@ -59,8 +59,8 @@ G_DEFINE_TYPE (GstAvtpAafDepay, gst_avtp_aaf_depay,
|
||||
GST_ELEMENT_REGISTER_DEFINE (avtpaafdepay, "avtpaafdepay", GST_RANK_NONE,
|
||||
GST_TYPE_AVTP_AAF_DEPAY);
|
||||
|
||||
static GstFlowReturn gst_avtp_aaf_depay_chain (GstPad * pad, GstObject * parent,
|
||||
GstBuffer * buffer);
|
||||
static GstFlowReturn gst_avtp_aaf_depay_process (GstAvtpBaseDepayload *
|
||||
basedepay, GstBuffer * buffer);
|
||||
|
||||
static void
|
||||
gst_avtp_aaf_depay_class_init (GstAvtpAafDepayClass * klass)
|
||||
@ -77,7 +77,7 @@ gst_avtp_aaf_depay_class_init (GstAvtpAafDepayClass * klass)
|
||||
"Extracts raw audio from AAF AVTPDUs",
|
||||
"Andre Guedes <andre.guedes@intel.com>");
|
||||
|
||||
avtpbasedepayload_class->chain = GST_DEBUG_FUNCPTR (gst_avtp_aaf_depay_chain);
|
||||
avtpbasedepayload_class->process = gst_avtp_aaf_depay_process;
|
||||
|
||||
GST_DEBUG_CATEGORY_INIT (avtpaafdepay_debug, "avtpaafdepay", 0,
|
||||
"AAF AVTP Depayloader");
|
||||
@ -207,7 +207,8 @@ gst_avtp_aaf_depay_are_audio_features_valid (GstAvtpAafDepay * avtpaafdepay,
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
gst_avtp_aaf_depay_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
|
||||
gst_avtp_aaf_depay_process (GstAvtpBaseDepayload * avtpbasedepayload,
|
||||
GstBuffer * buffer)
|
||||
{
|
||||
int res;
|
||||
GstMapInfo info;
|
||||
@ -217,7 +218,6 @@ gst_avtp_aaf_depay_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
|
||||
struct avtp_stream_pdu *pdu;
|
||||
guint64 channels, depth, rate, format, tstamp, seqnum, streamid,
|
||||
streamid_valid, data_len;
|
||||
GstAvtpBaseDepayload *avtpbasedepayload = GST_AVTP_BASE_DEPAYLOAD (parent);
|
||||
GstAvtpAafDepay *avtpaafdepay = GST_AVTP_AAF_DEPAY (avtpbasedepayload);
|
||||
|
||||
if (!gst_buffer_map (buffer, &info, GST_MAP_READ)) {
|
||||
|
@ -48,7 +48,12 @@ static void gst_avtp_base_depayload_set_property (GObject * object,
|
||||
static void gst_avtp_base_depayload_get_property (GObject * object,
|
||||
guint prop_id, GValue * value, GParamSpec * pspec);
|
||||
|
||||
static gboolean gst_avtp_base_depayload_sink_event (GstPad * pad,
|
||||
static gboolean gst_avtp_base_depayload_sink_event (GstAvtpBaseDepayload * self,
|
||||
GstEvent * event);
|
||||
|
||||
static GstFlowReturn avtp_base_depayload_chain (GstPad * pad,
|
||||
GstObject * parent, GstBuffer * buffer);
|
||||
static gboolean avtp_base_depayload_sink_event (GstPad * pad,
|
||||
GstObject * parent, GstEvent * event);
|
||||
|
||||
GType
|
||||
@ -92,8 +97,7 @@ gst_avtp_base_depayload_class_init (GstAvtpBaseDepayloadClass * klass)
|
||||
DEFAULT_STREAMID, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
|
||||
GST_PARAM_MUTABLE_PAUSED));
|
||||
|
||||
klass->chain = NULL;
|
||||
klass->sink_event = GST_DEBUG_FUNCPTR (gst_avtp_base_depayload_sink_event);
|
||||
klass->sink_event = gst_avtp_base_depayload_sink_event;
|
||||
|
||||
GST_DEBUG_CATEGORY_INIT (avtpbasedepayload_debug, "avtpbasedepayload", 0,
|
||||
"Base class for AVTP depayloaders");
|
||||
@ -111,7 +115,7 @@ gst_avtp_base_depayload_init (GstAvtpBaseDepayload * avtpbasedepayload,
|
||||
GstAvtpBaseDepayloadClass *avtpbasedepayload_class =
|
||||
GST_AVTP_BASE_DEPAYLOAD_CLASS (g_class);
|
||||
|
||||
g_assert (avtpbasedepayload_class->chain != NULL);
|
||||
g_assert (avtpbasedepayload_class->process != NULL);
|
||||
|
||||
templ = gst_element_class_get_pad_template (element_class, "src");
|
||||
g_assert (templ != NULL);
|
||||
@ -122,9 +126,9 @@ gst_avtp_base_depayload_init (GstAvtpBaseDepayload * avtpbasedepayload,
|
||||
avtpbasedepayload->sinkpad =
|
||||
gst_pad_new_from_static_template (&sink_template, "sink");
|
||||
gst_pad_set_chain_function (avtpbasedepayload->sinkpad,
|
||||
avtpbasedepayload_class->chain);
|
||||
avtp_base_depayload_chain);
|
||||
gst_pad_set_event_function (avtpbasedepayload->sinkpad,
|
||||
avtpbasedepayload_class->sink_event);
|
||||
avtp_base_depayload_sink_event);
|
||||
gst_element_add_pad (element, avtpbasedepayload->sinkpad);
|
||||
|
||||
avtpbasedepayload->streamid = DEFAULT_STREAMID;
|
||||
@ -169,14 +173,21 @@ gst_avtp_base_depayload_get_property (GObject * object, guint prop_id,
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_avtp_base_depayload_sink_event (GstPad * pad, GstObject * parent,
|
||||
GstEvent * event)
|
||||
static GstFlowReturn
|
||||
avtp_base_depayload_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
|
||||
{
|
||||
GstAvtpBaseDepayload *avtpbasedepayload = GST_AVTP_BASE_DEPAYLOAD (parent);
|
||||
GstAvtpBaseDepayloadClass *klass =
|
||||
GST_AVTP_BASE_DEPAYLOAD_GET_CLASS (avtpbasedepayload);
|
||||
|
||||
GST_DEBUG_OBJECT (avtpbasedepayload, "event %s", GST_EVENT_TYPE_NAME (event));
|
||||
return klass->process (avtpbasedepayload, buffer);
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
gst_avtp_base_depayload_sink_event (GstAvtpBaseDepayload * avtpbasedepayload,
|
||||
GstEvent * event)
|
||||
{
|
||||
switch (GST_EVENT_TYPE (event)) {
|
||||
case GST_EVENT_SEGMENT:
|
||||
/* Once the first AVTPDU is received, proper CAPS and SEGMENT events are
|
||||
@ -192,10 +203,24 @@ gst_avtp_base_depayload_sink_event (GstPad * pad, GstObject * parent,
|
||||
gst_event_unref (event);
|
||||
return TRUE;
|
||||
default:
|
||||
return gst_pad_event_default (pad, parent, event);
|
||||
return gst_pad_event_default (avtpbasedepayload->sinkpad,
|
||||
GST_OBJECT (avtpbasedepayload), event);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
avtp_base_depayload_sink_event (GstPad * pad, GstObject * parent,
|
||||
GstEvent * event)
|
||||
{
|
||||
GstAvtpBaseDepayload *avtpbasedepayload = GST_AVTP_BASE_DEPAYLOAD (parent);
|
||||
GstAvtpBaseDepayloadClass *klass =
|
||||
GST_AVTP_BASE_DEPAYLOAD_GET_CLASS (avtpbasedepayload);
|
||||
|
||||
GST_DEBUG_OBJECT (avtpbasedepayload, "event %s", GST_EVENT_TYPE_NAME (event));
|
||||
|
||||
return klass->sink_event (avtpbasedepayload, event);
|
||||
}
|
||||
|
||||
/* Helper function to convert AVTP timestamp to AVTP presentation time. Since
|
||||
* AVTP timestamp represents the lower 32-bit part from AVTP presentation time,
|
||||
* the helper requires a reference time ('ref' argument) to convert it properly.
|
||||
|
@ -35,6 +35,9 @@ G_BEGIN_DECLS
|
||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AVTP_BASE_DEPAYLOAD))
|
||||
#define GST_IS_AVTP_BASE_DEPAYLOAD_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AVTP_BASE_DEPAYLOAD))
|
||||
#define GST_AVTP_BASE_DEPAYLOAD_GET_CLASS(obj) \
|
||||
(G_TYPE_INSTANCE_GET_CLASS ((obj), GST_AVTP_BASE_DEPAYLOAD, \
|
||||
GstAvtpBaseDepayloadClass))
|
||||
|
||||
typedef struct _GstAvtpBaseDepayload GstAvtpBaseDepayload;
|
||||
typedef struct _GstAvtpBaseDepayloadClass GstAvtpBaseDepayloadClass;
|
||||
@ -59,9 +62,8 @@ struct _GstAvtpBaseDepayloadClass
|
||||
GstElementClass parent_class;
|
||||
|
||||
/* Pure virtual function. */
|
||||
GstPadChainFunction chain;
|
||||
|
||||
GstPadEventFunction sink_event;
|
||||
GstFlowReturn (*process) (GstAvtpBaseDepayload *base, GstBuffer *buf);
|
||||
gboolean (*sink_event) (GstAvtpBaseDepayload *base, GstEvent *event);
|
||||
|
||||
gpointer _gst_reserved[GST_PADDING];
|
||||
};
|
||||
|
@ -49,8 +49,8 @@ GST_DEBUG_CATEGORY_STATIC (avtpcvfdepay_debug);
|
||||
|
||||
/* prototypes */
|
||||
|
||||
static GstFlowReturn gst_avtp_cvf_depay_chain (GstPad * pad, GstObject * parent,
|
||||
GstBuffer * buffer);
|
||||
static GstFlowReturn gst_avtp_cvf_depay_process (GstAvtpBaseDepayload *
|
||||
avtpbasedepayload, GstBuffer * buffer);
|
||||
static gboolean gst_avtp_cvf_depay_push_caps (GstAvtpVfDepayBase * avtpvfdepay);
|
||||
|
||||
#define AVTP_CVF_H264_HEADER_SIZE (sizeof(struct avtp_stream_pdu) + sizeof(guint32))
|
||||
@ -102,7 +102,7 @@ gst_avtp_cvf_depay_class_init (GstAvtpCvfDepayClass * klass)
|
||||
"Extracts compressed video from CVF AVTPDUs",
|
||||
"Ederson de Souza <ederson.desouza@intel.com>");
|
||||
|
||||
avtpbasedepayload_class->chain = GST_DEBUG_FUNCPTR (gst_avtp_cvf_depay_chain);
|
||||
avtpbasedepayload_class->process = gst_avtp_cvf_depay_process;
|
||||
|
||||
avtpvfdepaybase_class->depay_push_caps =
|
||||
GST_DEBUG_FUNCPTR (gst_avtp_cvf_depay_push_caps);
|
||||
@ -574,9 +574,10 @@ gst_avtp_cvf_depay_handle_single_nal (GstAvtpCvfDepay * avtpcvfdepay,
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
gst_avtp_cvf_depay_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
|
||||
gst_avtp_cvf_depay_process (GstAvtpBaseDepayload * avtpbasedepayload,
|
||||
GstBuffer * buffer)
|
||||
{
|
||||
GstAvtpCvfDepay *avtpcvfdepay = GST_AVTP_CVF_DEPAY (parent);
|
||||
GstAvtpCvfDepay *avtpcvfdepay = GST_AVTP_CVF_DEPAY (avtpbasedepayload);
|
||||
GstFlowReturn ret = GST_FLOW_OK;
|
||||
gboolean lost_packet;
|
||||
GstMapInfo map;
|
||||
|
@ -50,8 +50,8 @@ GST_DEBUG_CATEGORY_STATIC (avtprvfdepay_debug);
|
||||
|
||||
/* prototypes */
|
||||
|
||||
static GstFlowReturn gst_avtp_rvf_depay_chain (GstPad * pad, GstObject * parent,
|
||||
GstBuffer * buffer);
|
||||
static GstFlowReturn gst_avtp_rvf_depay_process (GstAvtpBaseDepayload *
|
||||
basedepay, GstBuffer * buffer);
|
||||
|
||||
static gboolean gst_avtp_rvf_depay_push_caps (GstAvtpVfDepayBase * avtpvfdepay);
|
||||
|
||||
@ -91,7 +91,8 @@ gst_avtp_rvf_depay_class_init (GstAvtpRvfDepayClass * klass)
|
||||
"Extracts raw video from RVF AVTPDUs",
|
||||
"Adrian Fiergolski <Adrian.Fiergolski@fastree3d.com>");
|
||||
|
||||
avtpbasedepayload_class->chain = GST_DEBUG_FUNCPTR (gst_avtp_rvf_depay_chain);
|
||||
avtpbasedepayload_class->process =
|
||||
GST_DEBUG_FUNCPTR (gst_avtp_rvf_depay_process);
|
||||
|
||||
avtpvfdepaybase_class->depay_push_caps =
|
||||
GST_DEBUG_FUNCPTR (gst_avtp_rvf_depay_push_caps);
|
||||
@ -682,9 +683,10 @@ gst_avtp_rvf_depay_handle_single_fragment (GstAvtpRvfDepay * avtprvfdepay,
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
gst_avtp_rvf_depay_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
|
||||
gst_avtp_rvf_depay_process (GstAvtpBaseDepayload * basedepay,
|
||||
GstBuffer * buffer)
|
||||
{
|
||||
GstAvtpRvfDepay *avtprvfdepay = GST_AVTP_RVF_DEPAY (parent);
|
||||
GstAvtpRvfDepay *avtprvfdepay = GST_AVTP_RVF_DEPAY (basedepay);
|
||||
GstFlowReturn ret = GST_FLOW_OK;
|
||||
gboolean lost_packet;
|
||||
GstMapInfo map;
|
||||
|
Loading…
x
Reference in New Issue
Block a user