X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fframe_rate_change.h;h=acb75c0b5764e91257ef21d86ff6474b99134ee0;hp=6165f684010473e59f458d61ac656eb222ec23e5;hb=HEAD;hpb=1dcfb3a26085ebb3703f40e2f51e43ce3d98be50 diff --git a/src/lib/frame_rate_change.h b/src/lib/frame_rate_change.h index 6165f6840..c28342e92 100644 --- a/src/lib/frame_rate_change.h +++ b/src/lib/frame_rate_change.h @@ -1,32 +1,48 @@ /* - Copyright (C) 2012-2014 Carl Hetherington + Copyright (C) 2012-2021 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ + +#ifndef DCPOMATIC_FRAME_RATE_CHANGE_H +#define DCPOMATIC_FRAME_RATE_CHANGE_H + + +#include #include -struct FrameRateChange + +class Film; +class Content; + + +class FrameRateChange { - FrameRateChange (float, int); +public: + FrameRateChange (); + FrameRateChange (double, int); + FrameRateChange (std::shared_ptr film, std::shared_ptr content); + FrameRateChange (std::shared_ptr film, Content const * content); /** @return factor by which to multiply a source frame rate to get the effective rate after any skip or repeat has happened. */ - float factor () const { + double factor () const { if (skip) { return 0.5; } @@ -34,10 +50,13 @@ struct FrameRateChange return repeat; } + double source = 24; + int dcp = 24; + /** true to skip every other frame */ - bool skip; + bool skip = false; /** number of times to use each frame (e.g. 1 is normal, 2 means repeat each frame once, and so on) */ - int repeat; + int repeat = 1; /** true if this DCP will run its video faster or slower than the source * without taking into account `repeat' nor `skip'. * (e.g. change_speed will be true if @@ -47,12 +66,15 @@ struct FrameRateChange * source is 15.00fps, DCP is 30fps * source is 12.50fps, DCP is 25fps) */ - bool change_speed; + bool change_speed = false; /** Amount by which the video is being sped-up in the DCP; e.g. for a * 24fps source in a 25fps DCP this would be 25/24. */ - float speed_up; + double speed_up = 1.0; - std::string description; + std::string description () const; }; + + +#endif