#include "i18n.h"
-#define LOG_GENERAL(...) film->log()->log (String::compose (__VA_ARGS__), LogEntry::TYPE_GENERAL);
-
using std::string;
using std::vector;
using std::list;
int const FFmpegContentProperty::SUBTITLE_STREAM = 101;
int const FFmpegContentProperty::FILTERS = 102;
-FFmpegContent::FFmpegContent (shared_ptr<const Film> film, boost::filesystem::path p)
- : Content (film, p)
+FFmpegContent::FFmpegContent (boost::filesystem::path p)
+ : Content (p)
, _encrypted (false)
{
return static_cast<T>(*v);
}
-FFmpegContent::FFmpegContent (shared_ptr<const Film> film, cxml::ConstNodePtr node, int version, list<string>& notes)
- : Content (film, node)
+FFmpegContent::FFmpegContent (cxml::ConstNodePtr node, int version, list<string>& notes)
+ : Content (node)
{
video = VideoContent::from_xml (this, node, version);
audio = AudioContent::from_xml (this, node, version);
_encrypted = node->optional_bool_child("Encrypted").get_value_or(false);
}
-FFmpegContent::FFmpegContent (shared_ptr<const Film> film, vector<shared_ptr<Content> > c)
- : Content (film, c)
+FFmpegContent::FFmpegContent (vector<shared_ptr<Content> > c)
+ : Content (c)
{
vector<shared_ptr<Content> >::const_iterator i = c.begin ();
}
void
-FFmpegContent::examine (shared_ptr<Job> job)
+FFmpegContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
{
ChangeSignaller<Content> cc1 (this, FFmpegContentProperty::SUBTITLE_STREAMS);
ChangeSignaller<Content> cc2 (this, FFmpegContentProperty::SUBTITLE_STREAM);
job->set_progress_unknown ();
- Content::examine (job);
+ Content::examine (film, job);
shared_ptr<FFmpegExaminer> examiner (new FFmpegExaminer (shared_from_this (), job));
AudioStreamPtr as = audio->streams().front();
AudioMapping m = as->mapping ();
- film()->make_audio_mapping_default (m, first_path);
+ m.make_default (film ? film->audio_processor() : 0, first_path);
as->set_mapping (m);
}
}
DCPTime
-FFmpegContent::full_length () const
+FFmpegContent::full_length (shared_ptr<const Film> film) 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());
+ }
+
+ if (audio) {
+ DCPTime longest;
+ BOOST_FOREACH (AudioStreamPtr i, audio->streams()) {
+ longest = max (longest, DCPTime::from_frames(llrint(i->length() / frc.speed_up), i->frame_rate()));
+ }
+ return longest;
+ }
+
+ /* XXX: subtitle content? */
+
+ return DCPTime();
+}
+
+DCPTime
+FFmpegContent::approximate_length () const
{
- FrameRateChange const frc (active_video_frame_rate (), film()->video_frame_rate ());
if (video) {
- return DCPTime::from_frames (llrint (video->length_after_3d_combine() * frc.factor()), film()->video_frame_rate());
+ return DCPTime::from_frames (video->length_after_3d_combine(), 24);
}
DCPOMATIC_ASSERT (audio);
- DCPTime longest;
+ Frame longest = 0;
BOOST_FOREACH (AudioStreamPtr i, audio->streams ()) {
- longest = max (longest, DCPTime::from_frames (llrint (i->length() / frc.speed_up), i->frame_rate()));
+ longest = max (longest, Frame(llrint(i->length())));
}
- return longest;
+ return DCPTime::from_frames (longest, 24);
}
void
}
void
-FFmpegContent::add_properties (list<UserProperty>& p) const
+FFmpegContent::add_properties (shared_ptr<const Film> film, list<UserProperty>& p) const
{
- Content::add_properties (p);
+ Content::add_properties (film, p);
if (video) {
video->add_properties (p);
}
if (audio) {
- audio->add_properties (p);
+ audio->add_properties (film, p);
}
}