[v0.3.25]resolve web TCT failure issue 14/90214/1 accepted/tizen/3.0/ivi/20161011.062159 accepted/tizen/common/20160929.162936 accepted/tizen/ivi/20160930.040731 accepted/tizen/mobile/20160930.040355 accepted/tizen/tv/20160930.040542 accepted/tizen/wearable/20160930.040641 submit/tizen/20160928.043825 submit/tizen_3.0_ivi/20161010.000006
authorEunhae Choi <eunhae1.choi@samsung.com>
Thu, 29 Sep 2016 04:34:56 +0000 (13:34 +0900)
committerEunhae Choi <eunhae1.choi@samsung.com>
Thu, 29 Sep 2016 04:35:23 +0000 (13:35 +0900)
Change-Id: I387ff61ae8b73b9dd748d296aa6c2e614e0224bc

include/player_private.h
packaging/capi-media-player.spec
src/player.c

index 24beb65..7aebbe8 100644 (file)
@@ -106,7 +106,7 @@ typedef struct _callback_cb_info {
        media_format_h pkt_fmt;
        void *evas_info;
        tbm_bufmgr bufmgr;
-       tbm_fd tfd;
+       tbm_fd tfd; /* for player_get_album_art*/
        GList *tsurf_list; /* player_tsurf_info_t */
        int video_frame_pool_size;
        bool use_tsurf_pool;
index 085457f..b7be8df 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-player
 Summary:    A Media Player API
-Version:    0.3.24
+Version:    0.3.25
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index dfc8aae..1938623 100644 (file)
 #define INVALID_DEFAULT_VALUE -1
 
 typedef struct {
+       tbm_fd tfd;
+       char* buffer;
+} _player_recv_data;
+
+typedef struct {
        int int_data;
-       char *buf;
        callback_cb_info_s *cb_info;
+       _player_recv_data *recv_data;
        GMutex event_mutex;
 } _player_cb_data;
 
@@ -288,13 +293,13 @@ static void _del_mem(player_cli_s * player)
        }
 }
 
-static int player_recv_msg(callback_cb_info_s * cb_info)
+static int player_recv_msg(callback_cb_info_s * cb_info, tbm_fd *tfd)
 {
        int recvLen = 0;
        msg_buff_s *buff = &cb_info->buff;
 
        memset(buff->recvMsg, 0x00, sizeof(char)*buff->bufLen);
-       recvLen = muse_core_ipc_recv_fd_msg(cb_info->fd, buff->recvMsg, &cb_info->tfd);
+       recvLen = muse_core_ipc_recv_fd_msg(cb_info->fd, buff->recvMsg, tfd);
 
        /* check the first msg */
        if (buff->part_of_msg && buff->recvMsg[0] != '{')
@@ -407,7 +412,7 @@ static int __unset_callback(muse_player_event_e type, player_h player)
        return ret;
 }
 
-static void __prepare_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __prepare_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        muse_player_event_e ev = MUSE_PLAYER_EVENT_TYPE_PREPARE;
 
@@ -416,7 +421,7 @@ static void __prepare_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
        set_null_user_cb(cb_info, ev);
 }
 
-static void __complete_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __complete_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        muse_player_event_e ev = MUSE_PLAYER_EVENT_TYPE_COMPLETE;
        ((player_completed_cb) cb_info->user_cb[ev]) (cb_info->user_data[ev]);
@@ -447,12 +452,12 @@ static char* _convert_code_to_str(int code)
        }
 }
 
-static void __interrupt_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __interrupt_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        int code;
        muse_player_event_e ev = MUSE_PLAYER_EVENT_TYPE_INTERRUPT;
 
-       if (player_msg_get(code, recvMsg)) {
+       if (player_msg_get(code, recv_data->buffer)) {
 
                if (code >= PLAYER_INTERRUPTED_COMPLETED &&
                        code <= PLAYER_INTERRUPTED_BY_NOTIFICATION &&
@@ -464,37 +469,37 @@ static void __interrupt_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
        }
 }
 
-static void __error_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __error_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        int code;
        muse_player_event_e ev = MUSE_PLAYER_EVENT_TYPE_ERROR;
 
-       if (player_msg_get(code, recvMsg))
+       if (player_msg_get(code, recv_data->buffer))
                ((player_error_cb) cb_info->user_cb[ev]) (code, cb_info->user_data[ev]);
 }
 
-static void __buffering_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __buffering_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        int percent;
        muse_player_event_e ev = MUSE_PLAYER_EVENT_TYPE_BUFFERING;
 
-       if (player_msg_get(percent, recvMsg))
+       if (player_msg_get(percent, recv_data->buffer))
                ((player_buffering_cb) cb_info->user_cb[ev]) (percent, cb_info->user_data[ev]);
 }
 
-static void __subtitle_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __subtitle_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        int duration = 0;
        char text[MUSE_URI_MAX_LENGTH] = { 0, };
        muse_player_event_e ev = MUSE_PLAYER_EVENT_TYPE_SUBTITLE;
        bool ret = TRUE;
 
-       player_msg_get1_string(recvMsg, duration, INT, text, ret);
+       player_msg_get1_string(recv_data->buffer, duration, INT, text, ret);
        if (ret)
                ((player_subtitle_updated_cb) cb_info->user_cb[ev]) (duration, text, cb_info->user_data[ev]);
 }
 
-static void __capture_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __capture_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        unsigned char *data = NULL;
        int width = 0;
@@ -505,14 +510,14 @@ static void __capture_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
        int key = INVALID_DEFAULT_VALUE;
        bool ret_val = TRUE;
 
-       player_msg_get4(recvMsg, width, INT, height, INT, size, INT, key, INT, ret_val);
+       player_msg_get4(recv_data->buffer, width, INT, height, INT, size, INT, key, INT, ret_val);
        if (ret_val) {
-               if (cb_info->tfd < 0) {
+               if (recv_data->tfd < 0) {
                        LOGE("There is no valid tbm_fd");
                        goto EXIT;
                }
 
-               bo = tbm_bo_import_fd(cb_info->bufmgr, cb_info->tfd);
+               bo = tbm_bo_import_fd(cb_info->bufmgr, recv_data->tfd);
                if (bo == NULL) {
                        LOGE("TBM get error : bo is NULL");
                        goto EXIT;
@@ -534,9 +539,9 @@ static void __capture_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
        }
 
 EXIT:
-       if (cb_info->tfd > INVALID_DEFAULT_VALUE)
-               close(cb_info->tfd);
-       cb_info->tfd = INVALID_DEFAULT_VALUE;
+       if (recv_data->tfd > INVALID_DEFAULT_VALUE)
+               close(recv_data->tfd);
+       recv_data->tfd = INVALID_DEFAULT_VALUE;
 
        if (bo)
                tbm_bo_unref(bo);
@@ -550,7 +555,7 @@ EXIT:
        set_null_user_cb(cb_info, MUSE_PLAYER_EVENT_TYPE_CAPTURE);
 }
 
-static void __seek_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __seek_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        muse_player_event_e ev = MUSE_PLAYER_EVENT_TYPE_SEEK;
 
@@ -625,7 +630,7 @@ static player_tsurf_info_t* __player_get_tsurf_from_list(callback_cb_info_s * cb
        return NULL;
 }
 
-static void __media_packet_video_frame_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __media_packet_video_frame_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        tbm_bo bo[4] = { NULL, };
        tbm_key key[4] = { 0, };
@@ -644,7 +649,7 @@ static void __media_packet_video_frame_cb_handler(callback_cb_info_s * cb_info,
        int i = 0;
        muse_core_msg_parse_err_e err = MUSE_MSG_PARSE_ERROR_NONE;
 
-       void *jobj = muse_core_msg_json_object_new(recvMsg, NULL, &err);
+       void *jobj = muse_core_msg_json_object_new(recv_data->buffer, NULL, &err);
        if (!jobj ||
                !muse_core_msg_json_object_get_value("key[0]", jobj, &key[0], MUSE_TYPE_ANY) ||
                !muse_core_msg_json_object_get_value("key[1]", jobj, &key[1], MUSE_TYPE_ANY) ||
@@ -795,26 +800,26 @@ ERROR:
        return;
 }
 
-static void __audio_frame_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __audio_frame_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        tbm_bo bo = NULL;
        tbm_bo_handle thandle;
        int key = INVALID_DEFAULT_VALUE;
        player_audio_raw_data_s audio;
 
-       if (!player_msg_get(key, recvMsg)) {
+       if (!player_msg_get(key, recv_data->buffer)) {
                LOGE("failed to get key value from msg.");
                return;
        }
 
-       if (cb_info->tfd < 0) {
+       if (recv_data->tfd < 0) {
                LOGE("failed to get tbm_fd(key:%d)", key);
                goto EXIT;
        }
 
-       bo = tbm_bo_import_fd(cb_info->bufmgr, cb_info->tfd);
+       bo = tbm_bo_import_fd(cb_info->bufmgr, recv_data->tfd);
        if (bo == NULL) {
-               LOGE("TBM get error : bo is NULL, tbm_fd:%d(key:%d)", cb_info->tfd, key);
+               LOGE("TBM get error : bo is NULL, tbm_fd:%d(key:%d)", recv_data->tfd, key);
                goto EXIT;
        }
 
@@ -832,9 +837,9 @@ static void __audio_frame_cb_handler(callback_cb_info_s * cb_info, char *recvMsg
        tbm_bo_unmap(bo);
 
 EXIT:
-       if (cb_info->tfd > INVALID_DEFAULT_VALUE)
-               close(cb_info->tfd);
-       cb_info->tfd = INVALID_DEFAULT_VALUE;
+       if (recv_data->tfd > INVALID_DEFAULT_VALUE)
+               close(recv_data->tfd);
+       recv_data->tfd = INVALID_DEFAULT_VALUE;
 
        if (bo)
                tbm_bo_unref(bo);
@@ -846,48 +851,48 @@ EXIT:
        }
 }
 
-static void __video_frame_render_error_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __video_frame_render_error_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
 }
 
-static void __pd_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __pd_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        int type;
        muse_player_event_e ev = MUSE_PLAYER_EVENT_TYPE_PD;
 
-       if (player_msg_get(type, recvMsg))
+       if (player_msg_get(type, recv_data->buffer))
                ((player_pd_message_cb) cb_info->user_cb[ev]) (type, cb_info->user_data[ev]);
 }
 
-static void __supported_audio_effect_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __supported_audio_effect_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
 }
 
-static void __supported_audio_effect_freset_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __supported_audio_effect_freset_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
 }
 
-static void __missed_plugin_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __missed_plugin_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
 }
 
-static void __media_stream_video_buffer_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __media_stream_video_buffer_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        /* player_media_stream_buffer_status_e status; */
        int status;
 
-       if (player_msg_get(status, recvMsg)) {
+       if (player_msg_get(status, recv_data->buffer)) {
                ((player_media_stream_buffer_status_cb)
                 cb_info->user_cb[MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS]) ((player_media_stream_buffer_status_e) status, cb_info->user_data[MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS]);
        }
 }
 
-static void __media_stream_audio_buffer_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __media_stream_audio_buffer_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        /* player_media_stream_buffer_status_e status; */
        int status;
 
-       if (player_msg_get(status, recvMsg)) {
+       if (player_msg_get(status, recv_data->buffer)) {
                ((player_media_stream_buffer_status_cb)
                        cb_info->user_cb[MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS])
                        ((player_media_stream_buffer_status_e) status, cb_info->user_data[MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS]);
@@ -895,14 +900,14 @@ static void __media_stream_audio_buffer_cb_handler(callback_cb_info_s * cb_info,
 
 }
 
-static void __media_stream_video_buffer_cb_handler_ex(callback_cb_info_s * cb_info, char *recvMsg)
+static void __media_stream_video_buffer_cb_handler_ex(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        /* player_media_stream_buffer_status_e status; */
        int status;
        unsigned long long bytes;
        bool ret = TRUE;
 
-       player_msg_get2(recvMsg, status, INT, bytes, INT64, ret);
+       player_msg_get2(recv_data->buffer, status, INT, bytes, INT64, ret);
        if (ret == TRUE) {
                ((player_media_stream_buffer_status_cb_ex)
                        cb_info->user_cb[MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_BUFFER_STATUS_WITH_INFO])
@@ -910,14 +915,14 @@ static void __media_stream_video_buffer_cb_handler_ex(callback_cb_info_s * cb_in
        }
 }
 
-static void __media_stream_audio_buffer_cb_handler_ex(callback_cb_info_s * cb_info, char *recvMsg)
+static void __media_stream_audio_buffer_cb_handler_ex(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        /* player_media_stream_buffer_status_e status; */
        int status;
        unsigned long long bytes;
        bool ret = TRUE;
 
-       player_msg_get2(recvMsg, status, INT, bytes, INT64, ret);
+       player_msg_get2(recv_data->buffer, status, INT, bytes, INT64, ret);
        if (ret == TRUE) {
                ((player_media_stream_buffer_status_cb_ex)
                        cb_info->user_cb[MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_BUFFER_STATUS_WITH_INFO])
@@ -926,29 +931,29 @@ static void __media_stream_audio_buffer_cb_handler_ex(callback_cb_info_s * cb_in
 
 }
 
-static void __media_stream_video_seek_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __media_stream_video_seek_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        unsigned long long offset;
 
-       if (player_msg_get_type(offset, recvMsg, INT64)) {
+       if (player_msg_get_type(offset, recv_data->buffer, INT64)) {
                ((player_media_stream_seek_cb)
                        cb_info->user_cb[MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_SEEK])
                        (offset, cb_info->user_data[MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_VIDEO_SEEK]);
        }
 }
 
-static void __media_stream_audio_seek_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __media_stream_audio_seek_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        unsigned long long offset;
 
-       if (player_msg_get_type(offset, recvMsg, INT64)) {
+       if (player_msg_get_type(offset, recv_data->buffer, INT64)) {
                ((player_media_stream_seek_cb)
                        cb_info->user_cb[MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_SEEK])
                        (offset, cb_info->user_data[MUSE_PLAYER_EVENT_TYPE_MEDIA_STREAM_AUDIO_SEEK]);
        }
 }
 
-static void __video_stream_changed_cb_handler(callback_cb_info_s * cb_info, char *recvMsg)
+static void __video_stream_changed_cb_handler(callback_cb_info_s * cb_info, _player_recv_data *recv_data)
 {
        int width;
        int height;
@@ -956,14 +961,14 @@ static void __video_stream_changed_cb_handler(callback_cb_info_s * cb_info, char
        int bit_rate;
        bool ret_val = TRUE;
 
-       player_msg_get4(recvMsg, width, INT, height, INT, fps, INT, bit_rate, INT, ret_val);
+       player_msg_get4(recv_data->buffer, width, INT, height, INT, fps, INT, bit_rate, INT, ret_val);
        if (ret_val) {
                ((player_video_stream_changed_cb) cb_info->user_cb[MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED])
                        (width, height, fps, bit_rate, cb_info->user_data[MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED]);
        }
 }
 
-static void (*_user_callbacks[MUSE_PLAYER_EVENT_TYPE_NUM]) (callback_cb_info_s * cb_info, char *recvMsg) = {
+static void (*_user_callbacks[MUSE_PLAYER_EVENT_TYPE_NUM]) (callback_cb_info_s * cb_info, _player_recv_data *recv_data) = {
        __prepare_cb_handler,           /* MUSE_PLAYER_EVENT_TYPE_PREPARE */
        __complete_cb_handler,  /* MUSE_PLAYER_EVENT_TYPE_COMPLETE */
        __interrupt_cb_handler, /* MUSE_PLAYER_EVENT_TYPE_INTERRUPT */
@@ -1016,7 +1021,7 @@ gboolean _player_event_job_function(void *user_data)
        g_mutex_unlock(&data->cb_info->event_queue.idle_ev_mutex);
 
        if (data->cb_info->user_cb[ev])
-               _user_callbacks[ev] (data->cb_info, data->buf);
+               _user_callbacks[ev] (data->cb_info, data->recv_data);
        else
                LOGW("user callback is unset. type : %d", ev);
 
@@ -1024,7 +1029,8 @@ gboolean _player_event_job_function(void *user_data)
        g_mutex_unlock(&data->event_mutex);
        g_mutex_clear(&data->event_mutex);
 
-       g_free(data->buf);
+       g_free(data->recv_data->buffer);
+       g_free(data->recv_data);
        g_free(data);
 
        return FALSE; /* remove from the event list */
@@ -1196,7 +1202,8 @@ static void _player_event_queue_destroy(callback_cb_info_s * cb_info)
        while (!g_queue_is_empty(ev->queue)) {
                event_data = (_player_cb_data *) g_queue_pop_head(ev->queue);
                if (event_data) {
-                       g_free(event_data->buf);
+                       g_free(event_data->recv_data->buffer);
+                       g_free(event_data->recv_data);
                        g_free(event_data);
                }
        }
@@ -1220,7 +1227,8 @@ static void _player_event_queue_remove(player_event_queue * ev_queue, int ev)
 
                if (cb_data && cb_data->int_data == ev) {
                        LOGD("removing '%p (ev:%d)' from event queue", cb_data, cb_data->int_data);
-                       g_free(cb_data->buf);
+                       g_free(cb_data->recv_data->buffer);
+                       g_free(cb_data->recv_data);
                        g_free(cb_data);
 
                        g_queue_delete_link(ev_queue->queue, item);
@@ -1240,7 +1248,7 @@ static void _player_event_queue_add(player_event_queue * ev, _player_cb_data * d
        }
 }
 
-static void _user_callback_handler(callback_cb_info_s * cb_info, muse_player_event_e event, char *buffer)
+static void _user_callback_handler(callback_cb_info_s * cb_info, muse_player_event_e event, _player_recv_data *recv_data)
 {
        LOGD("get event %d", event);
 
@@ -1254,7 +1262,7 @@ static void _user_callback_handler(callback_cb_info_s * cb_info, muse_player_eve
                        }
                        data->int_data = (int)event;
                        data->cb_info = cb_info;
-                       data->buf = buffer;
+                       data->recv_data = recv_data;
                        g_mutex_init(&data->event_mutex);
                        _player_event_queue_add(&cb_info->event_queue, data);
                }
@@ -1318,12 +1326,13 @@ static void *client_cb_handler(gpointer data)
        callback_cb_info_s *cb_info = data;
        char *recvMsg = NULL;
        muse_core_msg_parse_err_e err;
+       tbm_fd tfd = INVALID_DEFAULT_VALUE;
 
        while (g_atomic_int_get(&cb_info->running)) {
                len = 0;
                err = MUSE_MSG_PARSE_ERROR_NONE;
 
-               len = player_recv_msg(cb_info);
+               len = player_recv_msg(cb_info, &tfd);
                if (len <= 0)
                        break;
 
@@ -1344,18 +1353,31 @@ static void *client_cb_handler(gpointer data)
                                                g_mutex_lock(&cb_info->player_mutex);
                                                cb_info->buff.recved++;
                                                _add_ret_msg(api, cb_info, offset, parse_len);
+                                               if (api == MUSE_PLAYER_API_GET_ALBUM_ART && tfd != INVALID_DEFAULT_VALUE) {
+                                                       LOGD("get tbm fd for album art.");
+                                                       cb_info->tfd = tfd;
+                                               }
                                                g_cond_signal(&cb_info->player_cond[api]);
                                                g_mutex_unlock(&cb_info->player_mutex);
                                                if (api == MUSE_PLAYER_API_DESTROY)
                                                        g_atomic_int_set(&cb_info->running, 0);
                                        } else if (api == MUSE_PLAYER_CB_EVENT) {
                                                int event;
-                                               char *buffer;
+                                               _player_recv_data *recv_data = NULL;
                                                g_mutex_lock(&cb_info->player_mutex);
-                                               buffer = strndup(recvMsg + offset, parse_len);
+                                               recv_data = g_new0(_player_recv_data, 1);
+                                               if (recv_data != NULL) {
+                                                       recv_data->tfd = tfd;
+                                                       recv_data->buffer = strndup(recvMsg+offset, parse_len);
+                                               } else {
+                                                       LOGE("failed to alloc recv_data.");
+                                                       g_mutex_unlock(&cb_info->player_mutex);
+                                                       muse_core_msg_json_object_free(jobj);
+                                                       break;
+                                               }
                                                g_mutex_unlock(&cb_info->player_mutex);
                                                if (muse_core_msg_json_object_get_value("event", jobj, &event, MUSE_TYPE_INT))
-                                                       _user_callback_handler(cb_info, event, buffer);
+                                                       _user_callback_handler(cb_info, event, recv_data);
                                        } else if (api == MUSE_PLAYER_CB_CREATE_ACK) {
                                                g_mutex_lock(&cb_info->player_mutex);
                                                cb_info->buff.recved++;