summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2017-05-12 22:54:17 +0100
committerCarl Hetherington <cth@carlh.net>2017-05-12 22:54:17 +0100
commitfe0b4d0512d289caf3bc327a3791edcdd0fa3d0c (patch)
tree9d5b635ea2494af2dddf78efe2ba800d483c2274
parentb6d38b0b7125811b7eb58b55adcd5b8b7aac9266 (diff)
Add default scale-to (#664).
-rw-r--r--ChangeLog4
-rw-r--r--src/lib/config.cc9
-rw-r--r--src/lib/config.h9
-rw-r--r--src/lib/video_content.cc12
-rw-r--r--src/wx/config_dialog.cc31
5 files changed, 61 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index d4d1b56b2..e7e968454 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2017-05-12 Carl Hetherington <cth@carlh.net>
+
+ * Add option for default scale-to (#664).
+
2017-05-11 Carl Hetherington <cth@carlh.net>
* Updated cs_CZ translation from Tomáš Begeni.
diff --git a/src/lib/config.cc b/src/lib/config.cc
index a19a60f55..1baba956e 100644
--- a/src/lib/config.cc
+++ b/src/lib/config.cc
@@ -88,6 +88,7 @@ Config::set_defaults ()
_language = optional<string> ();
_default_still_length = 10;
_default_container = Ratio::from_id ("185");
+ _default_scale_to = 0;
_default_dcp_content_type = DCPContentType::from_isdcf_name ("FTR");
_default_dcp_audio_channels = 6;
_default_j2k_bandwidth = 100000000;
@@ -221,6 +222,11 @@ try
_default_container = Ratio::from_id (c.get ());
}
+ c = f.optional_string_child ("DefaultScaleTo");
+ if (c) {
+ _default_scale_to = Ratio::from_id (c.get ());
+ }
+
c = f.optional_string_child ("DefaultDCPContentType");
if (c) {
_default_dcp_content_type = DCPContentType::from_isdcf_name (c.get ());
@@ -439,6 +445,9 @@ Config::write_config () const
if (_default_container) {
root->add_child("DefaultContainer")->add_child_text (_default_container->id ());
}
+ if (_default_scale_to) {
+ root->add_child("DefaultScaleTo")->add_child_text (_default_scale_to->id ());
+ }
if (_default_dcp_content_type) {
root->add_child("DefaultDCPContentType")->add_child_text (_default_dcp_content_type->isdcf_name ());
}
diff --git a/src/lib/config.h b/src/lib/config.h
index fc6315242..4406f1649 100644
--- a/src/lib/config.h
+++ b/src/lib/config.h
@@ -163,6 +163,10 @@ public:
return _default_container;
}
+ Ratio const * default_scale_to () const {
+ return _default_scale_to;
+ }
+
DCPContentType const * default_dcp_content_type () const {
return _default_dcp_content_type;
}
@@ -431,6 +435,10 @@ public:
maybe_set (_default_container, c);
}
+ void set_default_scale_to (Ratio const * c) {
+ maybe_set (_default_scale_to, c);
+ }
+
void set_default_dcp_content_type (DCPContentType const * t) {
maybe_set (_default_dcp_content_type, t);
}
@@ -697,6 +705,7 @@ private:
/** Default length of still image content (seconds) */
int _default_still_length;
Ratio const * _default_container;
+ Ratio const * _default_scale_to;
DCPContentType const * _default_dcp_content_type;
int _default_dcp_audio_channels;
std::string _dcp_issuer;
diff --git a/src/lib/video_content.cc b/src/lib/video_content.cc
index 36438fc2a..8ccb921d0 100644
--- a/src/lib/video_content.cc
+++ b/src/lib/video_content.cc
@@ -241,10 +241,14 @@ VideoContent::take_from_examiner (shared_ptr<VideoExaminer> d)
_sample_aspect_ratio = ar;
_yuv = yuv;
- /* Guess correct scale from size and sample aspect ratio */
- _scale = VideoContentScale (
- Ratio::nearest_from_ratio (double (_size.width) * ar.get_value_or (1) / _size.height)
- );
+ if (Config::instance()->default_scale_to ()) {
+ _scale = VideoContentScale (Config::instance()->default_scale_to ());
+ } else {
+ /* Guess correct scale from size and sample aspect ratio */
+ _scale = VideoContentScale (
+ Ratio::nearest_from_ratio (double (_size.width) * ar.get_value_or (1) / _size.height)
+ );
+ }
}
LOG_GENERAL ("Video length obtained from header as %1 frames", _length);
diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc
index 63ce57823..261ace373 100644
--- a/src/wx/config_dialog.cc
+++ b/src/wx/config_dialog.cc
@@ -515,6 +515,10 @@ private:
_container = new wxChoice (_panel, wxID_ANY);
table->Add (_container);
+ add_label_to_sizer (table, _panel, _("Default scale-to"), true);
+ _scale_to = new wxChoice (_panel, wxID_ANY);
+ table->Add (_scale_to);
+
add_label_to_sizer (table, _panel, _("Default content type"), true);
_dcp_content_type = new wxChoice (_panel, wxID_ANY);
table->Add (_dcp_content_type);
@@ -568,6 +572,14 @@ private:
_container->Bind (wxEVT_CHOICE, boost::bind (&DefaultsPage::container_changed, this));
+ _scale_to->Append (_("Guess from content"));
+
+ for (size_t i = 0; i < ratios.size(); ++i) {
+ _scale_to->Append (std_to_wx (ratios[i]->nickname ()));
+ }
+
+ _scale_to->Bind (wxEVT_CHOICE, boost::bind (&DefaultsPage::scale_to_changed, this));
+
vector<DCPContentType const *> const ct = DCPContentType::all ();
for (size_t i = 0; i < ct.size(); ++i) {
_dcp_content_type->Append (std_to_wx (ct[i]->pretty_name ()));
@@ -598,6 +610,13 @@ private:
if (ratios[i] == config->default_container ()) {
_container->SetSelection (i);
}
+ if (ratios[i] == config->default_scale_to ()) {
+ _scale_to->SetSelection (i + 1);
+ }
+ }
+
+ if (!config->default_scale_to()) {
+ _scale_to->SetSelection (0);
}
vector<DCPContentType const *> const ct = DCPContentType::all ();
@@ -666,6 +685,17 @@ private:
Config::instance()->set_default_container (ratio[_container->GetSelection()]);
}
+ void scale_to_changed ()
+ {
+ int const s = _scale_to->GetSelection ();
+ if (s == 0) {
+ Config::instance()->set_default_scale_to (0);
+ } else {
+ vector<Ratio const *> ratio = Ratio::all ();
+ Config::instance()->set_default_scale_to (ratio[s - 1]);
+ }
+ }
+
void dcp_content_type_changed ()
{
vector<DCPContentType const *> ct = DCPContentType::all ();
@@ -689,6 +719,7 @@ private:
wxDirPickerCtrl* _kdm_directory;
#endif
wxChoice* _container;
+ wxChoice* _scale_to;
wxChoice* _dcp_content_type;
wxChoice* _dcp_audio_channels;
wxChoice* _standard;