}
-DCPTime
-AtmosMXFContent::full_length_dcp (shared_ptr<const Film> film) const
+ContentTime
+AtmosMXFContent::full_length_content () const
{
- FrameRateChange const frc (film, shared_from_this());
- return DCPTime::from_frames (llrint(atmos->length() * frc.factor()), film->video_frame_rate());
+ return ContentTime::from_frames (atmos->length(), atmos->edit_rate().as_float());
}
void examine (std::shared_ptr<const Film> film, std::shared_ptr<Job> job) override;
std::string summary () const override;
void as_xml (xmlpp::Node* node, bool with_path) const override;
- dcpomatic::DCPTime full_length_dcp (std::shared_ptr<const Film> film) const override;
+ dcpomatic::ContentTime full_length_content () const override;
dcpomatic::DCPTime approximate_length () const override;
static bool valid_mxf (boost::filesystem::path path);
auto last_write = boost::filesystem::last_write_time(p, ec);
_last_write_times.push_back (ec ? 0 : last_write);
}
+
+
+DCPTime
+Content::full_length_dcp (shared_ptr<const Film> film) const
+{
+ return DCPTime (full_length_content(), FrameRateChange(film, shared_from_this()));
+}
+
virtual std::string technical_summary () const;
virtual void as_xml (xmlpp::Node *, bool with_paths) const;
- virtual dcpomatic::DCPTime full_length_dcp (std::shared_ptr<const Film>) const = 0;
+ virtual dcpomatic::DCPTime full_length_dcp (std::shared_ptr<const Film>) const;
+ virtual dcpomatic::ContentTime full_length_content () const = 0;
virtual dcpomatic::DCPTime approximate_length () const = 0;
virtual std::string identifier () const;
/** @return points at which to split this content when
}
}
-DCPTime
-DCPContent::full_length_dcp (shared_ptr<const Film> film) const
+
+ContentTime
+DCPContent::full_length_content () const
{
if (!video) {
return {};
}
- FrameRateChange const frc (film, shared_from_this());
- return DCPTime::from_frames (llrint(video->length() * frc.factor()), film->video_frame_rate());
+ auto vfr = video_frame_rate();
+ DCPOMATIC_ASSERT (vfr);
+ return ContentTime::from_frames (video->length(), *vfr);
}
+
DCPTime
DCPContent::approximate_length () const
{
return std::dynamic_pointer_cast<const DCPContent> (Content::shared_from_this ());
}
- dcpomatic::DCPTime full_length_dcp (std::shared_ptr<const Film> film) const override;
+ dcpomatic::ContentTime full_length_content () const override;
dcpomatic::DCPTime approximate_length () const override;
void examine (std::shared_ptr<const Film> film, std::shared_ptr<Job>) override;
}
}
-DCPTime
-DCPSubtitleContent::full_length_dcp (shared_ptr<const Film> film) const
-{
- FrameRateChange const frc (film, shared_from_this());
- return DCPTime (_length, frc);
-}
DCPTime
DCPSubtitleContent::approximate_length () const
std::string summary () const override;
std::string technical_summary () const override;
void as_xml (xmlpp::Node *, bool with_paths) const override;
- dcpomatic::DCPTime full_length_dcp (std::shared_ptr<const Film> film) const override;
+ dcpomatic::ContentTime full_length_content () const override {
+ return _length;
+ }
dcpomatic::DCPTime approximate_length () const override;
private:
}
#include <libxml++/libxml++.h>
#include <iostream>
+#include <numeric>
#include "i18n.h"
}
-DCPTime
-FFmpegContent::full_length_dcp (shared_ptr<const Film> film) const
+ContentTime
+FFmpegContent::full_length_content () const
{
- FrameRateChange const frc (film, shared_from_this());
if (video) {
- return DCPTime::from_frames (llrint (video->length_after_3d_combine() * frc.factor()), film->video_frame_rate());
+ return ContentTime::from_frames(video->length_after_3d_combine(), video_frame_rate().get());
}
if (audio) {
- DCPTime longest;
- for (auto i: audio->streams()) {
- longest = max (longest, DCPTime::from_frames(llrint(i->length() / frc.speed_up), i->frame_rate()));
- }
- return longest;
+ auto streams = audio->streams();
+ return std::accumulate (streams.begin(), streams.end(), ContentTime(), [](ContentTime const& a, shared_ptr<AudioStream> const& b) {
+ return std::max(a, ContentTime::from_frames(b->length(), b->frame_rate()));
+ });
}
/* XXX: subtitle content? */
std::string summary () const override;
std::string technical_summary () const override;
void as_xml (xmlpp::Node *, bool with_paths) const override;
- dcpomatic::DCPTime full_length_dcp (std::shared_ptr<const Film> film) const override;
+ dcpomatic::ContentTime full_length_content () const override;
dcpomatic::DCPTime approximate_length () const override;
std::string identifier () const override;
set_default_colour_conversion ();
}
+
DCPTime
ImageContent::full_length_dcp (shared_ptr<const Film> film) const
{
- FrameRateChange const frc (film, shared_from_this());
- return DCPTime::from_frames (llrint(video->length_after_3d_combine() * frc.factor()), film->video_frame_rate());
+ FrameRateChange const frc (film, shared_from_this());
+ return DCPTime::from_frames (llrint(video->length_after_3d_combine() * frc.factor()), film->video_frame_rate());
+}
+
+
+ContentTime
+ImageContent::full_length_content () const
+{
+ return ContentTime::from_frames (video->length_after_3d_combine(), video_frame_rate().get_value_or(24));
}
+
DCPTime
ImageContent::approximate_length () const
{
std::string technical_summary () const override;
void as_xml (xmlpp::Node *, bool with_paths) const override;
dcpomatic::DCPTime full_length_dcp (std::shared_ptr<const Film> film) const override;
+ dcpomatic::ContentTime full_length_content () const override;
dcpomatic::DCPTime approximate_length () const override;
std::string identifier () const override;
}
-DCPTime
-StringTextFileContent::full_length_dcp (shared_ptr<const Film> film) const
-{
- FrameRateChange const frc (film, shared_from_this());
- return DCPTime (_length, frc);
-}
-
-
DCPTime
StringTextFileContent::approximate_length () const
{
std::string summary () const override;
std::string technical_summary () const override;
void as_xml (xmlpp::Node *, bool with_paths) const override;
- dcpomatic::DCPTime full_length_dcp (std::shared_ptr<const Film> film) const override;
+ dcpomatic::ContentTime full_length_content () const override {
+ return _length;
+ }
dcpomatic::DCPTime approximate_length () const override;
std::string identifier () const override;
}
-DCPTime
-VideoMXFContent::full_length_dcp (shared_ptr<const Film> film) const
+ContentTime
+VideoMXFContent::full_length_content () const
{
- FrameRateChange const frc (film, shared_from_this());
- return DCPTime::from_frames (llrint(video->length_after_3d_combine() * frc.factor()), film->video_frame_rate());
+ auto vfr = video_frame_rate();
+ DCPOMATIC_ASSERT (vfr);
+ return ContentTime::from_frames (video->length_after_3d_combine(), *vfr);
}
std::string technical_summary () const override;
std::string identifier () const override;
void as_xml (xmlpp::Node* node, bool with_paths) const override;
- dcpomatic::DCPTime full_length_dcp (std::shared_ptr<const Film> film) const override;
+ dcpomatic::ContentTime full_length_content () const override;
dcpomatic::DCPTime approximate_length () const override;
void add_properties (std::shared_ptr<const Film> film, std::list<UserProperty>& p) const override;