*/
int ms_set_state(media_streamer_s *ms_streamer, media_streamer_state_e state);
-void ms_update_state_from_pend_state(media_streamer_s *ms_streamer);
+void ms_trigger_state_cb(media_streamer_s *ms_streamer, media_streamer_state_e old_state);
#ifdef __cplusplus
}
Name: capi-media-streamer
Summary: A Media Streamer API
-Version: 0.1.125
+Version: 0.1.126
Release: 0
Group: Multimedia/API
License: Apache-2.0
GstState gst_state_old = GST_STATE_VOID_PENDING;
GstState gst_state_new = GST_STATE_VOID_PENDING;
GstState gst_state_pending = GST_STATE_VOID_PENDING;
+ media_streamer_state_e old_state;
ms_streamer = (media_streamer_s *) userdata;
ms_retvm_if(ms_streamer == NULL, FALSE, "Handle is NULL");
if (gst_state_new < GST_STATE_PAUSED)
break;
+ g_mutex_lock(&ms_streamer->mutex_lock);
+
if (ms_streamer->pend_state == ms_streamer->state) {
ms_info("pend_state(%d) is same with current state(%d), skip triggering callback.",
ms_streamer->pend_state, ms_streamer->state);
+ g_mutex_unlock(&ms_streamer->mutex_lock);
break;
}
if(__ms_skip_set_state(ms_streamer)) {
ms_info("Skip set state, state is set after connecting ICE connection.");
+ g_mutex_unlock(&ms_streamer->mutex_lock);
break;
}
- ms_update_state_from_pend_state(ms_streamer);
+ old_state = ms_streamer->state;
+ ms_streamer->state = ms_streamer->pend_state;
+
+ g_mutex_unlock(&ms_streamer->mutex_lock);
+
+ ms_trigger_state_cb(ms_streamer, old_state);
break;
case GST_MESSAGE_ASYNC_DONE:
ms_info("ICE connection state changed to [%s]", new_state);
+ g_mutex_lock(&ms_streamer->mutex_lock);
if (ice_connection_state == GST_WEBRTC_ICE_CONNECTION_STATE_CONNECTED &&
- ms_streamer->pend_state == MEDIA_STREAMER_STATE_READY)
- ms_update_state_from_pend_state(ms_streamer);
+ ms_streamer->pend_state == MEDIA_STREAMER_STATE_READY) {
+ media_streamer_state_e old_state = ms_streamer->state;
+ ms_streamer->state = ms_streamer->pend_state;
+ g_mutex_unlock(&ms_streamer->mutex_lock);
+
+ ms_trigger_state_cb(ms_streamer, old_state);
+ return;
+ }
+ g_mutex_unlock(&ms_streamer->mutex_lock);
}
static int __ms_acquire_resources(media_streamer_s *ms_streamer);
static int __ms_release_resources(media_streamer_s *ms_streamer);
-void ms_update_state_from_pend_state(media_streamer_s *ms_streamer)
+void ms_trigger_state_cb(media_streamer_s *ms_streamer, media_streamer_state_e old_state)
{
- GstState old_state;
-
ms_retm_if(ms_streamer == NULL, "ms_streamer is NULL");
- g_mutex_lock(&ms_streamer->mutex_lock);
-
- old_state = ms_streamer->state;
- ms_streamer->state = ms_streamer->pend_state;
ms_info("Media streamer state changed [%d] -> [%d]", old_state, ms_streamer->state);
- g_mutex_unlock(&ms_streamer->mutex_lock);
-
if (ms_streamer->state_changed_cb.callback) {
ms_debug(">>> state changed callback(%p) START", ms_streamer->state_changed_cb.callback);