From: Sangchul Lee Date: Tue, 6 Oct 2020 07:59:43 +0000 (+0900) Subject: Add codes to invoke error callback in two cases X-Git-Tag: submit/tizen/20210729.023123~206 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c4ca230362d85976b8f4fcc331c31d47f3d3ab93;p=platform%2Fcore%2Fapi%2Fwebrtc.git Add codes to invoke error callback in two cases There are cases that 'peer connection state callback' or 'ice connection state callback' of webrtcbin is called with FAILED state. Such cases deserve to be forwarded to user via the error callback. [Version] 0.1.36 [Issue Type] Improvement Change-Id: I54f85da412b200b53b07f9ca5011df8f0295c11b Signed-off-by: Sangchul Lee --- diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 6cdf74ce..fa028d94 100644 --- a/packaging/capi-media-webrtc.spec +++ b/packaging/capi-media-webrtc.spec @@ -1,6 +1,6 @@ Name: capi-media-webrtc Summary: A WebRTC library in Tizen Native API -Version: 0.1.35 +Version: 0.1.36 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_private.c b/src/webrtc_private.c index ef72e4a5..40a5a91b 100644 --- a/src/webrtc_private.c +++ b/src/webrtc_private.c @@ -162,6 +162,19 @@ static void __invoke_state_changed_cb(webrtc_s *webrtc, webrtc_state_e old, webr GENERATE_DOT(webrtc, "STATE_%s", __state_str[webrtc->state]); } +static void __invoke_error_cb(webrtc_s *webrtc, webrtc_error_e error) +{ + RET_IF(webrtc == NULL, "webrtc is NULL"); + + LOG_INFO("error[0x%x]", error); + + if (webrtc->error_cb.callback) { + LOG_DEBUG(">>> callback[%p], user_data[%p]", webrtc->error_cb.callback, webrtc->error_cb.user_data); + ((webrtc_error_cb)(webrtc->error_cb.callback))((webrtc_h)webrtc, error, webrtc->state, webrtc->error_cb.user_data); + LOG_DEBUG("<<< end of the callback"); + } +} + static gboolean __bus_watch_cb(GstBus *bus, GstMessage *message, gpointer user_data) { webrtc_s *webrtc = (webrtc_s *)user_data; @@ -180,26 +193,23 @@ static gboolean __bus_watch_cb(GstBus *bus, GstMessage *message, gpointer user_d } switch (GST_MESSAGE_TYPE(message)) { - case GST_MESSAGE_ERROR: + case GST_MESSAGE_ERROR: { + webrtc_error_e error = WEBRTC_ERROR_INVALID_OPERATION; gst_message_parse_error(message, &err, NULL); LOG_ERROR("Error[from %s]: message[%s], code[%d]", GST_OBJECT_NAME(GST_OBJECT_CAST(GST_ELEMENT(GST_MESSAGE_SRC(message)))), err->message, err->code); - if (webrtc->error_cb.callback) { - webrtc_error_e error = WEBRTC_ERROR_INVALID_OPERATION; - if (err->domain == GST_RESOURCE_ERROR) - error = WEBRTC_ERROR_RESOURCE_FAILED; - else if (err->domain == GST_STREAM_ERROR) - error = WEBRTC_ERROR_STREAM_FAILED; - - LOG_DEBUG(">>> invoke error_cb[%p], user_data[%p]", - webrtc->error_cb.callback, webrtc->error_cb.user_data); - ((webrtc_error_cb)(webrtc->error_cb.callback))((webrtc_h)webrtc, error, webrtc->state, webrtc->error_cb.user_data); - LOG_DEBUG("<<< end of the callback"); - } + + if (err->domain == GST_RESOURCE_ERROR) + error = WEBRTC_ERROR_RESOURCE_FAILED; + else if (err->domain == GST_STREAM_ERROR) + error = WEBRTC_ERROR_STREAM_FAILED; + + __invoke_error_cb(webrtc, error); g_error_free(err); break; + } case GST_MESSAGE_STATE_CHANGED: if (GST_MESSAGE_SRC(message) != GST_OBJECT(webrtc->gst.pipeline)) @@ -546,6 +556,8 @@ static void __webrtcbin_peer_connection_state_cb(GstElement *webrtcbin, GParamSp case GST_WEBRTC_PEER_CONNECTION_STATE_FAILED: new_state = "FAILED"; + + __invoke_error_cb(webrtc, WEBRTC_ERROR_CONNECTION_FAILED); break; case GST_WEBRTC_PEER_CONNECTION_STATE_CLOSED: @@ -654,6 +666,8 @@ static void __webrtcbin_ice_connection_state_cb(GstElement *webrtcbin, GParamSpe case GST_WEBRTC_ICE_CONNECTION_STATE_FAILED: new_state = "FAILED"; + + __invoke_error_cb(webrtc, WEBRTC_ERROR_CONNECTION_FAILED); break; case GST_WEBRTC_ICE_CONNECTION_STATE_DISCONNECTED: