#include "lib/util.h"
#include "lib/video_content.h"
#include "lib/video_decoder.h"
+#include <dcp/exceptions.h>
+#include <dcp/warnings.h>
extern "C" {
#include <libavutil/pixfmt.h>
}
-#include <dcp/exceptions.h>
+LIBDCP_DISABLE_WARNINGS
#include <wx/tglbtn.h>
+LIBDCP_ENABLE_WARNINGS
#include <iomanip>
}
-/** Ask for ::get() to be called next time we are idle */
+/** Ask for ::idle_handler() to be called next time we are idle */
void
FilmViewer::request_idle_display_next_frame ()
{
VideoRange::FULL,
j2k_gl_optimised ? Image::Alignment::COMPACT : Image::Alignment::PADDED,
true,
- j2k_gl_optimised
+ j2k_gl_optimised,
+ (Config::instance()->sound() && _audio.isStreamOpen()) ? Butler::Audio::ENABLED : Butler::Audio::DISABLED
);
- if (!Config::instance()->sound() && !_audio.isStreamOpen()) {
- _butler->disable_audio ();
- }
-
_closed_captions_dialog->set_butler (_butler);
resume ();
out_size.width = max (64, out_size.width);
out_size.height = max (64, out_size.height);
+ /* Make sure the video container sizes are always a multiple of 2 so that
+ * we don't get gaps with subsampled sources (e.g. YUV420)
+ */
+ if (out_size.width % 2) {
+ out_size.width++;
+ }
+ if (out_size.height % 2) {
+ out_size.height++;
+ }
+
_player->set_video_container_size (out_size);
}
}
+optional<ContentTime>
+FilmViewer::position_in_content (shared_ptr<const Content> content) const
+{
+ return _player->dcp_to_content_time (content, position());
+}
+
+
DCPTime
FilmViewer::one_video_frame () const
{
_video_view->set_optimise_for_j2k (o);
}
+
+void
+FilmViewer::set_crop_guess (dcpomatic::Rect<float> crop)
+{
+ if (crop != _crop_guess) {
+ _crop_guess = crop;
+ _video_view->update ();
+ }
+}
+
+
+void
+FilmViewer::unset_crop_guess ()
+{
+ _crop_guess = boost::none;
+ _video_view->update ();
+}
+