- 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
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
#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)
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
*
#define VIDEO360_MAX_ZOOM 10.0f
+#define DEFAULT_NUM_OF_V_OUT_BUFFER 3
+
/*---------------------------------------------------------------------------
| GLOBAL CONSTANT DEFINITIONS: |
---------------------------------------------------------------------------*/
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];
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);
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;
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,
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;
}
#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
}
/* 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) {
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;
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)
{