[0.2.133] Flush export media_packet when the interrupt started 85/247485/2 accepted/tizen/unified/20201113.130845 submit/tizen/20201112.022411
authorGilbok Lee <gilbok.lee@samsung.com>
Wed, 11 Nov 2020 06:24:12 +0000 (15:24 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Wed, 11 Nov 2020 07:54:00 +0000 (16:54 +0900)
Change-Id: I1503d0c5dcaf8e9e4a3d4997025547150405c96f

legacy/include/legacy_player.h
legacy/src/legacy_player.c
muse/include/muse_player.h
muse/include/muse_player_private.h
muse/src/muse_player.c
muse/src/muse_player_dispatcher.c
packaging/mmsvc-player.spec

index 95e3e01..c37ff5a 100644 (file)
@@ -213,6 +213,7 @@ typedef enum {
        LEGACY_PLAYER_CALLBACK_TYPE_VIDEO_STREAM_CHANGED,
        LEGACY_PLAYER_CALLBACK_TYPE_RETURN_BUFFER,
        LEGACY_PLAYER_CALLBACK_TYPE_SERVICE_DISCONNECTED,
+       LEGACY_PLAYER_CALLBACK_TYPE_INTERRUPT_STARTED,
        LEGACY_PLAYER_CALLBACK_TYPE_NUM
 } legacy_player_callback_type_e;
 
index 5ee2df4..eba73d5 100644 (file)
@@ -419,6 +419,10 @@ static int __lplayer_message_callback(int message, void *param, void *user_data)
                        ((legacy_player_buffering_cb)handle->user_cb[LEGACY_PLAYER_CALLBACK_TYPE_BUFFERING]) \
                                        (msg->connection.buffering, handle->user_data[LEGACY_PLAYER_CALLBACK_TYPE_BUFFERING]);
                break;
+       case MM_MESSAGE_INTERRUPT_STARTED: /* 0x11B */
+               LOGD("Interrupt callback is called, retrieve exported buffers");
+               __lplayer_default_callback(handle, LEGACY_PLAYER_CALLBACK_TYPE_INTERRUPT_STARTED);
+               break;
        case MM_MESSAGE_STATE_INTERRUPTED:      /* 0x04 */
                if (msg->union_type == MM_MSG_UNION_STATE) {
                        LOGW("received mm state msg prev:%d, curr:%d", msg->state.previous, msg->state.current);
index c1d07c9..7d4a260 100644 (file)
@@ -83,6 +83,7 @@ typedef enum {
        MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED,
        MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER,
        MUSE_PLAYER_EVENT_TYPE_SERVICE_DISCONNECTED,
+       MUSE_PLAYER_EVENT_TYPE_INTERRUPT_STARTED,
        MUSE_PLAYER_EVENT_TYPE_NUM
 } muse_player_event_e;
 
index 9b09b5c..2b92525 100644 (file)
@@ -62,6 +62,7 @@ typedef struct {
 } prepare_data_t;
 
 int _mplayer_destroy(muse_module_h module);
+int _mplayer_unprepare(muse_module_h module);
 
 #ifdef __cplusplus
 }
index abf36fa..2763510 100644 (file)
@@ -813,9 +813,19 @@ static void __mplayer_default_callback(muse_player_event_e ev, muse_module_h mod
 
        LOGD("ENTER event: %d", ev);
 
+       if (ev == MUSE_PLAYER_EVENT_TYPE_INTERRUPT)
+               __mplayer_remove_export_data(module, 0, true);
+
        PLAYER_SEND_EVENT_MSG(api, ev, module);
 }
 
+static void __mmplayer_flush_buffer(muse_player_event_e ev, muse_module_h module)
+{
+       LOGD("ENTER event: %d", ev);
+
+       __mplayer_remove_export_media_packet(module);
+}
+
 static void __mplayer_error_cb(int code, void *user_data)
 {
        muse_player_cb_e api = MUSE_PLAYER_CB_EVENT;
@@ -887,6 +897,7 @@ static void *__mplayer_callback_function[MUSE_PLAYER_EVENT_TYPE_NUM] = {
        __mplayer_video_stream_changed_cb,           /* MUSE_PLAYER_EVENT_TYPE_VIDEO_STREAM_CHANGED */
        __mplayer_default_callback,   /* MUSE_PLAYER_EVENT_TYPE_RETURN_BUFFER */
        NULL,                         /* MUSE_PLAYER_EVENT_TYPE_SERVICE_DISCONNECTED */
+       __mmplayer_flush_buffer,      /* MUSE_PLAYER_EVENT_TYPE_INTERRUPT_STARTED */
 };
 
 static int __mplayer_set_callback_func(muse_player_handle_t *muse_player, muse_player_event_e type, bool set, void *user_data)
@@ -920,6 +931,8 @@ static int __mplayer_set_callback_func(muse_player_handle_t *muse_player, muse_p
                                ret = PLAYER_ERROR_NONE;
                        }
                }
+               legacy_player_set_callback(muse_player->player_handle, MUSE_PLAYER_EVENT_TYPE_INTERRUPT_STARTED,
+                                       __mplayer_callback_function[MUSE_PLAYER_EVENT_TYPE_INTERRUPT_STARTED], user_data);
        }
 
        LOGD("ret 0x%X", ret);
@@ -1131,6 +1144,30 @@ int _mplayer_disp_send_msg(int send_fd, char *msg, int *tfd)
        return PLAYER_ERROR_NONE;
 }
 
+int _mplayer_unprepare(muse_module_h module)
+{
+       int ret = PLAYER_ERROR_NONE;
+       muse_player_handle_t *muse_player =
+               (muse_player_handle_t *)muse_server_ipc_get_handle(module);
+
+       /* decoder buffer need to be released first to destroy pipeline */
+       __mplayer_remove_export_media_packet(module);
+
+       ret = legacy_player_unprepare(muse_player->player_handle);
+
+       /* if the data exporting was blocked, the legacy player callback need to be cleared.
+          clearing legacy player cb is possible in idle state only */
+       if (!muse_player->export_video_data)
+               legacy_player_unset_callback(muse_player->player_handle, MUSE_PLAYER_EVENT_TYPE_MEDIA_PACKET_VIDEO_FRAME);
+
+       if (!muse_player->export_audio_data)
+               legacy_player_unset_callback(muse_player->player_handle, MUSE_PLAYER_EVENT_TYPE_MEDIA_PACKET_AUDIO_FRAME);
+
+       __mplayer_remove_export_data(module, 0, true);
+
+       return ret;
+}
+
 int _mplayer_destroy(muse_module_h module)
 {
        int ret = PLAYER_ERROR_NONE;
@@ -1302,27 +1339,8 @@ int player_disp_unprepare(muse_module_h module)
 {
        int ret = PLAYER_ERROR_NONE;
        muse_player_api_e api = MUSE_PLAYER_API_UNPREPARE;
-       muse_player_handle_t *muse_player = NULL;
-       bool unset_cb = false;
-
-       muse_player = (muse_player_handle_t *)muse_server_ipc_get_handle(module);
-       unset_cb = !muse_player->export_video_data;
-
-       /* decoder buffer need to be released first to destroy pipeline */
-       __mplayer_remove_export_media_packet(module);
-
-       ret = legacy_player_unprepare(muse_player->player_handle);
-
-       /* if the data exporting was blocked, the legacy player callback need to be cleared.
-          clearing legacy player cb is possible in idle state only */
-       if (unset_cb)
-               legacy_player_unset_callback(muse_player->player_handle, MUSE_PLAYER_EVENT_TYPE_MEDIA_PACKET_VIDEO_FRAME);
-
-       if (!muse_player->export_audio_data)
-               legacy_player_unset_callback(muse_player->player_handle, MUSE_PLAYER_EVENT_TYPE_MEDIA_PACKET_AUDIO_FRAME);
-
-       __mplayer_remove_export_data(module, 0, true);
 
+       ret = _mplayer_unprepare(module);
        PLAYER_RETURN_MSG(api, ret, module);
 
        return ret;
index 11e20a9..b64488b 100644 (file)
@@ -38,7 +38,7 @@ static int player_cmd_shutdown(muse_module_h module)
        if (ret != PLAYER_ERROR_NONE)
                return ret;
 
-       LOGW("player shutdown, state:%d", state);
+       LOGW("player(module : %p) shutdown, state:%d ", module, state);
 
        switch (state) {
        case PLAYER_STATE_PLAYING:
@@ -46,7 +46,7 @@ static int player_cmd_shutdown(muse_module_h module)
                /* FALLTHROUGH */
        case PLAYER_STATE_PAUSED:
        case PLAYER_STATE_READY:
-               legacy_player_unprepare(muse_player->player_handle);
+               _mplayer_unprepare(module);
                /* FALLTHROUGH */
        case PLAYER_STATE_IDLE:
                _mplayer_destroy(module);
index d36e7dd..6cf08ab 100644 (file)
@@ -1,6 +1,6 @@
 Name:       mmsvc-player
 Summary:    A Media Player module for muse server
-Version:    0.2.132
+Version:    0.2.133
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0