1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
/*
Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
Copyright (C) 2000-2007 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/** @file src/util.h
* @brief Some utility functions and classes.
*/
#ifndef DVDOMATIC_UTIL_H
#define DVDOMATIC_UTIL_H
#include <string>
#include <vector>
#include <boost/shared_ptr.hpp>
#include <boost/asio.hpp>
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavfilter/avfilter.h>
}
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<std::string> split_at_spaces_considering_quotes (std::string);
extern std::string md5_digest (std::string);
enum ContentType {
STILL,
VIDEO
};
#ifdef DEBUG_HASH
extern void md5_data (std::string, void const *, int);
#endif
/** @class SocketReader
* @brief A helper class from reading from sockets.
*
* You can probably do this stuff directly in boost, but I'm not sure how.
*/
class SocketReader
{
public:
SocketReader (boost::shared_ptr<boost::asio::ip::tcp::socket>);
void read_definite_and_consume (uint8_t *, int);
void read_indefinite (uint8_t *, int);
void consume (int);
private:
/** socket we are reading from */
boost::shared_ptr<boost::asio::ip::tcp::socket> _socket;
/** a buffer for small reads */
uint8_t _buffer[256];
/** amount of valid data in the buffer */
int _buffer_data;
};
/** @class Size
* @brief Representation of the size of something */
struct Size
{
/** Construct a zero Size */
Size ()
: width (0)
, height (0)
{}
/** @param w Width.
* @param h Height.
*/
Size (int w, int h)
: width (w)
, height (h)
{}
/** width */
int width;
/** height */
int height;
};
struct Crop
{
Crop () : left (0), right (0), top (0), bottom (0) {}
int left;
int right;
int top;
int bottom;
};
extern bool operator== (Crop const & a, Crop const & b);
extern bool operator!= (Crop const & a, Crop const & b);
struct Position
{
Position ()
: x (0)
, y (0)
{}
Position (int x_, int y_)
: x (x_)
, y (y_)
{}
int x;
int y;
};
extern std::string crop_string (Position, Size);
extern int dcp_audio_sample_rate (int);
#endif
|