using boost::optional;
using dcp::raw_convert;
using dcp::locale_convert;
+using namespace dcpomatic;
int const ContentProperty::PATH = 400;
int const ContentProperty::POSITION = 401;
video->modify_position (film, p);
}
- if (audio) {
+ /* Only allow the audio to modify if we have no video;
+ sometimes p can't be on an integer video AND audio frame,
+ and in these cases we want the video constraint to be
+ satisfied since (I think) the audio code is better able to
+ cope.
+ */
+ if (!video && audio) {
audio->modify_position (film, p);
}
video->modify_trim_start (t);
}
- if (audio) {
+ /* See note in ::set_position */
+ if (!video && audio) {
audio->modify_trim_start (t);
}
DCPTime
Content::length_after_trim (shared_ptr<const Film> film) const
{
- return max (DCPTime(), full_length(film) - DCPTime(trim_start() + trim_end(), film->active_frame_rate_change(position())));
+ DCPTime length = max(DCPTime(), full_length(film) - DCPTime(trim_start() + trim_end(), film->active_frame_rate_change(position())));
+ if (video) {
+ length = length.round(film->video_frame_rate());
+ }
+ return length;
}
/** @return string which changes when something about this content changes which affects