diff --git a/gst/rtp/gstrtpopusdepay.c b/gst/rtp/gstrtpopusdepay.c index afa6ba7e54..293371f485 100644 --- a/gst/rtp/gstrtpopusdepay.c +++ b/gst/rtp/gstrtpopusdepay.c @@ -28,6 +28,7 @@ #include #include #include "gstrtpopusdepay.h" +#include "gstrtputils.h" GST_DEBUG_CATEGORY_STATIC (rtpopusdepay_debug); #define GST_CAT_DEFAULT (rtpopusdepay_debug) @@ -138,25 +139,6 @@ gst_rtp_opus_depay_setcaps (GstRTPBaseDepayload * depayload, GstCaps * caps) return ret; } -static gboolean -foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data) -{ - GstRTPOpusDepay *depay = user_data; - const GstMetaInfo *info = (*meta)->info; - const gchar *const *tags = gst_meta_api_type_get_tags (info->api); - - if (!tags || (g_strv_length ((gchar **) tags) == 1 - && gst_meta_api_type_has_tag (info->api, - g_quark_from_string (GST_META_TAG_AUDIO_STR)))) { - GST_DEBUG_OBJECT (depay, "keeping metadata %s", g_type_name (info->api)); - } else { - GST_DEBUG_OBJECT (depay, "dropping metadata %s", g_type_name (info->api)); - *meta = NULL; - } - - return TRUE; -} - static GstBuffer * gst_rtp_opus_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) { @@ -168,8 +150,7 @@ gst_rtp_opus_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf) gst_rtp_buffer_unmap (&rtpbuf); outbuf = gst_buffer_make_writable (outbuf); - /* Filter away all metas that are not sensible to copy */ - gst_buffer_foreach_meta (outbuf, foreach_metadata, depayload); + gst_rtp_drop_non_audio_meta (depayload, outbuf); return outbuf; } diff --git a/gst/rtp/gstrtpopuspay.c b/gst/rtp/gstrtpopuspay.c index 1a6eb805a0..b610885658 100644 --- a/gst/rtp/gstrtpopuspay.c +++ b/gst/rtp/gstrtpopuspay.c @@ -29,6 +29,7 @@ #include #include "gstrtpopuspay.h" +#include "gstrtputils.h" GST_DEBUG_CATEGORY_STATIC (rtpopuspay_debug); #define GST_CAT_DEFAULT (rtpopuspay_debug) @@ -162,52 +163,21 @@ gst_rtp_opus_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps) return res; } -typedef struct -{ - GstRtpOPUSPay *pay; - GstBuffer *outbuf; -} CopyMetaData; - -static gboolean -foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data) -{ - CopyMetaData *data = user_data; - GstRtpOPUSPay *pay = data->pay; - GstBuffer *outbuf = data->outbuf; - const GstMetaInfo *info = (*meta)->info; - const gchar *const *tags = gst_meta_api_type_get_tags (info->api); - - if (!tags || (g_strv_length ((gchar **) tags) == 1 - && gst_meta_api_type_has_tag (info->api, - g_quark_from_string (GST_META_TAG_AUDIO_STR)))) { - GstMetaTransformCopy copy_data = { FALSE, 0, -1 }; - GST_DEBUG_OBJECT (pay, "copy metadata %s", g_type_name (info->api)); - /* simply copy then */ - info->transform_func (outbuf, *meta, inbuf, - _gst_meta_transform_copy, ©_data); - } else { - GST_DEBUG_OBJECT (pay, "not copying metadata %s", g_type_name (info->api)); - } - - return TRUE; -} - static GstFlowReturn gst_rtp_opus_pay_handle_buffer (GstRTPBasePayload * basepayload, GstBuffer * buffer) { GstBuffer *outbuf; GstClockTime pts, dts, duration; - CopyMetaData data; pts = GST_BUFFER_PTS (buffer); dts = GST_BUFFER_DTS (buffer); duration = GST_BUFFER_DURATION (buffer); outbuf = gst_rtp_buffer_new_allocate (0, 0, 0); - data.pay = GST_RTP_OPUS_PAY (basepayload); - data.outbuf = outbuf; - gst_buffer_foreach_meta (buffer, foreach_metadata, &data); + + gst_rtp_copy_audio_meta (basepayload, outbuf, buffer); + outbuf = gst_buffer_append (outbuf, buffer); GST_BUFFER_PTS (outbuf) = pts;