1 /*
2  * Copyright (C) 2006 Evgeniy Stepanov <eugeni.stepanov@gmail.com>
3  *
4  * This file is part of libass.
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #ifndef LIBASS_TYPES_H
20 #define LIBASS_TYPES_H
21 
22 #include <stdint.h>
23 
24 #define VALIGN_SUB 0
25 #define VALIGN_CENTER 8
26 #define VALIGN_TOP 4
27 #define HALIGN_LEFT 1
28 #define HALIGN_CENTER 2
29 #define HALIGN_RIGHT 3
30 
31 /* Opaque objects internally used by libass.  Contents are private. */
32 typedef struct ass_renderer ASS_Renderer;
33 typedef struct render_priv ASS_RenderPriv;
34 typedef struct parser_priv ASS_ParserPriv;
35 typedef struct ass_library ASS_Library;
36 
37 /* ASS Style: line */
38 typedef struct ass_style {
39     char *Name;
40     char *FontName;
41     double FontSize;
42     uint32_t PrimaryColour;
43     uint32_t SecondaryColour;
44     uint32_t OutlineColour;
45     uint32_t BackColour;
46     int Bold;
47     int Italic;
48     int Underline;
49     int StrikeOut;
50     double ScaleX;
51     double ScaleY;
52     double Spacing;
53     double Angle;
54     int BorderStyle;
55     double Outline;
56     double Shadow;
57     int Alignment;
58     int MarginL;
59     int MarginR;
60     int MarginV;
61     int Encoding;
62     int treat_fontname_as_pattern;
63     double Blur;
64 } ASS_Style;
65 
66 /*
67  * ASS_Event corresponds to a single Dialogue line;
68  * text is stored as-is, style overrides will be parsed later.
69  */
70 typedef struct ass_event {
71     long long Start;            // ms
72     long long Duration;         // ms
73 
74     int ReadOrder;
75     int Layer;
76     int Style;
77     char *Name;
78     int MarginL;
79     int MarginR;
80     int MarginV;
81     char *Effect;
82     char *Text;
83 
84     ASS_RenderPriv *render_priv;
85 } ASS_Event;
86 
87 /*
88  * ass track represent either an external script or a matroska subtitle stream
89  * (no real difference between them); it can be used in rendering after the
90  * headers are parsed (i.e. events format line read).
91  */
92 typedef struct ass_track {
93     int n_styles;           // amount used
94     int max_styles;         // amount allocated
95     int n_events;
96     int max_events;
97     ASS_Style *styles;    // array of styles, max_styles length, n_styles used
98     ASS_Event *events;    // the same as styles
99 
100     char *style_format;     // style format line (everything after "Format: ")
101     char *event_format;     // event format line
102 
103     enum {
104         TRACK_TYPE_UNKNOWN = 0,
105         TRACK_TYPE_ASS,
106         TRACK_TYPE_SSA
107     } track_type;
108 
109     // Script header fields
110     int PlayResX;
111     int PlayResY;
112     double Timer;
113     int WrapStyle;
114     int ScaledBorderAndShadow;
115     int Kerning;
116     char *Language;
117     enum {
118         YCBCR_DEFAULT = 0,  // TV.601 on YCbCr video, None on RGB video
119         YCBCR_UNKNOWN,
120         YCBCR_NONE,         // untouched RGB values
121         YCBCR_BT601_TV,
122         YCBCR_BT601_PC,
123         YCBCR_BT709_TV,
124         YCBCR_BT709_PC,
125         YCBCR_SMPTE240M_TV,
126         YCBCR_SMPTE240M_PC,
127         YCBCR_FCC_TV,
128         YCBCR_FCC_PC
129     } YCbCrMatrix;
130 
131     int default_style;      // index of default style
132     char *name;             // file name in case of external subs, 0 for streams
133 
134     ASS_Library *library;
135     ASS_ParserPriv *parser_priv;
136 } ASS_Track;
137 
138 #endif /* LIBASS_TYPES_H */
139