summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-06-23 00:14:03 +0200
committerCarl Hetherington <cth@carlh.net>2020-06-23 00:14:03 +0200
commitc7dbc5b9e7cd5e7d54b9e46b3db38fae8edad030 (patch)
treea961c238340a9214f8667c095df17d3bfbcb9f91
parent36f9ce3bb147741870ddda5f0eccb2c4d8981450 (diff)
Move some methods into piece.cc
-rw-r--r--src/lib/piece.cc69
-rw-r--r--src/lib/piece.h34
-rw-r--r--src/lib/wscript1
3 files changed, 75 insertions, 29 deletions
diff --git a/src/lib/piece.cc b/src/lib/piece.cc
new file mode 100644
index 000000000..f3adc0aef
--- /dev/null
+++ b/src/lib/piece.cc
@@ -0,0 +1,69 @@
+/*
+ Copyright (C) 2013-2020 Carl Hetherington <cth@carlh.net>
+
+ 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.
+
+ 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 DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "piece.h"
+
+
+using boost::shared_ptr;
+using namespace dcpomatic;
+
+
+DCPTime
+Piece::position () const
+{
+ return content->position ();
+}
+
+
+DCPTime
+Piece::end (shared_ptr<const Film> film) const
+{
+ return content->end (film);
+}
+
+
+DCPTime
+Piece::content_video_to_dcp (Frame f) const
+{
+ /* It might seem more logical here to convert s to a ContentTime (using the FrameRateChange)
+ then convert that ContentTime to frames at the content's rate. However this fails for
+ situations like content at 29.9978733fps, DCP at 30fps. The accuracy of the Time type is not
+ enough to distinguish between the two with low values of time (e.g. 3200 in Time units).
+
+ Instead we convert the DCPTime using the DCP video rate then account for any skip/repeat.
+ */
+ DCPTime const d = DCPTime::from_frames(f * frc.factor(), frc.dcp) - DCPTime(content->trim_start(), frc);
+ return d + position();
+}
+
+
+DCPTime
+Piece::content_time_to_dcp (ContentTime t) const
+{
+ return max (DCPTime(), DCPTime(t - content->trim_start(), frc) + position());
+}
+
+
+Crop
+Piece::video_crop () const
+{
+ return content->video->crop ();
+}
+
diff --git a/src/lib/piece.h b/src/lib/piece.h
index 7fcf00dab..f6bf4b1b6 100644
--- a/src/lib/piece.h
+++ b/src/lib/piece.h
@@ -40,35 +40,11 @@ public:
, done (false)
{}
- dcpomatic::DCPTime position () const {
- return content->position ();
- }
-
- dcpomatic::DCPTime end (boost::shared_ptr<const Film> film) const {
- return content->end (film);
- }
-
- dcpomatic::DCPTime content_video_to_dcp (Frame f) const
- {
- /* It might seem more logical here to convert s to a ContentTime (using the FrameRateChange)
- then convert that ContentTime to frames at the content's rate. However this fails for
- situations like content at 29.9978733fps, DCP at 30fps. The accuracy of the Time type is not
- enough to distinguish between the two with low values of time (e.g. 3200 in Time units).
-
- Instead we convert the DCPTime using the DCP video rate then account for any skip/repeat.
- */
- dcpomatic::DCPTime const d = dcpomatic::DCPTime::from_frames(f * frc.factor(), frc.dcp) - dcpomatic::DCPTime(content->trim_start(), frc);
- return d + position();
- }
-
- dcpomatic::DCPTime content_time_to_dcp (dcpomatic::ContentTime t) const
- {
- return max (dcpomatic::DCPTime(), dcpomatic::DCPTime(t - content->trim_start(), frc) + position());
- }
-
- Crop video_crop () const {
- return content->video->crop ();
- }
+ dcpomatic::DCPTime position () const;
+ dcpomatic::DCPTime end (boost::shared_ptr<const Film> film) const;
+ dcpomatic::DCPTime content_video_to_dcp (Frame f) const;
+ dcpomatic::DCPTime content_time_to_dcp (dcpomatic::ContentTime t) const;
+ Crop video_crop () const;
boost::shared_ptr<Content> content;
boost::shared_ptr<Decoder> decoder;
diff --git a/src/lib/wscript b/src/lib/wscript
index c2dfb55d8..4efad9c3b 100644
--- a/src/lib/wscript
+++ b/src/lib/wscript
@@ -136,6 +136,7 @@ sources = """
mid_side_decoder.cc
monitor_checker.cc
overlaps.cc
+ piece.cc
player.cc
player_text.cc
player_video.cc