X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Futil.cc;h=15109eee05c442f0dab35982703e20e788148f79;hb=79ce26d031d109177ba4b0f637fa2960345a37a3;hp=725039a7eb7a379cb487b9e51d15e013dba07049;hpb=cc3900735839ff4b0da0c046b5c606c440ba917a;p=dcpomatic.git diff --git a/src/lib/util.cc b/src/lib/util.cc index 725039a7e..15109eee0 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -71,6 +71,7 @@ extern "C" { #include "ratio.h" #include "job.h" #include "cross.h" +#include "video_content.h" #ifdef DCPOMATIC_WINDOWS #include "stack.hpp" #endif @@ -347,6 +348,7 @@ dcpomatic_setup () dcp::init (); Ratio::setup_ratios (); + VideoContentScale::setup_scales (); DCPContentType::setup_dcp_content_types (); Scaler::setup_scalers (); Filter::setup_filters (); @@ -492,33 +494,6 @@ md5_digest (vector files, shared_ptr job) return s.str (); } -static bool -about_equal (float a, float b) -{ - /* A film of F seconds at f FPS will be Ff frames; - Consider some delta FPS d, so if we run the same - film at (f + d) FPS it will last F(f + d) seconds. - - Hence the difference in length over the length of the film will - be F(f + d) - Ff frames - = Ff + Fd - Ff frames - = Fd frames - = Fd/f seconds - - So if we accept a difference of 1 frame, ie 1/f seconds, we can - say that - - 1/f = Fd/f - ie 1 = Fd - ie d = 1/F - - So for a 3hr film, ie F = 3 * 60 * 60 = 10800, the acceptable - FPS error is 1/F ~= 0.0001 ~= 10-e4 - */ - - return (fabs (a - b) < 1e-4); -} - /** @param An arbitrary audio frame rate. * @return The appropriate DCP-approved frame rate (48kHz or 96kHz). */ @@ -778,21 +753,10 @@ ensure_ui_thread () assert (boost::this_thread::get_id() == ui_thread); } -/** @param v Content video frame. - * @param audio_sample_rate Source audio sample rate. - * @param frames_per_second Number of video frames per second. - * @return Equivalent number of audio frames for `v'. - */ -int64_t -video_frames_to_audio_frames (VideoFrame v, float audio_sample_rate, float frames_per_second) -{ - return ((int64_t) v * audio_sample_rate / frames_per_second); -} - string audio_channel_name (int c) { - assert (MAX_AUDIO_CHANNELS == 8); + assert (MAX_AUDIO_CHANNELS == 12); /* TRANSLATORS: these are the names of audio channels; Lfe (sub) is the low-frequency enhancement channel (sub-woofer). HI is the hearing-impaired audio track and @@ -805,52 +769,17 @@ audio_channel_name (int c) _("Lfe (sub)"), _("Left surround"), _("Right surround"), - _("HI"), - _("VI") + _("Hearing impaired"), + _("Visually impaired"), + _("Left centre"), + _("Right centre"), + _("Left rear surround"), + _("Right rear surround"), }; return channels[c]; } -FrameRateChange::FrameRateChange (float source, int dcp) - : skip (false) - , repeat (1) - , change_speed (false) -{ - if (fabs (source / 2.0 - dcp) < fabs (source - dcp)) { - /* The difference between source and DCP frame rate will be lower - (i.e. better) if we skip. - */ - skip = true; - } else if (fabs (source * 2 - dcp) < fabs (source - dcp)) { - /* The difference between source and DCP frame rate would be better - if we repeated each frame once; it may be better still if we - repeated more than once. Work out the required repeat. - */ - repeat = round (dcp / source); - } - - speed_up = dcp / (source * factor()); - change_speed = !about_equal (speed_up, 1.0); - - if (!skip && repeat == 1 && !change_speed) { - description = _("Content and DCP have the same rate.\n"); - } else { - if (skip) { - description = _("DCP will use every other frame of the content.\n"); - } else if (repeat == 2) { - description = _("Each content frame will be doubled in the DCP.\n"); - } else if (repeat > 2) { - description = String::compose (_("Each content frame will be repeated %1 more times in the DCP.\n"), repeat - 1); - } - - if (change_speed) { - float const pc = dcp * 100 / (source * factor()); - description += String::compose (_("DCP will run at %1%% of the content speed.\n"), pc); - } - } -} - LocaleGuard::LocaleGuard () : _old (0) { @@ -1002,13 +931,6 @@ fit_ratio_within (float ratio, dcp::Size full_frame) return dcp::Size (full_frame.width, rint (full_frame.width / ratio)); } -DCPTime -time_round_up (DCPTime t, DCPTime nearest) -{ - DCPTime const a = t + nearest - 1; - return a - (a % nearest); -} - void * wrapped_av_malloc (size_t s) { @@ -1026,3 +948,13 @@ entities_to_text (string e) boost::algorithm::replace_all (e, "%2F", "/"); return e; } + +int64_t +divide_with_round (int64_t a, int64_t b) +{ + if (a % b >= (b / 2)) { + return (a + b - 1) / b; + } else { + return a / b; + } +}