mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 16:26:39 +00:00
sdp: Add API to remove media from a SDP message
Based on initial patch by Stefano Buora. https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/579 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4670>
This commit is contained in:
parent
059965fe53
commit
b2e121054d
4 changed files with 100 additions and 0 deletions
|
@ -3374,6 +3374,25 @@ from a #GstSDPMessage.</doc>
|
|||
</parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<method name="remove_media" c:identifier="gst_sdp_message_remove_media" version="1.24">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">Remove the media at @idx from the array of medias in @msg if found.</doc>
|
||||
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.h"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">#GST_SDP_OK when the specified media is found at @idx and removed,
|
||||
#GST_SDP_EINVAL otherwise.</doc>
|
||||
<type name="SDPResult" c:type="GstSDPResult"/>
|
||||
</return-value>
|
||||
<parameters>
|
||||
<instance-parameter name="msg" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">a #GstSDPMessage</doc>
|
||||
<type name="SDPMessage" c:type="GstSDPMessage*"/>
|
||||
</instance-parameter>
|
||||
<parameter name="idx" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">the media index</doc>
|
||||
<type name="guint" c:type="guint"/>
|
||||
</parameter>
|
||||
</parameters>
|
||||
</method>
|
||||
<method name="remove_phone" c:identifier="gst_sdp_message_remove_phone" version="1.2">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c">Remove the phone number in @msg at index @idx.</doc>
|
||||
<source-position filename="../subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.h"/>
|
||||
|
|
|
@ -1790,6 +1790,33 @@ gst_sdp_message_add_media (GstSDPMessage * msg, GstSDPMedia * media)
|
|||
return GST_SDP_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_sdp_message_remove_media:
|
||||
* @msg: a #GstSDPMessage
|
||||
* @idx: the media index
|
||||
*
|
||||
* Remove the media at @idx from the array of medias in @msg if found.
|
||||
*
|
||||
* Returns: #GST_SDP_OK when the specified media is found at @idx and removed,
|
||||
* #GST_SDP_EINVAL otherwise.
|
||||
*
|
||||
* Since: 1.24
|
||||
*/
|
||||
GstSDPResult
|
||||
gst_sdp_message_remove_media (GstSDPMessage * msg, guint idx)
|
||||
{
|
||||
GstSDPMedia *media = NULL;
|
||||
|
||||
g_return_val_if_fail (msg != NULL, GST_SDP_EINVAL);
|
||||
g_return_val_if_fail (idx <= gst_sdp_message_medias_len (msg),
|
||||
GST_SDP_EINVAL);
|
||||
|
||||
media = &g_array_index (msg->medias, GstSDPMedia, idx);
|
||||
gst_sdp_media_uninit (media);
|
||||
g_array_remove_index (msg->medias, idx);
|
||||
return GST_SDP_OK;
|
||||
}
|
||||
|
||||
/* media access */
|
||||
|
||||
/**
|
||||
|
|
|
@ -572,6 +572,9 @@ const GstSDPMedia* gst_sdp_message_get_media (const GstSDPMessage
|
|||
GST_SDP_API
|
||||
GstSDPResult gst_sdp_message_add_media (GstSDPMessage *msg, GstSDPMedia *media);
|
||||
|
||||
GST_SDP_API
|
||||
GstSDPResult gst_sdp_message_remove_media (GstSDPMessage *msg, guint idx);
|
||||
|
||||
GST_SDP_API
|
||||
GstSDPResult gst_sdp_message_dump (const GstSDPMessage *msg);
|
||||
|
||||
|
|
|
@ -933,6 +933,56 @@ GST_START_TEST (media_from_caps_with_source_filters)
|
|||
gst_sdp_message_free (message);
|
||||
}
|
||||
|
||||
GST_END_TEST
|
||||
GST_START_TEST (media_remove)
|
||||
{
|
||||
GstSDPResult ret = GST_SDP_OK;
|
||||
GstSDPMessage *message;
|
||||
const gchar *media;
|
||||
GstSDPMedia *media_video, *media_audio;
|
||||
const GstSDPMedia *result_audio;
|
||||
GstCaps *caps_video, *caps_audio;
|
||||
|
||||
/* Add two medias, firts a video and then audio */
|
||||
caps_video = gst_caps_from_string (caps_video_string1);
|
||||
caps_audio = gst_caps_from_string (caps_audio_string);
|
||||
|
||||
gst_sdp_media_new (&media_video);
|
||||
fail_unless (media_video != NULL);
|
||||
gst_sdp_media_new (&media_audio);
|
||||
fail_unless (media_audio != NULL);
|
||||
|
||||
ret = gst_sdp_media_set_media_from_caps (caps_video, media_video);
|
||||
fail_unless (ret == GST_SDP_OK);
|
||||
gst_caps_unref (caps_video);
|
||||
ret = gst_sdp_media_set_media_from_caps (caps_audio, media_audio);
|
||||
fail_unless (ret == GST_SDP_OK);
|
||||
gst_caps_unref (caps_audio);
|
||||
|
||||
gst_sdp_message_new (&message);
|
||||
gst_sdp_message_add_media (message, media_video);
|
||||
gst_sdp_message_add_media (message, media_audio);
|
||||
|
||||
fail_unless_equals_int (gst_sdp_message_medias_len (message), 2);
|
||||
|
||||
/* Remove the first media (video) */
|
||||
ret = gst_sdp_message_remove_media (message, 0);
|
||||
fail_unless (ret == GST_SDP_OK);
|
||||
|
||||
/* Audio media is the only one left */
|
||||
fail_unless_equals_int (gst_sdp_message_medias_len (message), 1);
|
||||
|
||||
result_audio = gst_sdp_message_get_media (message, 0);
|
||||
fail_unless (result_audio != NULL);
|
||||
|
||||
media = gst_sdp_media_get_media (result_audio);
|
||||
fail_unless_equals_string (media, "audio");
|
||||
|
||||
gst_sdp_media_free (media_audio);
|
||||
gst_sdp_media_free (media_video);
|
||||
gst_sdp_message_free (message);
|
||||
}
|
||||
|
||||
GST_END_TEST
|
||||
/*
|
||||
* End of test cases
|
||||
|
@ -963,6 +1013,7 @@ sdp_suite (void)
|
|||
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);
|
||||
tcase_add_test (tc_chain, media_remove);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue