int webrtc_set_ecore_wl_display(webrtc_h webrtc, unsigned int track_id, void *ecore_wl_window)
{
int ret = WEBRTC_ERROR_NONE;
+ g_autoptr(GMutexLocker) locker = NULL;
webrtc_s *_webrtc = (webrtc_s*)webrtc;
RET_VAL_IF(_webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL");
RET_VAL_IF(track_id == 0, WEBRTC_ERROR_INVALID_PARAMETER, "track id is 0");
RET_VAL_IF(ecore_wl_window == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "ecore_wl_window is NULL");
- g_mutex_lock(&_webrtc->mutex);
+ locker = g_mutex_locker_new(&_webrtc->mutex);
- RET_VAL_WITH_UNLOCK_IF(_webrtc->track_added_cb.callback == NULL, WEBRTC_ERROR_INVALID_OPERATION, &_webrtc->mutex, "callback was not set");
- RET_VAL_WITH_UNLOCK_IF(!_is_owner_of_track_build_context(_webrtc, track_id), WEBRTC_ERROR_INVALID_OPERATION, &_webrtc->mutex,
+ RET_VAL_IF(_webrtc->track_added_cb.callback == NULL, WEBRTC_ERROR_INVALID_OPERATION, "callback was not set");
+ RET_VAL_IF(!_is_owner_of_track_build_context(_webrtc, track_id), WEBRTC_ERROR_INVALID_OPERATION,
"this function should be called within the track added callback");
ret = _set_display_to_sink(webrtc, track_id, WEBRTC_DISPLAY_TYPE_ECORE_WL, ecore_wl_window);
if (ret == WEBRTC_ERROR_NONE)
LOG_INFO("track_id[%u] type[%d] display[%p]", track_id, WEBRTC_DISPLAY_TYPE_ECORE_WL, ecore_wl_window);
- g_mutex_unlock(&_webrtc->mutex);
-
return ret;
}
int webrtc_add_media_source_internal(webrtc_h webrtc, webrtc_media_source_type_internal_e type, unsigned int *source_id)
{
int ret = WEBRTC_ERROR_NONE;
+ g_autoptr(GMutexLocker) locker = NULL;
webrtc_s *_webrtc = (webrtc_s*)webrtc;
RET_VAL_IF(_webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL");
RET_VAL_IF(source_id == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "source_id is NULL");
- g_mutex_lock(&_webrtc->mutex);
+ locker = g_mutex_locker_new(&_webrtc->mutex);
- RET_VAL_WITH_UNLOCK_IF(_webrtc->state != WEBRTC_STATE_IDLE, WEBRTC_ERROR_INVALID_STATE, &_webrtc->mutex, "the state should be IDLE");
+ RET_VAL_IF(_webrtc->state != WEBRTC_STATE_IDLE, WEBRTC_ERROR_INVALID_STATE, "the state should be IDLE");
ret = _add_media_source_internal(webrtc, type, source_id);
if (ret == WEBRTC_ERROR_NONE)
LOG_INFO("source_id[%u]", *source_id);
- g_mutex_unlock(&_webrtc->mutex);
-
return ret;
}
\ No newline at end of file
GstState gst_state_new = GST_STATE_VOID_PENDING;
GstState gst_state_pending = GST_STATE_VOID_PENDING;
gchar *state_transition_name = NULL;
+ g_autoptr(GMutexLocker) locker = NULL;
RET_VAL_IF(webrtc == NULL, FALSE, "webrtc is NULL");
RET_VAL_IF(webrtc->gst.pipeline == NULL, FALSE, "pipeline is NULL");
LOG_INFO("GST_MESSAGE_STATE_CHANGED: %s", state_transition_name);
g_free(state_transition_name);
- g_mutex_lock(&webrtc->mutex);
+ locker = g_mutex_locker_new(&webrtc->mutex);
if (webrtc->pend_state == webrtc->state) {
LOG_DEBUG("pend_state[%s] is same with current state", __state_str[webrtc->pend_state]);
- g_mutex_unlock(&webrtc->mutex);
break;
}
if (__meet_gst_state(webrtc->pend_state, gst_state_new, webrtc->negotiation_needed_cb_invoked)) {
webrtc_state_e old_state = webrtc->state;
webrtc->state = webrtc->pend_state;
- g_mutex_unlock(&webrtc->mutex);
+ g_clear_pointer(&locker, g_mutex_locker_free);
_invoke_state_changed_cb(webrtc, old_state, webrtc->state);
break;
}
-
- g_mutex_unlock(&webrtc->mutex);
break;
case GST_MESSAGE_ASYNC_DONE:
int _webrtc_stop(webrtc_s *webrtc)
{
int ret = WEBRTC_ERROR_NONE;
+ g_autoptr(GMutexLocker) locker = NULL;
RET_VAL_IF(webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL");
- g_mutex_lock(&webrtc->mutex);
+ locker = g_mutex_locker_new(&webrtc->mutex);
- RET_VAL_WITH_UNLOCK_IF(webrtc->state == WEBRTC_STATE_IDLE, WEBRTC_ERROR_INVALID_STATE, &webrtc->mutex, "the state should not be IDLE");
+ RET_VAL_IF(webrtc->state == WEBRTC_STATE_IDLE, WEBRTC_ERROR_INVALID_STATE, "the state should not be IDLE");
ret = _gst_pipeline_set_state(webrtc, GST_STATE_NULL);
- RET_VAL_WITH_UNLOCK_IF(ret != WEBRTC_ERROR_NONE, ret, &webrtc->mutex, "failed to _gst_pipeline_set_state()");
+ RET_VAL_IF(ret != WEBRTC_ERROR_NONE, ret, "failed to _gst_pipeline_set_state()");
#ifndef TIZEN_TV
ret = _release_all_resources(webrtc);
- RET_VAL_WITH_UNLOCK_IF(ret != WEBRTC_ERROR_NONE, ret, &webrtc->mutex, "failed to release all resources");
+ RET_VAL_IF(ret != WEBRTC_ERROR_NONE, ret, "failed to release all resources");
#endif
__destroy_sink_pipeline(webrtc);
LOG_INFO("webrtc[%p] is stopped", webrtc);
- g_mutex_unlock(&webrtc->mutex);
-
return ret;
}