: _audio (DCPOMATIC_RTAUDIO_API)
, _closed_captions_dialog (new ClosedCaptionsDialog(p, this))
{
+#if wxCHECK_VERSION(3, 1, 0)
switch (Config::instance()->video_view_type()) {
case Config::VIDEO_VIEW_OPENGL:
_video_view = std::make_shared<GLVideoView>(this, p);
_video_view = std::make_shared<SimpleVideoView>(this, p);
break;
}
+#else
+ _video_view = std::make_shared<SimpleVideoView>(this, p);
+#endif
_video_view->Sized.connect (boost::bind(&FilmViewer::video_view_sized, this));
_video_view->TooManyDropped.connect (boost::bind(boost::ref(TooManyDropped)));
return;
}
+#if wxCHECK_VERSION(3, 1, 0)
auto const j2k_gl_optimised = dynamic_pointer_cast<GLVideoView>(_video_view) && _optimise_for_j2k;
+#else
+ auto const j2k_gl_optimised = false;
+#endif
_butler = std::make_shared<Butler>(
_film,
auto const container = _film->container ();
- auto const view_ratio = float(_video_view->get()->GetSize().x) / _video_view->get()->GetSize().y;
+#if wxCHECK_VERSION(3,1,0)
+ auto const dpi_scale_factor = _video_view->get()->GetDPIScaleFactor();
+#else
+ auto const dpi_scale_factor = 1;
+#endif
+ int const video_view_width = std::round(_video_view->get()->GetSize().x * dpi_scale_factor);
+ int const video_view_height = std::round(_video_view->get()->GetSize().y * dpi_scale_factor);
+
+ auto const view_ratio = float(video_view_width) / video_view_height;
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.width = video_view_width;
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.height = video_view_height;
out_size.width = lrintf (out_size.height * film_ratio);
}
/* Calling start() below may directly result in Stopped being emitted, and if that
* happens we want it to come after the Started signal, so do that first.
*/
- Started (position());
+ Started ();
_video_view->start ();
}
_playing = false;
_video_view->stop ();
- Stopped (position());
+ Stopped ();
_video_view->rethrow ();
return true;
FilmViewer::audio_callback (void* out_p, unsigned int frames)
{
while (true) {
- auto t = _butler->get_audio (reinterpret_cast<float*> (out_p), frames);
+ auto t = _butler->get_audio (Butler::Behaviour::NON_BLOCKING, reinterpret_cast<float*> (out_p), frames);
if (!t || DCPTime(uncorrected_time() - *t) < one_video_frame()) {
/* There was an underrun or this audio is on time; carry on */
break;