if (PLAYER_ERROR_NOT_SUPPORTED_FILE == err_code && handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
LOGW("failed to pause, so prepare cb will be released soon");
handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
- handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
+ if (handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
+ g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
+ handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
+ }
}
break;
case MM_MESSAGE_STATE_CHANGED: /* 0x03 */
player_s *handle = (player_s *)player;
__ADD_MESSAGE(handle, PLAYER_MESSAGE_LOOP_EXIT);
+
__RELEASEIF_PREPARE_THREAD(handle->prepare_async_thread);
__RELEASEIF_MESSAGE_THREAD(handle->message_thread);
+ if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
+ handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
+ if (handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
+ g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
+ handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
+ }
+ }
+
int ret = mm_player_destroy(handle->mm_handle);
if (handle->pkt_fmt) {
LOGW("[%s] Failed to set display surface type 'MM_DISPLAY_SURFACE_NULL' (0x%x)", __FUNCTION__, ret);
} else {
ret = mm_player_get_attribute(handle->mm_handle, NULL, "display_visible", &visible, (char *)NULL);
- if (ret != MM_ERROR_NONE)
- return __player_convert_error_code(ret, (char *)__FUNCTION__);
+ if (ret != MM_ERROR_NONE) goto ERROR;
if (!visible)
value = FALSE;
value = TRUE;
ret = mm_player_set_attribute(handle->mm_handle, NULL, "display_visible", value, (char *)NULL);
- if (ret != MM_ERROR_NONE)
- return __player_convert_error_code(ret, (char *)__FUNCTION__);
+ if (ret != MM_ERROR_NONE) goto ERROR;
}
ret = mm_player_realize(handle->mm_handle);
if (ret != MM_ERROR_NONE) {
LOGE("[%s] Failed to realize - 0x%x", __FUNCTION__, ret);
- LOGW("prepare cb will be released soon");
- if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
- handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
- handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
- }
- return __player_convert_error_code(ret, (char *)__FUNCTION__);
+ goto ERROR;
}
if (!handle->is_progressive_download) {
if (ret != 0) {
LOGE("[%s] failed to create thread ret = %d", __FUNCTION__, ret);
+ if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
+ handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
+ /* user_data will be free at player_disp_prepare_async() */
+ handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
+ }
return PLAYER_ERROR_OUT_OF_MEMORY;
}
}
LOGI("[%s] End", __FUNCTION__);
return PLAYER_ERROR_NONE;
+
+ERROR:
+ LOGW("prepare cb is released");
+ if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
+ handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
+ /* user_data will be free at player_disp_prepare_async() */
+ handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
+ }
+
+ LOGE("LEAVE mm_err:0x%X", ret);
+ return __player_convert_error_code(ret, (char *)__FUNCTION__);
}
int legacy_player_prepare(player_h player)
handle->user_data[MUSE_PLAYER_EVENT_TYPE_SEEK] = NULL;
}
- if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
- handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
- handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
- }
-
if (!__player_state_validate(handle, PLAYER_STATE_READY)) {
LOGE("[%s] PLAYER_ERROR_INVALID_STATE(0x%08x) : current state - %d", __FUNCTION__, PLAYER_ERROR_INVALID_STATE, handle->state);
return PLAYER_ERROR_INVALID_STATE;
}
+ if (handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
+ LOGW("Need to check. prepare cb have to be reset before");
+ handle->user_cb[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
+ if (handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]) {
+ g_free(handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE]);
+ handle->user_data[MUSE_PLAYER_EVENT_TYPE_PREPARE] = NULL;
+ }
+ }
+
__RELEASEIF_PREPARE_THREAD(handle->prepare_async_thread);
int ret = mm_player_unrealize(handle->mm_handle);