Accessor for ClosedCaptionsDialog.
[dcpomatic.git] / src / lib / dcp_content.cc
index 469021d96ee4a641b7ede8f4f4eed066ea821f44..d0f434e5a87af1e0b0da304ca73c136620c7623e 100644 (file)
@@ -55,6 +55,7 @@ using boost::optional;
 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;
@@ -179,6 +180,7 @@ DCPContent::read_sub_directory (boost::filesystem::path p)
        }
 }
 
+/** @param film Film, or 0 */
 void
 DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
 {
@@ -197,7 +199,7 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
        }
        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()) {
                {
@@ -225,7 +227,7 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
                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))));
                        }
                }
@@ -477,7 +479,7 @@ DCPContent::reels (shared_ptr<const Film> film) const
        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 */
@@ -547,10 +549,10 @@ DCPContent::can_reference (shared_ptr<const Film> film, function<bool (shared_pt
        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;
        }
@@ -624,14 +626,14 @@ DCPContent::can_reference_audio (shared_ptr<const Film> film, string& why_not) c
 {
        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;
        }
@@ -659,12 +661,11 @@ DCPContent::can_reference_text (shared_ptr<const Film> film, TextType type, stri
 {
        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;
        }