summaryrefslogtreecommitdiff
path: root/src/lib/ffmpeg_content.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-05-21 17:32:28 +0100
committerCarl Hetherington <cth@carlh.net>2013-05-21 17:32:28 +0100
commit2255aedd15f985796d2e6f7fcc7fb412a5d98812 (patch)
tree744d52adfdd226ce5b0220d62612710873fa77f4 /src/lib/ffmpeg_content.cc
parent2de990b0155fcb5c3dac821ef8c2659e903d2f6e (diff)
Various more hacks; basically trying to remove Regions as an unnecessary complexity.
Diffstat (limited to 'src/lib/ffmpeg_content.cc')
-rw-r--r--src/lib/ffmpeg_content.cc47
1 files changed, 36 insertions, 11 deletions
diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc
index e898c02d0..fcc775f0a 100644
--- a/src/lib/ffmpeg_content.cc
+++ b/src/lib/ffmpeg_content.cc
@@ -57,7 +57,7 @@ FFmpegContent::FFmpegContent (shared_ptr<const cxml::Node> node)
{
list<shared_ptr<cxml::Node> > c = node->node_children ("SubtitleStream");
for (list<shared_ptr<cxml::Node> >::const_iterator i = c.begin(); i != c.end(); ++i) {
- _subtitle_streams.push_back (FFmpegSubtitleStream (*i));
+ _subtitle_streams.push_back (shared_ptr<FFmpegSubtitleStream> (new FFmpegSubtitleStream (*i)));
if ((*i)->optional_number_child<int> ("Selected")) {
_subtitle_stream = _subtitle_streams.back ();
}
@@ -65,7 +65,7 @@ FFmpegContent::FFmpegContent (shared_ptr<const cxml::Node> node)
c = node->node_children ("AudioStream");
for (list<shared_ptr<cxml::Node> >::const_iterator i = c.begin(); i != c.end(); ++i) {
- _audio_streams.push_back (FFmpegAudioStream (*i));
+ _audio_streams.push_back (shared_ptr<FFmpegAudioStream> (new FFmpegAudioStream (*i)));
if ((*i)->optional_number_child<int> ("Selected")) {
_audio_stream = _audio_streams.back ();
}
@@ -94,20 +94,20 @@ FFmpegContent::as_xml (xmlpp::Node* node) const
boost::mutex::scoped_lock lm (_mutex);
- for (vector<FFmpegSubtitleStream>::const_iterator i = _subtitle_streams.begin(); i != _subtitle_streams.end(); ++i) {
+ for (vector<shared_ptr<FFmpegSubtitleStream> >::const_iterator i = _subtitle_streams.begin(); i != _subtitle_streams.end(); ++i) {
xmlpp::Node* t = node->add_child("SubtitleStream");
- if (_subtitle_stream && *i == _subtitle_stream.get()) {
+ if (_subtitle_stream && *i == _subtitle_stream) {
t->add_child("Selected")->add_child_text("1");
}
- i->as_xml (t);
+ (*i)->as_xml (t);
}
- for (vector<FFmpegAudioStream>::const_iterator i = _audio_streams.begin(); i != _audio_streams.end(); ++i) {
+ for (vector<shared_ptr<FFmpegAudioStream> >::const_iterator i = _audio_streams.begin(); i != _audio_streams.end(); ++i) {
xmlpp::Node* t = node->add_child("AudioStream");
- if (_audio_stream && *i == _audio_stream.get()) {
+ if (_audio_stream && *i == _audio_stream) {
t->add_child("Selected")->add_child_text("1");
}
- i->as_xml (t);
+ (*i)->as_xml (t);
}
}
@@ -181,7 +181,7 @@ FFmpegContent::information () const
}
void
-FFmpegContent::set_subtitle_stream (FFmpegSubtitleStream s)
+FFmpegContent::set_subtitle_stream (shared_ptr<FFmpegSubtitleStream> s)
{
{
boost::mutex::scoped_lock lm (_mutex);
@@ -192,7 +192,7 @@ FFmpegContent::set_subtitle_stream (FFmpegSubtitleStream s)
}
void
-FFmpegContent::set_audio_stream (FFmpegAudioStream s)
+FFmpegContent::set_audio_stream (shared_ptr<FFmpegAudioStream> s)
{
{
boost::mutex::scoped_lock lm (_mutex);
@@ -205,16 +205,23 @@ FFmpegContent::set_audio_stream (FFmpegAudioStream s)
ContentAudioFrame
FFmpegContent::audio_length () const
{
+ int const cafr = content_audio_frame_rate ();
+ int const vfr = video_frame_rate ();
+ ContentVideoFrame const vl = video_length ();
+
+ boost::mutex::scoped_lock lm (_mutex);
if (!_audio_stream) {
return 0;
}
- return video_frames_to_audio_frames (_video_length, content_audio_frame_rate(), video_frame_rate());
+ return video_frames_to_audio_frames (vl, cafr, vfr);
}
int
FFmpegContent::audio_channels () const
{
+ boost::mutex::scoped_lock lm (_mutex);
+
if (!_audio_stream) {
return 0;
}
@@ -225,6 +232,8 @@ FFmpegContent::audio_channels () const
int
FFmpegContent::content_audio_frame_rate () const
{
+ boost::mutex::scoped_lock lm (_mutex);
+
if (!_audio_stream) {
return 0;
}
@@ -271,6 +280,7 @@ FFmpegAudioStream::FFmpegAudioStream (shared_ptr<const cxml::Node> node)
id = node->number_child<int> ("Id");
frame_rate = node->number_child<int> ("FrameRate");
channels = node->number_child<int64_t> ("Channels");
+ mapping = AudioMapping (node->node_child ("Mapping"));
}
void
@@ -280,6 +290,7 @@ 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().
@@ -311,3 +322,17 @@ 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
+{
+ boost::mutex::scoped_lock lm (_mutex);
+
+ if (!_audio_stream) {
+ return AudioMapping ();
+ }
+
+ cout << "returning am from stream " << _audio_stream.get() << ".\n";
+ return _audio_stream->mapping;
+}
+