X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ffilm_viewer.cc;h=afa1940db3fe94e5014e61c38b70dfbbc373e648;hb=a3ec24ce1952a3bfd556d30b50cee79cc57436cb;hp=f8707f9b2b5c6426de57a3c5d00a32ceb74ace3c;hpb=b44c92e5aed634eb4cbb2ed4aaafc57a66f275e5;p=dcpomatic.git diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index f8707f9b2..afa1940db 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -193,7 +193,7 @@ FilmViewer::recreate_butler () map.set (dcp::RS, 1, 1 / sqrt(2)); // Rs -> Rt } - _butler.reset (new Butler (_player, _film->log(), map, _audio_channels)); + _butler.reset (new Butler(_player, _film->log(), map, _audio_channels, bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true)); if (!Config::instance()->sound() && !_audio.isStreamOpen()) { _butler->disable_audio (); } @@ -267,15 +267,11 @@ FilmViewer::display_player_video () * The content's specified colour conversion indicates the colourspace * which the content is in (according to the user). * - * PlayerVideo::image (bound to PlayerVideo::always_rgb) will take the source + * PlayerVideo::image (bound to PlayerVideo::force) will take the source * image and convert it (from whatever the user has said it is) to RGB. */ - _frame = _player_video.first->image ( - optional(bind(&Log::dcp_log, _film->log().get(), _1, _2)), - bind (&PlayerVideo::always_rgb, _1), - false, true - ); + _frame = _player_video.first->image (bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true); ImageChanged (_player_video.first); @@ -310,6 +306,22 @@ FilmViewer::timer () } } +bool +FilmViewer::maybe_draw_background_image (wxPaintDC& dc) +{ +#ifdef DCPOMATIC_VARIANT_SWAROOP + optional bg = Config::instance()->player_background_image(); + if (bg) { + wxImage image (std_to_wx(bg->string())); + wxBitmap bitmap (image); + dc.DrawBitmap (bitmap, max(0, (_panel_size.width - image.GetSize().GetWidth()) / 2), max(0, (_panel_size.height - image.GetSize().GetHeight()) / 2)); + return true; + } +#endif + + return false; +} + void FilmViewer::paint_panel () { @@ -317,14 +329,11 @@ FilmViewer::paint_panel () if (!_frame || !_film || !_out_size.width || !_out_size.height || _out_size != _frame->size()) { dc.Clear (); -#ifdef DCPOMATIC_VARIANT_SWAROOP - optional bg = Config::instance()->player_background_image(); - if (bg) { - wxImage image (std_to_wx(bg->string())); - wxBitmap bitmap (image); - dc.DrawBitmap (bitmap, max(0, (_panel_size.width - image.GetSize().GetWidth()) / 2), max(0, (_panel_size.height - image.GetSize().GetHeight()) / 2)); - } -#endif + maybe_draw_background_image (dc); + return; + } + + if (_video_position == DCPTime() && maybe_draw_background_image (dc)) { return; }