using boost::function;
using boost::dynamic_pointer_cast;
using dcp::raw_convert;
+using namespace dcpomatic;
int const DCPContentProperty::NEEDS_ASSETS = 600;
int const DCPContentProperty::NEEDS_KDM = 601;
void
DCPContent::read_directory (boost::filesystem::path p)
{
- LOG_GENERAL ("DCPContent::read_directory reads %1", p.string());
- for (boost::filesystem::directory_iterator i(p); i != boost::filesystem::directory_iterator(); ++i) {
- if (boost::filesystem::is_regular_file (i->path())) {
- LOG_GENERAL ("Inside there's regular file %1", i->path().string());
- add_path (i->path());
- } else if (boost::filesystem::is_directory (i->path ())) {
- LOG_GENERAL ("Inside there's directory %1", i->path().string());
- read_directory (i->path());
- }
- }
+ read_sub_directory (p);
bool have_assetmap = false;
BOOST_FOREACH (boost::filesystem::path i, paths()) {
}
}
+void
+DCPContent::read_sub_directory (boost::filesystem::path p)
+{
+ LOG_GENERAL ("DCPContent::read_sub_directory reads %1", p.string());
+ for (boost::filesystem::directory_iterator i(p); i != boost::filesystem::directory_iterator(); ++i) {
+ if (boost::filesystem::is_regular_file (i->path())) {
+ LOG_GENERAL ("Inside there's regular file %1", i->path().string());
+ add_path (i->path());
+ } else if (boost::filesystem::is_directory (i->path ())) {
+ LOG_GENERAL ("Inside there's directory %1", i->path().string());
+ read_sub_directory (i->path());
+ }
+ }
+}
+
void
DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
{
ChangeSignaller<Content> cc_assets (this, DCPContentProperty::NEEDS_ASSETS);
ChangeSignaller<Content> cc_kdm (this, DCPContentProperty::NEEDS_KDM);
ChangeSignaller<Content> cc_name (this, DCPContentProperty::NAME);
- ChangeSignaller<Content> cc_streams (this, AudioContentProperty::STREAMS);
if (job) {
job->set_progress_unknown ();
}
Content::examine (film, job);
- shared_ptr<DCPExaminer> examiner (new DCPExaminer (shared_from_this ()));
+ shared_ptr<DCPExaminer> examiner (new DCPExaminer(shared_from_this(), film->tolerant()));
if (examiner->has_video()) {
{
}
if (examiner->has_audio()) {
- ChangeSignaller<Content> cc (this, AudioContentProperty::STREAMS);
{
boost::mutex::scoped_lock lm (_mutex);
audio.reset (new AudioContent (this));
AudioStreamPtr as (new AudioStream (examiner->audio_frame_rate(), examiner->audio_length(), examiner->audio_channels()));
audio->set_stream (as);
AudioMapping m = as->mapping ();
- film->make_audio_mapping_default (m);
+ m.make_default (film ? film->audio_processor() : 0);
as->set_mapping (m);
}
boost::mutex::scoped_lock lm (_mutex);
_name = examiner->name ();
for (int i = 0; i < TEXT_COUNT; ++i) {
- if (examiner->has_text(static_cast<TextType>(i))) {
+ for (int j = 0; j < examiner->text_count(static_cast<TextType>(i)); ++j) {
text.push_back (shared_ptr<TextContent>(new TextContent(this, static_cast<TextType>(i), static_cast<TextType>(i))));
}
}
return DCPTime::from_frames (llrint(video->length() * frc.factor()), film->video_frame_rate());
}
+DCPTime
+DCPContent::approximate_length () const
+{
+ if (!video) {
+ return DCPTime();
+ }
+ return DCPTime::from_frames (video->length(), 24);
+}
+
string
DCPContent::identifier () const
{
void
DCPContent::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 (reel_lengths.empty ()) {
/* Old metadata with no reel lengths; get them here instead */
try {
- scoped_ptr<DCPExaminer> examiner (new DCPExaminer (shared_from_this()));
+ scoped_ptr<DCPExaminer> examiner (new DCPExaminer(shared_from_this(), film->tolerant()));
reel_lengths = examiner->reel_lengths ();
} catch (...) {
/* Could not examine the DCP; guess reels */
list<DCPTimePeriod> reel_list;
try {
reel_list = reels (film);
- } catch (dcp::DCPReadError) {
+ } catch (dcp::DCPReadError &) {
/* We couldn't read the DCP; it's probably missing */
return false;
- } catch (dcp::KDMDecryptionError) {
+ } catch (dcp::KDMDecryptionError &) {
/* We have an incorrect KDM */
return false;
}
{
shared_ptr<DCPDecoder> decoder;
try {
- decoder.reset (new DCPDecoder (film, shared_from_this(), false));
- } catch (dcp::DCPReadError) {
+ decoder.reset (new DCPDecoder (film, shared_from_this(), false, film->tolerant(), shared_ptr<DCPDecoder>()));
+ } catch (dcp::DCPReadError &) {
/* We couldn't read the DCP, so it's probably missing */
return false;
- } catch (DCPError) {
+ } catch (DCPError &) {
/* We couldn't read the DCP, so it's probably missing */
return false;
- } catch (dcp::KDMDecryptionError) {
+ } catch (dcp::KDMDecryptionError &) {
/* We have an incorrect KDM */
return false;
}
{
shared_ptr<DCPDecoder> decoder;
try {
- decoder.reset (new DCPDecoder (film, shared_from_this(), false));
- } catch (dcp::DCPReadError) {
-
+ decoder.reset (new DCPDecoder (film, shared_from_this(), false, film->tolerant(), shared_ptr<DCPDecoder>()));
+ } catch (dcp::DCPReadError &) {
/* We couldn't read the DCP, so it's probably missing */
return false;
- } catch (dcp::KDMDecryptionError) {
+ } catch (dcp::KDMDecryptionError &) {
/* We have an incorrect KDM */
return false;
}