Don't overlap simultaneous video content in the timeline. Fix keep-aligned for separ...
[dcpomatic.git] / src / lib / util.cc
index 25fbc130b1be445a3e71df42459f4433970568e1..7a19790eb4ec261d1131ebd5e015565324f562a6 100644 (file)
@@ -57,7 +57,6 @@ extern "C" {
 #include <libavformat/avformat.h>
 #include <libswscale/swscale.h>
 #include <libavfilter/avfiltergraph.h>
-#include <libpostproc/postprocess.h>
 #include <libavutil/pixfmt.h>
 }
 #include "util.h"
@@ -70,6 +69,7 @@ extern "C" {
 #include "ratio.h"
 #include "job.h"
 #include "cross.h"
+#include "video_content.h"
 #ifdef DCPOMATIC_WINDOWS
 #include "stack.hpp"
 #endif
@@ -247,7 +247,6 @@ dependency_version_summary ()
          << N_("libavfilter ") << ffmpeg_version_to_string (avfilter_version()) << N_(", ")
          << N_("libavformat ") << ffmpeg_version_to_string (avformat_version()) << N_(", ")
          << N_("libavutil ") << ffmpeg_version_to_string (avutil_version()) << N_(", ")
-         << N_("libpostproc ") << ffmpeg_version_to_string (postproc_version()) << N_(", ")
          << N_("libswscale ") << ffmpeg_version_to_string (swscale_version()) << N_(", ")
          << MagickVersion << N_(", ")
          << N_("libssh ") << ssh_version (0) << N_(", ")
@@ -345,6 +344,7 @@ dcpomatic_setup ()
        libdcp::init ();
        
        Ratio::setup_ratios ();
+       VideoContentScale::setup_scales ();
        DCPContentType::setup_dcp_content_types ();
        Scaler::setup_scalers ();
        Filter::setup_filters ();
@@ -790,7 +790,7 @@ video_frames_to_audio_frames (VideoContent::Frame v, float audio_sample_rate, fl
 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
@@ -803,8 +803,12 @@ 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];
@@ -1016,3 +1020,48 @@ 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;
+       }
+}
+
+ScopedTemporary::ScopedTemporary ()
+       : _open (0)
+{
+       _file = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path ();
+}
+
+ScopedTemporary::~ScopedTemporary ()
+{
+       close ();       
+       boost::system::error_code ec;
+       boost::filesystem::remove (_file, ec);
+}
+
+char const *
+ScopedTemporary::c_str () const
+{
+       return _file.string().c_str ();
+}
+
+FILE*
+ScopedTemporary::open (char const * params)
+{
+       _open = fopen (c_str(), params);
+       return _open;
+}
+
+void
+ScopedTemporary::close ()
+{
+       if (_open) {
+               fclose (_open);
+               _open = 0;
+       }
+}