X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fvideo_stream.cpp;h=e41304bac948f9180b2f6f108cc121e26e950829;hb=44b133d1372fb410fe0c8badcd4028965d95fbb8;hp=ef56ee4a96711a703b900b3ab60121298803160d;hpb=eaba7288c4fb39ca195c9355970293bcaf088dbc;p=nageru diff --git a/futatabi/video_stream.cpp b/futatabi/video_stream.cpp index ef56ee4..e41304b 100644 --- a/futatabi/video_stream.cpp +++ b/futatabi/video_stream.cpp @@ -208,10 +208,8 @@ VideoStream::VideoStream(AVFormatContext *file_avctx) check_error(); OperatingPoint op; - if (global_flags.interpolation_quality == 0) { - // Allocate something just for simplicity; we won't be using it. - op = operating_point1; - } else if (global_flags.interpolation_quality == 1) { + if (global_flags.interpolation_quality == 0 || + global_flags.interpolation_quality == 1) { op = operating_point1; } else if (global_flags.interpolation_quality == 2) { op = operating_point2; @@ -220,6 +218,7 @@ VideoStream::VideoStream(AVFormatContext *file_avctx) } else if (global_flags.interpolation_quality == 4) { op = operating_point4; } else { + // Quality 0 will be changed to 1 in flags.cpp. assert(false); } @@ -269,6 +268,7 @@ void VideoStream::start() void VideoStream::stop() { should_quit = true; + queue_changed.notify_all(); clear_queue(); encode_thread.join(); } @@ -560,8 +560,11 @@ void VideoStream::encode_thread_func() // Wait until we have a frame to play. queue_changed.wait(lock, [this]{ - return !frame_queue.empty(); + return !frame_queue.empty() || should_quit; }); + if (should_quit) { + break; + } steady_clock::time_point frame_start = frame_queue.front().local_pts; // Now sleep until the frame is supposed to start (the usual case),