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;
}
}
+/** @param film Film, or 0 */
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 ? film->tolerant() : true));
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));
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))));
}
}
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;
}