summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-03-01 23:21:30 +0000
committerCarl Hetherington <cth@carlh.net>2013-03-01 23:21:30 +0000
commit4ac56e7419dfd85842fed4dfd9cf912c55851de3 (patch)
tree9e8ca79d2ae16ebfd141be518b0662118b9de8c9 /src
parent6a516da9a403ce05b2b78b3cf1376f4dfe4be3fe (diff)
More choose-dcp-rate stuff.
Diffstat (limited to 'src')
-rw-r--r--src/lib/config.cc3
-rw-r--r--src/lib/film.cc8
-rw-r--r--src/wx/film_editor.cc54
-rw-r--r--src/wx/film_editor.h4
4 files changed, 67 insertions, 2 deletions
diff --git a/src/lib/config.cc b/src/lib/config.cc
index 82a31b3cf..f5273b875 100644
--- a/src/lib/config.cc
+++ b/src/lib/config.cc
@@ -49,6 +49,9 @@ Config::Config ()
_allowed_dcp_frame_rates.push_back (24);
_allowed_dcp_frame_rates.push_back (25);
_allowed_dcp_frame_rates.push_back (30);
+ _allowed_dcp_frame_rates.push_back (48);
+ _allowed_dcp_frame_rates.push_back (50);
+ _allowed_dcp_frame_rates.push_back (60);
ifstream f (file().c_str ());
string line;
diff --git a/src/lib/film.cc b/src/lib/film.cc
index a661adcc6..1c4a8108d 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -275,6 +275,7 @@ Film::make_dcp ()
log()->log (String::compose (N_("Content length %1"), length().get()));
}
log()->log (String::compose (N_("Content digest %1"), content_digest()));
+ log()->log (String::compose ("Content at %1 fps, DCP at %2 fps", source_frame_rate(), dcp_frame_rate()));
log()->log (String::compose (N_("%1 threads"), Config::instance()->num_local_encoding_threads()));
log()->log (String::compose (N_("J2K bandwidth %1"), j2k_bandwidth()));
#ifdef DVDOMATIC_DEBUG
@@ -602,8 +603,12 @@ Film::read_metadata ()
_external_audio_stream = audio_stream_factory (v, version);
} else if (k == N_("subtitle_stream")) {
_subtitle_streams.push_back (subtitle_stream_factory (v, version));
- } else if (k == N_("source_frame_rate") || (version < 4 && k == "frames_per_second")) {
+ } else if (k == N_("source_frame_rate")) {
_source_frame_rate = atof (v.c_str ());
+ } else if (version < 4 && k == "frames_per_second") {
+ _source_frame_rate = atof (v.c_str ());
+ /* Fill in what would have been used for DCP frame rate by the older version */
+ _dcp_frame_rate = best_dcp_frame_rate (_source_frame_rate);
}
}
@@ -905,6 +910,7 @@ Film::set_content (string c)
set_size (d.video->native_size ());
set_source_frame_rate (d.video->frames_per_second ());
+ set_dcp_frame_rate (best_dcp_frame_rate (source_frame_rate ()));
set_subtitle_streams (d.video->subtitle_streams ());
if (d.audio) {
set_content_audio_streams (d.audio->audio_streams ());
diff --git a/src/wx/film_editor.cc b/src/wx/film_editor.cc
index 0a6a35273..7453d175a 100644
--- a/src/wx/film_editor.cc
+++ b/src/wx/film_editor.cc
@@ -129,6 +129,16 @@ FilmEditor::make_film_panel ()
video_control (add_label_to_sizer (grid, _film_panel, _("Original Frame Rate")));
_source_frame_rate = new wxStaticText (_film_panel, wxID_ANY, wxT (""));
grid->Add (video_control (_source_frame_rate), 1, wxALIGN_CENTER_VERTICAL);
+
+ {
+ add_label_to_sizer (grid, _film_panel, _("DCP Frame Rate"));
+ wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
+ _dcp_frame_rate = new wxChoice (_film_panel, wxID_ANY);
+ s->Add (_dcp_frame_rate, 1, wxALIGN_CENTER_VERTICAL);
+ _best_dcp_frame_rate = new wxButton (_film_panel, wxID_ANY, _("Use best"));
+ s->Add (_best_dcp_frame_rate, 1, wxALIGN_CENTER_VERTICAL | wxALL | wxEXPAND, 6);
+ grid->Add (s, 1);
+ }
video_control (add_label_to_sizer (grid, _film_panel, _("Original Size")));
_original_size = new wxStaticText (_film_panel, wxID_ANY, wxT (""));
@@ -173,6 +183,11 @@ FilmEditor::make_film_panel ()
for (vector<DCPContentType const *>::const_iterator i = ct.begin(); i != ct.end(); ++i) {
_dcp_content_type->Append (std_to_wx ((*i)->pretty_name ()));
}
+
+ list<int> const dfr = Config::instance()->allowed_dcp_frame_rates ();
+ for (list<int>::const_iterator i = dfr.begin(); i != dfr.end(); ++i) {
+ _dcp_frame_rate->Append (std_to_wx (boost::lexical_cast<string> (*i)));
+ }
}
void
@@ -191,6 +206,8 @@ FilmEditor::connect_to_widgets ()
_filters_button->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (FilmEditor::edit_filters_clicked), 0, this);
_scaler->Connect (wxID_ANY, wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler (FilmEditor::scaler_changed), 0, this);
_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_ab->Connect (wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler (FilmEditor::dcp_ab_toggled), 0, this);
_still_duration->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::still_duration_changed), 0, this);
_trim_start->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (FilmEditor::trim_start_changed), 0, this);
@@ -520,7 +537,21 @@ FilmEditor::j2k_bandwidth_changed (wxCommandEvent &)
}
_film->set_j2k_bandwidth (_j2k_bandwidth->GetValue() * 1e6);
-}
+}
+
+void
+FilmEditor::dcp_frame_rate_changed (wxCommandEvent &)
+{
+ if (!_film) {
+ return;
+ }
+
+ _film->set_dcp_frame_rate (
+ boost::lexical_cast<int> (
+ wx_to_std (_dcp_frame_rate->GetString (_dcp_frame_rate->GetSelection ()))
+ )
+ );
+}
/** Called when the metadata stored in the Film object has changed;
@@ -700,6 +731,15 @@ FilmEditor::film_changed (Film::Property p)
setup_audio_details ();
break;
}
+ case Film::DCP_FRAME_RATE:
+ for (unsigned int i = 0; i < _dcp_frame_rate->GetCount(); ++i) {
+ if (wx_to_std (_dcp_frame_rate->GetString(i)) == boost::lexical_cast<string> (_film->dcp_frame_rate())) {
+ if (_dcp_frame_rate->GetSelection() != int(i)) {
+ _dcp_frame_rate->SetSelection (i);
+ break;
+ }
+ }
+ }
}
}
@@ -783,6 +823,7 @@ FilmEditor::set_film (shared_ptr<Film> f)
film_changed (Film::CONTENT_AUDIO_STREAMS);
film_changed (Film::SUBTITLE_STREAMS);
film_changed (Film::SOURCE_FRAME_RATE);
+ film_changed (Film::DCP_FRAME_RATE);
}
/** Updates the sensitivity of lots of widgets to a given value.
@@ -807,6 +848,7 @@ FilmEditor::set_things_sensitive (bool s)
_scaler->Enable (s);
_audio_stream->Enable (s);
_dcp_content_type->Enable (s);
+ _dcp_frame_rate->Enable (s);
_trim_start->Enable (s);
_trim_end->Enable (s);
_dcp_ab->Enable (s);
@@ -1186,3 +1228,13 @@ FilmEditor::show_audio_clicked (wxCommandEvent &)
_audio_dialog->Show ();
_audio_dialog->set_film (_film);
}
+
+void
+FilmEditor::best_dcp_frame_rate_clicked (wxCommandEvent &)
+{
+ if (!_film) {
+ return;
+ }
+
+ _film->set_dcp_frame_rate (best_dcp_frame_rate (_film->source_frame_rate ()));
+}
diff --git a/src/wx/film_editor.h b/src/wx/film_editor.h
index da9bb0301..4adea2bc9 100644
--- a/src/wx/film_editor.h
+++ b/src/wx/film_editor.h
@@ -82,6 +82,8 @@ private:
void subtitle_stream_changed (wxCommandEvent &);
void use_audio_changed (wxCommandEvent &);
void external_audio_changed (wxCommandEvent &);
+ void dcp_frame_rate_changed (wxCommandEvent &);
+ void best_dcp_frame_rate_clicked (wxCommandEvent &);
/* Handle changes to the model */
void film_changed (Film::Property);
@@ -159,6 +161,8 @@ private:
wxChoice* _dcp_content_type;
/** The Film's source frame rate */
wxStaticText* _source_frame_rate;
+ wxChoice* _dcp_frame_rate;
+ wxButton* _best_dcp_frame_rate;
/** The Film's original size */
wxStaticText* _original_size;
/** The Film's length */