summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-05-20 17:18:35 +0100
committerCarl Hetherington <cth@carlh.net>2013-05-20 17:18:35 +0100
commit2de990b0155fcb5c3dac821ef8c2659e903d2f6e (patch)
tree11cb6b7cc0f30c58dfd1e62f8a76f906d6b216b4 /src/lib
parent0c66eaeac227d6aeb63a7a36e202ef87081dc222 (diff)
Various incomplete hacks on regions / audio mapping.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/audio_content.h2
-rw-r--r--src/lib/ffmpeg_content.cc12
-rw-r--r--src/lib/ffmpeg_content.h3
-rw-r--r--src/lib/film.cc4
-rw-r--r--src/lib/player.cc12
-rw-r--r--src/lib/player.h4
-rw-r--r--src/lib/playlist.cc30
-rw-r--r--src/lib/playlist.h8
-rw-r--r--src/lib/sndfile_content.cc3
-rw-r--r--src/lib/sndfile_content.h6
10 files changed, 35 insertions, 49 deletions
diff --git a/src/lib/audio_content.h b/src/lib/audio_content.h
index 51f05efb0..36c36992e 100644
--- a/src/lib/audio_content.h
+++ b/src/lib/audio_content.h
@@ -23,7 +23,6 @@
#define DCPOMATIC_AUDIO_CONTENT_H
#include "content.h"
-#include "audio_mapping.h"
namespace cxml {
class Node;
@@ -50,7 +49,6 @@ public:
virtual ContentAudioFrame audio_length () const = 0;
virtual int content_audio_frame_rate () const = 0;
virtual int output_audio_frame_rate (boost::shared_ptr<const Film>) const = 0;
- virtual AudioMapping audio_mapping () const = 0;
};
#endif
diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc
index d730f3ecb..e898c02d0 100644
--- a/src/lib/ffmpeg_content.cc
+++ b/src/lib/ffmpeg_content.cc
@@ -266,7 +266,6 @@ operator== (FFmpegAudioStream const & a, FFmpegAudioStream const & b)
}
FFmpegAudioStream::FFmpegAudioStream (shared_ptr<const cxml::Node> node)
- : mapping (node->node_child ("Mapping"))
{
name = node->string_child ("Name");
id = node->number_child<int> ("Id");
@@ -281,7 +280,6 @@ FFmpegAudioStream::as_xml (xmlpp::Node* root) const
root->add_child("Id")->add_child_text (lexical_cast<string> (id));
root->add_child("FrameRate")->add_child_text (lexical_cast<string> (frame_rate));
root->add_child("Channels")->add_child_text (lexical_cast<string> (channels));
- mapping.as_xml (root->add_child("Mapping"));
}
/** Construct a SubtitleStream from a value returned from to_string().
@@ -313,13 +311,3 @@ FFmpegContent::length (shared_ptr<const Film> film) const
FrameRateConversion frc (video_frame_rate (), film->dcp_video_frame_rate ());
return video_length() * frc.factor() * TIME_HZ / film->dcp_video_frame_rate ();
}
-
-AudioMapping
-FFmpegContent::audio_mapping () const
-{
- if (!_audio_stream) {
- return AudioMapping ();
- }
-
- return _audio_stream->mapping;
-}
diff --git a/src/lib/ffmpeg_content.h b/src/lib/ffmpeg_content.h
index d26c73125..6c141b6c1 100644
--- a/src/lib/ffmpeg_content.h
+++ b/src/lib/ffmpeg_content.h
@@ -34,7 +34,6 @@ public:
, id (i)
, frame_rate (f)
, channels (c)
- , mapping (c)
{}
FFmpegAudioStream (boost::shared_ptr<const cxml::Node>);
@@ -45,7 +44,6 @@ public:
int id;
int frame_rate;
int channels;
- AudioMapping mapping;
};
extern bool operator== (FFmpegAudioStream const & a, FFmpegAudioStream const & b);
@@ -100,7 +98,6 @@ public:
ContentAudioFrame audio_length () const;
int content_audio_frame_rate () const;
int output_audio_frame_rate (boost::shared_ptr<const Film>) const;
- AudioMapping audio_mapping () const;
std::vector<FFmpegSubtitleStream> subtitle_streams () const {
boost::mutex::scoped_lock lm (_mutex);
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 646b114da..1b5779f2d 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -1,3 +1,5 @@
+/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */
+
/*
Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
@@ -699,7 +701,7 @@ Film::set_trust_content_headers (bool t)
if (!_trust_content_headers && !regions.empty()) {
/* We just said that we don't trust the content's header */
for (Playlist::RegionList::iterator i = regions.begin(); i != regions.end(); ++i) {
- examine_content (i->content);
+ examine_content ((*i)->content);
}
}
}
diff --git a/src/lib/player.cc b/src/lib/player.cc
index e38b12ec3..675fcae5c 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -93,8 +93,8 @@ Player::pass ()
Time next_wait = TIME_MAX;
for (list<shared_ptr<RegionDecoder> >::iterator i = _decoders.begin(); i != _decoders.end(); ++i) {
- Time const ts = (*i)->region.time;
- Time const te = (*i)->region.time + (*i)->region.content->length (_film);
+ Time const ts = (*i)->region->time;
+ Time const te = (*i)->region->time + (*i)->region->content->length (_film);
if (ts <= _position && te > _position) {
Time const pos = ts + (*i)->last;
if (pos < earliest_pos) {
@@ -125,7 +125,7 @@ Player::process_video (shared_ptr<RegionDecoder> rd, shared_ptr<const Image> ima
{
shared_ptr<VideoDecoder> vd = dynamic_pointer_cast<VideoDecoder> (rd->decoder);
- Time const global_time = rd->region.time + time;
+ Time const global_time = rd->region->time + time;
while ((global_time - _last_video) > 1) {
/* Fill in with black */
emit_black_frame ();
@@ -224,7 +224,7 @@ Player::setup_decoders ()
/* XXX: into content? */
- shared_ptr<const FFmpegContent> fc = dynamic_pointer_cast<const FFmpegContent> (i->content);
+ shared_ptr<const FFmpegContent> fc = dynamic_pointer_cast<const FFmpegContent> ((*i)->content);
if (fc) {
shared_ptr<FFmpegDecoder> fd (new FFmpegDecoder (_film, fc, _video, _audio, _subtitles));
@@ -234,7 +234,7 @@ Player::setup_decoders ()
rd->decoder = fd;
}
- shared_ptr<const ImageMagickContent> ic = dynamic_pointer_cast<const ImageMagickContent> (i->content);
+ shared_ptr<const ImageMagickContent> ic = dynamic_pointer_cast<const ImageMagickContent> ((*i)->content);
if (ic) {
shared_ptr<ImageMagickDecoder> id;
@@ -254,7 +254,7 @@ Player::setup_decoders ()
rd->decoder = id;
}
- shared_ptr<const SndfileContent> sc = dynamic_pointer_cast<const SndfileContent> (i->content);
+ shared_ptr<const SndfileContent> sc = dynamic_pointer_cast<const SndfileContent> ((*i)->content);
if (sc) {
shared_ptr<AudioDecoder> sd (new SndfileDecoder (_film, sc));
sd->Audio.connect (bind (&Player::process_audio, this, rd, _1, _2));
diff --git a/src/lib/player.h b/src/lib/player.h
index c9bf2a00b..4979778ed 100644
--- a/src/lib/player.h
+++ b/src/lib/player.h
@@ -1,3 +1,5 @@
+/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */
+
/*
Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
@@ -66,7 +68,7 @@ private:
: last (0)
{}
- Playlist::Region region;
+ boost::shared_ptr<Playlist::Region> region;
boost::shared_ptr<Decoder> decoder;
Time last;
};
diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc
index 912d90f0e..8db5c5fc2 100644
--- a/src/lib/playlist.cc
+++ b/src/lib/playlist.cc
@@ -59,7 +59,7 @@ Playlist::Playlist (shared_ptr<const Playlist> other)
: _loop (other->_loop)
{
for (RegionList::const_iterator i = other->_regions.begin(); i != other->_regions.end(); ++i) {
- _regions.push_back (Region (i->content->clone(), i->time, this));
+ _regions.push_back (shared_ptr<Region> (new Region ((*i)->content->clone(), (*i)->time, this)));
}
}
@@ -75,13 +75,13 @@ Playlist::audio_digest () const
string t;
for (RegionList::const_iterator i = _regions.begin(); i != _regions.end(); ++i) {
- if (!dynamic_pointer_cast<const AudioContent> (i->content)) {
+ if (!dynamic_pointer_cast<const AudioContent> ((*i)->content)) {
continue;
}
- t += i->content->digest ();
+ t += (*i)->content->digest ();
- shared_ptr<const FFmpegContent> fc = dynamic_pointer_cast<const FFmpegContent> (i->content);
+ shared_ptr<const FFmpegContent> fc = dynamic_pointer_cast<const FFmpegContent> ((*i)->content);
if (fc) {
t += lexical_cast<string> (fc->audio_stream()->id);
}
@@ -98,12 +98,12 @@ Playlist::video_digest () const
string t;
for (RegionList::const_iterator i = _regions.begin(); i != _regions.end(); ++i) {
- if (!dynamic_pointer_cast<const VideoContent> (i->content)) {
+ if (!dynamic_pointer_cast<const VideoContent> ((*i)->content)) {
continue;
}
- t += i->content->digest ();
- shared_ptr<const FFmpegContent> fc = dynamic_pointer_cast<const FFmpegContent> (i->content);
+ t += (*i)->content->digest ();
+ shared_ptr<const FFmpegContent> fc = dynamic_pointer_cast<const FFmpegContent> ((*i)->content);
if (fc && fc->subtitle_stream()) {
t += fc->subtitle_stream()->id;
}
@@ -119,7 +119,7 @@ Playlist::set_from_xml (shared_ptr<const cxml::Node> node)
{
list<shared_ptr<cxml::Node> > c = node->node_children ("Region");
for (list<shared_ptr<cxml::Node> >::iterator i = c.begin(); i != c.end(); ++i) {
- _regions.push_back (Region (*i, this));
+ _regions.push_back (shared_ptr<Region> (new Region (*i, this)));
}
_loop = node->number_child<int> ("Loop");
@@ -129,7 +129,7 @@ void
Playlist::as_xml (xmlpp::Node* node)
{
for (RegionList::iterator i = _regions.begin(); i != _regions.end(); ++i) {
- i->as_xml (node->add_child ("Region"));
+ (*i)->as_xml (node->add_child ("Region"));
}
node->add_child("Loop")->add_child_text(lexical_cast<string> (_loop));
@@ -138,7 +138,7 @@ Playlist::as_xml (xmlpp::Node* node)
void
Playlist::add (shared_ptr<Content> c)
{
- _regions.push_back (Region (c, 0, this));
+ _regions.push_back (shared_ptr<Region> (new Region (c, 0, this)));
Changed ();
}
@@ -146,7 +146,7 @@ void
Playlist::remove (shared_ptr<Content> c)
{
RegionList::iterator i = _regions.begin ();
- while (i != _regions.end() && i->content != c) {
+ while (i != _regions.end() && (*i)->content != c) {
++i;
}
@@ -167,7 +167,7 @@ bool
Playlist::has_subtitles () const
{
for (RegionList::const_iterator i = _regions.begin(); i != _regions.end(); ++i) {
- shared_ptr<const FFmpegContent> fc = dynamic_pointer_cast<FFmpegContent> (i->content);
+ shared_ptr<const FFmpegContent> fc = dynamic_pointer_cast<FFmpegContent> ((*i)->content);
if (fc && !fc->subtitle_streams().empty()) {
return true;
}
@@ -197,6 +197,7 @@ Playlist::Region::Region (shared_ptr<const cxml::Node> node, Playlist* p)
}
time = node->number_child<Time> ("Time");
+ audio_mapping = AudioMapping (node->node_child ("AudioMapping"));
connection = content->Changed.connect (bind (&Playlist::content_changed, p, _1, _2));
}
@@ -206,6 +207,7 @@ Playlist::Region::as_xml (xmlpp::Node* node) const
xmlpp::Node* sub = node->add_child ("Content");
content->as_xml (sub);
node->add_child ("Time")->add_child_text (lexical_cast<string> (time));
+ audio_mapping.as_xml (node->add_child ("AudioMapping"));
}
class FrameRateCandidate
@@ -247,7 +249,7 @@ Playlist::best_dcp_frame_rate () const
float this_error = std::numeric_limits<float>::max ();
for (RegionList::const_iterator j = _regions.begin(); j != _regions.end(); ++j) {
- shared_ptr<VideoContent> vc = dynamic_pointer_cast<VideoContent> (j->content);
+ shared_ptr<VideoContent> vc = dynamic_pointer_cast<VideoContent> ((*j)->content);
if (!vc) {
continue;
}
@@ -275,7 +277,7 @@ Playlist::length (shared_ptr<const Film> film) const
{
Time len = 0;
for (RegionList::const_iterator i = _regions.begin(); i != _regions.end(); ++i) {
- Time const t = i->time + i->content->length (film);
+ Time const t = (*i)->time + (*i)->content->length (film);
len = max (len, t);
}
diff --git a/src/lib/playlist.h b/src/lib/playlist.h
index 5b9299795..f677f0ad7 100644
--- a/src/lib/playlist.h
+++ b/src/lib/playlist.h
@@ -1,3 +1,5 @@
+/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */
+
/*
Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
@@ -77,10 +79,14 @@ public:
boost::shared_ptr<Content> content;
Time time;
+ /* XXX: obviously not used for video-only; there should
+ really by AudioRegion / VideoRegion etc.
+ */
+ AudioMapping audio_mapping;
boost::signals2::connection connection;
};
- typedef std::vector<Region> RegionList;
+ typedef std::vector<boost::shared_ptr<Region> > RegionList;
RegionList regions () const {
return _regions;
diff --git a/src/lib/sndfile_content.cc b/src/lib/sndfile_content.cc
index 963abb58e..13b118fb2 100644
--- a/src/lib/sndfile_content.cc
+++ b/src/lib/sndfile_content.cc
@@ -50,7 +50,6 @@ SndfileContent::SndfileContent (shared_ptr<const cxml::Node> node)
_audio_channels = node->number_child<int> ("AudioChannels");
_audio_length = node->number_child<ContentAudioFrame> ("AudioLength");
_audio_frame_rate = node->number_child<int> ("AudioFrameRate");
- _mapping = AudioMapping (node->node_child ("Mapping"));
}
string
@@ -106,7 +105,6 @@ SndfileContent::examine (shared_ptr<Film> film, shared_ptr<Job> job, bool quick)
_audio_channels = dec.audio_channels ();
_audio_length = dec.audio_length ();
_audio_frame_rate = dec.audio_frame_rate ();
- _mapping = AudioMapping (_audio_channels);
}
signal_changed (AudioContentProperty::AUDIO_CHANNELS);
@@ -122,7 +120,6 @@ SndfileContent::as_xml (xmlpp::Node* node) const
node->add_child("AudioChannels")->add_child_text (lexical_cast<string> (_audio_channels));
node->add_child("AudioLength")->add_child_text (lexical_cast<string> (_audio_length));
node->add_child("AudioFrameRate")->add_child_text (lexical_cast<string> (_audio_frame_rate));
- _mapping.as_xml (node->add_child("Mapping"));
}
int
diff --git a/src/lib/sndfile_content.h b/src/lib/sndfile_content.h
index e0d66b992..d930d7061 100644
--- a/src/lib/sndfile_content.h
+++ b/src/lib/sndfile_content.h
@@ -63,16 +63,10 @@ public:
int output_audio_frame_rate (boost::shared_ptr<const Film>) const;
- AudioMapping audio_mapping () const {
- boost::mutex::scoped_lock lm (_mutex);
- return _mapping;
- }
-
static bool valid_file (boost::filesystem::path);
private:
int _audio_channels;
ContentAudioFrame _audio_length;
int _audio_frame_rate;
- AudioMapping _mapping;
};