/*
- Copyright (C) 2012-2020 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2021 Carl Hetherington <cth@carlh.net>
This file is part of libdcp.
#include "compose.hpp"
#include <getopt.h>
#include <boost/filesystem.hpp>
-#include <boost/foreach.hpp>
#include <boost/algorithm/string.hpp>
#include <iostream>
#include <cstdlib>
using std::exception;
using std::vector;
using std::stringstream;
-using boost::shared_ptr;
-using boost::dynamic_pointer_cast;
+using std::shared_ptr;
+using std::dynamic_pointer_cast;
using boost::optional;
using namespace dcp;
cerr << "--only takes a comma-separated list of strings, one or more of:\n"
" dcp-path DCP path\n"
- " cpl-name CPL name\n"
+ " cpl-name-id CPL name and ID\n"
" picture picture information\n"
" sound sound information\n"
" subtitle picture information\n"
return size * 8 * frame_rate.as_float() / 1e6;
}
-#define OUTPUT_DCP_PATH(...) maybe_output(only, "dcp-path", String::compose(__VA_ARGS__));
-#define OUTPUT_CPL_NAME(...) maybe_output(only, "cpl-name", String::compose(__VA_ARGS__));
-#define OUTPUT_PICTURE(...) maybe_output(only, "picture", String::compose(__VA_ARGS__));
-#define OUTPUT_PICTURE_NC(x) maybe_output(only, "picture", (x));
-#define SHOULD_PICTURE should_output(only, "picture")
-#define OUTPUT_SOUND(...) maybe_output(only, "sound", String::compose(__VA_ARGS__));
-#define OUTPUT_SOUND_NC(x) maybe_output(only, "sound", (x));
-#define OUTPUT_SUBTITLE(...) maybe_output(only, "subtitle", String::compose(__VA_ARGS__));
-#define OUTPUT_SUBTITLE_NC(x) maybe_output(only, "subtitle", (x));
-#define OUTPUT_TOTAL_TIME(...) maybe_output(only, "total-time", String::compose(__VA_ARGS__));
+#define OUTPUT_DCP_PATH(...) maybe_output(only, "dcp-path", String::compose(__VA_ARGS__));
+#define OUTPUT_CPL_NAME_ID(...) maybe_output(only, "cpl-name-id", String::compose(__VA_ARGS__));
+#define OUTPUT_PICTURE(...) maybe_output(only, "picture", String::compose(__VA_ARGS__));
+#define OUTPUT_PICTURE_NC(x) maybe_output(only, "picture", (x));
+#define SHOULD_PICTURE should_output(only, "picture")
+#define OUTPUT_SOUND(...) maybe_output(only, "sound", String::compose(__VA_ARGS__));
+#define OUTPUT_SOUND_NC(x) maybe_output(only, "sound", (x));
+#define OUTPUT_SUBTITLE(...) maybe_output(only, "subtitle", String::compose(__VA_ARGS__));
+#define OUTPUT_SUBTITLE_NC(x) maybe_output(only, "subtitle", (x));
+#define OUTPUT_TOTAL_TIME(...) maybe_output(only, "total-time", String::compose(__VA_ARGS__));
static bool
should_output(vector<string> const& only, string t)
OUTPUT_PICTURE(
" duration %1 (%2) intrinsic %3",
*mp->duration(),
- dcp::Time(*mp->duration(), mp->frame_rate().as_float(), mp->frame_rate().as_float()).as_string(dcp::SMPTE),
+ dcp::Time(*mp->duration(), mp->frame_rate().as_float(), mp->frame_rate().as_float()).as_string(dcp::Standard::SMPTE),
mp->intrinsic_duration()
);
} else {
for (int64_t i = 0; i < ma->intrinsic_duration(); ++i) {
shared_ptr<const MonoPictureFrame> frame = reader->get_frame (i);
if (SHOULD_PICTURE) {
- printf("Frame %" PRId64 " J2K size %7d", i, frame->j2k_size());
+ printf("Frame %" PRId64 " J2K size %7d", i, frame->size());
}
- j2k_size_range.first = min(j2k_size_range.first, frame->j2k_size());
- j2k_size_range.second = max(j2k_size_range.second, frame->j2k_size());
+ j2k_size_range.first = min(j2k_size_range.first, frame->size());
+ j2k_size_range.second = max(j2k_size_range.second, frame->size());
if (decompress) {
try {
OUTPUT_SUBTITLE(" Subtitle ID: %1", ms->id());
if (ms->asset_ref().resolved()) {
- list<shared_ptr<Subtitle> > subs = ms->asset()->subtitles ();
+ auto subs = ms->asset()->subtitles ();
OUTPUT_SUBTITLE("\n Subtitle: %1 subtitles", subs.size());
shared_ptr<InteropSubtitleAsset> iop = dynamic_pointer_cast<InteropSubtitleAsset> (ms->asset());
if (iop) {
OUTPUT_SUBTITLE(" in %1\n", smpte->language().get());
}
if (list_subtitles) {
- BOOST_FOREACH (shared_ptr<Subtitle> k, subs) {
- shared_ptr<SubtitleString> ks = dynamic_pointer_cast<SubtitleString> (k);
+ for (auto k: subs) {
+ auto ks = dynamic_pointer_cast<const SubtitleString>(k);
if (ks) {
stringstream s;
s << *ks;
OUTPUT_SUBTITLE("%1\n", s.str());
}
- shared_ptr<SubtitleImage> is = dynamic_pointer_cast<SubtitleImage> (k);
+ auto is = dynamic_pointer_cast<const SubtitleImage>(k);
if (is) {
stringstream s;
s << *is;
int
main (int argc, char* argv[])
{
+ dcp::init ();
+
bool subtitles = false;
bool picture = false;
bool decompress = false;
only = boost::split(only, *only_string, boost::is_any_of(","));
}
- list<shared_ptr<CPL> > cpls;
+ vector<shared_ptr<CPL> > cpls;
if (boost::filesystem::is_directory(argv[optind])) {
DCP* dcp = 0;
- list<dcp::VerificationNote> notes;
+ vector<dcp::VerificationNote> notes;
try {
dcp = new DCP (argv[optind]);
dcp->read (¬es);
OUTPUT_DCP_PATH("DCP: %1\n", boost::filesystem::path(argv[optind]).string());
dcp::filter_notes (notes, ignore_missing_assets);
- BOOST_FOREACH (dcp::VerificationNote i, notes) {
+ for (auto i: notes) {
cerr << "Error: " << note_to_string(i) << "\n";
}
dcp::Time total_time;
- BOOST_FOREACH (shared_ptr<CPL> i, cpls) {
- OUTPUT_CPL_NAME(" CPL: %1\n", i->annotation_text());
+ for (auto i: cpls) {
+ OUTPUT_CPL_NAME_ID(" CPL: %1 %2\n", i->annotation_text().get_value_or(""), i->id());
int R = 1;
- BOOST_FOREACH (shared_ptr<Reel> j, i->reels()) {
+ for (auto j: i->reels()) {
if (should_output(only, "picture") || should_output(only, "sound") || should_output(only, "subtitle")) {
cout << " Reel " << R << "\n";
}
}
}
- OUTPUT_TOTAL_TIME("Total: %1\n", total_time.as_string(dcp::SMPTE));
+ OUTPUT_TOTAL_TIME("Total: %1\n", total_time.as_string(dcp::Standard::SMPTE));
return 0;
}