X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ffilm_viewer.cc;h=e1471d94eb3805ddb754d77dc8812b9f849ba8fb;hb=a0856e3fbef17f24073b01cb96be6bbcb229ecbc;hp=97185ca94ba5b5cfc117926324b29c7f1a4583eb;hpb=6166c045a8de42edd09924fdd995a77a3b753e54;p=dcpomatic.git diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index 97185ca94..e1471d94e 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -1,5 +1,3 @@ -/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */ - /* Copyright (C) 2012 Carl Hetherington @@ -27,11 +25,9 @@ #include #include #include "lib/film.h" -#include "lib/container.h" -#include "lib/format.h" +#include "lib/ratio.h" #include "lib/util.h" #include "lib/job_manager.h" -#include "lib/subtitle.h" #include "lib/image.h" #include "lib/scaler.h" #include "lib/exceptions.h" @@ -67,7 +63,10 @@ FilmViewer::FilmViewer (shared_ptr f, wxWindow* p) , _display_frame_x (0) , _got_frame (false) { +#ifndef __WXOSX__ _panel->SetDoubleBuffered (true); +#endif + #if wxMAJOR_VERSION == 2 && wxMINOR_VERSION >= 9 _panel->SetBackgroundStyle (wxBG_STYLE_PAINT); #endif @@ -166,7 +165,7 @@ FilmViewer::set_film (shared_ptr f) on and off without needing obtain a new Player. */ - _player->Video.connect (bind (&FilmViewer::process_video, this, _1, _2, _3, _4)); + _player->Video.connect (bind (&FilmViewer::process_video, this, _1, _2, _3)); _film->Changed.connect (boost::bind (&FilmViewer::film_changed, this, _1)); _film->ContentChanged.connect (boost::bind (&FilmViewer::film_content_changed, this, _1, _2)); @@ -198,9 +197,6 @@ FilmViewer::timer (wxTimerEvent &) return; } - _panel->Refresh (); - _panel->Update (); - get_frame (); if (_film->length()) { @@ -209,6 +205,9 @@ FilmViewer::timer (wxTimerEvent &) _slider->SetValue (new_slider_position); } } + + _panel->Refresh (); + _panel->Update (); } @@ -233,12 +232,6 @@ FilmViewer::paint_panel (wxPaintEvent &) wxBitmap frame_bitmap (frame); dc.DrawBitmap (frame_bitmap, _display_frame_x, 0); - if (_film->with_subtitles() && _display_sub) { - wxImage sub (_display_sub->size().width, _display_sub->size().height, _display_sub->data()[0], _display_sub->alpha(), true); - wxBitmap sub_bitmap (sub); - dc.DrawBitmap (sub_bitmap, _display_sub_position.x, _display_sub_position.y); - } - if (_out_size.width < _panel_size.width) { wxPen p (GetBackgroundColour ()); wxBrush b (GetBackgroundColour ()); @@ -301,29 +294,7 @@ FilmViewer::raw_to_display () } /* Get a compacted image as we have to feed it to wxWidgets */ - _display_frame = _raw_frame->scale_and_convert_to_rgb (_film_size, 0, _film->scaler(), false); - - if (_raw_sub) { - - /* Our output is already cropped by the decoder, so we need to account for that - when working out the scale that we are applying. - */ - - /* XXX */ - Size const cropped_size = _raw_frame->size ();//_film->cropped_size (_raw_frame->size ()); - - Rect tx = subtitle_transformed_area ( - float (_film_size.width) / cropped_size.width, - float (_film_size.height) / cropped_size.height, - _raw_sub->area(), _film->subtitle_offset(), _film->subtitle_scale() - ); - - _display_sub.reset (new RGBPlusAlphaImage (_raw_sub->image()->scale (tx.size(), _film->scaler(), false))); - _display_sub_position = tx.position(); - _display_sub_position.x += _display_frame_x; - } else { - _display_sub.reset (); - } + _display_frame = _raw_frame->scale_and_convert_to_rgb (_film_size, _film->scaler(), false); } void @@ -333,7 +304,7 @@ FilmViewer::calculate_sizes () return; } - Container const * container = _film->container (); + Ratio const * container = _film->container (); float const panel_ratio = static_cast (_panel_size.width) / _panel_size.height; float const film_ratio = container ? container->ratio () : 1.78; @@ -386,17 +357,17 @@ FilmViewer::check_play_state () } void -FilmViewer::process_video (shared_ptr image, bool, shared_ptr sub, Time t) +FilmViewer::process_video (shared_ptr image, bool, Time t) { _raw_frame = image; - _raw_sub = sub; raw_to_display (); _got_frame = true; double const fps = _film->dcp_video_frame_rate (); - _frame->SetLabel (wxString::Format (wxT("%d"), int (rint (t * fps / TIME_HZ)))); + /* Count frame number from 1 ... not sure if this is the best idea */ + _frame->SetLabel (wxString::Format (wxT("%d"), int (rint (t * fps / TIME_HZ)) + 1)); double w = static_cast(t) / TIME_HZ; int const h = (w / 3600);