summaryrefslogtreecommitdiff
path: root/src/lib/video_content.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-05-09 19:58:37 +0100
committerCarl Hetherington <cth@carlh.net>2016-05-18 11:50:29 +0100
commit19f94521139aac13ef8fb4eaa55855b2ada307b4 (patch)
tree6e4b457c1fa46c674433fb1a5d2a9cd0f07c5a11 /src/lib/video_content.cc
parent0a2d40420813403a96352c6dc895d23fcd9994c0 (diff)
Move video frame rate ('prepared-for') into Content.
Diffstat (limited to 'src/lib/video_content.cc')
-rw-r--r--src/lib/video_content.cc72
1 files changed, 26 insertions, 46 deletions
diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc
index 0533a12e5..ff5a4cb17 100644
--- a/src/lib/video_content.cc
+++ b/src/lib/video_content.cc
@@ -42,13 +42,12 @@
#define LOG_GENERAL(...) film->log()->log (String::compose (__VA_ARGS__), LogEntry::TYPE_GENERAL);
int const VideoContentProperty::SIZE = 0;
-int const VideoContentProperty::FRAME_RATE = 1;
-int const VideoContentProperty::FRAME_TYPE = 2;
-int const VideoContentProperty::CROP = 3;
-int const VideoContentProperty::SCALE = 4;
-int const VideoContentProperty::COLOUR_CONVERSION = 5;
-int const VideoContentProperty::FADE_IN = 6;
-int const VideoContentProperty::FADE_OUT = 7;
+int const VideoContentProperty::FRAME_TYPE = 1;
+int const VideoContentProperty::CROP = 2;
+int const VideoContentProperty::SCALE = 3;
+int const VideoContentProperty::COLOUR_CONVERSION = 4;
+int const VideoContentProperty::FADE_IN = 5;
+int const VideoContentProperty::FADE_OUT = 6;
using std::string;
using std::setprecision;
@@ -81,7 +80,13 @@ VideoContent::VideoContent (Content* parent, shared_ptr<const Film> film, cxml::
{
_size.width = node->number_child<int> ("VideoWidth");
_size.height = node->number_child<int> ("VideoHeight");
- _frame_rate = node->optional_number_child<double> ("VideoFrameRate");
+
+ /* Backwards compatibility */
+ optional<double> r = node->optional_number_child<double>("VideoFrameRate");
+ if (r) {
+ _parent->set_video_frame_rate (r.get ());
+ }
+
_length = node->number_child<Frame> ("VideoLength");
_frame_type = static_cast<VideoFrameType> (node->number_child<int> ("VideoFrameType"));
_sample_aspect_ratio = node->optional_number_child<double> ("SampleAspectRatio");
@@ -128,10 +133,6 @@ VideoContent::VideoContent (Content* parent, shared_ptr<const Film> film, vector
throw JoinError (_("Content to be joined must have the same picture size."));
}
- if (c[i]->video->frame_rate() != ref->frame_rate()) {
- throw JoinError (_("Content to be joined must have the same video frame rate."));
- }
-
if (c[i]->video->frame_type() != ref->frame_type()) {
throw JoinError (_("Content to be joined must have the same video frame type."));
}
@@ -160,7 +161,6 @@ VideoContent::VideoContent (Content* parent, shared_ptr<const Film> film, vector
}
_size = ref->size ();
- _frame_rate = ref->frame_rate ();
_frame_type = ref->frame_type ();
_crop = ref->crop ();
_scale = ref->scale ();
@@ -176,9 +176,6 @@ VideoContent::as_xml (xmlpp::Node* node) const
node->add_child("VideoLength")->add_child_text (raw_convert<string> (_length));
node->add_child("VideoWidth")->add_child_text (raw_convert<string> (_size.width));
node->add_child("VideoHeight")->add_child_text (raw_convert<string> (_size.height));
- if (_frame_rate) {
- node->add_child("VideoFrameRate")->add_child_text (raw_convert<string> (_frame_rate.get()));
- }
node->add_child("VideoFrameType")->add_child_text (raw_convert<string> (static_cast<int> (_frame_type)));
if (_sample_aspect_ratio) {
node->add_child("SampleAspectRatio")->add_child_text (raw_convert<string> (_sample_aspect_ratio.get ()));
@@ -198,7 +195,6 @@ VideoContent::take_from_examiner (shared_ptr<VideoExaminer> d)
{
/* These examiner calls could call other content methods which take a lock on the mutex */
dcp::Size const vs = d->video_size ();
- optional<double> const vfr = d->video_frame_rate ();
Frame vl = d->video_length ();
optional<double> const ar = d->sample_aspect_ratio ();
bool const yuv = d->yuv ();
@@ -206,7 +202,6 @@ VideoContent::take_from_examiner (shared_ptr<VideoExaminer> d)
{
boost::mutex::scoped_lock lm (_mutex);
_size = vs;
- _frame_rate = vfr;
_length = vl;
_sample_aspect_ratio = ar;
_yuv = yuv;
@@ -221,8 +216,11 @@ VideoContent::take_from_examiner (shared_ptr<VideoExaminer> d)
DCPOMATIC_ASSERT (film);
LOG_GENERAL ("Video length obtained from header as %1 frames", _length);
+ if (d->video_frame_rate()) {
+ _parent->set_video_frame_rate (d->video_frame_rate().get());
+ }
+
_parent->signal_changed (VideoContentProperty::SIZE);
- _parent->signal_changed (VideoContentProperty::FRAME_RATE);
_parent->signal_changed (VideoContentProperty::SCALE);
_parent->signal_changed (ContentProperty::LENGTH);
}
@@ -251,11 +249,10 @@ string
VideoContent::technical_summary () const
{
string s = String::compose (
- N_("video: length %1 frames, size %2x%3, rate %4"),
+ N_("video: length %1 frames, size %2x%3"),
length_after_3d_combine(),
size().width,
- size().height,
- frame_rate()
+ size().height
);
if (sample_aspect_ratio ()) {
@@ -325,12 +322,17 @@ VideoContent::fade (Frame f) const
{
DCPOMATIC_ASSERT (f >= 0);
- Frame const ts = _parent->trim_start().frames_round(frame_rate());
+ shared_ptr<const Film> film = _film.lock ();
+ DCPOMATIC_ASSERT (film);
+
+ double const vfr = _parent->active_video_frame_rate ();
+
+ Frame const ts = _parent->trim_start().frames_round(vfr);
if ((f - ts) < fade_in()) {
return double (f - ts) / fade_in();
}
- Frame fade_out_start = length() - _parent->trim_end().frames_round(frame_rate()) - fade_out();
+ Frame fade_out_start = length() - _parent->trim_end().frames_round(vfr) - fade_out();
if (f >= fade_out_start) {
return 1 - double (f - fade_out_start) / fade_out();
}
@@ -396,12 +398,6 @@ VideoContent::processing_description () const
d << " (" << fixed << setprecision(2) << container_size.ratio () << ":1)\n";
}
- d << _("Content frame rate");
- d << " " << fixed << setprecision(4) << frame_rate() << "\n";
-
- FrameRateChange frc (frame_rate(), film->video_frame_rate ());
- d << frc.description () << "\n";
-
return d.str ();
}
@@ -410,16 +406,6 @@ VideoContent::add_properties (list<UserProperty>& p) const
{
p.push_back (UserProperty (_("Video"), _("Length"), raw_convert<string> (length ()), _("video frames")));
p.push_back (UserProperty (_("Video"), _("Size"), raw_convert<string> (size().width) + "x" + raw_convert<string> (size().height)));
- p.push_back (UserProperty (_("Video"), _("Frame rate"), raw_convert<string> (frame_rate(), 5), _("frames per second")));
-}
-
-double
-VideoContent::frame_rate () const
-{
- boost::mutex::scoped_lock lm (_mutex);
- shared_ptr<const Film> film = _film.lock ();
- DCPOMATIC_ASSERT (film);
- return _frame_rate.get_value_or (film->video_frame_rate ());
}
void
@@ -459,12 +445,6 @@ VideoContent::set_scale (VideoContentScale s)
}
void
-VideoContent::set_frame_rate (double r)
-{
- maybe_set (_frame_rate, r, VideoContentProperty::FRAME_RATE);
-}
-
-void
VideoContent::set_frame_type (VideoFrameType t)
{
maybe_set (_frame_type, t, VideoContentProperty::FRAME_TYPE);