+list<int>
+Film::mapped_audio_channels () const
+{
+ list<int> mapped;
+
+ if (audio_processor ()) {
+ /* Processors are mapped 1:1 to DCP outputs so we can work out mappings from there */
+ for (int i = 0; i < audio_processor()->out_channels(); ++i) {
+ mapped.push_back (i);
+ }
+ } else {
+ BOOST_FOREACH (shared_ptr<Content> i, content ()) {
+ shared_ptr<const AudioContent> ac = dynamic_pointer_cast<const AudioContent> (i);
+ if (ac) {
+ list<int> c = ac->audio_mapping().mapped_output_channels ();
+ copy (c.begin(), c.end(), back_inserter (mapped));
+ }
+ }
+
+ mapped.sort ();
+ mapped.unique ();
+ }
+
+ return mapped;
+}
+