diff options
| author | Carl Hetherington <cth@carlh.net> | 2014-01-11 18:37:15 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2014-01-11 18:37:15 +0000 |
| commit | d37c1c35b36a28a3e3bbec6c21721f16f8e4aa48 (patch) | |
| tree | 79931e7a669e33d07072ef3d55117171727e2c25 /src/lib/writer.cc | |
| parent | 1ee6608ac6746b5cb9221052c74d467561dbac35 (diff) | |
Destroy Transcoder when cancelling transcode jobs; this closes the audio MXF so it can be overwritten, even on Windows.
Diffstat (limited to 'src/lib/writer.cc')
| -rw-r--r-- | src/lib/writer.cc | 59 |
1 files changed, 21 insertions, 38 deletions
diff --git a/src/lib/writer.cc b/src/lib/writer.cc index cfc19a13d..572a1c3a4 100644 --- a/src/lib/writer.cc +++ b/src/lib/writer.cc @@ -104,38 +104,8 @@ Writer::Writer (shared_ptr<const Film> f, weak_ptr<Job> j) } /* Write the sound asset into the film directory so that we leave the creation - of the DCP directory until the last minute. Some versions of windows inexplicably - don't like overwriting existing files here, so try to remove it using boost. + of the DCP directory until the last minute. */ - boost::system::error_code ec; - boost::filesystem::remove_all (_film->file (_film->audio_mxf_filename ()), ec); - if (ec) { - - stringstream s; - boost::filesystem::path p = _film->file (_film->audio_mxf_filename ()); - s << p << "\n" - << "exists=" << boost::filesystem::exists (p) << "\n" - << "file_size=" << boost::filesystem::file_size (p) << "\n" - << "hard_link_count=" << boost::filesystem::hard_link_count (p) << "\n" - << "is_directory=" << boost::filesystem::is_directory (p) << "\n" - << "is_empty=" << boost::filesystem::is_empty (p) << "\n" - << "is_other=" << boost::filesystem::is_other (p) << "\n" - << "is_regular_file=" << boost::filesystem::is_regular_file (p) << "\n" - << "last_write_time=" << boost::filesystem::last_write_time (p) << "\n" - << "type=" << boost::filesystem::status (p).type () << "\n" - << "permissions=" << boost::filesystem::status (p).permissions () << "\n"; - - _film->log()->log (s.str ()); - - _film->log()->log ( - String::compose ( - "Could not remove existing audio MXF file %1 (%2)", - _film->file (_film->audio_mxf_filename ()), - ec.value () - ) - ); - } - _sound_asset_writer = _sound_asset->start_write (); _thread = new boost::thread (boost::bind (&Writer::thread, this)); @@ -143,6 +113,11 @@ Writer::Writer (shared_ptr<const Film> f, weak_ptr<Job> j) job->sub (_("Encoding image data")); } +Writer::~Writer () +{ + terminate_thread (false); +} + void Writer::write (shared_ptr<const EncodedData> encoded, int frame, Eyes eyes) { @@ -366,23 +341,31 @@ catch (...) } void -Writer::finish () +Writer::terminate_thread (bool can_throw) { - if (!_thread) { - return; - } - boost::mutex::scoped_lock lock (_mutex); _finish = true; _empty_condition.notify_all (); _full_condition.notify_all (); lock.unlock (); - _thread->join (); - rethrow (); + _thread->join (); + if (can_throw) { + rethrow (); + } delete _thread; _thread = 0; +} + +void +Writer::finish () +{ + if (!_thread) { + return; + } + + terminate_thread (true); _picture_asset_writer->finalize (); _sound_asset_writer->finalize (); |
