guint media_stream_buffer_min_percent[MM_PLAYER_STREAM_TYPE_MAX];
mm_player_media_stream_buffer_status_callback media_stream_buffer_status_cb[MM_PLAYER_STREAM_TYPE_MAX];
mm_player_media_stream_seek_data_callback media_stream_seek_data_cb[MM_PLAYER_STREAM_TYPE_MAX];
+ 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;
void _mm_player_media_packet_video_stream_internal_buffer_unref(void *buffer);
int _mmplayer_set_pcm_spec(MMHandleType hplayer, int samplerate, int channel);
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_gst_set_state (mm_player_t* player, GstElement * pipeline, GstState state, gboolean async, gint timeout );
int __mmplayer_set_state(mm_player_t* player, int state);
int __mmplayer_check_state(mm_player_t* player, enum PlayerCommandState command);
}
if (video) {
+#define DEFAULT_FRAMERATE_NUM 30
+#define DEFAULT_FRAMERATE_DEN 1
media_format_mimetype_e mime;
- int width;
- int height;
- int avg_bps;
+ int width = 0;
+ int height = 0;
+ int avg_bps = 0;
+ int frame_rate = 0;
if (media_format_get_video_info (format, &mime, &width, &height, &avg_bps,
NULL) != MEDIA_FORMAT_ERROR_NONE) {
return MM_ERROR_PLAYER_INTERNAL;
}
+ if (media_format_get_video_frame_rate(format, &frame_rate)) {
+ LOGW ("failed to get video frame rate, will be set 30.");
+ }
+ LOGD ("frame_rate %d", frame_rate);
+
_convert_media_format_video_mime_to_str (video, mime);
+
video->width = width;
video->height = height;
+ video->framerate_num = (frame_rate>0)?(frame_rate):(DEFAULT_FRAMERATE_NUM);
+ video->framerate_den = DEFAULT_FRAMERATE_DEN;
}
return MM_ERROR_NONE;
#define PLAYBACK_RATE_EX_AUDIO_MAX 2.0
#define PLAYBACK_RATE_EX_VIDEO_MIN 0.5
#define PLAYBACK_RATE_EX_VIDEO_MAX 1.5
+#define DEFAULT_NUM_OF_V_OUT_BUFFER 3
#define GST_QUEUE_DEFAULT_TIME 4
#define GST_QUEUE_HLS_TIME 8
if (!structure_name)
break;
+ if (!strcmp(structure_name, "prepare-decode-buffers"))
+ {
+ gint num_buffers = 0;
+ 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);
+ }
+
+ 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);
+ }
+ break;
+ }
+
if (!strcmp(structure_name, "Language_list"))
{
const GValue *lang_list = NULL;
MMPLAYER_RETURN_VAL_IF_FAIL ( player, FALSE );
- LOGI("app-src: seek data\n");
+ LOGI("app-src: seek data, offset: %llu\n", offset);
if(player->media_stream_seek_data_cb[type])
player->media_stream_seek_data_cb[type](type, offset, player->buffer_cb_user_param);
player->video_share_api_delta = 0;
player->video_share_clock_delta = 0;
player->has_closed_caption = FALSE;
-
+ player->video_num_buffers = DEFAULT_NUM_OF_V_OUT_BUFFER;
+ player->video_extra_num_buffers = 0;
if (player->ini.dump_element_keyword[0][0] == '\0')
{
player->ini.set_dump_element_flag= FALSE;
mm_player_t* player = (mm_player_t*) hplayer;
MMPLAYER_FENTER();
-
MMPLAYER_RETURN_VAL_IF_FAIL (player, MM_ERROR_PLAYER_NOT_INITIALIZED);
- MMPLAYER_RETURN_VAL_IF_FAIL (enable == TRUE || enable == FALSE, MM_ERROR_INVALID_ARGUMENT);
+
if(enable)
player->bufmgr = tbm_bufmgr_init(-1);
else {
MMPLAYER_RETURN_VAL_IF_FAIL( player, FALSE );
- LOGD("app-src: seek audio data\n");
+ LOGD("app-src: seek audio data %llu\n", position);
if (player->media_stream_seek_data_cb[type])
{
MMPLAYER_RETURN_VAL_IF_FAIL( player, FALSE );
- LOGD("app-src: seek video data\n");
+ LOGD("app-src: seek video data %llu\n", position);
if (player->media_stream_seek_data_cb[type])
{
return MM_ERROR_NONE;
}
+int _mmplayer_get_num_of_video_out_buffers(MMHandleType hplayer, int *num, int *extra_num)
+{
+ mm_player_t* player = (mm_player_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)\n", MMPLAYER_CURRENT_STATE(player), *num, *extra_num);
+
+ MMPLAYER_FLEAVE();
+ return MM_ERROR_NONE;
+}
+