}
+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)
{
{
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;
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 */
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))
_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"));
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 ());
: 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
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) {
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
: 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)))
}
+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)
{
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;
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 ();
: 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
}
+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)
{
{
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;
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;
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;