mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-24 02:31:03 +00:00
rtpbasedepayload: don't consider existing GstRTPSourceMeta
The meta should always be generated based on what is present in the rtp-header.
This commit is contained in:
parent
a83859aaee
commit
2e342a16ce
2 changed files with 57 additions and 0 deletions
|
@ -750,17 +750,35 @@ create_segment_event (GstRTPBaseDepayload * filter, guint rtptime,
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
foreach_metadata_drop (GstBuffer * buffer, GstMeta ** meta, gpointer user_data)
|
||||||
|
{
|
||||||
|
GType drop_api_type = (GType) user_data;
|
||||||
|
const GstMetaInfo *info = (*meta)->info;
|
||||||
|
|
||||||
|
if (info->api == drop_api_type)
|
||||||
|
*meta = NULL;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_rtp_source_meta (GstBuffer * outbuf, GstBuffer * rtpbuf)
|
add_rtp_source_meta (GstBuffer * outbuf, GstBuffer * rtpbuf)
|
||||||
{
|
{
|
||||||
GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
|
GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
|
||||||
GstRTPSourceMeta *meta;
|
GstRTPSourceMeta *meta;
|
||||||
guint32 ssrc;
|
guint32 ssrc;
|
||||||
|
GType source_meta_api = gst_rtp_source_meta_api_get_type ();
|
||||||
|
|
||||||
if (!gst_rtp_buffer_map (rtpbuf, GST_MAP_READ, &rtp))
|
if (!gst_rtp_buffer_map (rtpbuf, GST_MAP_READ, &rtp))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ssrc = gst_rtp_buffer_get_ssrc (&rtp);
|
ssrc = gst_rtp_buffer_get_ssrc (&rtp);
|
||||||
|
|
||||||
|
/* remove any pre-existing source-meta */
|
||||||
|
gst_buffer_foreach_meta (outbuf, foreach_metadata_drop,
|
||||||
|
(gpointer) source_meta_api);
|
||||||
|
|
||||||
meta = gst_buffer_add_rtp_source_meta (outbuf, &ssrc, NULL, 0);
|
meta = gst_buffer_add_rtp_source_meta (outbuf, &ssrc, NULL, 0);
|
||||||
if (meta != NULL) {
|
if (meta != NULL) {
|
||||||
gint i;
|
gint i;
|
||||||
|
|
|
@ -1374,6 +1374,44 @@ GST_START_TEST (rtp_base_depayload_source_info_test)
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
|
/* verify that if a buffer arriving in the depayloader already has source-info
|
||||||
|
meta on it, that this does not affect the source-info coming out of the
|
||||||
|
depayloder, which should be all derived from the rtp-header */
|
||||||
|
GST_START_TEST (rtp_base_depayload_source_info_from_rtp_only)
|
||||||
|
{
|
||||||
|
GstHarness *h;
|
||||||
|
GstRtpDummyDepay *depay;
|
||||||
|
GstBuffer *buffer;
|
||||||
|
GstRTPSourceMeta *meta;
|
||||||
|
guint rtp_ssrc = 0x11;
|
||||||
|
guint rtp_csrc = 0x22;
|
||||||
|
guint32 meta_ssrc = 0x55;
|
||||||
|
guint32 meta_csrc = 0x66;
|
||||||
|
|
||||||
|
depay = rtp_dummy_depay_new ();
|
||||||
|
h = gst_harness_new_with_element (GST_ELEMENT_CAST (depay), "sink", "src");
|
||||||
|
gst_harness_set_src_caps_str (h, "application/x-rtp");
|
||||||
|
|
||||||
|
g_object_set (depay, "source-info", TRUE, NULL);
|
||||||
|
buffer = gst_rtp_buffer_new_allocate (0, 0, 1);
|
||||||
|
rtp_buffer_set (buffer, "seq", 0, "ssrc", rtp_ssrc, "csrc", 0, rtp_csrc,
|
||||||
|
NULL);
|
||||||
|
meta = gst_buffer_add_rtp_source_meta (buffer, &meta_ssrc, &meta_csrc, 1);
|
||||||
|
|
||||||
|
buffer = gst_harness_push_and_pull (h, buffer);
|
||||||
|
fail_unless ((meta = gst_buffer_get_rtp_source_meta (buffer)));
|
||||||
|
fail_unless (meta->ssrc_valid);
|
||||||
|
fail_unless_equals_int (meta->ssrc, rtp_ssrc);
|
||||||
|
fail_unless_equals_int (meta->csrc_count, 1);
|
||||||
|
fail_unless_equals_int (meta->csrc[0], rtp_csrc);
|
||||||
|
gst_buffer_unref (buffer);
|
||||||
|
|
||||||
|
g_object_unref (depay);
|
||||||
|
gst_harness_teardown (h);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST;
|
||||||
|
|
||||||
|
|
||||||
static Suite *
|
static Suite *
|
||||||
rtp_basepayloading_suite (void)
|
rtp_basepayloading_suite (void)
|
||||||
|
@ -1406,6 +1444,7 @@ rtp_basepayloading_suite (void)
|
||||||
tcase_add_test (tc_chain, rtp_base_depayload_clock_base_test);
|
tcase_add_test (tc_chain, rtp_base_depayload_clock_base_test);
|
||||||
|
|
||||||
tcase_add_test (tc_chain, rtp_base_depayload_source_info_test);
|
tcase_add_test (tc_chain, rtp_base_depayload_source_info_test);
|
||||||
|
tcase_add_test (tc_chain, rtp_base_depayload_source_info_from_rtp_only);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue