[0.3.131] Drop buffering message after player_start() 20/234820/5 accepted/tizen/unified/20200610.015619 submit/tizen/20200602.084810 submit/tizen/20200609.025115
authorGilbok Lee <gilbok.lee@samsung.com>
Fri, 29 May 2020 04:45:41 +0000 (13:45 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Tue, 2 Jun 2020 06:10:00 +0000 (15:10 +0900)
Change-Id: I28694d822e119748f1c91994822828f93de7ed00

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

index e6da9f9332de02e80414a7f6c3c082081488c2d0..e57cae28de842cfda832b156963d5212339d22e6 100644 (file)
@@ -182,6 +182,8 @@ typedef struct _callback_cb_info {
        GMutex data_mutex;
        player_seek_cb_state_e seek_cb_state;
        GMutex seek_cb_mutex;
+       gboolean drop_buffering_message;
+       GMutex buffering_cb_mutex;
        msg_buff_s buff;
        player_event_queue event_queue;
        media_format_h pkt_fmt;
index d6b02561e180a5f4fe466180d03cf11d124c1ec9..83fc643984b7fd512079341e9a07917d55f3d725 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-player
 Summary:    A Media Player API
-Version:    0.3.130
+Version:    0.3.131
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 88e7a6def632faa78f6de34861048b54e1d62d04..691d7a1173466fa5abbe2fa8c18fbc3bd3d87dd5 100644 (file)
@@ -513,6 +513,7 @@ static int __set_callback(muse_player_event_e type, player_h player, void *callb
        if (type == MUSE_PLAYER_EVENT_TYPE_BUFFERING) {
                if (!_player_check_network_availability())
                        return PLAYER_ERROR_FEATURE_NOT_SUPPORTED_ON_DEVICE;
+               pc->cb_info->drop_buffering_message = FALSE;
        }
 
        if (!CALLBACK_INFO(pc))
@@ -630,8 +631,17 @@ static void __buffering_cb_handler(callback_cb_info_s *cb_info, _player_recv_dat
        int percent;
        muse_player_event_e ev = MUSE_PLAYER_EVENT_TYPE_BUFFERING;
 
-       if (player_msg_get(percent, recv_data->buffer))
+       if (player_msg_get(percent, recv_data->buffer)) {
+               g_mutex_lock(&cb_info->buffering_cb_mutex);
+               if (cb_info->drop_buffering_message) {
+                       LOGD("Drop buffering callback");
+                       g_mutex_unlock(&cb_info->buffering_cb_mutex);
+                       return;
+               }
+               g_mutex_unlock(&cb_info->buffering_cb_mutex);
                ((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, _player_recv_data *recv_data)
@@ -1410,6 +1420,14 @@ static void *_player_event_queue_loop(void *param)
                                                break;
                                        }
                                        g_mutex_unlock(&cb_info->seek_cb_mutex);
+                               } else if (event_type == MUSE_PLAYER_EVENT_TYPE_BUFFERING) {
+                                       g_mutex_lock(&cb_info->buffering_cb_mutex);
+                                       if (cb_info->drop_buffering_message) {
+                                               LOGD("Drop buffering event");
+                                               g_mutex_unlock(&cb_info->buffering_cb_mutex);
+                                               break;
+                                       }
+                                       g_mutex_unlock(&cb_info->buffering_cb_mutex);
                                }
 
                                if (_player_need_sync_context(event_type)) {
@@ -1829,6 +1847,8 @@ static callback_cb_info_s *callback_new(gint sockfd)
 
        g_mutex_init(&cb_info->data_mutex);
        g_mutex_init(&cb_info->seek_cb_mutex);
+       g_mutex_init(&cb_info->buffering_cb_mutex);
+       cb_info->drop_buffering_message = FALSE;
 
        buff = &cb_info->buff;
        buff->recvMsg = g_new(char, MUSE_MSG_MAX_LENGTH + 1);
@@ -1879,6 +1899,7 @@ static void callback_destroy(callback_cb_info_s *cb_info)
 
        g_mutex_clear(&cb_info->data_mutex);
        g_mutex_clear(&cb_info->seek_cb_mutex);
+       g_mutex_clear(&cb_info->buffering_cb_mutex);
 
        g_free(cb_info->buff.recvMsg);
        _remove_all_ret_msg(cb_info);
@@ -2660,9 +2681,18 @@ int player_start(player_h player)
                }
        }
 #endif
+       g_mutex_lock(&pc->cb_info->buffering_cb_mutex);
+       pc->cb_info->drop_buffering_message = TRUE;
+       g_mutex_unlock(&pc->cb_info->buffering_cb_mutex);
+
+       _player_remove_idle_event(pc->cb_info, MUSE_PLAYER_EVENT_TYPE_BUFFERING, false);
 
        PLAYER_SEND_MSG(api, pc, ret_buf, ret);
 
+       g_mutex_lock(&pc->cb_info->buffering_cb_mutex);
+       pc->cb_info->drop_buffering_message = FALSE;
+       g_mutex_unlock(&pc->cb_info->buffering_cb_mutex);
+
        g_free(ret_buf);
 
        LOGD("LEAVE 0x%X", ret);