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_ELEMENT_REGISTER_DEFINE (avtpaafdepay, "avtpaafdepay", GST_RANK_NONE,
|
||||||
GST_TYPE_AVTP_AAF_DEPAY);
|
GST_TYPE_AVTP_AAF_DEPAY);
|
||||||
|
|
||||||
static GstFlowReturn gst_avtp_aaf_depay_chain (GstPad * pad, GstObject * parent,
|
static GstFlowReturn gst_avtp_aaf_depay_process (GstAvtpBaseDepayload *
|
||||||
GstBuffer * buffer);
|
basedepay, GstBuffer * buffer);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_avtp_aaf_depay_class_init (GstAvtpAafDepayClass * klass)
|
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",
|
"Extracts raw audio from AAF AVTPDUs",
|
||||||
"Andre Guedes <andre.guedes@intel.com>");
|
"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,
|
GST_DEBUG_CATEGORY_INIT (avtpaafdepay_debug, "avtpaafdepay", 0,
|
||||||
"AAF AVTP Depayloader");
|
"AAF AVTP Depayloader");
|
||||||
@ -207,7 +207,8 @@ gst_avtp_aaf_depay_are_audio_features_valid (GstAvtpAafDepay * avtpaafdepay,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
gst_avtp_aaf_depay_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
|
gst_avtp_aaf_depay_process (GstAvtpBaseDepayload * avtpbasedepayload,
|
||||||
|
GstBuffer * buffer)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
GstMapInfo info;
|
GstMapInfo info;
|
||||||
@ -217,7 +218,6 @@ gst_avtp_aaf_depay_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
|
|||||||
struct avtp_stream_pdu *pdu;
|
struct avtp_stream_pdu *pdu;
|
||||||
guint64 channels, depth, rate, format, tstamp, seqnum, streamid,
|
guint64 channels, depth, rate, format, tstamp, seqnum, streamid,
|
||||||
streamid_valid, data_len;
|
streamid_valid, data_len;
|
||||||
GstAvtpBaseDepayload *avtpbasedepayload = GST_AVTP_BASE_DEPAYLOAD (parent);
|
|
||||||
GstAvtpAafDepay *avtpaafdepay = GST_AVTP_AAF_DEPAY (avtpbasedepayload);
|
GstAvtpAafDepay *avtpaafdepay = GST_AVTP_AAF_DEPAY (avtpbasedepayload);
|
||||||
|
|
||||||
if (!gst_buffer_map (buffer, &info, GST_MAP_READ)) {
|
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,
|
static void gst_avtp_base_depayload_get_property (GObject * object,
|
||||||
guint prop_id, GValue * value, GParamSpec * pspec);
|
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);
|
GstObject * parent, GstEvent * event);
|
||||||
|
|
||||||
GType
|
GType
|
||||||
@ -92,8 +97,7 @@ gst_avtp_base_depayload_class_init (GstAvtpBaseDepayloadClass * klass)
|
|||||||
DEFAULT_STREAMID, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
|
DEFAULT_STREAMID, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
|
||||||
GST_PARAM_MUTABLE_PAUSED));
|
GST_PARAM_MUTABLE_PAUSED));
|
||||||
|
|
||||||
klass->chain = NULL;
|
klass->sink_event = gst_avtp_base_depayload_sink_event;
|
||||||
klass->sink_event = GST_DEBUG_FUNCPTR (gst_avtp_base_depayload_sink_event);
|
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_INIT (avtpbasedepayload_debug, "avtpbasedepayload", 0,
|
GST_DEBUG_CATEGORY_INIT (avtpbasedepayload_debug, "avtpbasedepayload", 0,
|
||||||
"Base class for AVTP depayloaders");
|
"Base class for AVTP depayloaders");
|
||||||
@ -111,7 +115,7 @@ gst_avtp_base_depayload_init (GstAvtpBaseDepayload * avtpbasedepayload,
|
|||||||
GstAvtpBaseDepayloadClass *avtpbasedepayload_class =
|
GstAvtpBaseDepayloadClass *avtpbasedepayload_class =
|
||||||
GST_AVTP_BASE_DEPAYLOAD_CLASS (g_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");
|
templ = gst_element_class_get_pad_template (element_class, "src");
|
||||||
g_assert (templ != NULL);
|
g_assert (templ != NULL);
|
||||||
@ -122,9 +126,9 @@ gst_avtp_base_depayload_init (GstAvtpBaseDepayload * avtpbasedepayload,
|
|||||||
avtpbasedepayload->sinkpad =
|
avtpbasedepayload->sinkpad =
|
||||||
gst_pad_new_from_static_template (&sink_template, "sink");
|
gst_pad_new_from_static_template (&sink_template, "sink");
|
||||||
gst_pad_set_chain_function (avtpbasedepayload->sinkpad,
|
gst_pad_set_chain_function (avtpbasedepayload->sinkpad,
|
||||||
avtpbasedepayload_class->chain);
|
avtp_base_depayload_chain);
|
||||||
gst_pad_set_event_function (avtpbasedepayload->sinkpad,
|
gst_pad_set_event_function (avtpbasedepayload->sinkpad,
|
||||||
avtpbasedepayload_class->sink_event);
|
avtp_base_depayload_sink_event);
|
||||||
gst_element_add_pad (element, avtpbasedepayload->sinkpad);
|
gst_element_add_pad (element, avtpbasedepayload->sinkpad);
|
||||||
|
|
||||||
avtpbasedepayload->streamid = DEFAULT_STREAMID;
|
avtpbasedepayload->streamid = DEFAULT_STREAMID;
|
||||||
@ -169,14 +173,21 @@ gst_avtp_base_depayload_get_property (GObject * object, guint prop_id,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static GstFlowReturn
|
||||||
gst_avtp_base_depayload_sink_event (GstPad * pad, GstObject * parent,
|
avtp_base_depayload_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
|
||||||
GstEvent * event)
|
|
||||||
{
|
{
|
||||||
GstAvtpBaseDepayload *avtpbasedepayload = GST_AVTP_BASE_DEPAYLOAD (parent);
|
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)) {
|
switch (GST_EVENT_TYPE (event)) {
|
||||||
case GST_EVENT_SEGMENT:
|
case GST_EVENT_SEGMENT:
|
||||||
/* Once the first AVTPDU is received, proper CAPS and SEGMENT events are
|
/* 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);
|
gst_event_unref (event);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
default:
|
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
|
/* Helper function to convert AVTP timestamp to AVTP presentation time. Since
|
||||||
* AVTP timestamp represents the lower 32-bit part from AVTP presentation time,
|
* AVTP timestamp represents the lower 32-bit part from AVTP presentation time,
|
||||||
* the helper requires a reference time ('ref' argument) to convert it properly.
|
* 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))
|
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AVTP_BASE_DEPAYLOAD))
|
||||||
#define GST_IS_AVTP_BASE_DEPAYLOAD_CLASS(klass) \
|
#define GST_IS_AVTP_BASE_DEPAYLOAD_CLASS(klass) \
|
||||||
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AVTP_BASE_DEPAYLOAD))
|
(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 _GstAvtpBaseDepayload GstAvtpBaseDepayload;
|
||||||
typedef struct _GstAvtpBaseDepayloadClass GstAvtpBaseDepayloadClass;
|
typedef struct _GstAvtpBaseDepayloadClass GstAvtpBaseDepayloadClass;
|
||||||
@ -59,9 +62,8 @@ struct _GstAvtpBaseDepayloadClass
|
|||||||
GstElementClass parent_class;
|
GstElementClass parent_class;
|
||||||
|
|
||||||
/* Pure virtual function. */
|
/* Pure virtual function. */
|
||||||
GstPadChainFunction chain;
|
GstFlowReturn (*process) (GstAvtpBaseDepayload *base, GstBuffer *buf);
|
||||||
|
gboolean (*sink_event) (GstAvtpBaseDepayload *base, GstEvent *event);
|
||||||
GstPadEventFunction sink_event;
|
|
||||||
|
|
||||||
gpointer _gst_reserved[GST_PADDING];
|
gpointer _gst_reserved[GST_PADDING];
|
||||||
};
|
};
|
||||||
|
@ -49,8 +49,8 @@ GST_DEBUG_CATEGORY_STATIC (avtpcvfdepay_debug);
|
|||||||
|
|
||||||
/* prototypes */
|
/* prototypes */
|
||||||
|
|
||||||
static GstFlowReturn gst_avtp_cvf_depay_chain (GstPad * pad, GstObject * parent,
|
static GstFlowReturn gst_avtp_cvf_depay_process (GstAvtpBaseDepayload *
|
||||||
GstBuffer * buffer);
|
avtpbasedepayload, GstBuffer * buffer);
|
||||||
static gboolean gst_avtp_cvf_depay_push_caps (GstAvtpVfDepayBase * avtpvfdepay);
|
static gboolean gst_avtp_cvf_depay_push_caps (GstAvtpVfDepayBase * avtpvfdepay);
|
||||||
|
|
||||||
#define AVTP_CVF_H264_HEADER_SIZE (sizeof(struct avtp_stream_pdu) + sizeof(guint32))
|
#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",
|
"Extracts compressed video from CVF AVTPDUs",
|
||||||
"Ederson de Souza <ederson.desouza@intel.com>");
|
"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 =
|
avtpvfdepaybase_class->depay_push_caps =
|
||||||
GST_DEBUG_FUNCPTR (gst_avtp_cvf_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
|
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;
|
GstFlowReturn ret = GST_FLOW_OK;
|
||||||
gboolean lost_packet;
|
gboolean lost_packet;
|
||||||
GstMapInfo map;
|
GstMapInfo map;
|
||||||
|
@ -50,8 +50,8 @@ GST_DEBUG_CATEGORY_STATIC (avtprvfdepay_debug);
|
|||||||
|
|
||||||
/* prototypes */
|
/* prototypes */
|
||||||
|
|
||||||
static GstFlowReturn gst_avtp_rvf_depay_chain (GstPad * pad, GstObject * parent,
|
static GstFlowReturn gst_avtp_rvf_depay_process (GstAvtpBaseDepayload *
|
||||||
GstBuffer * buffer);
|
basedepay, GstBuffer * buffer);
|
||||||
|
|
||||||
static gboolean gst_avtp_rvf_depay_push_caps (GstAvtpVfDepayBase * avtpvfdepay);
|
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",
|
"Extracts raw video from RVF AVTPDUs",
|
||||||
"Adrian Fiergolski <Adrian.Fiergolski@fastree3d.com>");
|
"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 =
|
avtpvfdepaybase_class->depay_push_caps =
|
||||||
GST_DEBUG_FUNCPTR (gst_avtp_rvf_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
|
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;
|
GstFlowReturn ret = GST_FLOW_OK;
|
||||||
gboolean lost_packet;
|
gboolean lost_packet;
|
||||||
GstMapInfo map;
|
GstMapInfo map;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user