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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
/*
Copyright (C) 2013-2016 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
DCP-o-matic 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.
DCP-o-matic 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 DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef DCPOMATIC_SUBTITLE_CONTENT_H
#define DCPOMATIC_SUBTITLE_CONTENT_H
#include "content_part.h"
#include <libcxml/cxml.h>
#include <dcp/types.h>
#include <boost/signals2.hpp>
class Font;
class SubtitleContentProperty
{
public:
static int const X_OFFSET;
static int const Y_OFFSET;
static int const X_SCALE;
static int const Y_SCALE;
static int const USE;
static int const BURN;
static int const LANGUAGE;
static int const FONTS;
static int const COLOUR;
static int const OUTLINE;
static int const SHADOW;
static int const EFFECT_COLOUR;
static int const LINE_SPACING;
};
/** @class SubtitleContent
* @brief Description of how some subtitle content should be presented.
*
* There are `image' subtitles (bitmaps) and `text' subtitles (plain text),
* and not all of the settings in this class correspond to both types.
*/
class SubtitleContent : public ContentPart
{
public:
SubtitleContent (Content* parent);
SubtitleContent (Content* parent, std::vector<boost::shared_ptr<Content> >);
void as_xml (xmlpp::Node *) const;
std::string identifier () const;
void add_font (boost::shared_ptr<Font> font);
void set_use (bool);
void set_burn (bool);
void set_x_offset (double);
void set_y_offset (double);
void set_x_scale (double);
void set_y_scale (double);
void set_language (std::string language);
bool use () const {
boost::mutex::scoped_lock lm (_mutex);
return _use;
}
bool burn () const {
boost::mutex::scoped_lock lm (_mutex);
return _burn;
}
double x_offset () const {
boost::mutex::scoped_lock lm (_mutex);
return _x_offset;
}
double y_offset () const {
boost::mutex::scoped_lock lm (_mutex);
return _y_offset;
}
double x_scale () const {
boost::mutex::scoped_lock lm (_mutex);
return _x_scale;
}
double y_scale () const {
boost::mutex::scoped_lock lm (_mutex);
return _y_scale;
}
std::list<boost::shared_ptr<Font> > fonts () const {
boost::mutex::scoped_lock lm (_mutex);
return _fonts;
}
std::string language () const {
boost::mutex::scoped_lock lm (_mutex);
return _language;
}
void set_colour (dcp::Colour);
dcp::Colour colour () const {
boost::mutex::scoped_lock lm (_mutex);
return _colour;
}
void set_outline (bool);
bool outline () const {
boost::mutex::scoped_lock lm (_mutex);
return _outline;
}
void set_shadow (bool);
bool shadow () const {
boost::mutex::scoped_lock lm (_mutex);
return _shadow;
}
void set_effect_colour (dcp::Colour);
dcp::Colour effect_colour () const {
boost::mutex::scoped_lock lm (_mutex);
return _effect_colour;
}
void set_line_spacing (double s);
double line_spacing () const {
boost::mutex::scoped_lock lm (_mutex);
return _line_spacing;
}
static boost::shared_ptr<SubtitleContent> from_xml (Content* parent, cxml::ConstNodePtr, int version);
protected:
/** subtitle language (e.g. "German") or empty if it is not known */
std::string _language;
private:
friend struct ffmpeg_pts_offset_test;
SubtitleContent (Content* parent, cxml::ConstNodePtr, int version);
void font_changed ();
void connect_to_fonts ();
bool _use;
bool _burn;
/** x offset for placing subtitles, as a proportion of the container width;
* +ve is further right, -ve is further left.
*/
double _x_offset;
/** y offset for placing subtitles, as a proportion of the container height;
* +ve is further down the frame, -ve is further up.
*/
double _y_offset;
/** x scale factor to apply to subtitles */
double _x_scale;
/** y scale factor to apply to subtitles */
double _y_scale;
std::list<boost::shared_ptr<Font> > _fonts;
dcp::Colour _colour;
bool _outline;
bool _shadow;
dcp::Colour _effect_colour;
std::list<boost::signals2::connection> _font_connections;
/** scaling factor for line spacing; 1 is "standard", < 1 is closer together, > 1 is further apart */
double _line_spacing;
};
#endif
|