summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2022-01-03 00:10:43 +0000
committerCarl Hetherington <cth@carlh.net>2022-01-04 20:56:40 +0000
commitb41d8f29bf1c435968c94faceaa00bc48949ec78 (patch)
tree10e67a01e0bc59efe7177b621b1e57efbfcb510e /src/lib
parent535c429f85bbc067e41c928c8758907adce31440 (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_content.cc2
-rw-r--r--src/lib/dcp_decoder.cc34
-rw-r--r--src/lib/dcp_decoder.h7
-rw-r--r--src/lib/dcp_examiner.cc38
-rw-r--r--src/lib/dcp_examiner.h8
-rw-r--r--src/lib/dcp_transcode_job.cc3
-rw-r--r--src/lib/wscript1
9 files changed, 53 insertions, 190 deletions
diff --git a/src/lib/dcp.cc b/src/lib/dcp.cc
deleted file mode 100644
index abdfc7f9e..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());
- }
- }
- }
-
- 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_content.cc b/src/lib/dcp_content.cc
index eb1c5f42c..de71c1257 100644
--- a/src/lib/dcp_content.cc
+++ b/src/lib/dcp_content.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2014-2020 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2014-2022 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
diff --git a/src/lib/dcp_decoder.cc b/src/lib/dcp_decoder.cc
index 9973cb663..df3d9ed1c 100644
--- a/src/lib/dcp_decoder.cc
+++ b/src/lib/dcp_decoder.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2014-2021 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2014-2022 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
@@ -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>
@@ -67,23 +68,23 @@ using boost::optional;
using namespace dcpomatic;
-DCPDecoder::DCPDecoder (shared_ptr<const Film> film, shared_ptr<const DCPContent> c, bool fast, bool tolerant, shared_ptr<DCPDecoder> old)
- : DCP (c, tolerant)
- , Decoder (film)
+DCPDecoder::DCPDecoder (shared_ptr<const Film> film, shared_ptr<const DCPContent> content, bool fast, bool tolerant, shared_ptr<DCPDecoder> old)
+ : Decoder (film)
+ , _dcp_content (content)
{
- if (c->can_be_played()) {
- if (c->video) {
- video = make_shared<VideoDecoder>(this, c);
+ if (content->can_be_played()) {
+ if (content->video) {
+ video = make_shared<VideoDecoder>(this, content);
}
- if (c->audio) {
- audio = make_shared<AudioDecoder>(this, c->audio, fast);
+ if (content->audio) {
+ audio = make_shared<AudioDecoder>(this, content->audio, fast);
}
- for (auto i: c->text) {
+ for (auto i: content->text) {
/* XXX: this time here should be the time of the first subtitle, not 0 */
text.push_back (make_shared<TextDecoder>(this, i, ContentTime()));
}
- if (c->atmos) {
- atmos = make_shared<AtmosDecoder>(this, c);
+ if (content->atmos) {
+ atmos = make_shared<AtmosDecoder>(this, content);
}
}
@@ -95,13 +96,13 @@ DCPDecoder::DCPDecoder (shared_ptr<const Film> film, shared_ptr<const DCPContent
the same before we re-use _reels.
*/
- _lazy_digest = calculate_lazy_digest (c);
+ _lazy_digest = calculate_lazy_digest (content);
if (old && old->lazy_digest() == _lazy_digest) {
_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,9 +119,12 @@ 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 219c3ee6e..9d196a684 100644
--- a/src/lib/dcp_examiner.cc
+++ b/src/lib/dcp_examiner.cc
@@ -19,33 +19,34 @@
*/
-#include "dcp_examiner.h"
+#include "config.h"
#include "dcp_content.h"
+#include "dcp_examiner.h"
#include "dcpomatic_log.h"
#include "exceptions.h"
#include "image.h"
-#include "config.h"
#include "util.h"
+#include <dcp/cpl.h>
#include <dcp/dcp.h>
#include <dcp/decrypted_kdm.h>
-#include <dcp/cpl.h>
-#include <dcp/reel.h>
-#include <dcp/reel_picture_asset.h>
-#include <dcp/reel_sound_asset.h>
#include <dcp/mono_picture_asset.h>
#include <dcp/mono_picture_asset_reader.h>
#include <dcp/mono_picture_frame.h>
-#include <dcp/stereo_picture_asset.h>
-#include <dcp/stereo_picture_asset_reader.h>
-#include <dcp/stereo_picture_frame.h>
-#include <dcp/sound_asset.h>
-#include <dcp/sound_asset_reader.h>
-#include <dcp/subtitle_asset.h>
+#include <dcp/reel.h>
#include <dcp/reel_atmos_asset.h>
-#include <dcp/reel_subtitle_asset.h>
#include <dcp/reel_closed_caption_asset.h>
#include <dcp/reel_markers_asset.h>
+#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>
+#include <dcp/stereo_picture_asset.h>
+#include <dcp/stereo_picture_asset_reader.h>
+#include <dcp/stereo_picture_frame.h>
+#include <dcp/subtitle_asset.h>
#include <iostream>
#include "i18n.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 fd643a754..4098ea3d1 100644
--- a/src/lib/dcp_examiner.h
+++ b/src/lib/dcp_examiner.h
@@ -22,16 +22,18 @@
* @brief DCPExaminer class.
*/
-#include "video_examiner.h"
+
#include "audio_examiner.h"
-#include "dcp.h"
#include "dcp_text_track.h"
#include "dcpomatic_assert.h"
+#include "video_examiner.h"
#include <dcp/dcp_time.h>
+
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/dcp_transcode_job.cc b/src/lib/dcp_transcode_job.cc
index c24394b98..4eb2269b2 100644
--- a/src/lib/dcp_transcode_job.cc
+++ b/src/lib/dcp_transcode_job.cc
@@ -20,12 +20,13 @@
#include "config.h"
+#include "dcp_content.h"
#include "dcp_digest_file.h"
-#include "dcp_transcode_job.h"
#include "film.h"
#include "job_manager.h"
#include "upload_job.h"
#include <dcp/cpl.h>
+#include <dcp/search.h>
using std::make_shared;
diff --git a/src/lib/wscript b/src/lib/wscript
index 963cf8d4a..8bf03eeee 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