1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * SSA/ASS spliting functions 3cabdff1aSopenharmony_ci * Copyright (c) 2010 Aurelien Jacobs <aurel@gnuage.org> 4cabdff1aSopenharmony_ci * 5cabdff1aSopenharmony_ci * This file is part of FFmpeg. 6cabdff1aSopenharmony_ci * 7cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 8cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 9cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 10cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 11cabdff1aSopenharmony_ci * 12cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 13cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 14cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15cabdff1aSopenharmony_ci * Lesser General Public License for more details. 16cabdff1aSopenharmony_ci * 17cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 18cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 19cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20cabdff1aSopenharmony_ci */ 21cabdff1aSopenharmony_ci 22cabdff1aSopenharmony_ci#ifndef AVCODEC_ASS_SPLIT_H 23cabdff1aSopenharmony_ci#define AVCODEC_ASS_SPLIT_H 24cabdff1aSopenharmony_ci 25cabdff1aSopenharmony_ci/** 26cabdff1aSopenharmony_ci * fields extracted from the [Script Info] section 27cabdff1aSopenharmony_ci */ 28cabdff1aSopenharmony_citypedef struct { 29cabdff1aSopenharmony_ci char *script_type; /**< SSA script format version (eg. v4.00) */ 30cabdff1aSopenharmony_ci char *collisions; /**< how subtitles are moved to prevent collisions */ 31cabdff1aSopenharmony_ci int play_res_x; /**< video width that ASS coords are referring to */ 32cabdff1aSopenharmony_ci int play_res_y; /**< video height that ASS coords are referring to */ 33cabdff1aSopenharmony_ci float timer; /**< time multiplier to apply to SSA clock (in %) */ 34cabdff1aSopenharmony_ci} ASSScriptInfo; 35cabdff1aSopenharmony_ci 36cabdff1aSopenharmony_ci/** 37cabdff1aSopenharmony_ci * fields extracted from the [V4(+) Styles] section 38cabdff1aSopenharmony_ci */ 39cabdff1aSopenharmony_citypedef struct { 40cabdff1aSopenharmony_ci char *name; /**< name of the tyle (case sensitive) */ 41cabdff1aSopenharmony_ci char *font_name; /**< font face (case sensitive) */ 42cabdff1aSopenharmony_ci int font_size; /**< font height */ 43cabdff1aSopenharmony_ci int primary_color; /**< color that a subtitle will normally appear in */ 44cabdff1aSopenharmony_ci int secondary_color; 45cabdff1aSopenharmony_ci int outline_color; /**< color for outline in ASS, called tertiary in SSA */ 46cabdff1aSopenharmony_ci int back_color; /**< color of the subtitle outline or shadow */ 47cabdff1aSopenharmony_ci int bold; /**< whether text is bold (1) or not (0) */ 48cabdff1aSopenharmony_ci int italic; /**< whether text is italic (1) or not (0) */ 49cabdff1aSopenharmony_ci int underline; /**< whether text is underlined (1) or not (0) */ 50cabdff1aSopenharmony_ci int strikeout; 51cabdff1aSopenharmony_ci float scalex; 52cabdff1aSopenharmony_ci float scaley; 53cabdff1aSopenharmony_ci float spacing; 54cabdff1aSopenharmony_ci float angle; 55cabdff1aSopenharmony_ci int border_style; 56cabdff1aSopenharmony_ci float outline; 57cabdff1aSopenharmony_ci float shadow; 58cabdff1aSopenharmony_ci int alignment; /**< position of the text (left, center, top...), 59cabdff1aSopenharmony_ci defined after the layout of the numpad 60cabdff1aSopenharmony_ci (1-3 sub, 4-6 mid, 7-9 top) */ 61cabdff1aSopenharmony_ci int margin_l; 62cabdff1aSopenharmony_ci int margin_r; 63cabdff1aSopenharmony_ci int margin_v; 64cabdff1aSopenharmony_ci int alpha_level; 65cabdff1aSopenharmony_ci int encoding; 66cabdff1aSopenharmony_ci} ASSStyle; 67cabdff1aSopenharmony_ci 68cabdff1aSopenharmony_ci/** 69cabdff1aSopenharmony_ci * fields extracted from the [Events] section 70cabdff1aSopenharmony_ci */ 71cabdff1aSopenharmony_citypedef struct { 72cabdff1aSopenharmony_ci int readorder; 73cabdff1aSopenharmony_ci int layer; /**< higher numbered layers are drawn over lower numbered */ 74cabdff1aSopenharmony_ci int start; /**< start time of the dialog in centiseconds */ 75cabdff1aSopenharmony_ci int end; /**< end time of the dialog in centiseconds */ 76cabdff1aSopenharmony_ci char *style; /**< name of the ASSStyle to use with this dialog */ 77cabdff1aSopenharmony_ci char *name; 78cabdff1aSopenharmony_ci int margin_l; 79cabdff1aSopenharmony_ci int margin_r; 80cabdff1aSopenharmony_ci int margin_v; 81cabdff1aSopenharmony_ci char *effect; 82cabdff1aSopenharmony_ci char *text; /**< actual text which will be displayed as a subtitle, 83cabdff1aSopenharmony_ci can include style override control codes (see 84cabdff1aSopenharmony_ci ff_ass_split_override_codes()) */ 85cabdff1aSopenharmony_ci} ASSDialog; 86cabdff1aSopenharmony_ci 87cabdff1aSopenharmony_ci/** 88cabdff1aSopenharmony_ci * structure containing the whole split ASS data 89cabdff1aSopenharmony_ci */ 90cabdff1aSopenharmony_citypedef struct { 91cabdff1aSopenharmony_ci ASSScriptInfo script_info; /**< general information about the SSA script*/ 92cabdff1aSopenharmony_ci ASSStyle *styles; /**< array of split out styles */ 93cabdff1aSopenharmony_ci int styles_count; /**< number of ASSStyle in the styles array */ 94cabdff1aSopenharmony_ci ASSDialog *dialogs; /**< array of split out dialogs */ 95cabdff1aSopenharmony_ci int dialogs_count; /**< number of ASSDialog in the dialogs array*/ 96cabdff1aSopenharmony_ci} ASS; 97cabdff1aSopenharmony_ci 98cabdff1aSopenharmony_ci/** 99cabdff1aSopenharmony_ci * This struct can be casted to ASS to access to the split data. 100cabdff1aSopenharmony_ci */ 101cabdff1aSopenharmony_citypedef struct ASSSplitContext ASSSplitContext; 102cabdff1aSopenharmony_ci 103cabdff1aSopenharmony_ci/** 104cabdff1aSopenharmony_ci * Split a full ASS file or a ASS header from a string buffer and store 105cabdff1aSopenharmony_ci * the split structure in a newly allocated context. 106cabdff1aSopenharmony_ci * 107cabdff1aSopenharmony_ci * @param buf String containing the ASS formatted data. 108cabdff1aSopenharmony_ci * @return Newly allocated struct containing split data. 109cabdff1aSopenharmony_ci */ 110cabdff1aSopenharmony_ciASSSplitContext *ff_ass_split(const char *buf); 111cabdff1aSopenharmony_ci 112cabdff1aSopenharmony_ci/** 113cabdff1aSopenharmony_ci * Free a dialogue obtained from ff_ass_split_dialog(). 114cabdff1aSopenharmony_ci */ 115cabdff1aSopenharmony_civoid ff_ass_free_dialog(ASSDialog **dialogp); 116cabdff1aSopenharmony_ci 117cabdff1aSopenharmony_ci/** 118cabdff1aSopenharmony_ci * Split one ASS Dialogue line from a string buffer. 119cabdff1aSopenharmony_ci * 120cabdff1aSopenharmony_ci * @param ctx Context previously initialized by ff_ass_split(). 121cabdff1aSopenharmony_ci * @param buf String containing the ASS "Dialogue" line. 122cabdff1aSopenharmony_ci * @return Pointer to the split ASSDialog. Must be freed with ff_ass_free_dialog() 123cabdff1aSopenharmony_ci */ 124cabdff1aSopenharmony_ciASSDialog *ff_ass_split_dialog(ASSSplitContext *ctx, const char *buf); 125cabdff1aSopenharmony_ci 126cabdff1aSopenharmony_ci/** 127cabdff1aSopenharmony_ci * Free all the memory allocated for an ASSSplitContext. 128cabdff1aSopenharmony_ci * 129cabdff1aSopenharmony_ci * @param ctx Context previously initialized by ff_ass_split(). 130cabdff1aSopenharmony_ci */ 131cabdff1aSopenharmony_civoid ff_ass_split_free(ASSSplitContext *ctx); 132cabdff1aSopenharmony_ci 133cabdff1aSopenharmony_ci 134cabdff1aSopenharmony_ci/** 135cabdff1aSopenharmony_ci * Set of callback functions corresponding to each override codes that can 136cabdff1aSopenharmony_ci * be encountered in a "Dialogue" Text field. 137cabdff1aSopenharmony_ci */ 138cabdff1aSopenharmony_citypedef struct { 139cabdff1aSopenharmony_ci /** 140cabdff1aSopenharmony_ci * @defgroup ass_styles ASS styles 141cabdff1aSopenharmony_ci * @{ 142cabdff1aSopenharmony_ci */ 143cabdff1aSopenharmony_ci void (*text)(void *priv, const char *text, int len); 144cabdff1aSopenharmony_ci void (*new_line)(void *priv, int forced); 145cabdff1aSopenharmony_ci void (*style)(void *priv, char style, int close); 146cabdff1aSopenharmony_ci void (*color)(void *priv, unsigned int /* color */, unsigned int color_id); 147cabdff1aSopenharmony_ci void (*alpha)(void *priv, int alpha, int alpha_id); 148cabdff1aSopenharmony_ci void (*font_name)(void *priv, const char *name); 149cabdff1aSopenharmony_ci void (*font_size)(void *priv, int size); 150cabdff1aSopenharmony_ci void (*alignment)(void *priv, int alignment); 151cabdff1aSopenharmony_ci void (*cancel_overrides)(void *priv, const char *style); 152cabdff1aSopenharmony_ci /** @} */ 153cabdff1aSopenharmony_ci 154cabdff1aSopenharmony_ci /** 155cabdff1aSopenharmony_ci * @defgroup ass_functions ASS functions 156cabdff1aSopenharmony_ci * @{ 157cabdff1aSopenharmony_ci */ 158cabdff1aSopenharmony_ci void (*move)(void *priv, int x1, int y1, int x2, int y2, int t1, int t2); 159cabdff1aSopenharmony_ci void (*origin)(void *priv, int x, int y); 160cabdff1aSopenharmony_ci /** @} */ 161cabdff1aSopenharmony_ci 162cabdff1aSopenharmony_ci /** 163cabdff1aSopenharmony_ci * @defgroup ass_end end of Dialogue Event 164cabdff1aSopenharmony_ci * @{ 165cabdff1aSopenharmony_ci */ 166cabdff1aSopenharmony_ci void (*end)(void *priv); 167cabdff1aSopenharmony_ci /** @} */ 168cabdff1aSopenharmony_ci} ASSCodesCallbacks; 169cabdff1aSopenharmony_ci 170cabdff1aSopenharmony_ci/** 171cabdff1aSopenharmony_ci * Split override codes out of a ASS "Dialogue" Text field. 172cabdff1aSopenharmony_ci * 173cabdff1aSopenharmony_ci * @param callbacks Set of callback functions called for each override code 174cabdff1aSopenharmony_ci * encountered. 175cabdff1aSopenharmony_ci * @param priv Opaque pointer passed to the callback functions. 176cabdff1aSopenharmony_ci * @param buf The ASS "Dialogue" Text field to split. 177cabdff1aSopenharmony_ci * @return >= 0 on success otherwise an error code <0 178cabdff1aSopenharmony_ci */ 179cabdff1aSopenharmony_ciint ff_ass_split_override_codes(const ASSCodesCallbacks *callbacks, void *priv, 180cabdff1aSopenharmony_ci const char *buf); 181cabdff1aSopenharmony_ci 182cabdff1aSopenharmony_ci/** 183cabdff1aSopenharmony_ci * Find an ASSStyle structure by its name. 184cabdff1aSopenharmony_ci * 185cabdff1aSopenharmony_ci * @param ctx Context previously initialized by ff_ass_split(). 186cabdff1aSopenharmony_ci * @param style name of the style to search for. 187cabdff1aSopenharmony_ci * @return the ASSStyle corresponding to style, or NULL if style can't be found 188cabdff1aSopenharmony_ci */ 189cabdff1aSopenharmony_ciASSStyle *ff_ass_style_get(ASSSplitContext *ctx, const char *style); 190cabdff1aSopenharmony_ci 191cabdff1aSopenharmony_ci#endif /* AVCODEC_ASS_SPLIT_H */ 192