mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-30 12:49:40 +00:00
webrtcbin: Reject creating an offer if a locked mline has no caps
This avoids getting in a bunch of corner cases. We'd have to insert a "rejected" line from the start as a place-holder to get around this, but the rest of the code just becomes more complicated, so just disallow it for now. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2439>
This commit is contained in:
parent
3503599e0a
commit
0930c467d4
2 changed files with 41 additions and 2 deletions
|
@ -3257,8 +3257,16 @@ sdp_media_from_transceiver (GstWebRTCBin * webrtc, GstSDPMedia * media,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!caps) {
|
if (!caps) {
|
||||||
GST_WARNING_OBJECT (webrtc, "no caps available for transceiver %"
|
if (WEBRTC_TRANSCEIVER (trans)->mline_locked) {
|
||||||
GST_PTR_FORMAT ", skipping", trans);
|
g_set_error (error, GST_WEBRTC_ERROR,
|
||||||
|
GST_WEBRTC_ERROR_INTERNAL_FAILURE,
|
||||||
|
"Transceiver <%s> with mid %s has locked mline %u, but no caps. "
|
||||||
|
"Can't produce offer.", GST_OBJECT_NAME (trans), trans->mid,
|
||||||
|
trans->mline);
|
||||||
|
} else {
|
||||||
|
GST_WARNING_OBJECT (webrtc, "no caps available for transceiver %"
|
||||||
|
GST_PTR_FORMAT ", skipping", trans);
|
||||||
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4067,6 +4067,36 @@ GST_START_TEST (test_reject_create_offer)
|
||||||
|
|
||||||
GST_END_TEST;
|
GST_END_TEST;
|
||||||
|
|
||||||
|
GST_START_TEST (test_reject_create_offer_mline_locked_no_caps)
|
||||||
|
{
|
||||||
|
GstHarness *h;
|
||||||
|
GstPromise *promise;
|
||||||
|
const GstStructure *s;
|
||||||
|
GstPromiseResult res;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
h = gst_harness_new_with_padnames ("webrtcbin", "sink_0", NULL);
|
||||||
|
|
||||||
|
promise = gst_promise_new ();
|
||||||
|
g_signal_emit_by_name (h->element, "create-offer", NULL, promise);
|
||||||
|
res = gst_promise_wait (promise);
|
||||||
|
fail_unless_equals_int (res, GST_PROMISE_RESULT_REPLIED);
|
||||||
|
s = gst_promise_get_reply (promise);
|
||||||
|
fail_unless (s != NULL);
|
||||||
|
gst_structure_get (s, "error", G_TYPE_ERROR, &error, NULL);
|
||||||
|
fail_unless (g_error_matches (error, GST_WEBRTC_ERROR,
|
||||||
|
GST_WEBRTC_ERROR_INTERNAL_FAILURE));
|
||||||
|
fail_unless_equals_string (error->message,
|
||||||
|
"Transceiver <webrtctransceiver0> with mid (null) has locked mline 0,"
|
||||||
|
" but no caps. Can't produce offer.");
|
||||||
|
g_clear_error (&error);
|
||||||
|
gst_promise_unref (promise);
|
||||||
|
|
||||||
|
gst_harness_teardown (h);
|
||||||
|
}
|
||||||
|
|
||||||
|
GST_END_TEST;
|
||||||
|
|
||||||
GST_START_TEST (test_reject_set_description)
|
GST_START_TEST (test_reject_set_description)
|
||||||
{
|
{
|
||||||
struct test_webrtc *t = test_webrtc_new ();
|
struct test_webrtc *t = test_webrtc_new ();
|
||||||
|
@ -5514,6 +5544,7 @@ webrtcbin_suite (void)
|
||||||
test_bundle_codec_preferences_rtx_no_duplicate_payloads);
|
test_bundle_codec_preferences_rtx_no_duplicate_payloads);
|
||||||
tcase_add_test (tc, test_reject_request_pad);
|
tcase_add_test (tc, test_reject_request_pad);
|
||||||
tcase_add_test (tc, test_reject_create_offer);
|
tcase_add_test (tc, test_reject_create_offer);
|
||||||
|
tcase_add_test (tc, test_reject_create_offer_mline_locked_no_caps);
|
||||||
tcase_add_test (tc, test_reject_set_description);
|
tcase_add_test (tc, test_reject_set_description);
|
||||||
tcase_add_test (tc, test_force_second_media);
|
tcase_add_test (tc, test_force_second_media);
|
||||||
tcase_add_test (tc, test_codec_preferences_caps);
|
tcase_add_test (tc, test_codec_preferences_caps);
|
||||||
|
|
Loading…
Reference in a new issue