X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Ffilm_editor.cc;h=2528f49db7b5fed47a08a303c8fd378821c04007;hb=a237ef0838c4c730ff824a203780833c206764cc;hp=59210cc0bba0f197894ad051724cde2b9a9fc00a;hpb=250daa31097e975e57aa8a4ff19df484812988ce;p=dcpomatic.git diff --git a/src/wx/film_editor.cc b/src/wx/film_editor.cc index 59210cc0b..2528f49db 100644 --- a/src/wx/film_editor.cc +++ b/src/wx/film_editor.cc @@ -35,8 +35,9 @@ #include "lib/ab_transcode_job.h" #include "lib/job_manager.h" #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 +55,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 f, wxWindow* parent) @@ -65,7 +67,7 @@ FilmEditor::FilmEditor (shared_ptr f, wxWindow* parent) SetSizer (s); _notebook = new wxNotebook (this, wxID_ANY); s->Add (_notebook, 1); - + make_film_panel (); _notebook->AddPage (_film_panel, _("Film"), true); make_video_panel (); @@ -91,7 +93,9 @@ FilmEditor::make_film_panel () { _film_panel = new wxPanel (_notebook); _film_sizer = new wxFlexGridSizer (2, 4, 4); - _film_panel->SetSizer (_film_sizer); + wxBoxSizer* pad = new wxBoxSizer (wxVERTICAL); + pad->Add (_film_sizer, 0, wxALL, 8); + _film_panel->SetSizer (pad); add_label_to_sizer (_film_sizer, _film_panel, "Name"); _name = new wxTextCtrl (_film_panel, wxID_ANY); @@ -191,7 +195,7 @@ FilmEditor::connect_to_widgets () wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (FilmEditor::audio_gain_calculate_button_clicked), 0, this ); _audio_delay->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::audio_delay_changed), 0, this); - _use_source_audio->Connect (wxID_ANY, wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler (FilmEditor::use_audio_changed), 0, this); + _use_content_audio->Connect (wxID_ANY, wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler (FilmEditor::use_audio_changed), 0, this); _use_external_audio->Connect (wxID_ANY, wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler (FilmEditor::use_audio_changed), 0, this); for (int i = 0; i < MAX_AUDIO_CHANNELS; ++i) { _external_audio[i]->Connect ( @@ -205,7 +209,9 @@ FilmEditor::make_video_panel () { _video_panel = new wxPanel (_notebook); _video_sizer = new wxFlexGridSizer (2, 4, 4); - _video_panel->SetSizer (_video_sizer); + wxBoxSizer* pad = new wxBoxSizer (wxVERTICAL); + pad->Add (_video_sizer, 0, wxALL, 8); + _video_panel->SetSizer (pad); add_label_to_sizer (_video_sizer, _video_panel, "Format"); _format = new wxComboBox (_video_panel, wxID_ANY, wxT (""), wxDefaultPosition, wxDefaultSize, 0, 0, wxCB_READONLY); @@ -267,7 +273,9 @@ FilmEditor::make_audio_panel () { _audio_panel = new wxPanel (_notebook); _audio_sizer = new wxFlexGridSizer (2, 4, 4); - _audio_panel->SetSizer (_audio_sizer); + wxBoxSizer* pad = new wxBoxSizer (wxVERTICAL); + pad->Add (_audio_sizer, 0, wxALL, 8); + _audio_panel->SetSizer (pad); { video_control (add_label_to_sizer (_audio_sizer, _audio_panel, "Audio Gain")); @@ -291,8 +299,8 @@ FilmEditor::make_audio_panel () } { - _use_source_audio = new wxRadioButton (_audio_panel, wxID_ANY, _("Use source audio"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP); - _audio_sizer->Add (video_control (_use_source_audio)); + _use_content_audio = new wxRadioButton (_audio_panel, wxID_ANY, _("Use content's audio"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP); + _audio_sizer->Add (video_control (_use_content_audio)); wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL); _audio_stream = new wxComboBox (_audio_panel, wxID_ANY, wxT (""), wxDefaultPosition, wxDefaultSize, 0, 0, wxCB_READONLY); s->Add (video_control (_audio_stream), 1); @@ -331,7 +339,9 @@ FilmEditor::make_subtitle_panel () { _subtitle_panel = new wxPanel (_notebook); _subtitle_sizer = new wxFlexGridSizer (2, 4, 4); - _subtitle_panel->SetSizer (_subtitle_sizer); + wxBoxSizer* pad = new wxBoxSizer (wxVERTICAL); + pad->Add (_subtitle_sizer, 0, wxALL, 8); + _subtitle_panel->SetSizer (pad); _with_subtitles = new wxCheckBox (_subtitle_panel, wxID_ANY, wxT("With Subtitles")); video_control (_with_subtitles); @@ -485,11 +495,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; @@ -498,7 +510,7 @@ FilmEditor::film_changed (Film::Property p) ++i; ++n; } - if (i != _formats.end()) { + if (i == _formats.end()) { checked_set (_format, -1); } else { checked_set (_format, n); @@ -600,31 +612,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_SOURCE_AUDIO: - checked_set (_use_source_audio, _film->use_source_audio ()); - checked_set (_use_external_audio, !_film->use_source_audio ()); - setup_audio_control_sensitivity (); - break; case Film::EXTERNAL_AUDIO: { vector 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 +702,9 @@ FilmEditor::set_film (shared_ptr f) film_changed (Film::DCP_TRIM_START); film_changed (Film::DCP_TRIM_END); film_changed (Film::DCP_AB); - film_changed (Film::USE_SOURCE_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 +713,7 @@ FilmEditor::set_film (shared_ptr 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); } @@ -927,10 +941,10 @@ FilmEditor::setup_subtitle_control_sensitivity () void FilmEditor::setup_audio_control_sensitivity () { - _use_source_audio->Enable (_generally_sensitive); + _use_content_audio->Enable (_generally_sensitive); _use_external_audio->Enable (_generally_sensitive); - bool const source = _generally_sensitive && _use_source_audio->GetValue(); + bool const source = _generally_sensitive && _use_content_audio->GetValue(); bool const external = _generally_sensitive && _use_external_audio->GetValue(); _audio_stream->Enable (source); @@ -965,24 +979,23 @@ void FilmEditor::setup_streams () { _audio_stream->Clear (); - vector a = _film->audio_streams (); - for (vector::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 > a = _film->content_audio_streams (); + for (vector >::iterator i = a.begin(); i != a.end(); ++i) { + shared_ptr ffa = dynamic_pointer_cast (*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 s = _film->subtitle_streams (); - for (vector::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 > s = _film->subtitle_streams (); + for (vector >::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,7 +1008,12 @@ FilmEditor::audio_stream_changed (wxCommandEvent &) return; } - _film->set_audio_stream (AudioStream (string_client_data (_audio_stream->GetClientObject (_audio_stream->GetSelection ())))); + _film->set_content_audio_stream ( + audio_stream_factory ( + string_client_data (_audio_stream->GetClientObject (_audio_stream->GetSelection ())), + Film::state_version + ) + ); } void @@ -1005,7 +1023,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 @@ -1015,7 +1038,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 ())); } } @@ -1029,8 +1052,7 @@ FilmEditor::active_jobs_changed (bool a) void FilmEditor::use_audio_changed (wxCommandEvent &) { - _film->set_use_source_audio (_use_source_audio->GetValue ()); - setup_audio_control_sensitivity (); + _film->set_use_content_audio (_use_content_audio->GetValue()); } void