summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-07-19 17:37:37 +0100
committerCarl Hetherington <cth@carlh.net>2013-07-19 18:58:29 +0100
commit0f8a8f3b3a5381133fb29fa1d6030bbc14040439 (patch)
tree8346d8d6024f8f030b7f38f2813c8b861f5fb647 /src
parent7b12e1995891da95d898608215cfe7f3e8c3facc (diff)
Add sequence video button.
Diffstat (limited to 'src')
-rw-r--r--src/lib/film.cc14
-rw-r--r--src/lib/film.h13
-rw-r--r--src/wx/film_editor.cc14
-rw-r--r--src/wx/film_editor.h4
4 files changed, 40 insertions, 5 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index d5a5abae4..031b4f1f4 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -95,6 +95,7 @@ Film::Film (string d)
, _dci_metadata (Config::instance()->default_dci_metadata ())
, _dcp_video_frame_rate (24)
, _dcp_audio_channels (MAX_AUDIO_CHANNELS)
+ , _sequence_video (true)
, _dirty (false)
{
set_dci_date_today ();
@@ -122,6 +123,8 @@ Film::Film (string d)
set_directory (result.string ());
_log.reset (new FileLog ("log"));
+
+ _playlist->set_sequence_video (_sequence_video);
}
string
@@ -324,6 +327,7 @@ Film::write_metadata () const
root->add_child("DCPVideoFrameRate")->add_child_text (lexical_cast<string> (_dcp_video_frame_rate));
root->add_child("DCIDate")->add_child_text (boost::gregorian::to_iso_string (_dci_date));
root->add_child("DCPAudioChannels")->add_child_text (lexical_cast<string> (_dcp_audio_channels));
+ root->add_child("SequenceVideo")->add_child_text (_sequence_video ? "1" : "0");
_playlist->as_xml (root->add_child ("Playlist"));
doc.write_to_file_formatted (file ("metadata.xml"));
@@ -369,6 +373,7 @@ Film::read_metadata ()
_dcp_video_frame_rate = f.number_child<int> ("DCPVideoFrameRate");
_dci_date = boost::gregorian::from_undelimited_string (f.string_child ("DCIDate"));
_dcp_audio_channels = f.number_child<int> ("DCPAudioChannels");
+ _sequence_video = f.bool_child ("SequenceVideo");
_playlist->set_from_xml (shared_from_this(), f.node_child ("Playlist"));
@@ -643,6 +648,7 @@ Film::signal_changed (Property p)
set_dcp_video_frame_rate (_playlist->best_dcp_frame_rate ());
break;
case Film::DCP_VIDEO_FRAME_RATE:
+ case Film::SEQUENCE_VIDEO:
_playlist->maybe_sequence_video ();
break;
default:
@@ -838,7 +844,13 @@ Film::dcp_audio_frame_rate () const
void
Film::set_sequence_video (bool s)
{
- _playlist->set_sequence_video (s);
+ {
+ boost::mutex::scoped_lock lm (_state_mutex);
+ _sequence_video = s;
+ _playlist->set_sequence_video (s);
+ }
+
+ signal_changed (SEQUENCE_VIDEO);
}
libdcp::Size
diff --git a/src/lib/film.h b/src/lib/film.h
index 51db8ce00..834de6cbe 100644
--- a/src/lib/film.h
+++ b/src/lib/film.h
@@ -112,8 +112,6 @@ public:
bool has_subtitles () const;
OutputVideoFrame best_dcp_video_frame_rate () const;
- void set_sequence_video (bool);
-
/** Identifiers for the parts of our state;
used for signalling changes.
*/
@@ -131,7 +129,8 @@ public:
J2K_BANDWIDTH,
DCI_METADATA,
DCP_VIDEO_FRAME_RATE,
- DCP_AUDIO_CHANNELS
+ DCP_AUDIO_CHANNELS,
+ SEQUENCE_VIDEO
};
@@ -198,6 +197,12 @@ public:
return _dcp_audio_channels;
}
+ bool sequence_video () const {
+ boost::mutex::scoped_lock lm (_state_mutex);
+ return _sequence_video;
+ }
+
+
/* SET */
void set_directory (std::string);
@@ -216,6 +221,7 @@ public:
void set_dcp_video_frame_rate (int);
void set_dcp_audio_channels (int);
void set_dci_date_today ();
+ void set_sequence_video (bool);
/** Emitted when some property has of the Film has changed */
mutable boost::signals2::signal<void (Property)> Changed;
@@ -269,6 +275,7 @@ private:
/** The date that we should use in a DCI name */
boost::gregorian::date _dci_date;
int _dcp_audio_channels;
+ bool _sequence_video;
/** true if our state has changed since we last saved it */
mutable bool _dirty;
diff --git a/src/wx/film_editor.cc b/src/wx/film_editor.cc
index 83e8c619f..33f5603a4 100644
--- a/src/wx/film_editor.cc
+++ b/src/wx/film_editor.cc
@@ -237,6 +237,7 @@ FilmEditor::connect_to_widgets ()
_audio_stream->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FilmEditor::audio_stream_changed), 0, this);
_subtitle_stream->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FilmEditor::subtitle_stream_changed), 0, this);
_dcp_resolution->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FilmEditor::dcp_resolution_changed), 0, this);
+ _sequence_video->Connect (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler (FilmEditor::sequence_video_changed), 0, this);
_audio_mapping->Changed.connect (boost::bind (&FilmEditor::audio_mapping_changed, this, _1));
_start->Changed.connect (boost::bind (&FilmEditor::start_changed, this));
@@ -334,6 +335,9 @@ FilmEditor::make_content_panel ()
_content_sizer->Add (s, 0.75, wxEXPAND | wxALL, 6);
}
+ _sequence_video = new wxCheckBox (_content_panel, wxID_ANY, _("Keep video in sequence"));
+ _content_sizer->Add (_sequence_video);
+
_content_notebook = new wxNotebook (_content_panel, wxID_ANY);
_content_sizer->Add (_content_notebook, 1, wxEXPAND | wxTOP, 6);
@@ -666,6 +670,9 @@ FilmEditor::film_changed (Film::Property p)
_audio_mapping->set_channels (_film->dcp_audio_channels ());
setup_dcp_name ();
break;
+ case Film::SEQUENCE_VIDEO:
+ checked_set (_sequence_video, _film->sequence_video ());
+ break;
}
}
@@ -873,6 +880,7 @@ FilmEditor::set_film (shared_ptr<Film> f)
film_changed (Film::DCI_METADATA);
film_changed (Film::DCP_VIDEO_FRAME_RATE);
film_changed (Film::DCP_AUDIO_CHANNELS);
+ film_changed (Film::SEQUENCE_VIDEO);
if (!_film->content().empty ()) {
set_selection (_film->content().front ());
@@ -1502,3 +1510,9 @@ FilmEditor::ratio_changed (wxCommandEvent &)
vc->set_ratio (ratios[n]);
}
}
+
+void
+FilmEditor::sequence_video_changed (wxCommandEvent &)
+{
+ _film->set_sequence_video (_sequence_video->GetValue ());
+}
diff --git a/src/wx/film_editor.h b/src/wx/film_editor.h
index a7e8ab197..7347ab1a6 100644
--- a/src/wx/film_editor.h
+++ b/src/wx/film_editor.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2013 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -96,6 +96,7 @@ private:
void ratio_changed (wxCommandEvent &);
void dcp_audio_channels_changed (wxCommandEvent &);
void dcp_resolution_changed (wxCommandEvent &);
+ void sequence_video_changed (wxCommandEvent &);
/* Handle changes to the model */
void film_changed (Film::Property);
@@ -140,6 +141,7 @@ private:
wxButton* _content_earlier;
wxButton* _content_later;
wxButton* _content_timeline;
+ wxCheckBox* _sequence_video;
wxButton* _edit_dci_button;
wxChoice* _ratio;
wxStaticText* _ratio_description;