diff --git a/ijkmediaplayer/jni/ijkplayer/ff_ffplay.c b/ijkmediaplayer/jni/ijkplayer/ff_ffplay.c index 13105793b7383a188d70d970f5f7c84dbe257dd5..1451db1cb05eacd2272b62878bbd6031483e21f6 100644 --- a/ijkmediaplayer/jni/ijkplayer/ff_ffplay.c +++ b/ijkmediaplayer/jni/ijkplayer/ff_ffplay.c @@ -2355,6 +2355,16 @@ static VideoState *stream_open(FFPlayer *ffp, const char *filename, AVInputForma // MERGE: options // MERGE: show_usage // MERGE: show_help_default +static void video_refresh_thread(VideoState *is) { + double remaining_time = 0.0; + while (is->abort_request) { + if (remaining_time > 0.0) + av_usleep((int64_t)(remaining_time * 1000000.0)); + remaining_time = REFRESH_RATE; + if (is->show_mode != SHOW_MODE_NONE && (!is->paused || is->force_refresh)) + video_refresh(is, &remaining_time); + } +} static int lockmgr(void **mtx, enum AVLockOp op) { @@ -2425,7 +2435,7 @@ void ijkff_global_init() FFPlayer *ffp = malloc(sizeof(FFPlayer)); stream_open(ffp, NULL, NULL); stream_close(ffp); - video_refresh(ffp, NULL); + video_refresh_thread(ffp); alloc_picture(NULL); /* test link end */ } diff --git a/ijkmediaplayer/jni/ijkplayer/ff_ffplay_def.h b/ijkmediaplayer/jni/ijkplayer/ff_ffplay_def.h index bfc114c51df3831efc6d74d0758698b4005ac1e0..258e5ccc64e7a00daadd83fdb4c0adaeebf36bc6 100644 --- a/ijkmediaplayer/jni/ijkplayer/ff_ffplay_def.h +++ b/ijkmediaplayer/jni/ijkplayer/ff_ffplay_def.h @@ -386,6 +386,9 @@ typedef struct FFPlayer { /* extra fields */ int sar_num; int sar_den; + + SDL_Thread *refresh_video_tid; + SDL_Thread _refresh_video_tid; } FFPlayer; #define IJKFF_SAFE_FREE(p) do {free(p); p = NULL;} while(0)