X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Futil.h;h=244c018554e958b36bbec842d0335401353afeec;hb=129afab72bfc026b5704c41a6bfc0f4b3a2c4033;hp=d7f2330038cd653f0c8336fb1b11d9e209a67b9e;hpb=737c3392039740f7a22a9ff922f8492905173b9c;p=dcpomatic.git diff --git a/src/lib/util.h b/src/lib/util.h index d7f233003..244c01855 100644 --- a/src/lib/util.h +++ b/src/lib/util.h @@ -33,6 +33,13 @@ extern "C" { #include #include } +#include "compose.hpp" + +#ifdef DVDOMATIC_DEBUG +#define TIMING(...) _log->microsecond_log (String::compose (__VA_ARGS__), Log::TIMING); +#else +#define TIMING(...) +#endif class Scaler; @@ -46,16 +53,13 @@ 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); enum ContentType { STILL, VIDEO }; -#ifdef DEBUG_HASH -extern void md5_data (std::string, void const *, int); -#endif - /** @class Size * @brief Representation of the size of something */ struct Size @@ -80,19 +84,25 @@ struct Size int height; }; +/** A description of the crop of an image or video. */ struct Crop { Crop () : left (0), right (0), top (0), bottom (0) {} - + + /** Number of pixels to remove from the left-hand side */ int left; + /** Number of pixels to remove from the right-hand side */ int right; + /** Number of pixels to remove from the top */ int top; + /** Number of pixels to remove from the bottom */ int bottom; }; extern bool operator== (Crop const & a, Crop const & b); extern bool operator!= (Crop const & a, Crop const & b); +/** A position */ struct Position { Position () @@ -105,19 +115,56 @@ struct Position , y (y_) {} + /** x coordinate */ + int x; + /** y coordinate */ + int y; +}; + +/** A rectangle */ +struct Rectangle +{ + Rectangle () + : x (0) + , y (0) + , w (0) + , h (0) + {} + + Rectangle (int x_, int y_, int w_, int h_) + : x (x_) + , y (y_) + , w (w_) + , h (h_) + {} + int x; int y; + int w; + int h; + + Rectangle intersection (Rectangle const & other) const; }; extern std::string crop_string (Position, Size); extern int dcp_audio_sample_rate (int); extern std::string colour_lut_index_to_name (int index); - +extern int round_up (int, int); + +/** @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 + * data being read. + */ class Socket { public: Socket (); + /** @return Our underlying socket */ boost::asio::ip::tcp::socket& socket () { return _socket; }