X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Futil.h;h=7aa9f25e14f01be88c0e4e43bda5b55bc0700b4b;hb=d7fe5fa4178af87b5f1e5a571a78313fa00c3327;hp=da7e73f2049a6c532d0d3d91831f808129f576fc;hpb=04d7ca2e5470924d79ddcff0496ebef9b5cec8b7;p=dcpomatic.git diff --git a/src/lib/util.h b/src/lib/util.h index da7e73f20..7aa9f25e1 100644 --- a/src/lib/util.h +++ b/src/lib/util.h @@ -36,7 +36,7 @@ extern "C" { #include "compose.hpp" #ifdef DVDOMATIC_DEBUG -#define TIMING(...) _log->microsecond_log (String::compose (__VA_ARGS__), Log::TIMING); +#define TIMING(...) _film->log()->microsecond_log (String::compose (__VA_ARGS__), Log::TIMING); #else #define TIMING(...) #endif @@ -46,14 +46,22 @@ class Scaler; extern std::string seconds_to_hms (int); extern std::string seconds_to_approximate_hms (int); extern void stacktrace (std::ostream &, int); -extern std::string audio_sample_format_to_string (AVSampleFormat); -extern AVSampleFormat audio_sample_format_from_string (std::string); extern std::string dependency_version_summary (); extern double seconds (struct timeval); extern void dvdomatic_setup (); 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 (); + +typedef int SourceFrame; + +struct DCPFrameRate +{ + int frames_per_second; + int skip; + bool run_fast; +}; enum ContentType { STILL, @@ -84,6 +92,8 @@ struct Size int height; }; +extern bool operator== (Size const & a, Size const & b); + /** A description of the crop of an image or video. */ struct Crop { @@ -122,16 +132,16 @@ struct Position }; /** A rectangle */ -struct Rectangle +struct Rect { - Rectangle () + Rect () : x (0) , y (0) , width (0) , height (0) {} - Rectangle (int x_, int y_, int w_, int h_) + Rect (int x_, int y_, int w_, int h_) : x (x_) , y (y_) , width (w_) @@ -151,11 +161,12 @@ struct Rectangle return Size (width, height); } - Rectangle intersection (Rectangle const & other) const; + Rect intersection (Rect const & other) const; }; extern std::string crop_string (Position, Size); extern int dcp_audio_sample_rate (int); +extern DCPFrameRate dcp_frame_rate (float); extern std::string colour_lut_index_to_name (int index); extern int round_up (int, int); extern std::multimap read_key_value (std::istream& s); @@ -205,5 +216,42 @@ private: int _buffer_data; }; +class AudioBuffers +{ +public: + AudioBuffers (int channels, int frames); + AudioBuffers (AudioBuffers const &); + ~AudioBuffers (); + + float** data () const { + return _data; + } + + float* data (int) const; + + int channels () const { + return _channels; + } + + int frames () const { + return _frames; + } + + void set_frames (int f); + + void make_silent (); + + void copy_from (AudioBuffers* from, int frames_to_copy, int read_offset, int write_offset); + void move (int from, int to, int frames); + +private: + int _channels; + int _frames; + int _allocated_frames; + float** _data; +}; + +extern int64_t video_frames_to_audio_frames (SourceFrame v, float audio_sample_rate, float frames_per_second); + #endif