X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=video_widget.cpp;h=7bafa64e4b0a00f444eecbb40b2ef09d776cf98f;hb=da70a59f7ed8e678117a463c28e6bea06e05431f;hp=b50ea1c404a0494b8297180e8fc0f7c671c4bad6;hpb=b6eaf3bbd5005eda6d9853897b2b5667c5fd63a7;p=pkanalytics diff --git a/video_widget.cpp b/video_widget.cpp index b50ea1c..7bafa64 100644 --- a/video_widget.cpp +++ b/video_widget.cpp @@ -194,9 +194,10 @@ bool VideoWidget::process_queued_commands(AVFormatContext *format_ctx, AVCodecCo queue.pop_front(); queued_frames = std::move(queue); } + Frame *new_frame = new Frame(make_video_frame(frame.get())); { lock_guard lock(current_frame_mu); - current_frame.reset(new Frame(make_video_frame(frame.get()))); + current_frame.reset(new_frame); } update(); store_pts(frame->pts); @@ -228,9 +229,10 @@ bool VideoWidget::process_queued_commands(AVFormatContext *format_ctx, AVCodecCo if (frame == nullptr || error) { return true; } + Frame *new_frame = new Frame(make_video_frame(frame.get())); { lock_guard lock(current_frame_mu); - current_frame.reset(new Frame(make_video_frame(frame.get()))); + current_frame.reset(new_frame); } update(); store_pts(frame->pts); @@ -923,9 +925,10 @@ bool VideoWidget::play_video(const string &pathname) bool finished_wakeup; finished_wakeup = producer_thread_should_quit.sleep_until(next_frame_start); if (finished_wakeup) { + Frame *new_frame = new Frame(make_video_frame(frame.get())); { lock_guard lock(current_frame_mu); - current_frame.reset(new Frame(make_video_frame(frame.get()))); + current_frame.reset(new_frame); } last_frame = steady_clock::now(); update(); @@ -940,9 +943,10 @@ bool VideoWidget::play_video(const string &pathname) if (paused) { // Just paused, so present the frame immediately and then go into deep sleep. + Frame *new_frame = new Frame(make_video_frame(frame.get())); { lock_guard lock(current_frame_mu); - current_frame.reset(new Frame(make_video_frame(frame.get()))); + current_frame.reset(new_frame); } last_frame = steady_clock::now(); update();