Update to MPlayer SVN rev 29473 and FFmpeg SVN rev 19572.
[vaapi:athaifas-mplayer.git] / libass / .svn / text-base / ass.h.svn-base
1 // -*- c-basic-offset: 8; indent-tabs-mode: t -*-
2 // vim:ts=8:sw=8:noet:ai:
3 /*
4  * Copyright (C) 2006 Evgeniy Stepanov <eugeni.stepanov@gmail.com>
5  *
6  * This file is part of libass.
7  *
8  * libass is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * libass is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along
19  * with libass; if not, write to the Free Software Foundation, Inc.,
20  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21  */
22
23 #ifndef LIBASS_ASS_H
24 #define LIBASS_ASS_H
25
26 #include <stdio.h>
27 #include "ass_types.h"
28
29 /// Libass renderer object. Contents are private.
30 typedef struct ass_renderer_s ass_renderer_t;
31
32 /// a linked list of images produced by ass renderer
33 typedef struct ass_image_s {
34         int w, h; // bitmap width/height
35         int stride; // bitmap stride
36         unsigned char* bitmap; // 1bpp stride*h alpha buffer
37                                // Actual bitmap size may be as low as
38                                // stride * (h-1) + w
39         uint32_t color; // RGBA
40         int dst_x, dst_y; // bitmap placement inside the video frame
41
42         struct ass_image_s* next; // linked list
43 } ass_image_t;
44
45 /// Hinting type
46 typedef enum {ASS_HINTING_NONE = 0,
47               ASS_HINTING_LIGHT,
48               ASS_HINTING_NORMAL,
49               ASS_HINTING_NATIVE
50 } ass_hinting_t;
51
52 /**
53  * \brief initialize the library
54  * \return library handle or NULL if failed
55  */
56 ass_library_t* ass_library_init(void);
57
58 /**
59  * \brief finalize the library
60  * \param priv library handle
61  */
62 void ass_library_done(ass_library_t*);
63
64 /**
65  * \brief set private font directory
66  * It is used for saving embedded fonts and also in font lookup.
67  */
68 void ass_set_fonts_dir(ass_library_t* priv, const char* fonts_dir);
69
70 void ass_set_extract_fonts(ass_library_t* priv, int extract);
71
72 void ass_set_style_overrides(ass_library_t* priv, char** list);
73
74 /**
75  * \brief initialize the renderer
76  * \param priv library handle
77  * \return renderer handle or NULL if failed
78  */
79 ass_renderer_t* ass_renderer_init(ass_library_t*);
80
81 /**
82  * \brief finalize the renderer
83  * \param priv renderer handle
84  */
85 void ass_renderer_done(ass_renderer_t* priv);
86
87 void ass_set_frame_size(ass_renderer_t* priv, int w, int h);
88 void ass_set_margins(ass_renderer_t* priv, int t, int b, int l, int r);
89 void ass_set_use_margins(ass_renderer_t* priv, int use);
90 void ass_set_aspect_ratio(ass_renderer_t* priv, double ar);
91 void ass_set_font_scale(ass_renderer_t* priv, double font_scale);
92 void ass_set_hinting(ass_renderer_t* priv, ass_hinting_t ht);
93 void ass_set_line_spacing(ass_renderer_t* priv, double line_spacing);
94
95 /**
96  * \brief set font lookup defaults
97  */
98 int  ass_set_fonts(ass_renderer_t* priv, const char* default_font, const char* default_family);
99
100 /**
101  * \brief set font lookup defaults, don't use fontconfig even if it is available
102  */
103 int  ass_set_fonts_nofc(ass_renderer_t* priv, const char* default_font, const char* default_family);
104
105 /**
106  * \brief render a frame, producing a list of ass_image_t
107  * \param priv library
108  * \param track subtitle track
109  * \param now video timestamp in milliseconds
110  */
111 ass_image_t* ass_render_frame(ass_renderer_t *priv, ass_track_t* track, long long now, int* detect_change);
112
113
114 // The following functions operate on track objects and do not need an ass_renderer //
115
116 /**
117  * \brief allocate a new empty track object
118  * \return pointer to empty track
119  */
120 ass_track_t* ass_new_track(ass_library_t*);
121
122 /**
123  * \brief deallocate track and all its child objects (styles and events)
124  * \param track track to deallocate
125  */
126 void ass_free_track(ass_track_t* track);
127
128 /**
129  * \brief allocate new style
130  * \param track track
131  * \return newly allocated style id
132  */
133 int ass_alloc_style(ass_track_t* track);
134
135 /**
136  * \brief allocate new event
137  * \param track track
138  * \return newly allocated event id
139  */
140 int ass_alloc_event(ass_track_t* track);
141
142 /**
143  * \brief delete a style
144  * \param track track
145  * \param sid style id
146  * Deallocates style data. Does not modify track->n_styles.
147  */
148 void ass_free_style(ass_track_t* track, int sid);
149
150 /**
151  * \brief delete an event
152  * \param track track
153  * \param eid event id
154  * Deallocates event data. Does not modify track->n_events.
155  */
156 void ass_free_event(ass_track_t* track, int eid);
157
158 /**
159  * \brief Parse a chunk of subtitle stream data.
160  * \param track track
161  * \param data string to parse
162  * \param size length of data
163  */
164 void ass_process_data(ass_track_t* track, char* data, int size);
165
166 /**
167  * \brief Parse Codec Private section of subtitle stream
168  * \param track target track
169  * \param data string to parse
170  * \param size length of data
171  */
172 void ass_process_codec_private(ass_track_t* track, char *data, int size);
173
174 /**
175  * \brief Parse a chunk of subtitle stream data. In Matroska, this contains exactly 1 event (or a commentary).
176  * \param track track
177  * \param data string to parse
178  * \param size length of data
179  * \param timecode starting time of the event (milliseconds)
180  * \param duration duration of the event (milliseconds)
181 */
182 void ass_process_chunk(ass_track_t* track, char *data, int size, long long timecode, long long duration);
183
184 char* read_file_recode(char* fname, char* codepage, size_t* size);
185
186 /**
187  * \brief Read subtitles from file.
188  * \param fname file name
189  * \return newly allocated track
190 */
191 ass_track_t* ass_read_file(ass_library_t* library, char* fname, char* codepage);
192
193 /**
194  * \brief Read subtitles from memory.
195  * \param library libass library object
196  * \param buf pointer to subtitles text
197  * \param bufsize size of buffer
198  * \param codepage recode buffer contents from given codepage
199  * \return newly allocated track
200 */
201 ass_track_t* ass_read_memory(ass_library_t* library, char* buf, size_t bufsize, char* codepage);
202 /**
203  * \brief read styles from file into already initialized track
204  * \return 0 on success
205  */
206 int ass_read_styles(ass_track_t* track, char* fname, char* codepage);
207
208 /**
209  * \brief Add a memory font.
210  * \param name attachment name
211  * \param data binary font data
212  * \param data_size data size
213 */
214 void ass_add_font(ass_library_t* library, char* name, char* data, int data_size);
215
216 /**
217  * \brief Remove all fonts stored in ass_library object
218  */
219 void ass_clear_fonts(ass_library_t* library);
220
221 /**
222  * \brief Calculates timeshift from now to the start of some other subtitle event, depending on movement parameter
223  * \param track subtitle track
224  * \param now current time, ms
225  * \param movement how many events to skip from the one currently displayed
226  * +2 means "the one after the next", -1 means "previous"
227  * \return timeshift, ms
228  */
229 long long ass_step_sub(ass_track_t* track, long long now, int movement);
230
231 #endif /* LIBASS_ASS_H */