Various little tweaks.
[dcpomatic.git] / src / wx / ffmpeg_content_dialog.cc
index 0949d02a6c7e38cb196e28a97dab60671615bca9..2731782ca50e55db1e3a03079dd262f349fbd8ea 100644 (file)
@@ -1,3 +1,5 @@
+/* -*- 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 (""));
@@ -45,9 +52,9 @@ FFmpegContentDialog::FFmpegContentDialog (wxWindow* parent, shared_ptr<FFmpegCon
        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()) {
@@ -55,12 +62,12 @@ FFmpegContentDialog::FFmpegContentDialog (wxWindow* parent, shared_ptr<FFmpegCon
        }
 
        _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()) {
@@ -70,8 +77,13 @@ FFmpegContentDialog::FFmpegContentDialog (wxWindow* parent, shared_ptr<FFmpegCon
        }
 
        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());
@@ -83,6 +95,7 @@ FFmpegContentDialog::FFmpegContentDialog (wxWindow* parent, shared_ptr<FFmpegCon
 
        _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
@@ -93,10 +106,10 @@ FFmpegContentDialog::audio_stream_changed (wxCommandEvent &)
                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;
        }
 
@@ -128,10 +141,10 @@ FFmpegContentDialog::subtitle_stream_changed (wxCommandEvent &)
                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;
        }
 
@@ -139,3 +152,16 @@ FFmpegContentDialog::subtitle_stream_changed (wxCommandEvent &)
                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;
+}
+