summaryrefslogtreecommitdiff
path: root/src/wx/film_editor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/wx/film_editor.cc')
-rw-r--r--src/wx/film_editor.cc74
1 files changed, 42 insertions, 32 deletions
diff --git a/src/wx/film_editor.cc b/src/wx/film_editor.cc
index 6602435c4..f2831d75a 100644
--- a/src/wx/film_editor.cc
+++ b/src/wx/film_editor.cc
@@ -37,6 +37,8 @@
#include "lib/filter.h"
#include "lib/screen.h"
#include "lib/config.h"
+#include "lib/ffmpeg_decoder.h"
+#include "lib/external_audio_decoder.h"
#include "filter_dialog.h"
#include "wx_util.h"
#include "film_editor.h"
@@ -54,6 +56,7 @@ using std::setprecision;
using std::list;
using std::vector;
using boost::shared_ptr;
+using boost::dynamic_pointer_cast;
/** @param f Film to edit */
FilmEditor::FilmEditor (shared_ptr<Film> f, wxWindow* parent)
@@ -485,11 +488,13 @@ FilmEditor::film_changed (Film::Property p)
setup_subtitle_control_sensitivity ();
setup_streams ();
break;
- case Film::AUDIO_STREAMS:
case Film::SUBTITLE_STREAMS:
setup_subtitle_control_sensitivity ();
setup_streams ();
break;
+ case Film::CONTENT_AUDIO_STREAMS:
+ setup_streams ();
+ break;
case Film::FORMAT:
{
int n = 0;
@@ -600,31 +605,33 @@ FilmEditor::film_changed (Film::Property p)
case Film::DCI_METADATA:
_dcp_name->SetLabel (std_to_wx (_film->dcp_name ()));
break;
- case Film::AUDIO_STREAM:
- if (_film->audio_stream()) {
- checked_set (_audio_stream, _film->audio_stream().get().to_string());
- } else {
- checked_set (_audio_stream, wxNOT_FOUND);
+ case Film::CONTENT_AUDIO_STREAM:
+ if (_film->content_audio_stream()) {
+ checked_set (_audio_stream, _film->content_audio_stream()->to_string());
}
_dcp_name->SetLabel (std_to_wx (_film->dcp_name ()));
setup_audio_details ();
+ setup_audio_control_sensitivity ();
+ break;
+ case Film::USE_CONTENT_AUDIO:
+ checked_set (_use_content_audio, _film->use_content_audio());
+ checked_set (_use_external_audio, !_film->use_content_audio());
+ _dcp_name->SetLabel (std_to_wx (_film->dcp_name ()));
+ setup_audio_details ();
+ setup_audio_control_sensitivity ();
break;
case Film::SUBTITLE_STREAM:
if (_film->subtitle_stream()) {
- checked_set (_subtitle_stream, _film->subtitle_stream().get().to_string());
+ checked_set (_subtitle_stream, _film->subtitle_stream()->to_string());
}
break;
- case Film::USE_CONTENT_AUDIO:
- checked_set (_use_content_audio, _film->use_content_audio ());
- checked_set (_use_external_audio, !_film->use_content_audio ());
- setup_audio_control_sensitivity ();
- break;
case Film::EXTERNAL_AUDIO:
{
vector<string> a = _film->external_audio ();
for (size_t i = 0; i < a.size() && i < MAX_AUDIO_CHANNELS; ++i) {
checked_set (_external_audio[i], a[i]);
}
+ setup_audio_details ();
break;
}
}
@@ -688,9 +695,9 @@ FilmEditor::set_film (shared_ptr<Film> f)
film_changed (Film::DCP_TRIM_START);
film_changed (Film::DCP_TRIM_END);
film_changed (Film::DCP_AB);
- film_changed (Film::USE_CONTENT_AUDIO);
- film_changed (Film::AUDIO_STREAM);
+ film_changed (Film::CONTENT_AUDIO_STREAM);
film_changed (Film::EXTERNAL_AUDIO);
+ film_changed (Film::USE_CONTENT_AUDIO);
film_changed (Film::AUDIO_GAIN);
film_changed (Film::AUDIO_DELAY);
film_changed (Film::WITH_SUBTITLES);
@@ -699,7 +706,7 @@ FilmEditor::set_film (shared_ptr<Film> f)
film_changed (Film::DCI_METADATA);
film_changed (Film::SIZE);
film_changed (Film::LENGTH);
- film_changed (Film::AUDIO_STREAMS);
+ film_changed (Film::CONTENT_AUDIO_STREAMS);
film_changed (Film::SUBTITLE_STREAMS);
film_changed (Film::FRAMES_PER_SECOND);
}
@@ -965,24 +972,23 @@ void
FilmEditor::setup_streams ()
{
_audio_stream->Clear ();
- vector<AudioStream> a = _film->audio_streams ();
- for (vector<AudioStream>::iterator i = a.begin(); i != a.end(); ++i) {
- _audio_stream->Append (std_to_wx (i->name()), new wxStringClientData (std_to_wx (i->to_string ())));
+ vector<shared_ptr<AudioStream> > a = _film->content_audio_streams ();
+ for (vector<shared_ptr<AudioStream> >::iterator i = a.begin(); i != a.end(); ++i) {
+ shared_ptr<FFmpegAudioStream> ffa = dynamic_pointer_cast<FFmpegAudioStream> (*i);
+ _audio_stream->Append (std_to_wx (ffa->name()), new wxStringClientData (std_to_wx (ffa->to_string ())));
}
- if (_film->audio_stream()) {
- checked_set (_audio_stream, _film->audio_stream().get().to_string());
- } else {
- _audio_stream->SetValue (wxT (""));
+ if (_film->use_content_audio() && _film->audio_stream()) {
+ checked_set (_audio_stream, _film->audio_stream()->to_string());
}
_subtitle_stream->Clear ();
- vector<SubtitleStream> s = _film->subtitle_streams ();
- for (vector<SubtitleStream>::iterator i = s.begin(); i != s.end(); ++i) {
- _subtitle_stream->Append (std_to_wx (i->name()), new wxStringClientData (std_to_wx (i->to_string ())));
+ vector<shared_ptr<SubtitleStream> > s = _film->subtitle_streams ();
+ for (vector<shared_ptr<SubtitleStream> >::iterator i = s.begin(); i != s.end(); ++i) {
+ _subtitle_stream->Append (std_to_wx ((*i)->name()), new wxStringClientData (std_to_wx ((*i)->to_string ())));
}
if (_film->subtitle_stream()) {
- checked_set (_subtitle_stream, _film->subtitle_stream().get().to_string());
+ checked_set (_subtitle_stream, _film->subtitle_stream()->to_string());
} else {
_subtitle_stream->SetValue (wxT (""));
}
@@ -995,8 +1001,8 @@ FilmEditor::audio_stream_changed (wxCommandEvent &)
return;
}
- _film->set_audio_stream (
- AudioStream (
+ _film->set_content_audio_stream (
+ audio_stream_factory (
string_client_data (_audio_stream->GetClientObject (_audio_stream->GetSelection ())),
Film::state_version
)
@@ -1010,7 +1016,12 @@ FilmEditor::subtitle_stream_changed (wxCommandEvent &)
return;
}
- _film->set_subtitle_stream (SubtitleStream (string_client_data (_subtitle_stream->GetClientObject (_subtitle_stream->GetSelection ()))));
+ _film->set_subtitle_stream (
+ subtitle_stream_factory (
+ string_client_data (_subtitle_stream->GetClientObject (_subtitle_stream->GetSelection ())),
+ Film::state_version
+ )
+ );
}
void
@@ -1020,7 +1031,7 @@ FilmEditor::setup_audio_details ()
_audio->SetLabel (wxT (""));
} else {
stringstream s;
- s << _film->audio_stream().get().channels () << " channels, " << _film->audio_stream().get().sample_rate() << "Hz";
+ s << _film->audio_stream()->channels () << " channels, " << _film->audio_stream()->sample_rate() << "Hz";
_audio->SetLabel (std_to_wx (s.str ()));
}
}
@@ -1034,8 +1045,7 @@ FilmEditor::active_jobs_changed (bool a)
void
FilmEditor::use_audio_changed (wxCommandEvent &)
{
- _film->set_use_content_audio (_use_content_audio->GetValue ());
- setup_audio_control_sensitivity ();
+ _film->set_use_content_audio (_use_content_audio->GetValue());
}
void