- shared_ptr<Options> o (new Options ("", "", ""));
- o->out_size = Size (1024, 1024);
-
- shared_ptr<Decoder> d = decoder_factory (shared_from_this(), o, 0, 0);
-
- set_size (d->native_size ());
- set_frames_per_second (d->frames_per_second ());
- set_audio_sample_rate (d->audio_sample_rate ());
- set_has_subtitles (d->has_subtitles ());
- set_audio_streams (d->audio_streams ());
- set_subtitle_streams (d->subtitle_streams ());
- set_audio_stream (audio_streams().empty() ? -1 : 0);
- set_subtitle_stream (subtitle_streams().empty() ? -1 : 0);
+ try {
+ shared_ptr<DecodeOptions> o (new DecodeOptions);
+ Decoders d = decoder_factory (shared_from_this(), o, 0);
+
+ set_size (d.video->native_size ());
+ set_frames_per_second (d.video->frames_per_second ());
+ set_subtitle_streams (d.video->subtitle_streams ());
+ if (d.audio) {
+ set_content_audio_streams (d.audio->audio_streams ());
+ }
+
+ /* Start off with the first audio and subtitle streams */
+ if (d.audio && !d.audio->audio_streams().empty()) {
+ set_content_audio_stream (d.audio->audio_streams().front());
+ }
+
+ if (!d.video->subtitle_streams().empty()) {
+ set_subtitle_stream (d.video->subtitle_streams().front());
+ }
+
+ {
+ boost::mutex::scoped_lock lm (_state_mutex);
+ _content = c;
+ }
+
+ signal_changed (CONTENT);
+
+ examine_content ();
+
+ } catch (...) {
+
+ boost::mutex::scoped_lock lm (_state_mutex);
+ _content = old_content;
+ throw;
+
+ }
+
+ /* Default format */
+ switch (content_type()) {
+ case STILL:
+ set_format (Format::from_id ("var-185"));
+ break;
+ case VIDEO:
+ set_format (Format::from_id ("185"));
+ break;
+ }
+
+ /* Still image DCPs must use external audio */
+ if (content_type() == STILL) {
+ set_use_content_audio (false);
+ }
+}
+
+void
+Film::set_trust_content_header (bool t)
+{
+ {
+ boost::mutex::scoped_lock lm (_state_mutex);
+ _trust_content_header = t;
+ }