Mercurial > mplayer.hg
annotate libass/ass.h @ 27427:a54c51af6595
demux_lavf: fix mp_seek behavior in case of seeking error
When trying to seek past the end of file, the ByteIOContext expect
that the stream is left in the same state as it was before the
tentative seek. stream_seek() does not meet this expectation.
It changes current position when seeking past the end of file.
Thus, it is necessary to reset the stream to its previous state
after a seek failure.
author | aurel |
---|---|
date | Wed, 13 Aug 2008 00:01:31 +0000 |
parents | 588ce97b44f2 |
children | d895515b366d |
rev | line source |
---|---|
20008
fa122b7c71c6
Add copyright notice and vim/emacs comments to libass and vf_ass.c.
eugeni
parents:
19652
diff
changeset
|
1 // -*- c-basic-offset: 8; indent-tabs-mode: t -*- |
fa122b7c71c6
Add copyright notice and vim/emacs comments to libass and vf_ass.c.
eugeni
parents:
19652
diff
changeset
|
2 // vim:ts=8:sw=8:noet:ai: |
fa122b7c71c6
Add copyright notice and vim/emacs comments to libass and vf_ass.c.
eugeni
parents:
19652
diff
changeset
|
3 /* |
26723 | 4 * Copyright (C) 2006 Evgeniy Stepanov <eugeni.stepanov@gmail.com> |
5 * | |
26738
588ce97b44f2
Speak of libass instead of MPlayer in the libass license headers.
diego
parents:
26723
diff
changeset
|
6 * This file is part of libass. |
26723 | 7 * |
26738
588ce97b44f2
Speak of libass instead of MPlayer in the libass license headers.
diego
parents:
26723
diff
changeset
|
8 * libass is free software; you can redistribute it and/or modify |
26723 | 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 * | |
26738
588ce97b44f2
Speak of libass instead of MPlayer in the libass license headers.
diego
parents:
26723
diff
changeset
|
13 * libass is distributed in the hope that it will be useful, |
26723 | 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 | |
26738
588ce97b44f2
Speak of libass instead of MPlayer in the libass license headers.
diego
parents:
26723
diff
changeset
|
19 * with libass; if not, write to the Free Software Foundation, Inc., |
26723 | 20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
21 */ | |
20008
fa122b7c71c6
Add copyright notice and vim/emacs comments to libass and vf_ass.c.
eugeni
parents:
19652
diff
changeset
|
22 |
25897
aaebaf255b23
Consistently give all libass multiple inclusion guards a LIBASS_ prefix.
diego
parents:
25613
diff
changeset
|
23 #ifndef LIBASS_ASS_H |
aaebaf255b23
Consistently give all libass multiple inclusion guards a LIBASS_ prefix.
diego
parents:
25613
diff
changeset
|
24 #define LIBASS_ASS_H |
18937 | 25 |
26138
74055622161d
Add missing header #includes to fix 'make checkheaders'.
diego
parents:
25897
diff
changeset
|
26 #include <stdio.h> |
18937 | 27 #include "ass_types.h" |
28 | |
20477 | 29 /// Libass renderer object. Contents are private. |
30 typedef struct ass_renderer_s ass_renderer_t; | |
18937 | 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 uint32_t color; // RGBA | |
38 int dst_x, dst_y; // bitmap placement inside the video frame | |
39 | |
40 struct ass_image_s* next; // linked list | |
41 } ass_image_t; | |
42 | |
23134
1de2a46a0987
Add -ass-hinting option for setting font hinting method.
eugeni
parents:
21506
diff
changeset
|
43 /// Hinting type |
1de2a46a0987
Add -ass-hinting option for setting font hinting method.
eugeni
parents:
21506
diff
changeset
|
44 typedef enum {ASS_HINTING_NONE = 0, |
1de2a46a0987
Add -ass-hinting option for setting font hinting method.
eugeni
parents:
21506
diff
changeset
|
45 ASS_HINTING_LIGHT, |
1de2a46a0987
Add -ass-hinting option for setting font hinting method.
eugeni
parents:
21506
diff
changeset
|
46 ASS_HINTING_NORMAL, |
1de2a46a0987
Add -ass-hinting option for setting font hinting method.
eugeni
parents:
21506
diff
changeset
|
47 ASS_HINTING_NATIVE |
1de2a46a0987
Add -ass-hinting option for setting font hinting method.
eugeni
parents:
21506
diff
changeset
|
48 } ass_hinting_t; |
1de2a46a0987
Add -ass-hinting option for setting font hinting method.
eugeni
parents:
21506
diff
changeset
|
49 |
18937 | 50 /** |
51 * \brief initialize the library | |
52 * \return library handle or NULL if failed | |
53 */ | |
20477 | 54 ass_library_t* ass_library_init(void); |
18937 | 55 |
56 /** | |
57 * \brief finalize the library | |
58 * \param priv library handle | |
59 */ | |
20477 | 60 void ass_library_done(ass_library_t*); |
61 | |
62 /** | |
63 * \brief set private font directory | |
64 * It is used for saving embedded fonts and also in font lookup. | |
65 */ | |
66 void ass_set_fonts_dir(ass_library_t* priv, const char* fonts_dir); | |
67 | |
68 void ass_set_extract_fonts(ass_library_t* priv, int extract); | |
69 | |
70 void ass_set_style_overrides(ass_library_t* priv, char** list); | |
18937 | 71 |
20477 | 72 /** |
73 * \brief initialize the renderer | |
74 * \param priv library handle | |
75 * \return renderer handle or NULL if failed | |
76 */ | |
77 ass_renderer_t* ass_renderer_init(ass_library_t*); | |
78 | |
79 /** | |
80 * \brief finalize the renderer | |
81 * \param priv renderer handle | |
82 */ | |
83 void ass_renderer_done(ass_renderer_t* priv); | |
84 | |
85 void ass_set_frame_size(ass_renderer_t* priv, int w, int h); | |
86 void ass_set_margins(ass_renderer_t* priv, int t, int b, int l, int r); | |
87 void ass_set_use_margins(ass_renderer_t* priv, int use); | |
88 void ass_set_aspect_ratio(ass_renderer_t* priv, double ar); | |
89 void ass_set_font_scale(ass_renderer_t* priv, double font_scale); | |
23134
1de2a46a0987
Add -ass-hinting option for setting font hinting method.
eugeni
parents:
21506
diff
changeset
|
90 void ass_set_hinting(ass_renderer_t* priv, ass_hinting_t ht); |
24554 | 91 void ass_set_line_spacing(ass_renderer_t* priv, double line_spacing); |
20477 | 92 |
93 /** | |
94 * \brief set font lookup defaults | |
95 */ | |
96 int ass_set_fonts(ass_renderer_t* priv, const char* default_font, const char* default_family); | |
18937 | 97 |
98 /** | |
26582
62ac4f8062ee
Remove libass dependency on global font_fontconfig variable.
eugeni
parents:
26138
diff
changeset
|
99 * \brief set font lookup defaults, don't use fontconfig even if it is available |
62ac4f8062ee
Remove libass dependency on global font_fontconfig variable.
eugeni
parents:
26138
diff
changeset
|
100 */ |
62ac4f8062ee
Remove libass dependency on global font_fontconfig variable.
eugeni
parents:
26138
diff
changeset
|
101 int ass_set_fonts_nofc(ass_renderer_t* priv, const char* default_font, const char* default_family); |
62ac4f8062ee
Remove libass dependency on global font_fontconfig variable.
eugeni
parents:
26138
diff
changeset
|
102 |
62ac4f8062ee
Remove libass dependency on global font_fontconfig variable.
eugeni
parents:
26138
diff
changeset
|
103 /** |
18937 | 104 * \brief render a frame, producing a list of ass_image_t |
105 * \param priv library | |
106 * \param track subtitle track | |
107 * \param now video timestamp in milliseconds | |
108 */ | |
21506
8174acbf0633
Speed up ASS subtitles display by detecting changes between two consecutive
eugeni
parents:
21458
diff
changeset
|
109 ass_image_t* ass_render_frame(ass_renderer_t *priv, ass_track_t* track, long long now, int* detect_change); |
18937 | 110 |
111 | |
20477 | 112 // The following functions operate on track objects and do not need an ass_renderer // |
18937 | 113 |
114 /** | |
115 * \brief allocate a new empty track object | |
116 * \return pointer to empty track | |
117 */ | |
20477 | 118 ass_track_t* ass_new_track(ass_library_t*); |
18937 | 119 |
120 /** | |
121 * \brief deallocate track and all its child objects (styles and events) | |
122 * \param track track to deallocate | |
123 */ | |
124 void ass_free_track(ass_track_t* track); | |
125 | |
126 /** | |
127 * \brief allocate new style | |
128 * \param track track | |
129 * \return newly allocated style id | |
130 */ | |
131 int ass_alloc_style(ass_track_t* track); | |
132 | |
133 /** | |
134 * \brief allocate new event | |
135 * \param track track | |
136 * \return newly allocated event id | |
137 */ | |
138 int ass_alloc_event(ass_track_t* track); | |
139 | |
140 /** | |
19474
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
141 * \brief delete a style |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
142 * \param track track |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
143 * \param sid style id |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
144 * Deallocates style data. Does not modify track->n_styles. |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
145 */ |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
146 void ass_free_style(ass_track_t* track, int sid); |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
147 |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
148 /** |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
149 * \brief delete an event |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
150 * \param track track |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
151 * \param eid event id |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
152 * Deallocates event data. Does not modify track->n_events. |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
153 */ |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
154 void ass_free_event(ass_track_t* track, int eid); |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
155 |
07209f48e527
Add public functions for removal of styles and events.
eugeni
parents:
18937
diff
changeset
|
156 /** |
25514 | 157 * \brief Parse Codec Private section of subtitle stream |
18937 | 158 * \param track target track |
159 * \param data string to parse | |
160 * \param size length of data | |
161 */ | |
19492 | 162 void ass_process_codec_private(ass_track_t* track, char *data, int size); |
18937 | 163 |
164 /** | |
25515 | 165 * \brief Parse a chunk of subtitle stream data. In Matroska, this contains exactly 1 event (or a commentary). |
18937 | 166 * \param track track |
167 * \param data string to parse | |
168 * \param size length of data | |
169 * \param timecode starting time of the event (milliseconds) | |
170 * \param duration duration of the event (milliseconds) | |
171 */ | |
19492 | 172 void ass_process_chunk(ass_track_t* track, char *data, int size, long long timecode, long long duration); |
18937 | 173 |
23424
7286d245bf33
Move code for reading a file and recoding it to utf-8 to a separate function.
eugeni
parents:
23134
diff
changeset
|
174 char* read_file_recode(char* fname, char* codepage, int* size); |
7286d245bf33
Move code for reading a file and recoding it to utf-8 to a separate function.
eugeni
parents:
23134
diff
changeset
|
175 |
18937 | 176 /** |
177 * \brief Read subtitles from file. | |
178 * \param fname file name | |
179 * \return newly allocated track | |
180 */ | |
20477 | 181 ass_track_t* ass_read_file(ass_library_t* library, char* fname, char* codepage); |
18937 | 182 |
183 /** | |
20603 | 184 * \brief Read subtitles from memory. |
185 * \param library libass library object | |
186 * \param buf pointer to subtitles text | |
187 * \param bufsize size of buffer | |
188 * \param codepage recode buffer contents from given codepage | |
189 * \return newly allocated track | |
190 */ | |
191 ass_track_t* ass_read_memory(ass_library_t* library, char* buf, size_t bufsize, char* codepage); | |
192 /** | |
19652
2c016957360a
Add -ass-styles option. It allows to load styles from a file and use them
eugeni
parents:
19638
diff
changeset
|
193 * \brief read styles from file into already initialized track |
2c016957360a
Add -ass-styles option. It allows to load styles from a file and use them
eugeni
parents:
19638
diff
changeset
|
194 * \return 0 on success |
2c016957360a
Add -ass-styles option. It allows to load styles from a file and use them
eugeni
parents:
19638
diff
changeset
|
195 */ |
20477 | 196 int ass_read_styles(ass_track_t* track, char* fname, char* codepage); |
19652
2c016957360a
Add -ass-styles option. It allows to load styles from a file and use them
eugeni
parents:
19638
diff
changeset
|
197 |
2c016957360a
Add -ass-styles option. It allows to load styles from a file and use them
eugeni
parents:
19638
diff
changeset
|
198 /** |
21455 | 199 * \brief Add a memory font. |
18937 | 200 * \param name attachment name |
201 * \param data binary font data | |
202 * \param data_size data size | |
203 */ | |
21458
7af6c25a0cfc
Keep embedded fonts in ass_library_t and perform actual disk write
eugeni
parents:
21455
diff
changeset
|
204 void ass_add_font(ass_library_t* library, char* name, char* data, int data_size); |
18937 | 205 |
206 /** | |
25613
f00333e3facf
Copy font data to ass_library instead of referencing demuxer-owned memory.
eugeni
parents:
25535
diff
changeset
|
207 * \brief Remove all fonts stored in ass_library object |
f00333e3facf
Copy font data to ass_library instead of referencing demuxer-owned memory.
eugeni
parents:
25535
diff
changeset
|
208 */ |
f00333e3facf
Copy font data to ass_library instead of referencing demuxer-owned memory.
eugeni
parents:
25535
diff
changeset
|
209 void ass_clear_fonts(ass_library_t* library); |
f00333e3facf
Copy font data to ass_library instead of referencing demuxer-owned memory.
eugeni
parents:
25535
diff
changeset
|
210 |
f00333e3facf
Copy font data to ass_library instead of referencing demuxer-owned memory.
eugeni
parents:
25535
diff
changeset
|
211 /** |
18937 | 212 * \brief Calculates timeshift from now to the start of some other subtitle event, depending on movement parameter |
213 * \param track subtitle track | |
214 * \param now current time, ms | |
215 * \param movement how many events to skip from the one currently displayed | |
216 * +2 means "the one after the next", -1 means "previous" | |
217 * \return timeshift, ms | |
218 */ | |
219 long long ass_step_sub(ass_track_t* track, long long now, int movement); | |
220 | |
25897
aaebaf255b23
Consistently give all libass multiple inclusion guards a LIBASS_ prefix.
diego
parents:
25613
diff
changeset
|
221 #endif /* LIBASS_ASS_H */ |