using std::bad_alloc;
using std::cout;
using std::dynamic_pointer_cast;
-using std::exception;
-using std::list;
-using std::make_pair;
using std::make_shared;
using std::max;
-using std::min;
-using std::pair;
using std::shared_ptr;
using std::string;
using std::vector;
-using std::weak_ptr;
using boost::optional;
#if BOOST_VERSION >= 106100
using namespace boost::placeholders;
{
switch (Config::instance()->video_view_type()) {
case Config::VIDEO_VIEW_OPENGL:
- _video_view = new GLVideoView (this, p);
+ _video_view = std::make_shared<GLVideoView>(this, p);
break;
case Config::VIDEO_VIEW_SIMPLE:
- _video_view = new SimpleVideoView (this, p);
+ _video_view = std::make_shared<SimpleVideoView>(this, p);
break;
}
_video_view->Sized.connect (boost::bind(&FilmViewer::video_view_sized, this));
- _video_view->TooManyDropped.connect (boost::bind(&FilmViewer::too_many_frames_dropped, this));
+ _video_view->TooManyDropped.connect (boost::bind(boost::ref(TooManyDropped)));
set_film (shared_ptr<Film>());
}
try {
- _player = make_shared<Player>(_film);
+ _player = make_shared<Player>(_film, _optimise_for_j2k ? Image::Alignment::COMPACT : Image::Alignment::PADDED);
_player->set_fast ();
if (_dcp_decode_reduction) {
_player->set_dcp_decode_reduction (_dcp_decode_reduction);
_audio_channels,
bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24),
VideoRange::FULL,
- false,
- true
+ _optimise_for_j2k ? Image::Alignment::COMPACT : Image::Alignment::PADDED,
+ true,
+ dynamic_pointer_cast<GLVideoView>(_video_view) && _optimise_for_j2k
);
if (!Config::instance()->sound() && !_audio.isStreamOpen()) {
auto const view_ratio = float(_video_view->get()->GetSize().x) / _video_view->get()->GetSize().y;
auto const film_ratio = container ? container->ratio () : 1.78;
+ dcp::Size out_size;
if (view_ratio < film_ratio) {
/* panel is less widscreen than the film; clamp width */
- _out_size.width = _video_view->get()->GetSize().x;
- _out_size.height = lrintf (_out_size.width / film_ratio);
+ out_size.width = _video_view->get()->GetSize().x;
+ out_size.height = lrintf (out_size.width / film_ratio);
} else {
/* panel is more widescreen than the film; clamp height */
- _out_size.height = _video_view->get()->GetSize().y;
- _out_size.width = lrintf (_out_size.height * film_ratio);
+ out_size.height = _video_view->get()->GetSize().y;
+ out_size.width = lrintf (out_size.height * film_ratio);
}
/* Catch silly values */
- _out_size.width = max (64, _out_size.width);
- _out_size.height = max (64, _out_size.height);
+ out_size.width = max (64, out_size.width);
+ out_size.height = max (64, out_size.height);
- _player->set_video_container_size (_out_size);
+ _player->set_video_container_size (out_size);
}
*/
if (_audio.isStreamOpen()) {
_audio.setStreamTime (_video_view->position().seconds());
- _audio.startStream ();
+ try {
+ _audio.startStream ();
+ } catch (RtAudioError& e) {
+ _audio_channels = 0;
+ error_dialog (
+ _video_view->get(),
+ _("There was a problem starting audio playback. Please try another audio output device in Preferences."), std_to_wx(e.what())
+ );
+ }
}
_playing = true;
for (auto i: properties) {
if (
i == VideoContentProperty::CROP ||
- i == VideoContentProperty::SCALE ||
+ i == VideoContentProperty::CUSTOM_RATIO ||
+ i == VideoContentProperty::CUSTOM_SIZE ||
i == VideoContentProperty::FADE_IN ||
i == VideoContentProperty::FADE_OUT ||
i == VideoContentProperty::COLOUR_CONVERSION ||
void
-FilmViewer::too_many_frames_dropped ()
+FilmViewer::set_optimise_for_j2k (bool o)
{
- if (!Config::instance()->nagged(Config::NAG_TOO_MANY_DROPPED_FRAMES)) {
- stop ();
- }
-
- NagDialog::maybe_nag (
- panel(),
- Config::NAG_TOO_MANY_DROPPED_FRAMES,
- _("The player is dropping a lot of frames, so playback may not be accurate.\n\n"
- "<b>This does not necessarily mean that the DCP you are playing is defective!</b>\n\n"
- "You may be able to improve player performance by:\n"
- "• choosing 'decode at half resolution' or 'decode at quarter resolution' from the View menu\n"
- "• using a more powerful computer.\n"
- )
- );
+ _optimise_for_j2k = o;
+ _video_view->set_optimise_for_j2k (o);
}
+