X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Futil.h;h=0d745e50c5f3152c3984758c2260d0acf65a7fd1;hb=a991c734ebfedb5456cec827d5eaf2583fdbb9a1;hp=87735ea8e82b8bc27e77b17515da26eedc8155ee;hpb=dc08d2da6bf14fd469005ea3512992c66b041da9;p=dcpomatic.git diff --git a/src/lib/util.h b/src/lib/util.h index 87735ea8e..0d745e50c 100644 --- a/src/lib/util.h +++ b/src/lib/util.h @@ -29,6 +29,8 @@ #include #include #include +#include +#include #include extern "C" { #include @@ -42,6 +44,8 @@ extern "C" { #define TIMING(...) #endif +#undef check + /** The maximum number of audio channels that we can cope with */ #define MAX_AUDIO_CHANNELS 6 @@ -53,16 +57,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_gettext_i18n (std::string); extern std::vector 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. @@ -76,15 +85,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 @@ -93,8 +100,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 @@ -141,6 +152,9 @@ struct Position int y; }; +namespace dvdomatic +{ + /** @struct Rect * @brief A rectangle. */ @@ -176,9 +190,10 @@ struct Rect Rect intersection (Rect const & other) const; }; +} + extern std::string crop_string (Position, libdcp::Size); extern int dcp_audio_sample_rate (int); -extern int dcp_audio_channels (int); extern std::string colour_lut_index_to_name (int index); extern int stride_round_up (int, int const *, int); extern int stride_lookup (int c, int const * stride); @@ -233,6 +248,7 @@ class AudioBuffers public: AudioBuffers (int channels, int frames); AudioBuffers (AudioBuffers const &); + AudioBuffers (boost::shared_ptr); ~AudioBuffers (); float** data () const { @@ -268,9 +284,32 @@ private: float** _data; }; +class AudioMapping +{ +public: + AudioMapping (int); + + boost::optional source_to_dcp (int c) const; + boost::optional dcp_to_source (libdcp::Channel c) const; + int dcp_channels () const; + +private: + int _source_channels; +}; + extern int64_t video_frames_to_audio_frames (SourceFrame v, float audio_sample_rate, float frames_per_second); extern bool still_image_file (std::string); -extern std::pair cpu_info (); + +class LocaleGuard +{ +public: + LocaleGuard (); + ~LocaleGuard (); + +private: + char* _old; +}; + #endif