diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-05-20 17:18:35 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-05-20 17:18:35 +0100 |
| commit | 2de990b0155fcb5c3dac821ef8c2659e903d2f6e (patch) | |
| tree | 11cb6b7cc0f30c58dfd1e62f8a76f906d6b216b4 /src/lib | |
| parent | 0c66eaeac227d6aeb63a7a36e202ef87081dc222 (diff) | |
Various incomplete hacks on regions / audio mapping.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/audio_content.h | 2 | ||||
| -rw-r--r-- | src/lib/ffmpeg_content.cc | 12 | ||||
| -rw-r--r-- | src/lib/ffmpeg_content.h | 3 | ||||
| -rw-r--r-- | src/lib/film.cc | 4 | ||||
| -rw-r--r-- | src/lib/player.cc | 12 | ||||
| -rw-r--r-- | src/lib/player.h | 4 | ||||
| -rw-r--r-- | src/lib/playlist.cc | 30 | ||||
| -rw-r--r-- | src/lib/playlist.h | 8 | ||||
| -rw-r--r-- | src/lib/sndfile_content.cc | 3 | ||||
| -rw-r--r-- | src/lib/sndfile_content.h | 6 |
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; }; |
