RET_VAL_IF(y < 0, WEBRTC_ERROR_INVALID_PARAMETER, "y < 0");
RET_VAL_IF(width == 0, WEBRTC_ERROR_INVALID_PARAMETER, "width is 0");
RET_VAL_IF(height == 0, WEBRTC_ERROR_INVALID_PARAMETER, "height is 0");
- RET_VAL_IF(_webrtc->state == WEBRTC_STATE_IDLE, WEBRTC_ERROR_INVALID_STATE, "the state should not be IDLE");
- RET_ERR_IF_PRIVILEGE_IS_NOT_ALLOWED(_WEBRTC_PRIVILEGE_PLATFORM);
locker = g_mutex_locker_new(&_webrtc->mutex);
+ RET_VAL_IF(_webrtc->state == WEBRTC_STATE_IDLE, WEBRTC_ERROR_INVALID_STATE, "the state should not be IDLE");
+ RET_ERR_IF_PRIVILEGE_IS_NOT_ALLOWED(_WEBRTC_PRIVILEGE_PLATFORM);
+
#ifdef TIZEN_FEATURE_UI
return _set_screen_source_crop(_webrtc, source_id, x, y, width, height);
#else
RET_VAL_IF(_webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL");
RET_VAL_IF(source_id == 0, WEBRTC_ERROR_INVALID_PARAMETER, "source_id is 0");
- RET_VAL_IF(_webrtc->state == WEBRTC_STATE_IDLE, WEBRTC_ERROR_INVALID_STATE, "the state should not be IDLE");
- RET_ERR_IF_PRIVILEGE_IS_NOT_ALLOWED(_WEBRTC_PRIVILEGE_PLATFORM);
locker = g_mutex_locker_new(&_webrtc->mutex);
+ RET_VAL_IF(_webrtc->state == WEBRTC_STATE_IDLE, WEBRTC_ERROR_INVALID_STATE, "the state should not be IDLE");
+ RET_ERR_IF_PRIVILEGE_IS_NOT_ALLOWED(_WEBRTC_PRIVILEGE_PLATFORM);
+
#ifdef TIZEN_FEATURE_UI
return _unset_screen_source_crop(_webrtc, source_id);
#else
webrtc_s *webrtc = (webrtc_s *)user_data;
gchar *media_type = NULL;
bool is_audio;
+ g_autoptr(GMutexLocker) locker = NULL;
RET_IF(webrtc == NULL, "webrtc is NULL");
if (GST_PAD_DIRECTION(new_pad) != GST_PAD_SRC)
return;
+ locker = g_mutex_locker_new(&webrtc->mutex);
+
RET_IF(webrtc->pend_state == WEBRTC_STATE_IDLE, "pend_state is IDLE, skip it");
LOG_INFO("new pad[%s] is added", GST_PAD_NAME(new_pad));
is_audio = _is_audio_media_type(media_type);
g_free(media_type);
+ /* NOTE: Unlock the mutex here before calling track added user callback */
+ g_clear_pointer(&locker, g_mutex_locker_free);
+
if ((!is_audio && webrtc->encoded_video_frame_cb.callback) ||
(is_audio && webrtc->encoded_audio_frame_cb.callback)) {
ret = _add_forwarding_sink_bin(webrtc, new_pad, is_audio);
static gboolean __get_stats_periodically(gpointer user_data)
{
webrtc_s *webrtc = (webrtc_s *)user_data;
+ g_autoptr(GMutexLocker) locker = NULL;
+
+ RET_VAL_IF(webrtc == NULL, G_SOURCE_REMOVE, "webrtc is NULL");
+
+ locker = g_mutex_locker_new(&webrtc->mutex);
if (webrtc->state == WEBRTC_STATE_PLAYING)
_webrtcbin_foreach_stats(webrtc, WEBRTC_STATS_TYPE_GST_ALL, NULL, NULL);