webrtc, type, track_id, packet, data_ptr, user_data);
#ifdef TIZEN_FEATURE_ESPP
if (type == WEBRTC_MEDIA_TYPE_AUDIO && conn->encoded_audio_frame_cb_is_set) {
- if (_espp_prepare_and_start(conn, packet, type))
+ if (_espp_activate_and_prepare_async(conn, packet, type))
goto out;
- if (conn->render.espp.video_track_preparing) /* not ready for video track, skip submit packet */
+ if (!conn->render.espp.audio_ready_to_prepare)
goto out;
_espp_submit_packet(conn, packet, type);
} else if (type == WEBRTC_MEDIA_TYPE_VIDEO && conn->encoded_video_frame_cb_is_set) {
- if (_espp_prepare_and_start(conn, packet, type))
+ if (_espp_activate_and_prepare_async(conn, packet, type))
goto out;
- if (conn->render.espp.audio_track_preparing) /* not ready for audio track, skip submit packet */
+ if (!conn->render.espp.video_ready_to_prepare)
goto out;
_espp_submit_packet(conn, packet, type);
g_print("__espp_prepare_async_done_cb() is called, result[%u] conn[%p]\n", result, conn);
- g_cond_signal(&conn->render.espp.cond);
+ g_print("espp start\n");
+ esplusplayer_start(conn->render.espp.handle);
}
static void __espp_ready_to_prepare_cb(esplusplayer_stream_type type, void *user_data)
{
connection_s *conn = (connection_s *)user_data;
- g_print("__espp_ready_to_prepare_cb() is called, type[%u], conn[%p]\n", type, conn);
+ g_print("__espp_ready_to_prepare_cb() is called, stream_type[%u], conn[%p]\n", type, conn);
- g_cond_signal(&conn->render.espp.cond);
+ if (type == ESPLUSPLAYER_STREAM_TYPE_AUDIO)
+ conn->render.espp.audio_ready_to_prepare = true;
+ else
+ conn->render.espp.video_ready_to_prepare = true;
}
void _espp_init(int index)
!get_appdata()->conns[index].encoded_video_frame_cb_is_set)
return;
- g_mutex_init(&get_appdata()->conns[index].render.espp.mutex);
- g_cond_init(&get_appdata()->conns[index].render.espp.cond);
- get_appdata()->conns[index].render.espp.audio_track_preparing = true;
- get_appdata()->conns[index].render.espp.video_track_preparing = true;
+ get_appdata()->conns[index].render.espp.audio_track_activated = false;
+ get_appdata()->conns[index].render.espp.video_track_activated = false;
+ get_appdata()->conns[index].render.espp.audio_ready_to_prepare = false;
+ get_appdata()->conns[index].render.espp.video_ready_to_prepare = false;
g_print("espp create & open\n");
get_appdata()->conns[index].render.espp.handle = esplusplayer_create();
esplusplayer_destroy(get_appdata()->conns[index].render.espp.handle);
get_appdata()->conns[index].render.espp.handle = NULL;
- get_appdata()->conns[index].render.espp.audio_track_preparing = true;
- get_appdata()->conns[index].render.espp.video_track_preparing = true;
- g_mutex_clear(&get_appdata()->conns[index].render.espp.mutex);
- g_cond_clear(&get_appdata()->conns[index].render.espp.cond);
+ get_appdata()->conns[index].render.espp.audio_track_activated = false;
+ get_appdata()->conns[index].render.espp.video_track_activated = false;
+ get_appdata()->conns[index].render.espp.audio_ready_to_prepare = false;
+ get_appdata()->conns[index].render.espp.video_ready_to_prepare = false;
}
static int __convert_media_format_mime_to_espp_mime(media_format_mimetype_e type)
{ __espp_update_video_info, ESPLUSPLAYER_STREAM_TYPE_VIDEO, (void *)esplusplayer_set_video_stream_info }
};
-bool _espp_prepare_and_start(connection_s *conn, media_packet_h packet, webrtc_media_type_e type)
+bool _espp_activate_and_prepare_async(connection_s *conn, media_packet_h packet, webrtc_media_type_e type)
{
bool is_audio = (type == WEBRTC_MEDIA_TYPE_AUDIO) ? true : false;
- bool *espp_track_preparing = is_audio ? &conn->render.espp.audio_track_preparing : &conn->render.espp.video_track_preparing;
- bool *espp_track_preparing_oppsite = is_audio ? &conn->render.espp.video_track_preparing : &conn->render.espp.audio_track_preparing;
+ bool *track_activated = is_audio ? &conn->render.espp.audio_track_activated : &conn->render.espp.video_track_activated;
+ bool *opposite_track_activated = is_audio ? &conn->render.espp.video_track_activated : &conn->render.espp.audio_track_activated;
bool *opposite_type_exist = is_audio ? &conn->encoded_video_frame_cb_is_set : &conn->encoded_audio_frame_cb_is_set;
if (!conn)
g_printerr("render.espp.handle is NULL\n");
return false;
}
- if (!(*espp_track_preparing))
+ if (*track_activated)
return false;
/* Get format and set espp audiostream & prepare async */
espp_infos[type].set_stream_info_func(conn->render.espp.handle, is_audio ?
(void *)&conn->render.espp.audio_info :
(void *)&conn->render.espp.video_info);
+
+ g_print("espp activate stream_type[%u]\n", espp_infos[type].stream_type);
esplusplayer_activate(conn->render.espp.handle, espp_infos[type].stream_type);
+ *track_activated = true;
- if (!*opposite_type_exist || !(*espp_track_preparing_oppsite)) {
+ if (!*opposite_type_exist || *opposite_track_activated) {
g_print("espp prepare async\n");
esplusplayer_prepare_async(conn->render.espp.handle);
-
- g_mutex_lock(&conn->render.espp.mutex);
- g_cond_wait(&conn->render.espp.cond, &conn->render.espp.mutex); /* wait for ready to prepare cb */
- g_mutex_unlock(&conn->render.espp.mutex);
-
- _espp_submit_packet(conn, packet, type);
-
- g_mutex_lock(&conn->render.espp.mutex);
- g_cond_wait(&conn->render.espp.cond, &conn->render.espp.mutex); /* wait for prepare async done cb */
- g_mutex_unlock(&conn->render.espp.mutex);
-
- g_print("espp start\n");
- esplusplayer_start(conn->render.espp.handle);
}
- *espp_track_preparing = false;
-
return true;
}
esplusplayer_handle handle;
esplusplayer_audio_stream_info audio_info;
esplusplayer_video_stream_info video_info;
- bool audio_track_preparing;
- bool video_track_preparing;
- GCond cond;
- GMutex mutex;
+ bool audio_track_activated;
+ bool video_track_activated;
+ bool audio_ready_to_prepare;
+ bool video_ready_to_prepare;
} espp;
#endif
} render;
void _espp_init(int index);
void _espp_deinit(int index);
void _espp_submit_packet(connection_s *conn, media_packet_h packet, webrtc_media_type_e type);
-bool _espp_prepare_and_start(connection_s *conn, media_packet_h packet, webrtc_media_type_e type);
+bool _espp_activate_and_prepare_async(connection_s *conn, media_packet_h packet, webrtc_media_type_e type);
#endif
void _render_text_message(void **eo, int i, const char *text);
void _app_start(int *argc, char **argv);