Commit | Line | Data |
---|---|---|
2ba45a60 DM |
1 | /* |
2 | * SSA/ASS common functions | |
3 | * Copyright (c) 2010 Aurelien Jacobs <aurel@gnuage.org> | |
4 | * | |
5 | * This file is part of FFmpeg. | |
6 | * | |
7 | * FFmpeg is free software; you can redistribute it and/or | |
8 | * modify it under the terms of the GNU Lesser General Public | |
9 | * License as published by the Free Software Foundation; either | |
10 | * version 2.1 of the License, or (at your option) any later version. | |
11 | * | |
12 | * FFmpeg is distributed in the hope that it will be useful, | |
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | * Lesser General Public License for more details. | |
16 | * | |
17 | * You should have received a copy of the GNU Lesser General Public | |
18 | * License along with FFmpeg; if not, write to the Free Software | |
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
20 | */ | |
21 | ||
22 | #ifndef AVCODEC_ASS_H | |
23 | #define AVCODEC_ASS_H | |
24 | ||
25 | #include "avcodec.h" | |
26 | #include "libavutil/bprint.h" | |
27 | ||
28 | /** | |
29 | * @name Default values for ASS style | |
30 | * @{ | |
31 | */ | |
32 | #define ASS_DEFAULT_FONT "Arial" | |
33 | #define ASS_DEFAULT_FONT_SIZE 16 | |
34 | #define ASS_DEFAULT_COLOR 0xffffff | |
35 | #define ASS_DEFAULT_BACK_COLOR 0 | |
36 | #define ASS_DEFAULT_BOLD 0 | |
37 | #define ASS_DEFAULT_ITALIC 0 | |
38 | #define ASS_DEFAULT_UNDERLINE 0 | |
39 | #define ASS_DEFAULT_ALIGNMENT 2 | |
40 | /** @} */ | |
41 | ||
42 | /** | |
43 | * Generate a suitable AVCodecContext.subtitle_header for SUBTITLE_ASS. | |
44 | * | |
45 | * @param avctx pointer to the AVCodecContext | |
46 | * @param font name of the default font face to use | |
47 | * @param font_size default font size to use | |
48 | * @param color default text color to use (ABGR) | |
49 | * @param back_color default background color to use (ABGR) | |
50 | * @param bold 1 for bold text, 0 for normal text | |
51 | * @param italic 1 for italic text, 0 for normal text | |
52 | * @param underline 1 for underline text, 0 for normal text | |
53 | * @param alignment position of the text (left, center, top...), defined after | |
54 | * the layout of the numpad (1-3 sub, 4-6 mid, 7-9 top) | |
55 | * @return >= 0 on success otherwise an error code <0 | |
56 | */ | |
57 | int ff_ass_subtitle_header(AVCodecContext *avctx, | |
58 | const char *font, int font_size, | |
59 | int color, int back_color, | |
60 | int bold, int italic, int underline, | |
61 | int alignment); | |
62 | ||
63 | /** | |
64 | * Generate a suitable AVCodecContext.subtitle_header for SUBTITLE_ASS | |
65 | * with default style. | |
66 | * | |
67 | * @param avctx pointer to the AVCodecContext | |
68 | * @return >= 0 on success otherwise an error code <0 | |
69 | */ | |
70 | int ff_ass_subtitle_header_default(AVCodecContext *avctx); | |
71 | ||
72 | /** | |
73 | * Add an ASS dialog line to an AVSubtitle as a new AVSubtitleRect. | |
74 | * | |
75 | * @param sub pointer to the AVSubtitle | |
76 | * @param dialog ASS dialog to add to sub | |
77 | * @param ts_start start timestamp for this dialog (in 1/100 second unit) | |
78 | * @param duration duration for this dialog (in 1/100 second unit), can be -1 | |
79 | * to last until the end of the presentation | |
80 | * @param raw when set to 2, it indicates that dialog contains an ASS | |
81 | * dialog line as muxed in Matroska | |
82 | * when set to 1, it indicates that dialog contains a whole SSA | |
83 | * dialog line which should be copied as is. | |
84 | * when set to 0, it indicates that dialog contains only the Text | |
85 | * part of the ASS dialog line, the rest of the line | |
86 | * will be generated. | |
87 | * @return number of characters read from dialog. It can be less than the whole | |
88 | * length of dialog, if dialog contains several lines of text. | |
89 | * A negative value indicates an error. | |
90 | */ | |
91 | int ff_ass_add_rect(AVSubtitle *sub, const char *dialog, | |
92 | int ts_start, int duration, int raw); | |
93 | ||
f6fa7814 DM |
94 | /** |
95 | * Same as ff_ass_add_rect_bprint, but taking an AVBPrint buffer instead of a | |
96 | * string, and assuming raw=0. | |
97 | */ | |
98 | int ff_ass_add_rect_bprint(AVSubtitle *sub, AVBPrint *buf, | |
99 | int ts_start, int duration); | |
100 | ||
2ba45a60 DM |
101 | /** |
102 | * Add an ASS dialog line to an AVBPrint buffer. | |
103 | * | |
104 | * @param buf pointer to an initialized AVBPrint buffer | |
105 | * @param dialog ASS dialog to add to sub | |
106 | * @param ts_start start timestamp for this dialog (in 1/100 second unit) | |
107 | * @param duration duration for this dialog (in 1/100 second unit), can be -1 | |
108 | * to last until the end of the presentation | |
109 | * @param raw when set to 2, it indicates that dialog contains an ASS | |
110 | * dialog line as muxed in Matroska | |
111 | * when set to 1, it indicates that dialog contains a whole SSA | |
112 | * dialog line which should be copied as is. | |
113 | * when set to 0, it indicates that dialog contains only the Text | |
114 | * part of the ASS dialog line, the rest of the line | |
115 | * will be generated. | |
116 | * @return number of characters read from dialog. It can be less than the whole | |
117 | * length of dialog, if dialog contains several lines of text. | |
118 | * A negative value indicates an error. | |
119 | */ | |
120 | int ff_ass_bprint_dialog(AVBPrint *buf, const char *dialog, | |
121 | int ts_start, int duration, int raw); | |
122 | ||
123 | /** | |
124 | * Escape a text subtitle using ASS syntax into an AVBPrint buffer. | |
125 | * Newline characters will be escaped to \N. | |
126 | * | |
127 | * @param buf pointer to an initialized AVBPrint buffer | |
128 | * @param p source text | |
129 | * @param size size of the source text | |
130 | * @param linebreaks additional newline chars, which will be escaped to \N | |
131 | * @param keep_ass_markup braces and backslash will not be escaped if set | |
132 | */ | |
133 | void ff_ass_bprint_text_event(AVBPrint *buf, const char *p, int size, | |
134 | const char *linebreaks, int keep_ass_markup); | |
135 | #endif /* AVCODEC_ASS_H */ |