X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ffilm_viewer.cc;h=4b1fb442e12ba802e42eb32a70affcd81dfd68c6;hb=996b0c06e23bcb6b300d7b8799df94993692e07d;hp=2f69235c150d953f6d924060ba71de2f484b9804;hpb=f2caad0df1a451e2aff68dfd37277faa72116e12;p=dcpomatic.git diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index 2f69235c1..4b1fb442e 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -27,6 +27,7 @@ #include #include #include "lib/film.h" +#include "lib/container.h" #include "lib/format.h" #include "lib/util.h" #include "lib/job_manager.h" @@ -115,7 +116,7 @@ void FilmViewer::film_changed (Film::Property p) { switch (p) { - case Film::FORMAT: + case Film::CONTAINER: calculate_sizes (); update_from_raw (); break; @@ -134,8 +135,6 @@ FilmViewer::film_changed (Film::Property p) _panel->Update (); break; case Film::SCALER: - case Film::FILTERS: - case Film::CROP: update_from_decoder (); break; default: @@ -173,7 +172,7 @@ FilmViewer::set_film (shared_ptr f) _film->ContentChanged.connect (boost::bind (&FilmViewer::film_content_changed, this, _1, _2)); film_changed (Film::CONTENT); - film_changed (Film::FORMAT); + film_changed (Film::CONTAINER); film_changed (Film::WITH_SUBTITLES); film_changed (Film::SUBTITLE_OFFSET); film_changed (Film::SUBTITLE_SCALE); @@ -182,10 +181,11 @@ FilmViewer::set_film (shared_ptr f) void FilmViewer::update_from_decoder () { - if (!_player || _player->seek (_player->last_video ())) { + if (!_player) { return; } + _player->seek (_player->position ()); get_frame (); _panel->Refresh (); _panel->Update (); @@ -204,7 +204,7 @@ FilmViewer::timer (wxTimerEvent &) get_frame (); if (_film->length()) { - int const new_slider_position = 4096 * _player->last_video() / _film->length(); + int const new_slider_position = 4096 * _player->position() / _film->length(); if (new_slider_position != _slider->GetValue()) { _slider->SetValue (new_slider_position); } @@ -260,6 +260,8 @@ FilmViewer::paint_panel (wxPaintEvent &) void FilmViewer::slider_moved (wxScrollEvent &) { + cout << "slider " << _slider->GetValue() << " " << _film->length() << "\n"; + if (_film && _player) { _player->seek (_slider->GetValue() * _film->length() / 4096); } @@ -298,15 +300,8 @@ FilmViewer::raw_to_display () return; } - shared_ptr input = _raw_frame; - - pair const s = Filter::ffmpeg_strings (_film->filters()); - if (!s.second.empty ()) { - input = input->post_process (s.second, true); - } - /* Get a compacted image as we have to feed it to wxWidgets */ - _display_frame = input->scale_and_convert_to_rgb (_film_size, 0, _film->scaler(), false); + _display_frame = _raw_frame->scale_and_convert_to_rgb (_film_size, 0, _film->scaler(), false); if (_raw_sub) { @@ -314,7 +309,8 @@ FilmViewer::raw_to_display () when working out the scale that we are applying. */ - Size const cropped_size = _film->cropped_size (_raw_frame->size ()); + /* 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, @@ -337,10 +333,10 @@ FilmViewer::calculate_sizes () return; } - Format const * format = _film->format (); + Container const * container = _film->container (); float const panel_ratio = static_cast (_panel_size.width) / _panel_size.height; - float const film_ratio = format ? format->container_ratio () : 1.78; + float const film_ratio = container ? container->ratio () : 1.78; if (panel_ratio < film_ratio) { /* panel is less widscreen than the film; clamp width */ @@ -356,9 +352,9 @@ FilmViewer::calculate_sizes () of our _display_frame. */ _display_frame_x = 0; - if (format) { - _display_frame_x = static_cast (format->dcp_padding (_film)) * _out_size.width / format->dcp_size().width; - } +// if (format) { +// _display_frame_x = static_cast (format->dcp_padding (_film)) * _out_size.width / format->dcp_size().width; +// } _film_size = _out_size; _film_size.width -= _display_frame_x * 2; @@ -378,7 +374,7 @@ FilmViewer::play_clicked (wxCommandEvent &) void FilmViewer::check_play_state () { - if (!_film) { + if (!_film || _film->dcp_video_frame_rate() == 0) { return; } @@ -472,7 +468,9 @@ FilmViewer::film_content_changed (weak_ptr, int p) /* Force an update to our frame */ wxScrollEvent ev; slider_moved (ev); - } + } else if (p == VideoContentProperty::VIDEO_CROP) { + update_from_decoder (); + } } void