提交 844f948c 编写于 作者: R raymondzheng

ijkplayer: add FFP_MSG_AUDIO_SEEK_RENDERING_START && FFP_MSG_AUDIO_SEEK_RENDERING_START

上级 f721a60e
......@@ -139,6 +139,8 @@ enum media_info_type {
MEDIA_INFO_OPEN_INPUT = 10005,
MEDIA_INFO_FIND_STREAM_INFO = 10006,
MEDIA_INFO_COMPONENT_OPEN = 10007,
MEDIA_INFO_VIDEO_SEEK_RENDERING_START = 10008,
MEDIA_INFO_AUDIO_SEEK_RENDERING_START = 10009,
MEDIA_INFO_MEDIA_ACCURATE_SEEK_COMPLETE = 10100,
};
......
......@@ -39,6 +39,8 @@
#define FFP_MSG_OPEN_INPUT 407
#define FFP_MSG_FIND_STREAM_INFO 408
#define FFP_MSG_COMPONENT_OPEN 409
#define FFP_MSG_VIDEO_SEEK_RENDERING_START 410
#define FFP_MSG_AUDIO_SEEK_RENDERING_START 411
#define FFP_MSG_BUFFERING_START 500
#define FFP_MSG_BUFFERING_END 501
......
......@@ -877,10 +877,6 @@ static void video_image_display2(FFPlayer *ffp)
vp = frame_queue_peek_last(&is->pictq);
int latest_seek_load_serial = __atomic_exchange_n(&(is->latest_seek_load_serial), -1, memory_order_seq_cst);
if (latest_seek_load_serial == vp->serial)
ffp->stat.latest_seek_load_duration = (av_gettime() - is->latest_seek_load_start_at) / 1000;
if (vp->bmp) {
if (is->subtitle_st) {
if (frame_queue_nb_remaining(&is->subpq) > 0) {
......@@ -918,6 +914,18 @@ static void video_image_display2(FFPlayer *ffp)
ffp->first_video_frame_rendered = 1;
ffp_notify_msg1(ffp, FFP_MSG_VIDEO_RENDERING_START);
}
if (is->latest_video_seek_load_serial == vp->serial) {
int latest_video_seek_load_serial = __atomic_exchange_n(&(is->latest_video_seek_load_serial), -1, memory_order_seq_cst);
if (latest_video_seek_load_serial == vp->serial) {
ffp->stat.latest_seek_load_duration = (av_gettime() - is->latest_seek_load_start_at) / 1000;
if (ffp->av_sync_type == AV_SYNC_VIDEO_MASTER) {
ffp_notify_msg2(ffp, FFP_MSG_VIDEO_SEEK_RENDERING_START, 1);
} else {
ffp_notify_msg2(ffp, FFP_MSG_VIDEO_SEEK_RENDERING_START, 0);
}
}
}
}
}
......@@ -2616,16 +2624,6 @@ reload:
is->auddec.first_frame_decoded_time = SDL_GetTickHR();
is->auddec.first_frame_decoded = 1;
}
if (!ffp->first_audio_frame_rendered) {
ffp->first_audio_frame_rendered = 1;
ffp_notify_msg1(ffp, FFP_MSG_AUDIO_RENDERING_START);
}
if (ffp->render_wait_start && !ffp->start_on_prepared && is->pause_req) {
while (is->pause_req && !is->abort_request) {
SDL_Delay(20);
}
}
return resampled_data_size;
}
......@@ -2699,6 +2697,27 @@ static void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
set_clock_at(&is->audclk, is->audio_clock - (double)(is->audio_write_buf_size) / is->audio_tgt.bytes_per_sec - SDL_AoutGetLatencySeconds(ffp->aout), is->audio_clock_serial, ffp->audio_callback_time / 1000000.0);
sync_clock_to_slave(&is->extclk, &is->audclk);
}
if (!ffp->first_audio_frame_rendered) {
ffp->first_audio_frame_rendered = 1;
ffp_notify_msg1(ffp, FFP_MSG_AUDIO_RENDERING_START);
}
if (is->latest_audio_seek_load_serial == is->audio_clock_serial) {
int latest_audio_seek_load_serial = __atomic_exchange_n(&(is->latest_audio_seek_load_serial), -1, memory_order_seq_cst);
if (latest_audio_seek_load_serial == is->audio_clock_serial) {
if (ffp->av_sync_type == AV_SYNC_AUDIO_MASTER) {
ffp_notify_msg2(ffp, FFP_MSG_AUDIO_SEEK_RENDERING_START, 1);
} else {
ffp_notify_msg2(ffp, FFP_MSG_AUDIO_SEEK_RENDERING_START, 0);
}
}
}
if (ffp->render_wait_start && !ffp->start_on_prepared && is->pause_req) {
while (is->pause_req && !is->abort_request) {
SDL_Delay(20);
}
}
}
static int audio_open(FFPlayer *opaque, int64_t wanted_channel_layout, int wanted_nb_channels, int wanted_sample_rate, struct AudioParams *audio_hw_params)
......@@ -3383,7 +3402,8 @@ static int read_thread(void *arg)
set_clock(&is->extclk, seek_target / (double)AV_TIME_BASE, 0);
}
is->latest_seek_load_serial = is->videoq.serial;
is->latest_video_seek_load_serial = is->videoq.serial;
is->latest_audio_seek_load_serial = is->audioq.serial;
is->latest_seek_load_start_at = av_gettime();
}
ffp->dcc.current_high_water_mark_in_ms = ffp->dcc.first_high_water_mark_in_ms;
......
......@@ -402,7 +402,8 @@ typedef struct VideoState {
PacketQueue *buffer_indicator_queue;
volatile int latest_seek_load_serial;
volatile int latest_video_seek_load_serial;
volatile int latest_audio_seek_load_serial;
volatile int64_t latest_seek_load_start_at;
int drop_aframe_count;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册