X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Futil.cc;h=1f5b29101de78c7657a2341623590eed7b3ad92f;hb=0253b4e45c71a1c2e2a8bffaf1c3cb84a0a3e41a;hp=b1dfeab558421d3406d5535ad3022e2d63409687;hpb=89ae13638097f259f3e50b4b61068dd23451107d;p=dcpomatic.git diff --git a/src/lib/util.cc b/src/lib/util.cc index b1dfeab55..1f5b29101 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -36,6 +36,7 @@ #include "digester.h" #include "audio_processor.h" #include "compose.hpp" +#include "audio_buffers.h" #include #include #include @@ -44,6 +45,7 @@ #include extern "C" { #include +#include #include } #include @@ -125,6 +127,22 @@ seconds_to_hms (int s) return buffer; } +string +time_to_hmsf (DCPTime time, Frame rate) +{ + Frame f = time.frames_round (rate); + int s = f / rate; + f -= (s * rate); + int m = s / 60; + s -= m * 60; + int h = m / 60; + m -= h * 60; + + char buffer[64]; + snprintf (buffer, sizeof(buffer), "%d:%02d:%02d.%d", h, m, s, static_cast(f)); + return buffer; +} + /** @param s Number of seconds. * @return String containing an approximate description of s (e.g. "about 2 hours") */ @@ -323,6 +341,7 @@ dcpomatic_setup () SetUnhandledExceptionFilter(exception_handler); #endif + av_register_all (); avfilter_register_all (); #ifdef DCPOMATIC_OSX @@ -733,3 +752,25 @@ audio_channel_types (list mapped, int channels) return make_pair (non_lfe, lfe); } + +shared_ptr +remap (shared_ptr input, int output_channels, AudioMapping map) +{ + shared_ptr mapped (new AudioBuffers (output_channels, input->frames())); + mapped->make_silent (); + + for (int i = 0; i < map.input_channels(); ++i) { + for (int j = 0; j < mapped->channels(); ++j) { + if (map.get (i, static_cast (j)) > 0) { + mapped->accumulate_channel ( + input.get(), + i, + static_cast (j), + map.get (i, static_cast (j)) + ); + } + } + } + + return mapped; +}