X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fexport.cpp;fp=futatabi%2Fexport.cpp;h=a653f01324775cfeee9a9eff0904315e391b4058;hb=99edbfa0b7d386f32d3e5e72fd3f70ff85d5476a;hp=3371404d15e0d7a176f62197821758739a593bdf;hpb=ef2446c7768549827aed6cd2b635a514366c2025;p=nageru diff --git a/futatabi/export.cpp b/futatabi/export.cpp index 3371404..a653f01 100644 --- a/futatabi/export.cpp +++ b/futatabi/export.cpp @@ -228,21 +228,20 @@ void export_interpolated_clip(const string &filename, const Clip &clip) future done = done_promise.get_future(); std::atomic current_value{0.0}; - unique_ptr player(new Player(/*destination=*/nullptr, Player::FILE_STREAM_OUTPUT, closer.release())); - player->set_done_callback([&done_promise] { + Player player(/*destination=*/nullptr, Player::FILE_STREAM_OUTPUT, closer.release()); + player.set_done_callback([&done_promise] { done_promise.set_value(); }); - player->set_progress_callback([¤t_value] (const std::map &player_progress) { + player.set_progress_callback([¤t_value] (const std::map &player_progress) { assert(player_progress.size() == 1); current_value = player_progress.begin()->second; }); - player->play_clip(clip, /*clip_idx=*/0, clip.stream_idx); + player.play_clip(clip, /*clip_idx=*/0, clip.stream_idx); while (done.wait_for(std::chrono::milliseconds(100)) != future_status::ready && !progress.wasCanceled()) { progress.setValue(lrint(100000.0 * current_value)); } if (progress.wasCanceled()) { unlink(filename.c_str()); - player.reset(); - return; + // Destroying player on scope exit will abort the render job. } }