summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-05-10 13:22:35 +0100
committerCarl Hetherington <cth@carlh.net>2016-05-18 11:50:29 +0100
commitcc76b517f6a74f813ae38137bdc88ff3bafa6dd9 (patch)
tree34c2960763f897936efef689898a1f392fb38375 /src/lib
parenta3073b3059e8df6304d2936ab2c605e6908a7373 (diff)
Allow content parts to not be preset in XML.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/audio_content.cc10
-rw-r--r--src/lib/audio_content.h5
-rw-r--r--src/lib/dcp_content.cc10
-rw-r--r--src/lib/dcp_subtitle_content.cc2
-rw-r--r--src/lib/ffmpeg_content.cc6
-rw-r--r--src/lib/image_content.cc2
-rw-r--r--src/lib/sndfile_content.cc2
-rw-r--r--src/lib/subtitle_content.cc10
-rw-r--r--src/lib/subtitle_content.h5
-rw-r--r--src/lib/text_subtitle_content.cc2
-rw-r--r--src/lib/video_content.cc10
-rw-r--r--src/lib/video_content.h4
12 files changed, 51 insertions, 17 deletions
diff --git a/src/lib/audio_content.cc b/src/lib/audio_content.cc
index a0c9950a6..540279a95 100644
--- a/src/lib/audio_content.cc
+++ b/src/lib/audio_content.cc
@@ -56,6 +56,16 @@ AudioContent::AudioContent (Content* parent, shared_ptr<const Film> film)
}
+shared_ptr<AudioContent>
+AudioContent::from_xml (Content* parent, shared_ptr<const Film> film, cxml::ConstNodePtr node)
+{
+ if (!node->optional_number_child<double> ("AudioGain")) {
+ return shared_ptr<AudioContent> ();
+ }
+
+ return shared_ptr<AudioContent> (new AudioContent (parent, film, node));
+}
+
AudioContent::AudioContent (Content* parent, shared_ptr<const Film> film, cxml::ConstNodePtr node)
: ContentPart (parent, film)
{
diff --git a/src/lib/audio_content.h b/src/lib/audio_content.h
index 7de0742a5..e196e15c2 100644
--- a/src/lib/audio_content.h
+++ b/src/lib/audio_content.h
@@ -43,7 +43,6 @@ class AudioContent : public ContentPart
{
public:
AudioContent (Content* parent, boost::shared_ptr<const Film>);
- AudioContent (Content* parent, boost::shared_ptr<const Film>, cxml::ConstNodePtr);
AudioContent (Content* parent, boost::shared_ptr<const Film>, std::vector<boost::shared_ptr<Content> >);
void as_xml (xmlpp::Node *) const;
@@ -82,8 +81,12 @@ public:
void add_properties (std::list<UserProperty> &) const;
+ static boost::shared_ptr<AudioContent> from_xml (Content* parent, boost::shared_ptr<const Film>, cxml::ConstNodePtr);
+
private:
+ AudioContent (Content* parent, boost::shared_ptr<const Film>, cxml::ConstNodePtr);
+
/** Gain to apply to audio in dB */
double _gain;
/** Delay to apply to audio (positive moves audio later) in milliseconds */
diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc
index 6a6f6efc5..2cd7e576f 100644
--- a/src/lib/dcp_content.cc
+++ b/src/lib/dcp_content.cc
@@ -72,9 +72,10 @@ DCPContent::DCPContent (shared_ptr<const Film> film, boost::filesystem::path p)
DCPContent::DCPContent (shared_ptr<const Film> film, cxml::ConstNodePtr node, int version)
: Content (film, node)
{
- video.reset (new VideoContent (this, film, node, version));
+ video = VideoContent::from_xml (this, film, node, version);
+ audio = AudioContent::from_xml (this, film, node);
+ subtitle = SubtitleContent::from_xml (this, film, node, version);
- audio.reset (new AudioContent (this, film, node));
audio->set_stream (
AudioStreamPtr (
new AudioStream (node->number_child<int> ("AudioFrameRate"), AudioMapping (node->node_child ("AudioMapping"), version))
@@ -83,10 +84,6 @@ DCPContent::DCPContent (shared_ptr<const Film> film, cxml::ConstNodePtr node, in
_name = node->string_child ("Name");
- if (node->bool_child ("HasSubtitles")) {
- subtitle.reset (new SubtitleContent (this, film, node, version));
- }
-
_encrypted = node->bool_child ("Encrypted");
if (node->optional_node_child ("KDM")) {
_kdm = dcp::EncryptedKDM (node->string_child ("KDM"));
@@ -179,7 +176,6 @@ DCPContent::as_xml (xmlpp::Node* node) const
boost::mutex::scoped_lock lm (_mutex);
node->add_child("Name")->add_child_text (_name);
- node->add_child("HasSubtitles")->add_child_text (subtitle ? "1" : "0");
node->add_child("Encrypted")->add_child_text (_encrypted ? "1" : "0");
if (_kdm) {
node->add_child("KDM")->add_child_text (_kdm->as_xml ());
diff --git a/src/lib/dcp_subtitle_content.cc b/src/lib/dcp_subtitle_content.cc
index a6beacb0d..0702237f3 100644
--- a/src/lib/dcp_subtitle_content.cc
+++ b/src/lib/dcp_subtitle_content.cc
@@ -45,7 +45,7 @@ DCPSubtitleContent::DCPSubtitleContent (shared_ptr<const Film> film, cxml::Const
: Content (film, node)
, _length (node->number_child<ContentTime::Type> ("Length"))
{
- subtitle.reset (new SubtitleContent (this, film, node, version));
+ subtitle = SubtitleContent::from_xml (this, film, node, version);
}
void
diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc
index f249a1c35..a8206b13e 100644
--- a/src/lib/ffmpeg_content.cc
+++ b/src/lib/ffmpeg_content.cc
@@ -74,9 +74,9 @@ FFmpegContent::FFmpegContent (shared_ptr<const Film> film, boost::filesystem::pa
FFmpegContent::FFmpegContent (shared_ptr<const Film> film, cxml::ConstNodePtr node, int version, list<string>& notes)
: Content (film, node)
{
- video.reset (new VideoContent (this, film, node, version));
- audio.reset (new AudioContent (this, film, node));
- subtitle.reset (new SubtitleContent (this, film, node, version));
+ video = VideoContent::from_xml (this, film, node, version);
+ audio = AudioContent::from_xml (this, film, node);
+ subtitle = SubtitleContent::from_xml (this, film, node, version);
list<cxml::NodePtr> c = node->node_children ("SubtitleStream");
for (list<cxml::NodePtr>::const_iterator i = c.begin(); i != c.end(); ++i) {
diff --git a/src/lib/image_content.cc b/src/lib/image_content.cc
index 57212c589..15c20d874 100644
--- a/src/lib/image_content.cc
+++ b/src/lib/image_content.cc
@@ -66,7 +66,7 @@ ImageContent::ImageContent (shared_ptr<const Film> film, boost::filesystem::path
ImageContent::ImageContent (shared_ptr<const Film> film, cxml::ConstNodePtr node, int version)
: Content (film, node)
{
- video.reset (new VideoContent (this, film, node, version));
+ video = VideoContent::from_xml (this, film, node, version);
}
string
diff --git a/src/lib/sndfile_content.cc b/src/lib/sndfile_content.cc
index 2b28ba8b4..7c204e9eb 100644
--- a/src/lib/sndfile_content.cc
+++ b/src/lib/sndfile_content.cc
@@ -48,7 +48,7 @@ SndfileContent::SndfileContent (shared_ptr<const Film> film, cxml::ConstNodePtr
: Content (film, node)
, _audio_length (node->number_child<Frame> ("AudioLength"))
{
- audio.reset (new AudioContent (this, film, node));
+ audio = AudioContent::from_xml (this, film, node);
audio->set_stream (
AudioStreamPtr (
new AudioStream (node->number_child<int> ("AudioFrameRate"), AudioMapping (node->node_child ("AudioMapping"), version)))
diff --git a/src/lib/subtitle_content.cc b/src/lib/subtitle_content.cc
index 228376c34..89953b0e5 100644
--- a/src/lib/subtitle_content.cc
+++ b/src/lib/subtitle_content.cc
@@ -66,6 +66,16 @@ SubtitleContent::SubtitleContent (Content* parent, shared_ptr<const Film> film)
}
+shared_ptr<SubtitleContent>
+SubtitleContent::from_xml (Content* parent, shared_ptr<const Film> film, cxml::ConstNodePtr node, int version)
+{
+ if (!node->optional_number_child<double>("SubtitleXOffset") && !node->optional_number_child<double>("SubtitleOffset")) {
+ return shared_ptr<SubtitleContent> ();
+ }
+
+ return shared_ptr<SubtitleContent> (new SubtitleContent (parent, film, node, version));
+}
+
SubtitleContent::SubtitleContent (Content* parent, shared_ptr<const Film> film, cxml::ConstNodePtr node, int version)
: ContentPart (parent, film)
, _use (false)
diff --git a/src/lib/subtitle_content.h b/src/lib/subtitle_content.h
index 09cc92709..db2286339 100644
--- a/src/lib/subtitle_content.h
+++ b/src/lib/subtitle_content.h
@@ -47,7 +47,6 @@ class SubtitleContent : public ContentPart
{
public:
SubtitleContent (Content* parent, boost::shared_ptr<const Film>);
- SubtitleContent (Content* parent, boost::shared_ptr<const Film>, cxml::ConstNodePtr, int version);
SubtitleContent (Content* parent, boost::shared_ptr<const Film>, std::vector<boost::shared_ptr<Content> >);
void as_xml (xmlpp::Node *) const;
@@ -129,12 +128,16 @@ public:
return _outline_colour;
}
+ static boost::shared_ptr<SubtitleContent> from_xml (Content* parent, boost::shared_ptr<const Film>, cxml::ConstNodePtr, int version);
+
protected:
/** subtitle language (e.g. "German") or empty if it is not known */
std::string _language;
private:
friend struct ffmpeg_pts_offset_test;
+
+ SubtitleContent (Content* parent, boost::shared_ptr<const Film>, cxml::ConstNodePtr, int version);
void font_changed ();
void connect_to_fonts ();
diff --git a/src/lib/text_subtitle_content.cc b/src/lib/text_subtitle_content.cc
index c7be4c19b..74e785ff7 100644
--- a/src/lib/text_subtitle_content.cc
+++ b/src/lib/text_subtitle_content.cc
@@ -45,7 +45,7 @@ TextSubtitleContent::TextSubtitleContent (shared_ptr<const Film> film, cxml::Con
: Content (film, node)
, _length (node->number_child<ContentTime::Type> ("Length"))
{
- subtitle.reset (new SubtitleContent (this, film, node, version));
+ subtitle = SubtitleContent::from_xml (this, film, node, version);
}
void
diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc
index ff5a4cb17..75d94510a 100644
--- a/src/lib/video_content.cc
+++ b/src/lib/video_content.cc
@@ -75,6 +75,16 @@ VideoContent::VideoContent (Content* parent, shared_ptr<const Film> film)
}
+shared_ptr<VideoContent>
+VideoContent::from_xml (Content* parent, shared_ptr<const Film> film, cxml::ConstNodePtr node, int version)
+{
+ if (!node->optional_number_child<int> ("VideoWidth")) {
+ return shared_ptr<VideoContent> ();
+ }
+
+ return shared_ptr<VideoContent> (new VideoContent (parent, film, node, version));
+}
+
VideoContent::VideoContent (Content* parent, shared_ptr<const Film> film, cxml::ConstNodePtr node, int version)
: ContentPart (parent, film)
{
diff --git a/src/lib/video_content.h b/src/lib/video_content.h
index 03ffb0fa8..ef54a6be4 100644
--- a/src/lib/video_content.h
+++ b/src/lib/video_content.h
@@ -51,7 +51,6 @@ class VideoContent : public ContentPart, public boost::enable_shared_from_this<V
{
public:
VideoContent (Content* parent, boost::shared_ptr<const Film>);
- VideoContent (Content* parent, boost::shared_ptr<const Film>, cxml::ConstNodePtr, int);
VideoContent (Content* parent, boost::shared_ptr<const Film>, std::vector<boost::shared_ptr<Content> >);
void as_xml (xmlpp::Node *) const;
@@ -167,6 +166,8 @@ public:
void take_from_examiner (boost::shared_ptr<VideoExaminer>);
void add_properties (std::list<UserProperty> &) const;
+ static boost::shared_ptr<VideoContent> from_xml (Content* parent, boost::shared_ptr<const Film>, cxml::ConstNodePtr, int);
+
private:
friend struct ffmpeg_pts_offset_test;
@@ -174,6 +175,7 @@ private:
friend struct best_dcp_frame_rate_test_double;
friend struct audio_sampling_rate_test;
+ VideoContent (Content* parent, boost::shared_ptr<const Film>, cxml::ConstNodePtr, int);
void setup_default_colour_conversion ();
Frame _length;