_size.width = node->number_child<int> ("VideoWidth");
_size.height = node->number_child<int> ("VideoHeight");
- /* Backwards compatibility */
- auto r = node->optional_number_child<double>("VideoFrameRate");
- if (r) {
- _parent->set_video_frame_rate (r.get ());
- }
-
_use = node->optional_bool_child("Use").get_value_or(true);
_length = node->number_child<Frame> ("VideoLength");
}
void
-VideoContent::take_from_examiner (shared_ptr<VideoExaminer> d)
+VideoContent::take_from_examiner(shared_ptr<const Film> film, shared_ptr<VideoExaminer> d)
{
/* These examiner calls could call other content methods which take a lock on the mutex */
auto const vs = d->video_size ();
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->set_video_frame_rate(film, d->video_frame_rate().get());
}
}
maybe_set (_length, len, ContentProperty::LENGTH);
}
+void
+VideoContent::set_crop (Crop c)
+{
+ maybe_set (_crop, c, VideoContentProperty::CROP);
+}
+
void
VideoContent::set_left_crop (int c)
{
}
if (_custom_size) {
- return *_custom_size;
+ if (_custom_size->width <= film_container.width && _custom_size->height <= film_container.height) {
+ return *_custom_size;
+ }
+ return fit_ratio_within(_custom_size->ratio(), film_container);
}
auto size = size_after_crop ();
- size.width *= _sample_aspect_ratio.get_value_or(1);
+ size.width = std::lrint(size.width * _sample_aspect_ratio.get_value_or(1));
/* This is what we will return unless there is any legacy stuff to take into account */
auto auto_size = fit_ratio_within (size.ratio(), film_container);