From: Carl Hetherington Date: Sun, 26 May 2013 00:26:21 +0000 (+0100) Subject: Improve audio mapping handling a bit. X-Git-Tag: v2.0.48~1337^2~344 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=951a81dbb75db9850ee0226f74a575af7335a576 Improve audio mapping handling a bit. --- 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 @@ -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 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 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 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 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 @@ -50,6 +48,7 @@ SndfileContent::SndfileContent (shared_ptr f, shared_ptrnumber_child ("AudioChannels"); _audio_length = node->number_child ("AudioLength"); _audio_frame_rate = node->number_child ("AudioFrameRate"); + _audio_mapping = AudioMapping (node->node_child ("AudioMapping")); } string @@ -113,6 +112,10 @@ SndfileContent::examine (shared_ptr 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 (_audio_channels)); node->add_child("AudioLength")->add_child_text (lexical_cast (_audio_length)); node->add_child("AudioFrameRate")->add_child_text (lexical_cast (_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 @@ -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 @@ -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 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 weak_content, int property) ffmpeg_content = dynamic_pointer_cast (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 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 f) film_content_changed (boost::shared_ptr (), VideoContentProperty::VIDEO_CROP); film_content_changed (boost::shared_ptr (), AudioContentProperty::AUDIO_GAIN); film_content_changed (boost::shared_ptr (), AudioContentProperty::AUDIO_DELAY); + film_content_changed (boost::shared_ptr (), AudioContentProperty::AUDIO_MAPPING); film_content_changed (boost::shared_ptr (), FFmpegContentProperty::SUBTITLE_STREAMS); film_content_changed (boost::shared_ptr (), FFmpegContentProperty::SUBTITLE_STREAM); film_content_changed (boost::shared_ptr (), 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 fc = dynamic_pointer_cast (c); - if (!fc) { + shared_ptr ac = dynamic_pointer_cast (c); + if (!ac) { return; } - /* XXX: should be general to audiocontent */ - fc->audio_stream()->mapping = m; + ac->set_audio_mapping (m); }