set_size (d.video->native_size ());
set_frames_per_second (d.video->frames_per_second ());
set_subtitle_streams (d.video->subtitle_streams ());
- set_content_audio_streams (d.audio->audio_streams ());
+ if (d.audio) {
+ set_content_audio_streams (d.audio->audio_streams ());
+ }
/* Start off with the first audio and subtitle streams */
- if (!d.audio->audio_streams().empty()) {
+ if (d.audio && !d.audio->audio_streams().empty()) {
set_content_audio_stream (d.audio->audio_streams().front());
}
return PIX_FMT_RGB24;
}
+bool
+ImageMagickDecoder::seek (SourceFrame f)
+{
+ _iter = _files.begin ();
+ for (int i = 0; i < f; ++i) {
+ if (_iter == _files.end()) {
+ return false;
+ }
+ ++_iter;
+ }
+
+ return true;
+}
return false;
}
+ bool seek (SourceFrame);
+
protected:
bool pass ();
PixelFormat pixel_format () const;
};
for (int i = 0; i < MAX_AUDIO_CHANNELS; ++i) {
- add_label_to_sizer (_audio_sizer, _audio_panel, channels[i]);
+ video_control (add_label_to_sizer (_audio_sizer, _audio_panel, channels[i]));
_external_audio[i] = new wxFilePickerCtrl (_audio_panel, wxID_ANY, wxT (""), wxT ("Select Audio File"), wxT ("*.wav"));
_audio_sizer->Add (video_control (_external_audio[i]), 1, wxEXPAND);
}
_subtitle_sizer->Add (_with_subtitles, 1);
_subtitle_stream = new wxComboBox (_subtitle_panel, wxID_ANY, wxT (""), wxDefaultPosition, wxDefaultSize, 0, 0, wxCB_READONLY);
- _subtitle_sizer->Add (_subtitle_stream);
+ _subtitle_sizer->Add (video_control (_subtitle_stream));
video_control (add_label_to_sizer (_subtitle_sizer, _subtitle_panel, "Subtitle Offset"));
_subtitle_offset = new wxSpinCtrl (_subtitle_panel);
_decoders.video->Video.connect (bind (&FilmViewer::process_video, this, _1, _2));
_decoders.video->OutputChanged.connect (boost::bind (&FilmViewer::decoder_changed, this));
_decoders.video->set_subtitle_stream (_film->subtitle_stream());
+ calculate_sizes ();
+ get_frame ();
+ _panel->Refresh ();
break;
}
case Film::WITH_SUBTITLES:
if (!_out_width || !_out_height || !_film) {
return;
}
-
+
_display_frame = _raw_frame->scale_and_convert_to_rgb (Size (_out_width, _out_height), 0, _film->scaler());
if (_raw_sub) {
if (!_out_width || !_out_height) {
return;
}
-
+
shared_ptr<Image> last = _display_frame;
while (last == _display_frame) {
_decoders.video->pass ();