[0.6.189] keep the number of video buffer at attrs 80/205680/2 accepted/tizen/unified/20190510.111047 submit/tizen/20190509.085544
authorEunhye Choi <eunhae1.choi@samsung.com>
Wed, 8 May 2019 10:55:44 +0000 (19:55 +0900)
committerEunhye Choi <eunhae1.choi@samsung.com>
Wed, 8 May 2019 11:19:11 +0000 (20:19 +0900)
- Use attrs to keep the number of video buffers.
- It has to be considered when player export the
  'video decoded buffer' to client to avoid decoding error
  by buffer starvation.

Change-Id: I28d019b62df00266c3beccd63ad111f97563689d

packaging/libmm-player.spec
src/include/mm_player.h
src/include/mm_player_priv.h
src/mm_player.c
src/mm_player_attrs.c
src/mm_player_gst.c
src/mm_player_priv.c

index 426cda7..cbf3ffe 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-player
 Summary:    Multimedia Framework Player Library
-Version:    0.6.188
+Version:    0.6.189
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index a022aee..cda397a 100644 (file)
 #define MM_PLAYER_AUDIO_CODEC_TYPE          "audio_codec_type"
 
 /**
+ * MM_PLAYER_VIDEO_BUFFER_TOTAL_SIZE (int)
+ */
+#define MM_PLAYER_VIDEO_BUFFER_TOTAL_SIZE   "video_buffer_total_size"
+
+/**
+ * MM_PLAYER_VIDEO_BUFFER_EXTRA_SIZE (int)
+ */
+#define MM_PLAYER_VIDEO_BUFFER_EXTRA_SIZE   "video_buffer_extra_size"
+
+/**
  * MM_PLAYER_PREBUFFER_MS
  *
  * prebuffer ms (int)
@@ -1379,20 +1389,6 @@ int mm_player_set_video_stream_changed_callback(MMHandleType player, mm_player_s
 int mm_player_get_timeout(MMHandleType player, int *timeout);
 
 /**
- * This function is to get the number of video output buffers. \n
- * It's only supported when video stream is included in file. \n
- *
- * @param      player  [in] Handle of player.
- * @param      num     [out] num of buffers.
- * @param      extra_num [out] extra num of buffers.
- *
- * @return     This function returns zero on success, or negative value with error
- *                     code.
- * @since 3.0
- */
-int mm_player_get_num_of_video_out_buffers(MMHandleType player, int *num, int *extra_num);
-
-/**
  * This function is to set the dynamic resolution information. \n
  * It's only supported when video stream is included in file. \n
  *
index 673d9ff..78cc1f8 100644 (file)
@@ -69,6 +69,8 @@
 
 #define VIDEO360_MAX_ZOOM      10.0f
 
+#define DEFAULT_NUM_OF_V_OUT_BUFFER            3
+
 /*---------------------------------------------------------------------------
 |    GLOBAL CONSTANT DEFINITIONS:                                                                                      |
 ---------------------------------------------------------------------------*/
@@ -588,9 +590,6 @@ typedef struct {
        mm_player_media_stream_seek_data_callback media_stream_seek_data_cb[MM_PLAYER_STREAM_TYPE_MAX];
        GMutex media_stream_cb_lock;
 
-       int video_num_buffers;  /* total num of buffers in vcodec */
-       int video_extra_num_buffers; /* extra num of buffers in vcodec */
-
        void *buffer_cb_user_param[MM_PLAYER_STREAM_TYPE_MAX];
        void *seek_cb_user_param[MM_PLAYER_STREAM_TYPE_MAX];
 
@@ -869,7 +868,6 @@ int _mmplayer_get_next_uri(MMHandleType hplayer, char **uri);
 int _mmplayer_has_closed_caption(MMHandleType hplayer, bool *exist);
 void _mm_player_video_stream_internal_buffer_unref(void *buffer);
 int _mmplayer_get_timeout(MMHandleType hplayer, int *timeout);
-int _mmplayer_get_num_of_video_out_buffers(MMHandleType hplayer, int *num, int *extra_num);
 int _mmplayer_manage_external_storage_state(MMHandleType hplayer, int id, int state);
 int _mmplayer_video_stream_release_bo(mmplayer_t *player, void *bo);
 int _mmplayer_get_adaptive_variant_info(MMHandleType hplayer, int *num, char **var_info);
index 991378b..566c1d4 100644 (file)
@@ -915,22 +915,6 @@ int mm_player_get_timeout(MMHandleType player, int *timeout)
        return result;
 }
 
-int mm_player_get_num_of_video_out_buffers(MMHandleType player, int *num, int *extra_num)
-{
-       int result = MM_ERROR_NONE;
-
-       MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
-       MMPLAYER_RETURN_VAL_IF_FAIL(num && extra_num, MM_ERROR_COMMON_INVALID_ARGUMENT);
-
-       MMPLAYER_CMD_LOCK(player);
-
-       result = _mmplayer_get_num_of_video_out_buffers(player, num, extra_num);
-
-       MMPLAYER_CMD_UNLOCK(player);
-
-       return result;
-}
-
 int mm_player_set_media_stream_dynamic_resolution(MMHandleType player, bool drc)
 {
        int result = MM_ERROR_NONE;
index 7831a18..edf5c15 100644 (file)
@@ -746,6 +746,24 @@ _mmplayer_construct_attribute(MMHandleType handle)
                        MM_PLAYER_CODEC_TYPE_SW
                },
                {
+                       "video_buffer_total_size",
+                       MM_ATTRS_TYPE_INT,
+                       MM_ATTRS_FLAG_RW,
+                       (void *)DEFAULT_NUM_OF_V_OUT_BUFFER,
+                       MM_ATTRS_VALID_TYPE_INT_RANGE,
+                       MMPLAYER_MIN_INT,
+                       MMPLAYER_MAX_INT
+               },
+               {
+                       "video_buffer_extra_size",
+                       MM_ATTRS_TYPE_INT,
+                       MM_ATTRS_FLAG_RW,
+                       (void *)DEFAULT_NUM_OF_V_OUT_BUFFER,
+                       MM_ATTRS_VALID_TYPE_INT_RANGE,
+                       MMPLAYER_MIN_INT,
+                       MMPLAYER_MAX_INT
+               },
+               {
                        "prebuffer_ms", /* user setting */
                        MM_ATTRS_TYPE_INT,
                        MM_ATTRS_FLAG_RW,
index ad60ea5..500de92 100644 (file)
@@ -1797,13 +1797,13 @@ __mmplayer_gst_handle_element_message(mmplayer_t *player, GstMessage *msg)
                gint extra_num_buffers = 0;
 
                if (gst_structure_get_int(gst_message_get_structure(msg), "num_buffers", &num_buffers)) {
-                       player->video_num_buffers = num_buffers;
-                       LOGD("video_num_buffers : %d", player->video_num_buffers);
+                       LOGD("video_num_buffers : %d", num_buffers);
+                       mm_attrs_set_int_by_name(player->attrs, MM_PLAYER_VIDEO_BUFFER_TOTAL_SIZE, num_buffers);
                }
 
                if (gst_structure_get_int(gst_message_get_structure(msg), "extra_num_buffers", &extra_num_buffers)) {
-                       player->video_extra_num_buffers = extra_num_buffers;
                        LOGD("num_of_vout_extra num buffers : %d", extra_num_buffers);
+                       mm_attrs_set_int_by_name(player->attrs, MM_PLAYER_VIDEO_BUFFER_EXTRA_SIZE, extra_num_buffers);
                }
                return;
        }
index 952f8fa..be48238 100644 (file)
@@ -89,7 +89,6 @@
 #define MM_PLAYER_FADEOUT_TIME_DEFAULT 0
 
 #define DEFAULT_PLAYBACK_RATE                  1.0
-#define DEFAULT_NUM_OF_V_OUT_BUFFER            3
 
 #define PLAYER_DISPLAY_MODE_DST_ROI            5
 
@@ -3252,16 +3251,14 @@ __mmplayer_video_stream_get_bo(mmplayer_t *player, int size)
                }
 
                /* update video num buffers */
-               player->video_num_buffers = idx;
-               if (idx == player->ini.num_of_video_bo)
-                       player->video_extra_num_buffers = player->ini.num_of_video_bo/2;
+               LOGD("video_num_buffers : %d", idx);
+               mm_attrs_set_int_by_name(player->attrs, MM_PLAYER_VIDEO_BUFFER_TOTAL_SIZE, idx);
+               mm_attrs_set_int_by_name(player->attrs, MM_PLAYER_VIDEO_BUFFER_EXTRA_SIZE, MAX(DEFAULT_NUM_OF_V_OUT_BUFFER, (idx/2)));
 
                if (idx == 0) {
                        MMPLAYER_VIDEO_BO_UNLOCK(player);
                        return NULL;
                }
-
-               LOGD("Num of video buffers(%d/%d)", player->video_num_buffers, player->video_extra_num_buffers);
        }
 
        while (TRUE) {
@@ -4725,8 +4722,6 @@ _mmplayer_create_player(MMHandleType handle)
 
        player->play_subtitle = FALSE;
        player->has_closed_caption = FALSE;
-       player->video_num_buffers = DEFAULT_NUM_OF_V_OUT_BUFFER;
-       player->video_extra_num_buffers = DEFAULT_NUM_OF_V_OUT_BUFFER;
        player->pending_resume = FALSE;
        if (player->ini.dump_element_keyword[0][0] == '\0')
                player->ini.set_dump_element_flag = FALSE;
@@ -8419,25 +8414,6 @@ _mmplayer_get_timeout(MMHandleType hplayer, int *timeout)
        return MM_ERROR_NONE;
 }
 
-int
-_mmplayer_get_num_of_video_out_buffers(MMHandleType hplayer, int *num, int *extra_num)
-{
-       mmplayer_t *player = (mmplayer_t *)hplayer;
-
-       MMPLAYER_FENTER();
-
-       MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
-       MMPLAYER_RETURN_VAL_IF_FAIL(num && extra_num, MM_ERROR_COMMON_INVALID_ARGUMENT);
-
-       *num = player->video_num_buffers;
-       *extra_num = player->video_extra_num_buffers;
-
-       LOGD("state %d, num %d(%d)", MMPLAYER_CURRENT_STATE(player), *num, *extra_num);
-
-       MMPLAYER_FLEAVE();
-       return MM_ERROR_NONE;
-}
-
 static void
 __mmplayer_initialize_storage_info(mmplayer_t *player, mmplayer_path_type_e path_type)
 {