/*
- Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
#include "lib/log.h"
#include "lib/config.h"
#include "lib/compose.hpp"
+#include "lib/dcpomatic_log.h"
extern "C" {
#include <libavutil/pixfmt.h>
}
, _pad_black (false)
#ifdef DCPOMATIC_VARIANT_SWAROOP
, _in_watermark (false)
+ , _background_image (false)
#endif
{
#ifndef __WXOSX__
}
_film = film;
-
- FilmChanged ();
+ _video_position = DCPTime ();
+ _player_video.first.reset ();
+ _player_video.second = DCPTime ();
_frame.reset ();
_closed_captions_dialog->clear ();
if (_dcp_decode_reduction) {
_player->set_dcp_decode_reduction (_dcp_decode_reduction);
}
- } catch (bad_alloc) {
+ } catch (bad_alloc &) {
error_dialog (_panel, _("There is not enough free memory to do that."));
_film.reset ();
return;
map.set (dcp::RS, 1, 1 / sqrt(2)); // Rs -> Rt
}
- _butler.reset (new Butler(_player, _film->log(), map, _audio_channels, bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true));
+ _butler.reset (new Butler(_player, map, _audio_channels, bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true));
if (!Config::instance()->sound() && !_audio.isStreamOpen()) {
_butler->disable_audio ();
}
} while (
_player_video.first &&
_film->three_d() &&
- (_eyes != _player_video.first->eyes())
+ _eyes != _player_video.first->eyes() &&
+ _player_video.first->eyes() != EYES_BOTH
);
_butler->rethrow ();
if (next >= _film->length()) {
stop ();
+ Finished ();
+ return;
}
+ LOG_DEBUG_PLAYER("%1 -> %2; delay %3", next.seconds(), time().seconds(), max((next.seconds() - time().seconds()) * 1000, 1.0));
_timer.Start (max ((next.seconds() - time().seconds()) * 1000, 1.0), wxTIMER_ONE_SHOT);
if (_butler) {
}
}
+bool
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+FilmViewer::maybe_draw_background_image (wxPaintDC& dc)
+{
+ optional<boost::filesystem::path> 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;
+ }
+
+ return false;
+}
+#else
+FilmViewer::maybe_draw_background_image (wxPaintDC &)
+{
+ return false;
+}
+#endif
+
void
FilmViewer::paint_panel ()
{
wxPaintDC dc (_panel);
- if (!_frame || !_film || !_out_size.width || !_out_size.height || _out_size != _frame->size()) {
- dc.Clear ();
#ifdef DCPOMATIC_VARIANT_SWAROOP
- optional<boost::filesystem::path> 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));
- }
+ if (_background_image) {
+ dc.Clear ();
+ maybe_draw_background_image (dc);
+ return;
+ }
#endif
+
+ if (!_out_size.width || !_out_size.height || !_film || !_frame || _out_size != _frame->size()) {
+ dc.Clear ();
return;
}
return false;
}
- if (!_player_video.first->reset_metadata (_player->video_container_size(), _film->frame_size())) {
+ if (!_player_video.first->reset_metadata (_film, _player->video_container_size(), _film->frame_size())) {
return false;
}
}
PositionChanged ();
- Seeked (position());
}
void