summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-07-11 12:41:09 +0100
committerCarl Hetherington <cth@carlh.net>2013-07-11 12:41:09 +0100
commit2f848b51a4ac00f7f25691fad40841d066f867cc (patch)
treead2ecb200a0b6f58ea4133ec8336ff0a76bde2ac /src
parent4985bbd615df73bf92fa14ba5cd585aa051e5b12 (diff)
Basics of allowing setup of DCP audio channels.
Diffstat (limited to 'src')
-rw-r--r--src/lib/film.cc10
-rw-r--r--src/lib/film.h2
-rw-r--r--src/wx/audio_mapping_view.cc75
-rw-r--r--src/wx/audio_mapping_view.h3
-rw-r--r--src/wx/film_editor.cc22
-rw-r--r--src/wx/film_editor.h2
6 files changed, 99 insertions, 15 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index dad9d6808..16b34110c 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -626,6 +626,16 @@ Film::set_dcp_video_frame_rate (int f)
}
void
+Film::set_dcp_audio_channels (int c)
+{
+ {
+ boost::mutex::scoped_lock lm (_state_mutex);
+ _dcp_audio_channels = c;
+ }
+ signal_changed (DCP_AUDIO_CHANNELS);
+}
+
+void
Film::signal_changed (Property p)
{
{
diff --git a/src/lib/film.h b/src/lib/film.h
index 08fdc587b..2bf1a0e90 100644
--- a/src/lib/film.h
+++ b/src/lib/film.h
@@ -139,6 +139,7 @@ public:
J2K_BANDWIDTH,
DCI_METADATA,
DCP_VIDEO_FRAME_RATE,
+ DCP_AUDIO_CHANNELS
};
@@ -221,6 +222,7 @@ public:
void set_j2k_bandwidth (int);
void set_dci_metadata (DCIMetadata);
void set_dcp_video_frame_rate (int);
+ void set_dcp_audio_channels (int);
void set_dci_date_today ();
/** Emitted when some property has of the Film has changed */
diff --git a/src/wx/audio_mapping_view.cc b/src/wx/audio_mapping_view.cc
index 1e938b357..859c4d548 100644
--- a/src/wx/audio_mapping_view.cc
+++ b/src/wx/audio_mapping_view.cc
@@ -99,15 +99,7 @@ AudioMappingView::AudioMappingView (wxWindow* parent)
_grid->SetCellHighlightPenWidth (0);
_grid->SetDefaultRenderer (new NoSelectionStringRenderer);
- _grid->SetColLabelValue (0, _("Content channel"));
- _grid->SetColLabelValue (1, _("L"));
- _grid->SetColLabelValue (2, _("R"));
- _grid->SetColLabelValue (3, _("C"));
- _grid->SetColLabelValue (4, _("Lfe"));
- _grid->SetColLabelValue (5, _("Ls"));
- _grid->SetColLabelValue (6, _("Rs"));
-
- _grid->AutoSize ();
+ set_column_labels ();
_sizer = new wxBoxSizer (wxVERTICAL);
_sizer->Add (_grid, 1, wxEXPAND | wxALL);
@@ -129,26 +121,28 @@ AudioMappingView::left_click (wxGridEvent& ev)
_grid->SetCellValue (ev.GetRow(), ev.GetCol(), wxT("1"));
}
- AudioMapping mapping;
+ _map = AudioMapping ();
for (int i = 0; i < _grid->GetNumberRows(); ++i) {
for (int j = 1; j < _grid->GetNumberCols(); ++j) {
if (_grid->GetCellValue (i, j) == wxT ("1")) {
- mapping.add (i, static_cast<libdcp::Channel> (j - 1));
+ _map.add (i, static_cast<libdcp::Channel> (j - 1));
}
}
}
- Changed (mapping);
+ Changed (_map);
}
void
AudioMappingView::set (AudioMapping map)
{
+ _map = map;
+
if (_grid->GetNumberRows ()) {
_grid->DeleteRows (0, _grid->GetNumberRows ());
}
- list<int> content_channels = map.content_channels ();
+ list<int> content_channels = _map.content_channels ();
_grid->InsertRows (0, content_channels.size ());
for (size_t r = 0; r < content_channels.size(); ++r) {
@@ -161,11 +155,62 @@ AudioMappingView::set (AudioMapping map)
for (list<int>::iterator i = content_channels.begin(); i != content_channels.end(); ++i) {
_grid->SetCellValue (n, 0, wxString::Format (wxT("%d"), *i + 1));
- list<libdcp::Channel> const d = map.content_to_dcp (*i);
+ list<libdcp::Channel> const d = _map.content_to_dcp (*i);
for (list<libdcp::Channel>::const_iterator j = d.begin(); j != d.end(); ++j) {
- _grid->SetCellValue (n, static_cast<int> (*j) + 1, wxT("1"));
+ int const c = static_cast<int>(*j) + 1;
+ if (c < _grid->GetNumberCols ()) {
+ _grid->SetCellValue (n, c, wxT("1"));
+ }
}
++n;
}
}
+void
+AudioMappingView::set_channels (int c)
+{
+ c++;
+
+ if (c < _grid->GetNumberCols ()) {
+ _grid->DeleteCols (c, _grid->GetNumberCols() - c);
+ } else if (c > _grid->GetNumberCols ()) {
+ _grid->InsertCols (_grid->GetNumberCols(), c - _grid->GetNumberCols());
+ set_column_labels ();
+ }
+
+ set (_map);
+}
+
+void
+AudioMappingView::set_column_labels ()
+{
+ int const c = _grid->GetNumberCols ();
+
+ _grid->SetColLabelValue (0, _("Content channel"));
+
+ if (c > 0) {
+ _grid->SetColLabelValue (1, _("L"));
+ }
+
+ if (c > 1) {
+ _grid->SetColLabelValue (2, _("R"));
+ }
+
+ if (c > 2) {
+ _grid->SetColLabelValue (3, _("C"));
+ }
+
+ if (c > 3) {
+ _grid->SetColLabelValue (4, _("Lfe"));
+ }
+
+ if (c > 4) {
+ _grid->SetColLabelValue (5, _("Ls"));
+ }
+
+ if (c > 5) {
+ _grid->SetColLabelValue (6, _("Rs"));
+ }
+
+ _grid->AutoSize ();
+}
diff --git a/src/wx/audio_mapping_view.h b/src/wx/audio_mapping_view.h
index e0709c8b7..80534a613 100644
--- a/src/wx/audio_mapping_view.h
+++ b/src/wx/audio_mapping_view.h
@@ -28,12 +28,15 @@ public:
AudioMappingView (wxWindow *);
void set (AudioMapping);
+ void set_channels (int);
boost::signals2::signal<void (AudioMapping)> Changed;
private:
void left_click (wxGridEvent &);
+ void set_column_labels ();
wxGrid* _grid;
wxSizer* _sizer;
+ AudioMapping _map;
};
diff --git a/src/wx/film_editor.cc b/src/wx/film_editor.cc
index 8d33b58d6..4794a9d33 100644
--- a/src/wx/film_editor.cc
+++ b/src/wx/film_editor.cc
@@ -149,6 +149,11 @@ FilmEditor::make_dcp_panel ()
}
++r;
+ add_label_to_grid_bag_sizer (grid, _dcp_panel, _("DCP audio channels"), true, wxGBPosition (r, 0));
+ _dcp_audio_channels = new wxSpinCtrl (_dcp_panel, wxID_ANY);
+ grid->Add (_dcp_audio_channels, wxGBPosition (r, 1));
+ ++r;
+
{
add_label_to_grid_bag_sizer (grid, _dcp_panel, _("JPEG2000 bandwidth"), true, wxGBPosition (r, 0));
wxSizer* s = new wxBoxSizer (wxHORIZONTAL);
@@ -184,6 +189,7 @@ FilmEditor::make_dcp_panel ()
_dcp_frame_rate->Append (std_to_wx (boost::lexical_cast<string> (*i)));
}
+ _dcp_audio_channels->SetRange (0, MAX_AUDIO_CHANNELS);
_j2k_bandwidth->SetRange (50, 250);
}
@@ -211,6 +217,7 @@ FilmEditor::connect_to_widgets ()
_dcp_content_type->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FilmEditor::dcp_content_type_changed), 0, this);
_dcp_frame_rate->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FilmEditor::dcp_frame_rate_changed), 0, this);
_best_dcp_frame_rate->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (FilmEditor::best_dcp_frame_rate_clicked), 0, this);
+ _dcp_audio_channels->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::dcp_audio_channels_changed), 0, this);
_with_subtitles->Connect (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler (FilmEditor::with_subtitles_toggled), 0, this);
_subtitle_offset->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::subtitle_offset_changed), 0, this);
_subtitle_scale->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::subtitle_scale_changed), 0, this);
@@ -581,6 +588,16 @@ FilmEditor::dcp_frame_rate_changed (wxCommandEvent &)
);
}
+void
+FilmEditor::dcp_audio_channels_changed (wxCommandEvent &)
+{
+ if (!_film) {
+ return;
+ }
+
+ _film->set_dcp_audio_channels (_dcp_audio_channels->GetValue ());
+}
+
/** Called when the metadata stored in the Film object has changed;
* so that we can update the GUI.
@@ -660,6 +677,10 @@ FilmEditor::film_changed (Film::Property p)
_best_dcp_frame_rate->Enable (_film->best_dcp_video_frame_rate () != _film->dcp_video_frame_rate ());
break;
}
+ case Film::DCP_AUDIO_CHANNELS:
+ _dcp_audio_channels->SetValue (_film->dcp_audio_channels ());
+ _audio_mapping->set_channels (_film->dcp_audio_channels ());
+ break;
}
}
@@ -868,6 +889,7 @@ FilmEditor::set_film (shared_ptr<Film> f)
film_changed (Film::J2K_BANDWIDTH);
film_changed (Film::DCI_METADATA);
film_changed (Film::DCP_VIDEO_FRAME_RATE);
+ film_changed (Film::DCP_AUDIO_CHANNELS);
wxListEvent ev;
content_selection_changed (ev);
diff --git a/src/wx/film_editor.h b/src/wx/film_editor.h
index fdc6e077d..100e47b5b 100644
--- a/src/wx/film_editor.h
+++ b/src/wx/film_editor.h
@@ -97,6 +97,7 @@ private:
void start_changed ();
void length_changed ();
void ratio_changed (wxCommandEvent &);
+ void dcp_audio_channels_changed (wxCommandEvent &);
/* Handle changes to the model */
void film_changed (Film::Property);
@@ -167,6 +168,7 @@ private:
wxSpinCtrl* _j2k_bandwidth;
wxChoice* _dcp_content_type;
wxChoice* _dcp_frame_rate;
+ wxSpinCtrl* _dcp_audio_channels;
wxButton* _best_dcp_frame_rate;
wxChoice* _audio_stream;
wxStaticText* _audio_description;