X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fwriter.cc;h=3f0c687c24c7fd25bdd63e582354cf974d565475;hb=35c0a33f8da3b1f99ec32a8c42f578cbc063e7e4;hp=ae00c0122478f6d721ffa23d51dd128d8d37e603;hpb=f679e8ab99d25bcf725732e0c79b658f38a39a27;p=dcpomatic.git diff --git a/src/lib/writer.cc b/src/lib/writer.cc index ae00c0122..3f0c687c2 100644 --- a/src/lib/writer.cc +++ b/src/lib/writer.cc @@ -247,23 +247,21 @@ Writer::write (shared_ptr audio) return; } - int32_t const this_time = min ( - audio->frames() - offset, - (int32_t) (_audio_reel->period().duration().frames_floor(_film->audio_frame_rate()) - _audio_reel->total_written_audio_frames()) - ); + int32_t const remaining = audio->frames() - offset; + int32_t const reel_space = _audio_reel->period().duration().frames_floor(_film->audio_frame_rate()) - _audio_reel->total_written_audio_frames(); - if (this_time == audio->frames()) { + if (remaining <= reel_space) { /* Easy case: we can write all the audio to this reel */ _audio_reel->write (audio); + offset += remaining; } else { /* Write the part we can */ - shared_ptr part (new AudioBuffers (audio->channels(), this_time)); - part->copy_from (audio.get(), this_time, offset, 0); + shared_ptr part (new AudioBuffers (audio->channels(), reel_space)); + part->copy_from (audio.get(), reel_space, offset, 0); _audio_reel->write (part); ++_audio_reel; + offset += reel_space; } - - offset += this_time; } } @@ -556,7 +554,7 @@ Writer::write_cover_sheet () string text = Config::instance()->cover_sheet (); boost::algorithm::replace_all (text, "$CPL_NAME", _film->name()); boost::algorithm::replace_all (text, "$TYPE", _film->dcp_content_type()->pretty_name()); - boost::algorithm::replace_all (text, "$CONTAINER", _film->container()->nickname()); + boost::algorithm::replace_all (text, "$CONTAINER", _film->container()->container_nickname()); boost::algorithm::replace_all (text, "$AUDIO_LANGUAGE", _film->isdcf_metadata().audio_language); boost::algorithm::replace_all (text, "$SUBTITLE_LANGUAGE", _film->isdcf_metadata().subtitle_language); @@ -565,7 +563,9 @@ Writer::write_cover_sheet () boost::filesystem::recursive_directory_iterator i = boost::filesystem::recursive_directory_iterator(_film->dir(_film->dcp_name())); i != boost::filesystem::recursive_directory_iterator(); ++i) { - size += boost::filesystem::file_size (i->path ()); + if (boost::filesystem::is_regular_file (i->path ())) { + size += boost::filesystem::file_size (i->path ()); + } } if (size > (1000000000L)) { @@ -676,16 +676,7 @@ operator== (QueueItem const & a, QueueItem const & b) void Writer::set_encoder_threads (int threads) { - /* I think the scaling factor here should be the ratio of the longest frame - encode time to the shortest; if the thread count is T, longest time is L - and the shortest time S we could encode L/S frames per thread whilst waiting - for the L frame to encode so we might have to store LT/S frames. - - However we don't want to use too much memory, so keep it a bit lower than we'd - perhaps like. A J2K frame is typically about 1Mb so 3 here will mean we could - use about 240Mb with 72 encoding threads. - */ - _maximum_frames_in_memory = lrint (threads * 3); + _maximum_frames_in_memory = lrint (threads * Config::instance()->frames_in_memory_multiplier()); } void