Move audio bits into AudioContent.
authorCarl Hetherington <cth@carlh.net>
Tue, 21 May 2013 22:37:09 +0000 (23:37 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 21 May 2013 22:37:09 +0000 (23:37 +0100)
src/lib/audio_content.cc
src/lib/audio_content.h
src/lib/film.cc
src/lib/film.h
src/lib/transcode_job.cc
src/wx/audio_dialog.cc
src/wx/film_editor.cc
src/wx/film_editor.h

index e38d9d265aefd723210845c877ac81e2ac8d54fc..fc95acd7f2ea25d229b0e6c49a92b0acd9e5afdc 100644 (file)
 #include <libcxml/cxml.h>
 #include "audio_content.h"
 
+using std::string;
 using boost::shared_ptr;
+using boost::lexical_cast;
 
 int const AudioContentProperty::AUDIO_CHANNELS = 200;
 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;
 
 AudioContent::AudioContent (boost::filesystem::path f)
        : Content (f)
+       , _audio_gain (0)
+       , _audio_delay (0)
 {
 
 }
@@ -37,10 +43,14 @@ AudioContent::AudioContent (boost::filesystem::path f)
 AudioContent::AudioContent (shared_ptr<const cxml::Node> node)
        : Content (node)
 {
+       _audio_gain = node->number_child<float> ("AudioGain");
+       _audio_delay = node->number_child<int> ("AudioDelay");
 }
 
 AudioContent::AudioContent (AudioContent const & o)
        : Content (o)
+       , _audio_gain (o._audio_gain)
+       , _audio_delay (o._audio_delay)
 {
 
 }
@@ -48,5 +58,31 @@ AudioContent::AudioContent (AudioContent const & o)
 void
 AudioContent::as_xml (xmlpp::Node* node) const
 {
+       boost::mutex::scoped_lock lm (_mutex);
+       node->add_child("AudioGain")->add_child_text (lexical_cast<string> (_audio_gain));
+       node->add_child("AudioDelay")->add_child_text (lexical_cast<string> (_audio_delay));
+}
+
+
+void
+AudioContent::set_audio_gain (float g)
+{
+       {
+               boost::mutex::scoped_lock lm (_mutex);
+               _audio_gain = g;
+       }
        
+       signal_changed (AudioContentProperty::AUDIO_GAIN);
 }
+
+void
+AudioContent::set_audio_delay (int d)
+{
+       {
+               boost::mutex::scoped_lock lm (_mutex);
+               _audio_delay = d;
+       }
+       
+       signal_changed (AudioContentProperty::AUDIO_DELAY);
+}
+
index 51f05efb0c9afcdfe3e506940d6d4dac3ba9b5c7..30524b4f4e21f1c491cb7b00fd4aabaa4d7a3c1b 100644 (file)
@@ -35,6 +35,8 @@ public:
        static int const AUDIO_CHANNELS;
        static int const AUDIO_LENGTH;
        static int const AUDIO_FRAME_RATE;
+       static int const AUDIO_GAIN;
+       static int const AUDIO_DELAY;
 };
 
 class AudioContent : public virtual Content
@@ -51,6 +53,25 @@ public:
         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;
+
+       void set_audio_gain (float);
+       void set_audio_delay (int);
+       
+       float audio_gain () const {
+               boost::mutex::scoped_lock lm (_mutex);
+               return _audio_gain;
+       }
+
+       int audio_delay () const {
+               boost::mutex::scoped_lock lm (_mutex);
+               return _audio_delay;
+       }
+
+private:
+       /** Gain to apply to audio in dB */
+       float _audio_gain;
+       /** Delay to apply to audio (positive moves audio later) in milliseconds */
+       int _audio_delay;
 };
 
 #endif
index f05362d56234abf830620118dbcd2049d81bc57c..b561c2d15b2d2703242b20d54e373054906cefe1 100644 (file)
@@ -98,8 +98,6 @@ Film::Film (string d, bool must_exist)
        , _container (Config::instance()->default_container ())
        , _scaler (Scaler::from_id ("bicubic"))
        , _ab (false)
-       , _audio_gain (0)
-       , _audio_delay (0)
        , _with_subtitles (false)
        , _subtitle_offset (0)
        , _subtitle_scale (1)
@@ -164,8 +162,6 @@ Film::Film (Film const & o)
        , _filters           (o._filters)
        , _scaler            (o._scaler)
        , _ab                (o._ab)
-       , _audio_gain        (o._audio_gain)
-       , _audio_delay       (o._audio_delay)
        , _with_subtitles    (o._with_subtitles)
        , _subtitle_offset   (o._subtitle_offset)
        , _subtitle_scale    (o._subtitle_scale)
@@ -418,8 +414,6 @@ Film::write_metadata () const
        
        root->add_child("Scaler")->add_child_text (_scaler->id ());
        root->add_child("AB")->add_child_text (_ab ? "1" : "0");
-       root->add_child("AudioGain")->add_child_text (boost::lexical_cast<string> (_audio_gain));
-       root->add_child("AudioDelay")->add_child_text (boost::lexical_cast<string> (_audio_delay));
        root->add_child("WithSubtitles")->add_child_text (_with_subtitles ? "1" : "0");
        root->add_child("SubtitleOffset")->add_child_text (boost::lexical_cast<string> (_subtitle_offset));
        root->add_child("SubtitleScale")->add_child_text (boost::lexical_cast<string> (_subtitle_scale));
@@ -474,8 +468,6 @@ Film::read_metadata ()
 
        _scaler = Scaler::from_id (f.string_child ("Scaler"));
        _ab = f.bool_child ("AB");
-       _audio_gain = f.number_child<float> ("AudioGain");
-       _audio_delay = f.number_child<int> ("AudioDelay");
        _with_subtitles = f.bool_child ("WithSubtitles");
        _subtitle_offset = f.number_child<float> ("SubtitleOffset");
        _subtitle_scale = f.number_child<float> ("SubtitleScale");
@@ -684,26 +676,6 @@ Film::set_ab (bool a)
        signal_changed (AB);
 }
 
-void
-Film::set_audio_gain (float g)
-{
-       {
-               boost::mutex::scoped_lock lm (_state_mutex);
-               _audio_gain = g;
-       }
-       signal_changed (AUDIO_GAIN);
-}
-
-void
-Film::set_audio_delay (int d)
-{
-       {
-               boost::mutex::scoped_lock lm (_state_mutex);
-               _audio_delay = d;
-       }
-       signal_changed (AUDIO_DELAY);
-}
-
 void
 Film::set_with_subtitles (bool w)
 {
index 9b01dc6047adfe89a8ff21637c417b11192b5428..71a3b1c34b68cd226525d02611d665b363a4b14b 100644 (file)
@@ -134,8 +134,6 @@ public:
                FILTERS,
                SCALER,
                AB,
-               AUDIO_GAIN,
-               AUDIO_DELAY,
                WITH_SUBTITLES,
                SUBTITLE_OFFSET,
                SUBTITLE_SCALE,
@@ -188,16 +186,6 @@ public:
                return _ab;
        }
 
-       float audio_gain () const {
-               boost::mutex::scoped_lock lm (_state_mutex);
-               return _audio_gain;
-       }
-
-       int audio_delay () const {
-               boost::mutex::scoped_lock lm (_state_mutex);
-               return _audio_delay;
-       }
-
        bool with_subtitles () const {
                boost::mutex::scoped_lock lm (_state_mutex);
                return _with_subtitles;
@@ -246,8 +234,6 @@ public:
        void set_filters (std::vector<Filter const *>);
        void set_scaler (Scaler const *);
        void set_ab (bool);
-       void set_audio_gain (float);
-       void set_audio_delay (int);
        void set_with_subtitles (bool);
        void set_subtitle_offset (int);
        void set_subtitle_scale (float);
@@ -308,10 +294,6 @@ private:
            has the specified filters and post-processing.
        */
        bool _ab;
-       /** Gain to apply to audio in dB */
-       float _audio_gain;
-       /** Delay to apply to audio (positive moves audio later) in milliseconds */
-       int _audio_delay;
        /** True if subtitles should be shown for this film */
        bool _with_subtitles;
        /** y offset for placing subtitles, in source pixels; +ve is further down
index a0a9454b7a1b59c959ed85730ce37961f40808bd..f9a305367ff20a57d33fe788084e54cded401fdf 100644 (file)
@@ -58,7 +58,6 @@ TranscodeJob::run ()
        try {
 
                _film->log()->log (N_("Transcode job starting"));
-               _film->log()->log (String::compose (N_("Audio delay is %1ms"), _film->audio_delay()));
 
                _transcoder.reset (new Transcoder (_film, shared_from_this ()));
                _transcoder->go ();
index 6fd77a2df672a4618aca318866eb60d07cbc8a58..1241b61fb079cd1f4d9f108d153dcd7ba6f75157 100644 (file)
@@ -93,7 +93,7 @@ AudioDialog::set_film (shared_ptr<Film> f)
        _film = f;
 
        try_to_load_analysis ();
-       _plot->set_gain (_film->audio_gain ());
+//     _plot->set_gain (_film->audio_gain ());
 
        _film_changed_connection = _film->Changed.connect (bind (&AudioDialog::film_changed, this, _1));
        _film_audio_analysis_succeeded_connection = _film->AudioAnalysisSucceeded.connect (bind (&AudioDialog::try_to_load_analysis, this));
@@ -145,8 +145,8 @@ void
 AudioDialog::film_changed (Film::Property p)
 {
        switch (p) {
-       case Film::AUDIO_GAIN:
-               _plot->set_gain (_film->audio_gain ());
+//     case Film::AUDIO_GAIN:
+//             _plot->set_gain (_film->audio_gain ());
                break;
        default:
                break;
index 23dbe19a995f0d05bfce89492a5e87b20bcd4a0d..3a1fb232bbef4038b313fdfda4118ffe95dd5625 100644 (file)
@@ -613,12 +613,6 @@ FilmEditor::film_changed (Film::Property p)
        case Film::SCALER:
                checked_set (_scaler, Scaler::as_index (_film->scaler ()));
                break;
-       case Film::AUDIO_GAIN:
-               checked_set (_audio_gain, _film->audio_gain ());
-               break;
-       case Film::AUDIO_DELAY:
-               checked_set (_audio_delay, _film->audio_delay ());
-               break;
        case Film::WITH_SUBTITLES:
                checked_set (_with_subtitles, _film->with_subtitles ());
                setup_subtitle_control_sensitivity ();
@@ -676,8 +670,10 @@ FilmEditor::film_content_changed (weak_ptr<Content> weak_content, int property)
 
        shared_ptr<Content> content = weak_content.lock ();
        shared_ptr<VideoContent> video_content;
+       shared_ptr<AudioContent> audio_content;
        if (content) {
                video_content = dynamic_pointer_cast<VideoContent> (content);
+               audio_content = dynamic_pointer_cast<AudioContent> (content);
        }
 
        if (property == VideoContentProperty::VIDEO_CROP) {
@@ -686,6 +682,10 @@ FilmEditor::film_content_changed (weak_ptr<Content> weak_content, int property)
                checked_set (_top_crop,    video_content ? video_content->crop().top :    0);
                checked_set (_bottom_crop, video_content ? video_content->crop().bottom : 0);
                setup_scaling_description ();
+       } else if (property == AudioContentProperty::AUDIO_GAIN) {
+               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 == FFmpegContentProperty::SUBTITLE_STREAMS) {
                setup_subtitle_control_sensitivity ();
        } else if (property == FFmpegContentProperty::AUDIO_STREAMS) {
@@ -782,8 +782,6 @@ FilmEditor::set_film (shared_ptr<Film> f)
        film_changed (Film::CONTAINER);
        film_changed (Film::FILTERS);
        film_changed (Film::SCALER);
-       film_changed (Film::AUDIO_GAIN);
-       film_changed (Film::AUDIO_DELAY);
        film_changed (Film::WITH_SUBTITLES);
        film_changed (Film::SUBTITLE_OFFSET);
        film_changed (Film::SUBTITLE_SCALE);
@@ -793,6 +791,8 @@ FilmEditor::set_film (shared_ptr<Film> f)
        film_changed (Film::DCP_VIDEO_FRAME_RATE);
 
        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> (), FFmpegContentProperty::SUBTITLE_STREAMS);
        film_content_changed (boost::shared_ptr<Content> (), FFmpegContentProperty::SUBTITLE_STREAM);
        film_content_changed (boost::shared_ptr<Content> (), FFmpegContentProperty::AUDIO_STREAMS);
@@ -861,21 +861,23 @@ FilmEditor::scaler_changed (wxCommandEvent &)
 void
 FilmEditor::audio_gain_changed (wxCommandEvent &)
 {
-       if (!_film) {
+       shared_ptr<AudioContent> ac = selected_audio_content ();
+       if (!ac) {
                return;
        }
 
-       _film->set_audio_gain (_audio_gain->GetValue ());
+       ac->set_audio_gain (_audio_gain->GetValue ());
 }
 
 void
 FilmEditor::audio_delay_changed (wxCommandEvent &)
 {
-       if (!_film) {
+       shared_ptr<AudioContent> ac = selected_audio_content ();
+       if (!ac) {
                return;
        }
 
-       _film->set_audio_delay (_audio_delay->GetValue ());
+       ac->set_audio_delay (_audio_delay->GetValue ());
 }
 
 void
@@ -1137,6 +1139,17 @@ FilmEditor::selected_video_content ()
        return dynamic_pointer_cast<VideoContent> (c);
 }
 
+shared_ptr<AudioContent>
+FilmEditor::selected_audio_content ()
+{
+       shared_ptr<Content> c = selected_content ();
+       if (!c) {
+               return shared_ptr<AudioContent> ();
+       }
+
+       return dynamic_pointer_cast<AudioContent> (c);
+}
+
 void
 FilmEditor::setup_scaling_description ()
 {
index 3f72642964415324093f8770f1ccfb1b97bbf774..ec563cf8257e600f17f7b413d9afbedb94541871 100644 (file)
@@ -112,6 +112,7 @@ private:
        void active_jobs_changed (bool);
        boost::shared_ptr<Content> selected_content ();
        boost::shared_ptr<VideoContent> selected_video_content ();
+       boost::shared_ptr<AudioContent> selected_audio_content ();
 
        wxNotebook* _main_notebook;
        wxNotebook* _content_notebook;