#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"
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)
SetSizer (s);
_notebook = new wxNotebook (this, wxID_ANY);
s->Add (_notebook, 1);
-
+
make_film_panel ();
_notebook->AddPage (_film_panel, _("Film"), true);
make_video_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);
{
_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);
{
_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"));
{
_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);
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;
++i;
++n;
}
- if (i != _formats.end()) {
+ if (i == _formats.end()) {
checked_set (_format, -1);
} else {
checked_set (_format, n);
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;
}
}
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);
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);
}
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 (""));
}
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
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
_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 ()));
}
}
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