Some const correctness.
[dcpomatic.git] / src / lib / util.h
index 22c6ea95baafa4f1f2cb545c5f20468b2b5e5b80..99670110edec6d4d47eaf6c4709c60d3be3e5f8c 100644 (file)
@@ -30,6 +30,7 @@
 #include <boost/shared_ptr.hpp>
 #include <boost/asio.hpp>
 #include <boost/optional.hpp>
+#include <boost/filesystem.hpp>
 #include <libdcp/util.h>
 extern "C" {
 #include <libavcodec/avcodec.h>
@@ -54,17 +55,21 @@ extern void stacktrace (std::ostream &, int);
 extern std::string dependency_version_summary ();
 extern double seconds (struct timeval);
 extern void dvdomatic_setup ();
+extern void dvdomatic_setup_i18n (std::string);
 extern std::vector<std::string> split_at_spaces_considering_quotes (std::string);
 extern std::string md5_digest (std::string);
 extern std::string md5_digest (void const *, int);
 extern void ensure_ui_thread ();
 extern std::string audio_channel_name (int);
+#ifdef DVDOMATIC_WINDOWS
+extern boost::filesystem::path mo_path ();
+#endif
 
 typedef int SourceFrame;
 
-struct DCPFrameRate
+struct FrameRateConversion
 {
-       DCPFrameRate (float);
+       FrameRateConversion (float, int);
 
        /** @return factor by which to multiply a source frame rate
            to get the effective rate after any skip or repeat has happened.
@@ -78,15 +83,13 @@ struct DCPFrameRate
 
                return 1;
        }
-       
-       /** frames per second for the DCP */
-       int frames_per_second;
+
        /** true to skip every other frame */
        bool skip;
        /** true to repeat every frame once */
        bool repeat;
        /** true if this DCP will run its video faster or slower than the source
-        *  without taking into account `repeat'.
+        *  without taking into account `repeat' nor `skip'.
         *  (e.g. change_speed will be true if
         *          source is 29.97fps, DCP is 30fps
         *          source is 14.50fps, DCP is 30fps
@@ -95,8 +98,12 @@ struct DCPFrameRate
         *          source is 12.50fps, DCP is 25fps)
         */
        bool change_speed;
+
+       std::string description;
 };
 
+int best_dcp_frame_rate (float);
+
 enum ContentType {
        STILL, ///< content is still images
        VIDEO  ///< content is a video
@@ -234,6 +241,7 @@ class AudioBuffers
 public:
        AudioBuffers (int channels, int frames);
        AudioBuffers (AudioBuffers const &);
+       AudioBuffers (boost::shared_ptr<const AudioBuffers>);
        ~AudioBuffers ();
 
        float** data () const {
@@ -286,5 +294,16 @@ extern int64_t video_frames_to_audio_frames (SourceFrame v, float audio_sample_r
 extern bool still_image_file (std::string);
 extern std::pair<std::string, int> cpu_info ();
 
+class LocaleGuard
+{
+public:
+       LocaleGuard ();
+       ~LocaleGuard ();
+       
+private:
+       char* _old;
+};
+
+
 #endif