result = _mmplayer_destroy(player);
+ MMPLAYER_CMD_UNLOCK(player);
+
+ /* to make sure unlocked.
+ @see __mmplayer_gst_callback, GST_MESSAGE_BUFFERING handling */
+ MMPLAYER_CMD_LOCK(player);
MMPLAYER_CMD_UNLOCK( player );
g_mutex_clear(&((mm_player_t*)player)->cmd_lock);
MMMessageParamType msg_param = {0, };
int bRet = MM_ERROR_NONE;
- if (!MMPLAYER_IS_STREAMING(player))
+ if (!(player->pipeline && player->pipeline->mainbin)) {
+ LOGE("player pipeline handle is null");
break;
+ }
- /* ignore the prev buffering message */
- if ((player->streamer) && (player->streamer->is_buffering == FALSE) && (player->streamer->is_buffering_done == TRUE)) {
- gint buffer_percent = 0;
-
- gst_message_parse_buffering(msg, &buffer_percent);
-
- if (buffer_percent == MAX_BUFFER_PERCENT) {
- LOGD("Ignored all the previous buffering msg!(got %d%%)\n", buffer_percent);
- player->streamer->is_buffering_done = FALSE;
- }
-
+ if (!MMPLAYER_IS_STREAMING(player))
break;
- }
if (player->pd_mode == MM_PLAYER_PD_MODE_URI) {
if (!MMPLAYER_CMD_TRYLOCK(player)) {
}
} else {
MMPLAYER_CMD_LOCK(player);
+ if (!player->pipeline) { /* during destroy, msg can be delivered. */
+ LOGE("pipeline is destroyed.");
+ MMPLAYER_CMD_UNLOCK(player);
+ break;
+ }
+ }
+
+ /* ignore the prev buffering message */
+ if ((player->streamer) && (player->streamer->is_buffering == FALSE)
+ && (player->streamer->is_buffering_done == TRUE)) {
+ gint buffer_percent = 0;
+
+ gst_message_parse_buffering(msg, &buffer_percent);
+
+ if (buffer_percent == MAX_BUFFER_PERCENT) {
+ LOGD("Ignored all the previous buffering msg!(got %d%%)\n", buffer_percent);
+ player->streamer->is_buffering_done = FALSE;
+ }
+ MMPLAYER_CMD_UNLOCK(player);
+ break;
}
__mmplayer_update_buffer_setting(player, msg);