summaryrefslogtreecommitdiff
path: root/src/lib/film.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-01-26 22:44:08 +0000
committerCarl Hetherington <cth@carlh.net>2019-01-26 22:44:08 +0000
commit078a0f98e3f741210be7f839292f41f28b6a403e (patch)
tree08d3e0a8eb93717ddd1ca1f969cff80e7c4ea48e /src/lib/film.cc
parent755b9af051c73dae5fffbe613fc45d9fd4fbd08d (diff)
Suggest that DCP rates <= 30 are used unless the user explictly goes higher (#1441).
Diffstat (limited to 'src/lib/film.cc')
-rw-r--r--src/lib/film.cc23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 28734328b..f4745d099 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -156,6 +156,7 @@ Film::Film (optional<boost::filesystem::path> dir)
, _reel_length (2000000000)
, _upload_after_make_dcp (Config::instance()->default_upload_after_make_dcp())
, _reencode_j2k (false)
+ , _user_explicit_video_frame_rate (false)
, _state_version (current_state_version)
, _dirty (false)
{
@@ -400,6 +401,7 @@ Film::metadata (bool with_content_paths) const
root->add_child("ReelLength")->add_child_text (raw_convert<string> (_reel_length));
root->add_child("UploadAfterMakeDCP")->add_child_text (_upload_after_make_dcp ? "1" : "0");
root->add_child("ReencodeJ2K")->add_child_text (_reencode_j2k ? "1" : "0");
+ root->add_child("UserExplicitVideoFrameRate")->add_child_text(_user_explicit_video_frame_rate ? "1" : "0");
_playlist->as_xml (root->add_child ("Playlist"), with_content_paths);
return doc;
@@ -515,6 +517,7 @@ Film::read_metadata (optional<boost::filesystem::path> path)
_reel_length = f.optional_number_child<int64_t>("ReelLength").get_value_or (2000000000);
_upload_after_make_dcp = f.optional_bool_child("UploadAfterMakeDCP").get_value_or (false);
_reencode_j2k = f.optional_bool_child("ReencodeJ2K").get_value_or(false);
+ _user_explicit_video_frame_rate = f.optional_bool_child("UserExplicitVideoFrameRate").get_value_or(false);
list<string> notes;
/* This method is the only one that can return notes (so far) */
@@ -883,11 +886,18 @@ Film::set_isdcf_metadata (ISDCFMetadata m)
_isdcf_metadata = m;
}
+/** @param f New frame rate.
+ * @param user_explicit true if this comes from a direct user instruction, false if it is from
+ * DCP-o-matic being helpful.
+ */
void
-Film::set_video_frame_rate (int f)
+Film::set_video_frame_rate (int f, bool user_explicit)
{
ChangeSignaller<Film> ch (this, VIDEO_FRAME_RATE);
_video_frame_rate = f;
+ if (user_explicit) {
+ _user_explicit_video_frame_rate = true;
+ }
}
void
@@ -966,7 +976,9 @@ Film::signal_change (ChangeType type, Property p)
_dirty = true;
if (p == Film::CONTENT) {
- set_video_frame_rate (_playlist->best_video_frame_rate ());
+ if (!_user_explicit_video_frame_rate) {
+ set_video_frame_rate (best_video_frame_rate());
+ }
}
emit (boost::bind (boost::ref (Change), type, p));
@@ -1173,7 +1185,12 @@ Film::length () const
int
Film::best_video_frame_rate () const
{
- return _playlist->best_video_frame_rate ();
+ /* Don't default to anything above 30fps (make the user select that explicitly) */
+ int best = _playlist->best_video_frame_rate ();
+ if (best > 30) {
+ best /= 2;
+ }
+ return best;
}
FrameRateChange