Skip to content

Commit b603785

Browse files
author
raymondzheng
committed
ijkplayer: add render-wait-start option
1 parent fcaa4a5 commit b603785

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

ijkmedia/ijkplayer/ff_ffplay.c

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -901,6 +901,15 @@ static void video_image_display2(FFPlayer *ffp)
901901
}
902902
}
903903
}
904+
if (ffp->render_wait_start && !ffp->start_on_prepared && is->pause_req) {
905+
if (!ffp->first_video_frame_rendered) {
906+
ffp->first_video_frame_rendered = 1;
907+
ffp_notify_msg1(ffp, FFP_MSG_VIDEO_RENDERING_START);
908+
}
909+
while (is->pause_req && !is->abort_request) {
910+
SDL_Delay(20);
911+
}
912+
}
904913
SDL_VoutDisplayYUVOverlay(ffp->vout, vp->bmp);
905914
ffp->stat.vfps = SDL_SpeedSamplerAdd(&ffp->vfps_sampler, FFP_SHOW_VFPS_FFPLAY, "vfps[ffplay]");
906915
if (!ffp->first_video_frame_rendered) {
@@ -2604,6 +2613,12 @@ static int audio_decode_frame(FFPlayer *ffp)
26042613
ffp->first_audio_frame_rendered = 1;
26052614
ffp_notify_msg1(ffp, FFP_MSG_AUDIO_RENDERING_START);
26062615
}
2616+
2617+
if (ffp->render_wait_start && !ffp->start_on_prepared && is->pause_req) {
2618+
while (is->pause_req && !is->abort_request) {
2619+
SDL_Delay(20);
2620+
}
2621+
}
26072622
return resampled_data_size;
26082623
}
26092624

@@ -3099,7 +3114,7 @@ static int read_thread(void *arg)
30993114
ic->flags |= AVFMT_FLAG_GENPTS;
31003115

31013116
av_format_inject_global_side_data(ic);
3102-
//
3117+
//
31033118
//AVDictionary **opts;
31043119
//int orig_nb_streams;
31053120
//opts = setup_find_stream_info_opts(ic, ffp->codec_opts);
@@ -3276,7 +3291,7 @@ static int read_thread(void *arg)
32763291
if (ffp->infinite_buffer < 0 && is->realtime)
32773292
ffp->infinite_buffer = 1;
32783293

3279-
if (!ffp->start_on_prepared)
3294+
if (!ffp->render_wait_start && !ffp->start_on_prepared)
32803295
toggle_pause(ffp, 1);
32813296
if (is->video_st && is->video_st->codecpar) {
32823297
AVCodecParameters *codecpar = is->video_st->codecpar;
@@ -3285,7 +3300,7 @@ static int read_thread(void *arg)
32853300
}
32863301
ffp->prepared = true;
32873302
ffp_notify_msg1(ffp, FFP_MSG_PREPARED);
3288-
if (!ffp->start_on_prepared) {
3303+
if (!ffp->render_wait_start && !ffp->start_on_prepared) {
32893304
while (is->pause_req && !is->abort_request) {
32903305
SDL_Delay(20);
32913306
}

ijkmedia/ijkplayer/ff_ffplay_def.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,7 @@ typedef struct FFPlayer {
717717
char *video_mime_type;
718718
char *mediacodec_default_name;
719719
int ijkmeta_delay_init;
720+
int render_wait_start;
720721
} FFPlayer;
721722

722723
#define fftime_to_milliseconds(ts) (av_rescale(ts, 1000, AV_TIME_BASE))
@@ -826,6 +827,7 @@ inline static void ffp_reset_internal(FFPlayer *ffp)
826827
ffp->video_mime_type = NULL; // option
827828
ffp->mediacodec_default_name = NULL; // option
828829
ffp->ijkmeta_delay_init = 0; // option
830+
ffp->render_wait_start = 0;
829831

830832
ijkmeta_reset(ffp->meta);
831833

ijkmedia/ijkplayer/ff_ffplay_options.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,8 @@ static const AVOption ffp_context_options[] = {
204204
OPTION_OFFSET(mediacodec_default_name), OPTION_STR(NULL) },
205205
{ "ijkmeta-delay-init", "ijkmeta delay init",
206206
OPTION_OFFSET(ijkmeta_delay_init), OPTION_INT(0, 0, 1) },
207+
{ "render-wait-start", "render wait start",
208+
OPTION_OFFSET(render_wait_start), OPTION_INT(0, 0, 1) },
207209

208210
{ NULL }
209211
};

0 commit comments

Comments
 (0)