summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2022-04-20 21:17:54 +0200
committerCarl Hetherington <cth@carlh.net>2022-04-20 21:17:54 +0200
commit86eb90b563efb7ef093d5b17a5d6db0fc330e301 (patch)
tree61d19ca8d8222b8191bd12e650bf4f831b42c180 /src/lib
parent3855bfd7991b1d7411934fc564dd5714eca6bc1b (diff)
Remove DCP class and replace its functionality with a plain method in libdcp.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/dcp.cc94
-rw-r--r--src/lib/dcp.h56
-rw-r--r--src/lib/dcp_decoder.cc13
-rw-r--r--src/lib/dcp_decoder.h7
-rw-r--r--src/lib/dcp_examiner.cc12
-rw-r--r--src/lib/dcp_examiner.h3
-rw-r--r--src/lib/wscript1
7 files changed, 23 insertions, 163 deletions
diff --git a/src/lib/dcp.cc b/src/lib/dcp.cc
deleted file mode 100644
index 8fb27db57..000000000
--- a/src/lib/dcp.cc
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- Copyright (C) 2014-2021 Carl Hetherington <cth@carlh.net>
-
- This file is part of DCP-o-matic.
-
- DCP-o-matic is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- DCP-o-matic is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-
-#include "compose.hpp"
-#include "dcp.h"
-#include "dcp_content.h"
-#include "dcpomatic_log.h"
-#include "log.h"
-#include "util.h"
-#include <dcp/dcp.h>
-#include <dcp/decrypted_kdm.h>
-#include <dcp/exceptions.h>
-
-#include "i18n.h"
-
-
-using std::list;
-using std::string;
-using std::shared_ptr;
-using std::make_shared;
-using std::dynamic_pointer_cast;
-using std::vector;
-
-
-/** Find all the CPLs in our directories, cross-add assets and return the CPLs */
-list<shared_ptr<dcp::CPL>>
-DCP::cpls () const
-{
- list<shared_ptr<dcp::DCP>> dcps;
- list<shared_ptr<dcp::CPL>> cpls;
-
- /** We accept and ignore some warnings / errors but everything else is bad */
- vector<dcp::VerificationNote::Code> ignore = {
- dcp::VerificationNote::Code::EMPTY_ASSET_PATH,
- dcp::VerificationNote::Code::EXTERNAL_ASSET,
- dcp::VerificationNote::Code::THREED_ASSET_MARKED_AS_TWOD,
- };
-
- LOG_GENERAL ("Reading %1 DCP directories", _dcp_content->directories().size());
- for (auto i: _dcp_content->directories()) {
- auto dcp = make_shared<dcp::DCP>(i);
- vector<dcp::VerificationNote> notes;
- dcp->read (&notes, true);
- if (!_tolerant) {
- for (auto j: notes) {
- if (std::find(ignore.begin(), ignore.end(), j.code()) != ignore.end()) {
- LOG_WARNING("Ignoring: %1", dcp::note_to_string(j));
- } else {
- boost::throw_exception(dcp::ReadError(dcp::note_to_string(j)));
- }
- }
- }
- dcps.push_back (dcp);
- LOG_GENERAL ("Reading DCP %1: %2 CPLs", i.string(), dcp->cpls().size());
- for (auto i: dcp->cpls()) {
- cpls.push_back (i);
- }
- }
-
- for (auto i: dcps) {
- for (auto j: dcps) {
- if (i != j) {
- i->resolve_refs(j->assets(true));
- }
- }
- }
-
- if (_dcp_content->kdm ()) {
- auto k = decrypt_kdm_with_helpful_error (_dcp_content->kdm().get());
- for (auto i: dcps) {
- i->add (k);
- }
- }
-
- return cpls;
-}
diff --git a/src/lib/dcp.h b/src/lib/dcp.h
deleted file mode 100644
index d8e0aec27..000000000
--- a/src/lib/dcp.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- Copyright (C) 2014-2016 Carl Hetherington <cth@carlh.net>
-
- This file is part of DCP-o-matic.
-
- DCP-o-matic is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- DCP-o-matic is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-
-#ifndef DCPOMATIC_DCP_H
-#define DCPOMATIC_DCP_H
-
-
-#include <list>
-#include <memory>
-
-
-namespace dcp {
- class CPL;
-}
-
-
-class DCPContent;
-
-
-class DCP
-{
-public:
- std::list<std::shared_ptr<dcp::CPL>> cpls () const;
-
-protected:
- explicit DCP (std::shared_ptr<const DCPContent> content, bool tolerant)
- : _dcp_content (content)
- , _tolerant (tolerant)
- {}
-
- std::shared_ptr<const DCPContent> _dcp_content;
-
-private:
- bool _tolerant;
-};
-
-
-#endif
diff --git a/src/lib/dcp_decoder.cc b/src/lib/dcp_decoder.cc
index 85c5d3297..542a8ff7c 100644
--- a/src/lib/dcp_decoder.cc
+++ b/src/lib/dcp_decoder.cc
@@ -44,6 +44,7 @@
#include <dcp/reel_picture_asset.h>
#include <dcp/reel_sound_asset.h>
#include <dcp/reel_subtitle_asset.h>
+#include <dcp/search.h>
#include <dcp/sound_asset_reader.h>
#include <dcp/sound_frame.h>
#include <dcp/stereo_picture_asset.h>
@@ -68,8 +69,8 @@ using namespace dcpomatic;
DCPDecoder::DCPDecoder (shared_ptr<const Film> film, shared_ptr<const DCPContent> content, bool fast, bool tolerant, shared_ptr<DCPDecoder> old)
- : DCP (content, tolerant)
- , Decoder (film)
+ : Decoder (film)
+ , _dcp_content (content)
{
if (content->can_be_played()) {
if (content->video) {
@@ -101,7 +102,7 @@ DCPDecoder::DCPDecoder (shared_ptr<const Film> film, shared_ptr<const DCPContent
_reels = old->_reels;
} else {
- auto cpl_list = cpls ();
+ auto cpl_list = dcp::find_and_resolve_cpls(content->directories(), tolerant);
if (cpl_list.empty()) {
throw DCPError (_("No CPLs found in DCP."));
@@ -118,7 +119,11 @@ DCPDecoder::DCPDecoder (shared_ptr<const Film> film, shared_ptr<const DCPContent
/* No CPL found; probably an old file that doesn't specify it;
just use the first one.
*/
- cpl = cpls().front ();
+ cpl = cpl_list.front();
+ }
+
+ if (content->kdm()) {
+ cpl->add (decrypt_kdm_with_helpful_error(content->kdm().get()));
}
_reels = cpl->reels ();
diff --git a/src/lib/dcp_decoder.h b/src/lib/dcp_decoder.h
index a4dfbad4e..0882bfd09 100644
--- a/src/lib/dcp_decoder.h
+++ b/src/lib/dcp_decoder.h
@@ -26,7 +26,6 @@
#include "atmos_metadata.h"
#include "decoder.h"
-#include "dcp.h"
#include <dcp/mono_picture_asset_reader.h>
#include <dcp/stereo_picture_asset_reader.h>
#include <dcp/sound_asset_reader.h>
@@ -42,12 +41,12 @@ class Log;
struct dcp_subtitle_within_dcp_test;
-class DCPDecoder : public DCP, public Decoder
+class DCPDecoder : public Decoder
{
public:
DCPDecoder (
std::shared_ptr<const Film> film,
- std::shared_ptr<const DCPContent>,
+ std::shared_ptr<const DCPContent> content,
bool fast,
bool tolerant,
std::shared_ptr<DCPDecoder> old
@@ -87,6 +86,8 @@ private:
);
std::string calculate_lazy_digest (std::shared_ptr<const DCPContent>) const;
+ std::shared_ptr<const DCPContent> _dcp_content;
+
/** Time of next thing to return from pass relative to the start of _reel */
dcpomatic::ContentTime _next;
std::vector<std::shared_ptr<dcp::Reel>> _reels;
diff --git a/src/lib/dcp_examiner.cc b/src/lib/dcp_examiner.cc
index cf4835c06..f2ec68bdd 100644
--- a/src/lib/dcp_examiner.cc
+++ b/src/lib/dcp_examiner.cc
@@ -39,6 +39,7 @@
#include <dcp/reel_picture_asset.h>
#include <dcp/reel_sound_asset.h>
#include <dcp/reel_subtitle_asset.h>
+#include <dcp/search.h>
#include <dcp/sound_asset.h>
#include <dcp/sound_asset.h>
#include <dcp/sound_asset_reader.h>
@@ -59,7 +60,6 @@ using boost::optional;
DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant)
- : DCP (content, tolerant)
{
shared_ptr<dcp::CPL> cpl;
@@ -67,9 +67,11 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant)
_text_count[i] = 0;
}
+ auto cpls = dcp::find_and_resolve_cpls (content->directories(), tolerant);
+
if (content->cpl ()) {
/* Use the CPL that the content was using before */
- for (auto i: cpls()) {
+ for (auto i: cpls) {
if (i->id() == content->cpl().get()) {
cpl = i;
}
@@ -79,7 +81,7 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant)
int least_unsatisfied = INT_MAX;
- for (auto i: cpls()) {
+ for (auto i: cpls) {
int unsatisfied = 0;
for (auto j: i->reels()) {
if (j->main_picture() && !j->main_picture()->asset_ref().resolved()) {
@@ -107,6 +109,10 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant)
throw DCPError ("No CPLs found in DCP");
}
+ if (content->kdm()) {
+ cpl->add (decrypt_kdm_with_helpful_error(content->kdm().get()));
+ }
+
_cpl = cpl->id ();
_name = cpl->content_title_text ();
_content_kind = cpl->content_kind ();
diff --git a/src/lib/dcp_examiner.h b/src/lib/dcp_examiner.h
index 68508847f..a5bf2434e 100644
--- a/src/lib/dcp_examiner.h
+++ b/src/lib/dcp_examiner.h
@@ -25,7 +25,6 @@
#include "audio_examiner.h"
-#include "dcp.h"
#include "dcp_text_track.h"
#include "dcpomatic_assert.h"
#include "video_examiner.h"
@@ -36,7 +35,7 @@
class DCPContent;
-class DCPExaminer : public DCP, public VideoExaminer, public AudioExaminer
+class DCPExaminer : public VideoExaminer, public AudioExaminer
{
public:
explicit DCPExaminer (std::shared_ptr<const DCPContent>, bool tolerant);
diff --git a/src/lib/wscript b/src/lib/wscript
index 6515ebf9f..86b7561be 100644
--- a/src/lib/wscript
+++ b/src/lib/wscript
@@ -62,7 +62,6 @@ sources = """
crypto.cc
curl_uploader.cc
datasat_ap2x.cc
- dcp.cc
dcp_content.cc
dcp_content_type.cc
dcp_decoder.cc