X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ffilm_viewer.cc;h=6a40e88f7ee141d3b878f63968462c34210d7a03;hb=596441a4e8cf03a88113646ca6da2f90e721a38b;hp=e9a1a574be01477b884e34a5eeb05e30684edbcc;hpb=28dbf4fd074d2046a3c8ddebac9a537a80fd457a;p=dcpomatic.git diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc index e9a1a574b..6a40e88f7 100644 --- a/src/wx/film_viewer.cc +++ b/src/wx/film_viewer.cc @@ -1,3 +1,5 @@ +/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */ + /* Copyright (C) 2012 Carl Hetherington @@ -25,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" @@ -113,7 +116,7 @@ void FilmViewer::film_changed (Film::Property p) { switch (p) { - case Film::FORMAT: + case Film::CONTAINER: calculate_sizes (); update_from_raw (); break; @@ -133,7 +136,6 @@ FilmViewer::film_changed (Film::Property p) break; case Film::SCALER: case Film::FILTERS: - case Film::CROP: update_from_decoder (); break; default: @@ -171,7 +173,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); @@ -180,7 +182,7 @@ FilmViewer::set_film (shared_ptr f) void FilmViewer::update_from_decoder () { - if (!_player || _player->seek (_player->last_video_time ())) { + if (!_player || _player->seek (_player->last_video ())) { return; } @@ -201,8 +203,8 @@ FilmViewer::timer (wxTimerEvent &) get_frame (); - if (_film->video_length()) { - int const new_slider_position = 4096 * _player->last_video_time() / (_film->video_length() / _film->video_frame_rate()); + if (_film->length()) { + int const new_slider_position = 4096 * _player->last_video() / _film->length(); if (new_slider_position != _slider->GetValue()) { _slider->SetValue (new_slider_position); } @@ -258,12 +260,8 @@ FilmViewer::paint_panel (wxPaintEvent &) void FilmViewer::slider_moved (wxScrollEvent &) { - if (!_film || !_player) { - return; - } - - if (_player->seek (_slider->GetValue() * _film->video_length() / (4096 * _film->video_frame_rate()))) { - return; + if (_film && _player) { + _player->seek (_slider->GetValue() * _film->length() / 4096); } get_frame (); @@ -316,7 +314,8 @@ FilmViewer::raw_to_display () when working out the scale that we are applying. */ - Size const cropped_size = _film->cropped_size (_film->video_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, @@ -339,10 +338,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 */ @@ -358,9 +357,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; @@ -385,14 +384,14 @@ FilmViewer::check_play_state () } if (_play_button->GetValue()) { - _timer.Start (1000 / _film->video_frame_rate()); + _timer.Start (1000 / _film->dcp_video_frame_rate()); } else { _timer.Stop (); } } void -FilmViewer::process_video (shared_ptr image, bool, shared_ptr sub, double t) +FilmViewer::process_video (shared_ptr image, bool, shared_ptr sub, Time t) { _raw_frame = image; _raw_sub = sub; @@ -401,10 +400,10 @@ FilmViewer::process_video (shared_ptr image, bool, shared_ptrvideo_frame_rate (); - _frame->SetLabel (wxString::Format (wxT("%d"), int (rint (t * fps)))); + double const fps = _film->dcp_video_frame_rate (); + _frame->SetLabel (wxString::Format (wxT("%d"), int (rint (t * fps / TIME_HZ)))); - double w = t; + double w = static_cast(t) / TIME_HZ; int const h = (w / 3600); w -= h * 3600; int const m = (w / 60); @@ -474,7 +473,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