X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Futil.h;h=7aa9f25e14f01be88c0e4e43bda5b55bc0700b4b;hb=d7fe5fa4178af87b5f1e5a571a78313fa00c3327;hp=e1ad7fd642707ee546b8374e4dc879f9c792e871;hpb=ed70b4faf0f53b106aebd4b9195ccc81da97880e;p=dcpomatic.git diff --git a/src/lib/util.h b/src/lib/util.h index e1ad7fd64..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,40 +132,56 @@ struct Position }; /** A rectangle */ -struct Rectangle +struct Rect { - Rectangle () + Rect () : x (0) , y (0) - , w (0) - , h (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_) - , w (w_) - , h (h_) + , width (w_) + , height (h_) {} int x; int y; - int w; - int h; + int width; + int height; + + Position position () const { + return Position (x, y); + } - Rectangle intersection (Rectangle const & other) const; + Size size () const { + return Size (width, height); + } + + 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); +extern int get_required_int (std::multimap const & kv, std::string k); +extern float get_required_float (std::multimap const & kv, std::string k); +extern std::string get_required_string (std::multimap const & kv, std::string k); +extern int get_optional_int (std::multimap const & kv, std::string k); +extern std::string get_optional_string (std::multimap const & kv, std::string k); /** @class Socket * @brief A class to wrap a boost::asio::ip::tcp::socket with some things * that are useful for DVD-o-matic. * * This class wraps some things that I could not work out how to do with boost; - * most notably, sync read/write calls with timeouts, and the ability to peak into + * most notably, sync read/write calls with timeouts, and the ability to peek into * data being read. */ class Socket @@ -185,25 +211,47 @@ private: boost::asio::deadline_timer _deadline; boost::asio::ip::tcp::socket _socket; /** a buffer for small reads */ - uint8_t _buffer[256]; + uint8_t _buffer[1024]; /** amount of valid data in the buffer */ int _buffer_data; }; -#define SCALEBITS 10 -#define ONE_HALF (1 << (SCALEBITS - 1)) -#define FIX(x) ((int) ((x) * (1<> SCALEBITS) + int channels () const { + return _channels; + } + + int frames () const { + return _frames; + } -#define RGB_TO_U_CCIR(r1, g1, b1, shift)\ -(((- FIX(0.16874*224.0/255.0) * r1 - FIX(0.33126*224.0/255.0) * g1 + \ - FIX(0.50000*224.0/255.0) * b1 + (ONE_HALF << shift) - 1) >> (SCALEBITS + shift)) + 128) + void set_frames (int f); -#define RGB_TO_V_CCIR(r1, g1, b1, shift)\ -(((FIX(0.50000*224.0/255.0) * r1 - FIX(0.41869*224.0/255.0) * g1 - \ - FIX(0.08131*224.0/255.0) * b1 + (ONE_HALF << shift) - 1) >> (SCALEBITS + shift)) + 128) + 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 +