From 5765eb8dce71960a9af63135299232d6617c8827 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Tue, 22 Nov 2022 19:57:55 +0900 Subject: [PATCH] sdpmessage: Don't set "source-filter" to caps Multiple "source-filter" can exist, and it requires special handling Part-of: --- .../gst-libs/gst/sdp/gstsdpmessage.c | 2 + .../gst-plugins-base/tests/check/libs/sdp.c | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c b/subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c index b62101302f..6f5f7f8133 100644 --- a/subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c +++ b/subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c @@ -4224,6 +4224,8 @@ sdp_add_attributes_to_caps (GArray * attributes, GstCaps * caps) continue; if (!strcmp (key, "rid")) continue; + if (!strcmp (key, "source-filter")) + continue; /* string must be valid UTF8 */ if (!g_utf8_validate (attr->value, -1, NULL)) diff --git a/subprojects/gst-plugins-base/tests/check/libs/sdp.c b/subprojects/gst-plugins-base/tests/check/libs/sdp.c index 70b2052fd4..11b671d3db 100644 --- a/subprojects/gst-plugins-base/tests/check/libs/sdp.c +++ b/subprojects/gst-plugins-base/tests/check/libs/sdp.c @@ -57,6 +57,17 @@ static const gchar *h264_sdp = "v=0\r\n" "a=rtpmap:96 H264/90000\r\n" "a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\n"; +static const gchar *h264_sdp_with_source_filter = "v=0\r\n" + "o=- 992782775729845470 2 IN IP4 127.0.0.1\r\n" + "s=TestH264\r\n" + "t=0 0\r\n" + "m=video 9 UDP/TLS/RTP/SAVPF 96\r\n" + "c=IN IP4 0.0.0.0\r\n" + "a=recvonly\r\n" + "a=rtpmap:96 H264/90000\r\n" + "a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\n" + "a=source-filter: incl IN IP4 127.0.0.2 127.0.0.1\r\n"; + static const gchar caps_video_string1[] = "application/x-unknown, media=(string)video, payload=(int)96, " "clock-rate=(int)90000, encoding-name=(string)MP4V-ES"; @@ -897,6 +908,31 @@ GST_START_TEST (caps_multiple_rid_parse_with_params) gst_clear_caps (&expected); } +GST_END_TEST +GST_START_TEST (media_from_caps_with_source_filters) +{ + GstSDPMessage *message; + glong length = -1; + const GstSDPMedia *result_video; + GstStructure *s_video; + GstCaps *caps_video; + + gst_sdp_message_new (&message); + gst_sdp_message_parse_buffer ((guint8 *) h264_sdp_with_source_filter, + length, message); + + result_video = gst_sdp_message_get_media (message, 0); + fail_unless (result_video != NULL); + caps_video = gst_sdp_media_get_caps_from_media (result_video, 96); + gst_sdp_media_attributes_to_caps (result_video, caps_video); + + s_video = gst_caps_get_structure (caps_video, 0); + fail_if (gst_structure_has_field (s_video, "a-source-filter")); + + gst_caps_unref (caps_video); + gst_sdp_message_free (message); +} + GST_END_TEST /* * End of test cases @@ -926,6 +962,7 @@ sdp_suite (void) media_from_caps_h264_with_profile_asymmetry_allowed); tcase_add_test (tc_chain, caps_multiple_rid_parse); tcase_add_test (tc_chain, caps_multiple_rid_parse_with_params); + tcase_add_test (tc_chain, media_from_caps_with_source_filters); return s; }