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<AudioBuffers> part (new AudioBuffers (audio->channels(), this_time));
- part->copy_from (audio.get(), this_time, offset, 0);
+ shared_ptr<AudioBuffers> 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;
}
}
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);
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)) {
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