From 0760d87d7fe402925b6dbdd9c14064d2fa175e55 Mon Sep 17 00:00:00 2001 From: Sangchul Lee Date: Fri, 19 Feb 2021 20:00:38 +0900 Subject: [PATCH] webrtc_private: Revise _post_state_in_idle() Rename _post_state_in_idle() to __post_state_cb_in_idle(). Remove prototype in webrtc_private.h. Allocate userdata to have expansibility. [Version] 0.1.117 [Issue Type] Refactoring Change-Id: Ie7e095501dc443474d464d6de78698e54220aed0 Signed-off-by: Sangchul Lee --- include/webrtc_private.h | 1 - packaging/capi-media-webrtc.spec | 2 +- src/webrtc_private.c | 36 ++++++++++++++++++++++++++------ 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/include/webrtc_private.h b/include/webrtc_private.h index a6ddce67..adea6f63 100644 --- a/include/webrtc_private.h +++ b/include/webrtc_private.h @@ -451,7 +451,6 @@ bool _check_if_format_is_set_to_packet_sources(webrtc_s *webrtc); int _push_media_packet(webrtc_s *webrtc, unsigned int source_id, media_packet_h packet); int _get_transceiver_direction(webrtc_s *webrtc, unsigned int source_id, webrtc_media_type_e media_type, webrtc_transceiver_direction_e *direction); int _set_transceiver_direction(webrtc_s *webrtc, unsigned int source_id, webrtc_media_type_e media_type, webrtc_transceiver_direction_e direction); -void _post_state_in_idle(webrtc_s *webrtc, webrtc_state_e new_state); void _invoke_state_changed_cb(webrtc_s *webrtc, webrtc_state_e old, webrtc_state_e new); void _connect_and_append_signal(GList **signals, GObject *obj, const char *sig_name, GCallback cb, gpointer user_data); diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 14366eb6..795c5a70 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.116 +Version: 0.1.117 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_private.c b/src/webrtc_private.c index c1720074..6eb1aa4f 100644 --- a/src/webrtc_private.c +++ b/src/webrtc_private.c @@ -257,30 +257,54 @@ static gboolean __bus_watch_cb(GstBus *bus, GstMessage *message, gpointer user_d return TRUE; } +typedef struct _idle_userdata { + webrtc_s *webrtc; + webrtc_state_e state; +} idle_userdata_s; + static gboolean __idle_cb(gpointer user_data) { - webrtc_s *webrtc = (webrtc_s*)user_data; + idle_userdata_s *data = (idle_userdata_s*)user_data; + webrtc_s *webrtc; webrtc_state_e old_state; + RET_VAL_IF(!data, G_SOURCE_REMOVE, "userdata is NULL"); + if (!data->webrtc) { + LOG_ERROR("webrtc is NULL"); + g_free(data); + return G_SOURCE_REMOVE; + } + + webrtc = data->webrtc; + g_mutex_lock(&webrtc->mutex); old_state = webrtc->state; - webrtc->state = webrtc->pend_state; + webrtc->state = data->state; g_mutex_unlock(&webrtc->mutex); _invoke_state_changed_cb(webrtc, old_state, webrtc->state); + g_free(data); + return G_SOURCE_REMOVE; } -void _post_state_in_idle(webrtc_s *webrtc, webrtc_state_e new_state) +static void __post_state_cb_in_idle(webrtc_s *webrtc, webrtc_state_e new_state) { + idle_userdata_s *data; + if (webrtc->state == new_state) return; + data = g_new0(idle_userdata_s, 1); + data->webrtc = webrtc; + data->state = new_state; + webrtc->pend_state = new_state; - g_idle_add(__idle_cb, webrtc); + + g_idle_add(__idle_cb, data); LOG_DEBUG("state will be changed [%s] -> [%s]", __state_str[webrtc->state], __state_str[new_state]); } @@ -1499,9 +1523,9 @@ int _webrtc_stop(webrtc_s *webrtc) ret = _release_all_resources(webrtc); RET_VAL_WITH_UNLOCK_IF(ret != WEBRTC_ERROR_NONE, ret, &webrtc->mutex, "failed to release all resources"); #endif - _post_state_in_idle(webrtc, WEBRTC_STATE_IDLE); + __post_state_cb_in_idle(webrtc, WEBRTC_STATE_IDLE); - LOG_INFO("webrtc[%p] is stopping", webrtc); + LOG_INFO("webrtc[%p] is stopped", webrtc); g_mutex_unlock(&webrtc->mutex); -- 2.34.1