From: Bolshoy Toster <toasterbig@gmail.com> To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH] fftools/ffplay: use SDL_WaitEvent instead of SDL_PeepEvents while paused Date: Tue, 7 Nov 2023 20:57:57 +0000 Message-ID: <d65b76a7-864a-4f6f-b9de-7f47ad99f104@gmail.com> (raw) Currently, when ffplay is paused, it still constantly polls for events at the REFRESH_RATE (100 times per second). This leads to a high (5-10% on the latest commit, using SDL2 2.28.5-1) CPU usage, when it should be idle. This commit changes this behavior to use SDL_WaitEvent while paused, allowing ffplay to use less (0-5% under X11) CPU time while paused on supported platforms (windows, X11 and wayland) with SDL versions >=2.0.16. This has the side effect of only running the refresh loop when there's an event, preventing the cursor from being hidden while paused. Signed-off-by: bolshoytoster <toasterbig@gmail.com> --- fftools/ffplay.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/fftools/ffplay.c b/fftools/ffplay.c index d8c69e1..7814589 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -3221,20 +3221,29 @@ static void toggle_audio_display(VideoState *is) } } +static void refresh(VideoState *is, double *remaining_time) { + if (!cursor_hidden && av_gettime_relative() - cursor_last_shown > CURSOR_HIDE_DELAY) { + SDL_ShowCursor(0); + cursor_hidden = 1; + } + 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 void refresh_loop_wait_event(VideoState *is, SDL_Event *event) { double remaining_time = 0.0; - SDL_PumpEvents(); - while (!SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT)) { - if (!cursor_hidden && av_gettime_relative() - cursor_last_shown > CURSOR_HIDE_DELAY) { - SDL_ShowCursor(0); - cursor_hidden = 1; - } - 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); + if (is->paused) { + refresh(is, &remaining_time); + SDL_WaitEvent(event); + } else { SDL_PumpEvents(); + while (!SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT)) { + refresh(is, &remaining_time); + SDL_PumpEvents(); + } } } -- 2.42.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next reply other threads:[~2023-11-07 20:58 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-11-07 20:57 Bolshoy Toster [this message] 2023-11-08 23:33 ` Michael Niedermayer 2023-11-10 19:29 Bolshoy Toster 2023-11-10 20:01 ` Marton Balint
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=d65b76a7-864a-4f6f-b9de-7f47ad99f104@gmail.com \ --to=toasterbig@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git