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
|
/*
Copyright (C) 2013-2014 Carl Hetherington <cth@carlh.net>
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.
*/
#ifndef DCPOMATIC_SUBTITLE_CONTENT_H
#define DCPOMATIC_SUBTITLE_CONTENT_H
#include "content.h"
class Font;
class SubtitleContentProperty
{
public:
static int const SUBTITLE_X_OFFSET;
static int const SUBTITLE_Y_OFFSET;
static int const SUBTITLE_X_SCALE;
static int const SUBTITLE_Y_SCALE;
static int const USE_SUBTITLES;
static int const BURN_SUBTITLES;
static int const SUBTITLE_LANGUAGE;
static int const FONTS;
static int const SUBTITLE_VIDEO_FRAME_RATE;
};
/** @class SubtitleContent
* @brief Parent for content which has the potential to include subtitles.
*
* Although inheriting from this class indicates that the content could
* have subtitles, it may not. ::has_subtitles() will tell you.
*/
class SubtitleContent : public virtual Content
{
public:
SubtitleContent (boost::shared_ptr<const Film>);
SubtitleContent (boost::shared_ptr<const Film>, boost::filesystem::path);
SubtitleContent (boost::shared_ptr<const Film>, cxml::ConstNodePtr, int version);
SubtitleContent (boost::shared_ptr<const Film>, std::vector<boost::shared_ptr<Content> >);
void as_xml (xmlpp::Node *) const;
std::string identifier () const;
bool has_subtitles () const;
virtual bool has_text_subtitles () const = 0;
virtual bool has_image_subtitles () const = 0;
virtual double subtitle_video_frame_rate () const = 0;
void add_font (boost::shared_ptr<Font> font);
void set_use_subtitles (bool);
void set_burn_subtitles (bool);
void set_subtitle_x_offset (double);
void set_subtitle_y_offset (double);
void set_subtitle_x_scale (double);
void set_subtitle_y_scale (double);
void set_subtitle_language (std::string language);
bool use_subtitles () const {
boost::mutex::scoped_lock lm (_mutex);
return _use_subtitles;
}
bool burn_subtitles () const {
boost::mutex::scoped_lock lm (_mutex);
return _burn_subtitles;
}
double subtitle_x_offset () const {
boost::mutex::scoped_lock lm (_mutex);
return _subtitle_x_offset;
}
double subtitle_y_offset () const {
boost::mutex::scoped_lock lm (_mutex);
return _subtitle_y_offset;
}
double subtitle_x_scale () const {
boost::mutex::scoped_lock lm (_mutex);
return _subtitle_x_scale;
}
double subtitle_y_scale () const {
boost::mutex::scoped_lock lm (_mutex);
return _subtitle_y_scale;
}
std::list<boost::shared_ptr<Font> > fonts () const {
boost::mutex::scoped_lock lm (_mutex);
return _fonts;
}
std::string subtitle_language () const {
boost::mutex::scoped_lock lm (_mutex);
return _subtitle_language;
}
protected:
/** subtitle language (e.g. "German") or empty if it is not known */
std::string _subtitle_language;
private:
friend struct ffmpeg_pts_offset_test;
void font_changed ();
void connect_to_fonts ();
bool _use_subtitles;
bool _burn_subtitles;
/** x offset for placing subtitles, as a proportion of the container width;
* +ve is further right, -ve is further left.
*/
double _subtitle_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 _subtitle_y_offset;
/** x scale factor to apply to subtitles */
double _subtitle_x_scale;
/** y scale factor to apply to subtitles */
double _subtitle_y_scale;
std::list<boost::shared_ptr<Font> > _fonts;
std::list<boost::signals2::connection> _font_connections;
};
#endif
|