summaryrefslogtreecommitdiffstats
path: root/libass/ass_types.h
blob: cdea14ef44af0eb30b8e46d0ec14f61cc9078f9b (plain)
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
/*
 * Copyright (C) 2006 Evgeniy Stepanov <eugeni.stepanov@gmail.com>
 *
 * This file is part of libass.
 *
 * libass 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.
 *
 * libass 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 libass; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

#ifndef LIBASS_TYPES_H
#define LIBASS_TYPES_H

#include <stdint.h>

#define VALIGN_SUB 0
#define VALIGN_CENTER 8
#define VALIGN_TOP 4
#define HALIGN_LEFT 1
#define HALIGN_CENTER 2
#define HALIGN_RIGHT 3

/// ass Style: line
typedef struct ass_style_s {
    char *Name;
    char *FontName;
    double FontSize;
    uint32_t PrimaryColour;
    uint32_t SecondaryColour;
    uint32_t OutlineColour;
    uint32_t BackColour;
    int Bold;
    int Italic;
    int Underline;
    int StrikeOut;
    double ScaleX;
    double ScaleY;
    double Spacing;
    int Angle;
    int BorderStyle;
    double Outline;
    double Shadow;
    int Alignment;
    int MarginL;
    int MarginR;
    int MarginV;
//        int AlphaLevel;
    int Encoding;
    int treat_fontname_as_pattern;
} ass_style_t;

typedef struct render_priv_s render_priv_t;

/// ass_event_t corresponds to a single Dialogue line
/// Text is stored as-is, style overrides will be parsed later
typedef struct ass_event_s {
    long long Start;            // ms
    long long Duration;         // ms

    int ReadOrder;
    int Layer;
    int Style;
    char *Name;
    int MarginL;
    int MarginR;
    int MarginV;
    char *Effect;
    char *Text;

    render_priv_t *render_priv;
} ass_event_t;

typedef struct parser_priv_s parser_priv_t;

typedef struct ass_library_s ass_library_t;

/// ass track represent either an external script or a matroska subtitle stream (no real difference between them)
/// it can be used in rendering after the headers are parsed (i.e. events format line read)
typedef struct ass_track_s {
    int n_styles;               // amount used
    int max_styles;             // amount allocated
    int n_events;
    int max_events;
    ass_style_t *styles;        // array of styles, max_styles length, n_styles used
    ass_event_t *events;        // the same as styles

    char *style_format;         // style format line (everything after "Format: ")
    char *event_format;         // event format line

    enum { TRACK_TYPE_UNKNOWN =
            0, TRACK_TYPE_ASS, TRACK_TYPE_SSA } track_type;

    // script header fields
    int PlayResX;
    int PlayResY;
    double Timer;
    int WrapStyle;
    char ScaledBorderAndShadow;


    int default_style;          // index of default style
    char *name;                 // file name in case of external subs, 0 for streams

    ass_library_t *library;
    parser_priv_t *parser_priv;
} ass_track_t;

#endif                          /* LIBASS_TYPES_H */