X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Fwx%2Ffilm_viewer.cc;h=cb12a78e2fc797266b973e7d8b65ea2788dc8cd6;hp=8ed566bfcbd5ce39abcfa836c25797128e38de87;hb=e153d7f5dc128d97160e41bdda3c4e4a05c7140b;hpb=d17430d78742027b1e6b9098269a34f4742a4b6a diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index 8ed566bfc..cb12a78e2 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -28,6 +28,7 @@ #include "wx_util.h" #include "closed_captions_dialog.h" #include "gl_video_view.h" +#include "simple_video_view.h" #include "lib/film.h" #include "lib/ratio.h" #include "lib/util.h" @@ -78,9 +79,7 @@ rtaudio_callback (void* out, void *, unsigned int frames, double, RtAudioStreamS } FilmViewer::FilmViewer (wxWindow* p) - /* XXX: make this configurable */ - : _video_view (new GLVideoView(p)) - , _coalesce_player_changes (false) + : _coalesce_player_changes (false) , _audio (DCPOMATIC_RTAUDIO_API) , _audio_channels (0) , _audio_block_size (1024) @@ -98,9 +97,17 @@ FilmViewer::FilmViewer (wxWindow* p) , _state_timer ("viewer") , _gets (0) { - /* XXX: maybe this should be proxied through the VideoView */ - _video_view->get()->Bind (wxEVT_SIZE, boost::bind (&FilmViewer::video_view_sized, this)); - _timer.Bind (wxEVT_TIMER, boost::bind (&FilmViewer::timer, this)); + switch (Config::instance()->video_view_type()) { + case Config::VIDEO_VIEW_OPENGL: + _video_view = new GLVideoView (p); + break; + case Config::VIDEO_VIEW_SIMPLE: + _video_view = new SimpleVideoView (this, p); + break; + } + + _video_view->Sized.connect (boost::bind(&FilmViewer::video_view_sized, this)); + _timer.Bind (wxEVT_TIMER, boost::bind(&FilmViewer::timer, this)); set_film (shared_ptr ()); @@ -125,14 +132,13 @@ FilmViewer::set_film (shared_ptr film) _player_video.first.reset (); _player_video.second = DCPTime (); - _frame.reset (); + _video_view->set_image (shared_ptr()); _closed_captions_dialog->clear (); if (!_film) { _player.reset (); recreate_butler (); - _frame.reset (); - refresh_panel (); + refresh_view (); return; } @@ -207,11 +213,10 @@ FilmViewer::recreate_butler () } void -FilmViewer::refresh_panel () +FilmViewer::refresh_view () { - _state_timer.set ("refresh-panel"); - _video_view->get()->Refresh (); - _video_view->get()->Update (); + _state_timer.set ("update-view"); + _video_view->update (); _state_timer.unset (); } @@ -244,8 +249,8 @@ void FilmViewer::display_player_video () { if (!_player_video.first) { - _frame.reset (); - refresh_panel (); + _video_view->set_image (shared_ptr()); + refresh_view (); return; } @@ -278,9 +283,9 @@ FilmViewer::display_player_video () _state_timer.set ("get image"); - /* XXX: do we need to store _frame? */ - _frame = _player_video.first->image (bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true); - _video_view->set_image (_frame); + _video_view->set_image ( + _player_video.first->image(bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true) + ); _state_timer.set ("ImageChanged"); ImageChanged (_player_video.first); @@ -290,7 +295,7 @@ FilmViewer::display_player_video () _inter_position = _player_video.first->inter_position (); _inter_size = _player_video.first->inter_size (); - refresh_panel (); + refresh_view (); _closed_captions_dialog->update (time()); } @@ -346,7 +351,7 @@ void FilmViewer::set_outline_content (bool o) { _outline_content = o; - refresh_panel (); + refresh_view (); } void @@ -561,7 +566,7 @@ FilmViewer::config_changed (Config::Property p) { #ifdef DCPOMATIC_VARIANT_SWAROOP if (p == Config::PLAYER_BACKGROUND_IMAGE) { - refresh_panel (); + refresh_view (); return; } #endif