+/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */
+
/*
Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
#include <boost/lexical_cast.hpp>
#include "lib/ffmpeg_content.h"
+#include "lib/playlist.h"
#include "ffmpeg_content_dialog.h"
#include "wx_util.h"
+#include "audio_mapping_view.h"
using std::vector;
using std::string;
+using std::cout;
using boost::shared_ptr;
using boost::lexical_cast;
+using boost::dynamic_pointer_cast;
FFmpegContentDialog::FFmpegContentDialog (wxWindow* parent, shared_ptr<FFmpegContent> content)
: wxDialog (parent, wxID_ANY, _("Video"))
+ , _content (content)
{
wxFlexGridSizer* grid = new wxFlexGridSizer (3, 6, 6);
grid->AddGrowableCol (1, 1);
- add_label_to_sizer (grid, this, _("Audio Stream"));
+ add_label_to_sizer (grid, this, _("Audio stream"));
_audio_stream = new wxChoice (this, wxID_ANY);
grid->Add (_audio_stream, 1, wxEXPAND | wxALL, 6);
_audio_description = new wxStaticText (this, wxID_ANY, wxT (""));
grid->AddSpacer (0);
_audio_stream->Clear ();
- vector<FFmpegAudioStream> a = content->audio_streams ();
- for (vector<FFmpegAudioStream>::iterator i = a.begin(); i != a.end(); ++i) {
- _audio_stream->Append (std_to_wx (i->name), new wxStringClientData (std_to_wx (lexical_cast<string> (i->id))));
+ vector<shared_ptr<FFmpegAudioStream> > a = content->audio_streams ();
+ for (vector<shared_ptr<FFmpegAudioStream> >::iterator i = a.begin(); i != a.end(); ++i) {
+ _audio_stream->Append (std_to_wx ((*i)->name), new wxStringClientData (std_to_wx (lexical_cast<string> ((*i)->id))));
}
if (content->audio_stream()) {
}
_subtitle_stream->Clear ();
- vector<FFmpegSubtitleStream> s = content->subtitle_streams ();
+ vector<shared_ptr<FFmpegSubtitleStream> > s = content->subtitle_streams ();
if (s.empty ()) {
_subtitle_stream->Enable (false);
}
- for (vector<FFmpegSubtitleStream>::iterator i = s.begin(); i != s.end(); ++i) {
- _subtitle_stream->Append (std_to_wx (i->name), new wxStringClientData (std_to_wx (lexical_cast<string> (i->id))));
+ for (vector<shared_ptr<FFmpegSubtitleStream> >::iterator i = s.begin(); i != s.end(); ++i) {
+ _subtitle_stream->Append (std_to_wx ((*i)->name), new wxStringClientData (std_to_wx (lexical_cast<string> ((*i)->id))));
}
if (content->subtitle_stream()) {
}
wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL);
+
overall_sizer->Add (grid, 1, wxEXPAND | wxALL, 6);
+ _audio_mapping = new AudioMappingView (this);
+ _audio_mapping->set_mapping (content->audio_mapping ());
+ overall_sizer->Add (_audio_mapping, 1, wxEXPAND | wxALL, 6);
+
wxSizer* buttons = CreateSeparatedButtonSizer (wxOK);
if (buttons) {
overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder());
_audio_stream->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FFmpegContentDialog::audio_stream_changed), 0, this);
_subtitle_stream->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FFmpegContentDialog::subtitle_stream_changed), 0, this);
+ _audio_mapping->Changed.connect (bind (&FFmpegContentDialog::audio_mapping_changed, this, _1));
}
void
return;
}
- vector<FFmpegAudioStream> a = c->audio_streams ();
- vector<FFmpegAudioStream>::iterator i = a.begin ();
+ vector<shared_ptr<FFmpegAudioStream> > a = c->audio_streams ();
+ vector<shared_ptr<FFmpegAudioStream> >::iterator i = a.begin ();
string const s = string_client_data (_audio_stream->GetClientObject (_audio_stream->GetSelection ()));
- while (i != a.end() && lexical_cast<string> (i->id) != s) {
+ while (i != a.end() && lexical_cast<string> ((*i)->id) != s) {
++i;
}
return;
}
- vector<FFmpegSubtitleStream> a = c->subtitle_streams ();
- vector<FFmpegSubtitleStream>::iterator i = a.begin ();
+ vector<shared_ptr<FFmpegSubtitleStream> > a = c->subtitle_streams ();
+ vector<shared_ptr<FFmpegSubtitleStream> >::iterator i = a.begin ();
string const s = string_client_data (_subtitle_stream->GetClientObject (_subtitle_stream->GetSelection ()));
- while (i != a.end() && lexical_cast<string> (i->id) != s) {
+ while (i != a.end() && lexical_cast<string> ((*i)->id) != s) {
++i;
}
c->set_subtitle_stream (*i);
}
}
+
+void
+FFmpegContentDialog::audio_mapping_changed (AudioMapping m)
+{
+ shared_ptr<FFmpegContent> content = _content.lock ();
+
+ if (!content || !content->audio_stream()) {
+ return;
+ }
+
+ content->audio_stream()->mapping = m;
+}
+