summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-05-26 01:26:21 +0100
committerCarl Hetherington <cth@carlh.net>2013-05-26 01:26:21 +0100
commit951a81dbb75db9850ee0226f74a575af7335a576 (patch)
treed24f9012b41edfb1315ddb51a15250578f62dbb9 /src
parentecbfa72a19756eab3fb1e3b0a9c5cab1c0b2ed39 (diff)
Improve audio mapping handling a bit.
Diffstat (limited to 'src')
-rw-r--r--src/lib/audio_content.cc3
-rw-r--r--src/lib/audio_content.h2
-rw-r--r--src/lib/audio_mapping.h2
-rw-r--r--src/lib/ffmpeg_content.cc6
-rw-r--r--src/lib/ffmpeg_content.h1
-rw-r--r--src/lib/null_content.h2
-rw-r--r--src/lib/sndfile_content.cc19
-rw-r--r--src/lib/sndfile_content.h4
-rw-r--r--src/wx/audio_mapping_view.cc4
-rw-r--r--src/wx/audio_mapping_view.h2
-rw-r--r--src/wx/film_editor.cc14
11 files changed, 43 insertions, 16 deletions
diff --git a/src/lib/audio_content.cc b/src/lib/audio_content.cc
index 607e71c50..fb196c776 100644
--- a/src/lib/audio_content.cc
+++ b/src/lib/audio_content.cc
@@ -1,5 +1,3 @@
-/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */
-
/*
Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
@@ -31,6 +29,7 @@ int const AudioContentProperty::AUDIO_LENGTH = 201;
int const AudioContentProperty::AUDIO_FRAME_RATE = 202;
int const AudioContentProperty::AUDIO_GAIN = 203;
int const AudioContentProperty::AUDIO_DELAY = 204;
+int const AudioContentProperty::AUDIO_MAPPING = 205;
AudioContent::AudioContent (shared_ptr<const Film> f, Time s)
: Content (f, s)
diff --git a/src/lib/audio_content.h b/src/lib/audio_content.h
index 0c5287eaf..8fc658a76 100644
--- a/src/lib/audio_content.h
+++ b/src/lib/audio_content.h
@@ -37,6 +37,7 @@ public:
static int const AUDIO_FRAME_RATE;
static int const AUDIO_GAIN;
static int const AUDIO_DELAY;
+ static int const AUDIO_MAPPING;
};
class AudioContent : public virtual Content
@@ -54,6 +55,7 @@ public:
virtual int content_audio_frame_rate () const = 0;
virtual int output_audio_frame_rate () const = 0;
virtual AudioMapping audio_mapping () const = 0;
+ virtual void set_audio_mapping (AudioMapping) = 0;
void set_audio_gain (float);
void set_audio_delay (int);
diff --git a/src/lib/audio_mapping.h b/src/lib/audio_mapping.h
index 7d76e4f5a..a2de8306b 100644
--- a/src/lib/audio_mapping.h
+++ b/src/lib/audio_mapping.h
@@ -1,5 +1,3 @@
-/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */
-
/*
Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
diff --git a/src/lib/ffmpeg_content.cc b/src/lib/ffmpeg_content.cc
index 55139ca56..d912ee418 100644
--- a/src/lib/ffmpeg_content.cc
+++ b/src/lib/ffmpeg_content.cc
@@ -357,3 +357,9 @@ FFmpegContent::set_filters (vector<Filter const *> const & filters)
signal_changed (FFmpegContentProperty::FILTERS);
}
+void
+FFmpegContent::set_audio_mapping (AudioMapping m)
+{
+ audio_stream()->mapping = m;
+ signal_changed (AudioContentProperty::AUDIO_MAPPING);
+}
diff --git a/src/lib/ffmpeg_content.h b/src/lib/ffmpeg_content.h
index 8f5c773ee..c94b1937c 100644
--- a/src/lib/ffmpeg_content.h
+++ b/src/lib/ffmpeg_content.h
@@ -104,6 +104,7 @@ public:
int content_audio_frame_rate () const;
int output_audio_frame_rate () const;
AudioMapping audio_mapping () const;
+ void set_audio_mapping (AudioMapping);
void set_filters (std::vector<Filter const *> const &);
diff --git a/src/lib/null_content.h b/src/lib/null_content.h
index f8829658c..889ff7a0d 100644
--- a/src/lib/null_content.h
+++ b/src/lib/null_content.h
@@ -54,6 +54,8 @@ public:
AudioMapping audio_mapping () const {
return AudioMapping ();
}
+
+ void set_audio_mapping (AudioMapping) {}
Time length () const {
return _length;
diff --git a/src/lib/sndfile_content.cc b/src/lib/sndfile_content.cc
index a80c7dbe5..8eede89f4 100644
--- a/src/lib/sndfile_content.cc
+++ b/src/lib/sndfile_content.cc
@@ -1,5 +1,3 @@
-/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */
-
/*
Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
@@ -50,6 +48,7 @@ SndfileContent::SndfileContent (shared_ptr<const Film> f, shared_ptr<const cxml:
_audio_channels = node->number_child<int> ("AudioChannels");
_audio_length = node->number_child<ContentAudioFrame> ("AudioLength");
_audio_frame_rate = node->number_child<int> ("AudioFrameRate");
+ _audio_mapping = AudioMapping (node->node_child ("AudioMapping"));
}
string
@@ -113,6 +112,10 @@ SndfileContent::examine (shared_ptr<Job> job)
signal_changed (AudioContentProperty::AUDIO_CHANNELS);
signal_changed (AudioContentProperty::AUDIO_LENGTH);
signal_changed (AudioContentProperty::AUDIO_FRAME_RATE);
+
+ /* XXX: do this in signal_changed...? */
+ _audio_mapping = AudioMapping (_audio_channels);
+ signal_changed (AudioContentProperty::AUDIO_MAPPING);
}
void
@@ -124,6 +127,7 @@ 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));
+ _audio_mapping.as_xml (node->add_child("AudioMapping"));
}
Time
@@ -143,3 +147,14 @@ SndfileContent::output_audio_frame_rate () const
return film->dcp_audio_frame_rate ();
}
+
+void
+SndfileContent::set_audio_mapping (AudioMapping m)
+{
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+ _audio_mapping = m;
+ }
+
+ signal_changed (AudioContentProperty::AUDIO_MAPPING);
+}
diff --git a/src/lib/sndfile_content.h b/src/lib/sndfile_content.h
index 17423b8ed..30eb23a4e 100644
--- a/src/lib/sndfile_content.h
+++ b/src/lib/sndfile_content.h
@@ -1,5 +1,3 @@
-/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */
-
/*
Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
@@ -67,6 +65,8 @@ public:
boost::mutex::scoped_lock lm (_mutex);
return _audio_mapping;
}
+
+ void set_audio_mapping (AudioMapping);
static bool valid_file (boost::filesystem::path);
diff --git a/src/wx/audio_mapping_view.cc b/src/wx/audio_mapping_view.cc
index 43119ef4e..3ea0cdd1d 100644
--- a/src/wx/audio_mapping_view.cc
+++ b/src/wx/audio_mapping_view.cc
@@ -1,5 +1,3 @@
-/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */
-
/*
Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
@@ -147,7 +145,7 @@ AudioMappingView::left_click (wxGridEvent& ev)
}
void
-AudioMappingView::set_mapping (AudioMapping map)
+AudioMappingView::set (AudioMapping map)
{
if (_grid->GetNumberRows ()) {
_grid->DeleteRows (0, _grid->GetNumberRows ());
diff --git a/src/wx/audio_mapping_view.h b/src/wx/audio_mapping_view.h
index 76e20ad9a..824356a9f 100644
--- a/src/wx/audio_mapping_view.h
+++ b/src/wx/audio_mapping_view.h
@@ -29,7 +29,7 @@ class AudioMappingView : public wxPanel
public:
AudioMappingView (wxWindow *);
- void set_mapping (AudioMapping);
+ void set (AudioMapping);
boost::signals2::signal<void (AudioMapping)> Changed;
diff --git a/src/wx/film_editor.cc b/src/wx/film_editor.cc
index d0522cf73..e6dd06472 100644
--- a/src/wx/film_editor.cc
+++ b/src/wx/film_editor.cc
@@ -685,12 +685,15 @@ FilmEditor::film_content_changed (weak_ptr<Content> weak_content, int property)
ffmpeg_content = dynamic_pointer_cast<FFmpegContent> (content);
}
+ /* We can't use case {} here */
+
if (property == ContentProperty::START) {
if (content) {
_start->set (content->start (), _film->dcp_video_frame_rate ());
} else {
_start->set (0, 24);
}
+
} else if (property == VideoContentProperty::VIDEO_CROP) {
checked_set (_left_crop, video_content ? video_content->crop().left : 0);
checked_set (_right_crop, video_content ? video_content->crop().right : 0);
@@ -701,6 +704,8 @@ FilmEditor::film_content_changed (weak_ptr<Content> weak_content, int property)
checked_set (_audio_gain, audio_content ? audio_content->audio_gain() : 0);
} else if (property == AudioContentProperty::AUDIO_DELAY) {
checked_set (_audio_delay, audio_content ? audio_content->audio_delay() : 0);
+ } else if (property == AudioContentProperty::AUDIO_MAPPING) {
+ _audio_mapping->set (audio_content ? audio_content->audio_mapping () : AudioMapping ());
} else if (property == FFmpegContentProperty::SUBTITLE_STREAMS) {
_subtitle_stream->Clear ();
if (ffmpeg_content) {
@@ -846,6 +851,7 @@ FilmEditor::set_film (shared_ptr<Film> f)
film_content_changed (boost::shared_ptr<Content> (), VideoContentProperty::VIDEO_CROP);
film_content_changed (boost::shared_ptr<Content> (), AudioContentProperty::AUDIO_GAIN);
film_content_changed (boost::shared_ptr<Content> (), AudioContentProperty::AUDIO_DELAY);
+ film_content_changed (boost::shared_ptr<Content> (), AudioContentProperty::AUDIO_MAPPING);
film_content_changed (boost::shared_ptr<Content> (), FFmpegContentProperty::SUBTITLE_STREAMS);
film_content_changed (boost::shared_ptr<Content> (), FFmpegContentProperty::SUBTITLE_STREAM);
film_content_changed (boost::shared_ptr<Content> (), FFmpegContentProperty::AUDIO_STREAMS);
@@ -1168,6 +1174,7 @@ FilmEditor::content_selection_changed (wxListEvent &)
film_content_changed (s, VideoContentProperty::VIDEO_CROP);
film_content_changed (s, AudioContentProperty::AUDIO_GAIN);
film_content_changed (s, AudioContentProperty::AUDIO_DELAY);
+ film_content_changed (s, AudioContentProperty::AUDIO_MAPPING);
film_content_changed (s, FFmpegContentProperty::AUDIO_STREAM);
film_content_changed (s, FFmpegContentProperty::AUDIO_STREAMS);
film_content_changed (s, FFmpegContentProperty::SUBTITLE_STREAM);
@@ -1394,11 +1401,10 @@ FilmEditor::audio_mapping_changed (AudioMapping m)
return;
}
- shared_ptr<FFmpegContent> fc = dynamic_pointer_cast<FFmpegContent> (c);
- if (!fc) {
+ shared_ptr<AudioContent> ac = dynamic_pointer_cast<AudioContent> (c);
+ if (!ac) {
return;
}
- /* XXX: should be general to audiocontent */
- fc->audio_stream()->mapping = m;
+ ac->set_audio_mapping (m);
}