- 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);
-
- signal_changed (CONTENT);
+ try {
+ shared_ptr<Options> o (new Options ("", "", ""));
+ o->out_size = Size (1024, 1024);
+
+ pair<shared_ptr<VideoDecoder>, shared_ptr<AudioDecoder> > d = decoder_factory (shared_from_this(), o, 0);
+
+ set_size (d.first->native_size ());
+ set_frames_per_second (d.first->frames_per_second ());
+ set_subtitle_streams (d.first->subtitle_streams ());
+ set_content_audio_streams (d.second->audio_streams ());
+
+ /* Start off with the first audio and subtitle streams */
+ if (!d.second->audio_streams().empty()) {
+ set_content_audio_stream (d.second->audio_streams().front());
+ }
+
+ if (!d.first->subtitle_streams().empty()) {
+ set_subtitle_stream (d.first->subtitle_streams().front());
+ }
+
+ {
+ boost::mutex::scoped_lock lm (_state_mutex);
+ _content = c;
+ }
+
+ signal_changed (CONTENT);
+
+ set_content_digest (md5_digest (content_path ()));
+
+ examine_content ();