From 892423a588aea8fb14e84bdb9527df97e945ec57 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Thu, 6 Aug 2009 13:04:20 +0200 Subject: Rename typedefs (breaks API) Rename all typedefs from the convention foo_bar_t, which can possibly conflict with POSIX types, to FooBar (and ASS_FooBar for public API typedefs). Fix formatting and stray comments while at it. --- libass/ass.c | 128 ++++++------- libass/ass.h | 82 ++++---- libass/ass_bitmap.c | 36 ++-- libass/ass_bitmap.h | 14 +- libass/ass_cache.c | 124 ++++++------- libass/ass_cache.h | 108 +++++------ libass/ass_cache_template.h | 12 +- libass/ass_drawing.c | 54 +++--- libass/ass_drawing.h | 24 +-- libass/ass_font.c | 44 ++--- libass/ass_font.h | 28 +-- libass/ass_fontconfig.c | 36 ++-- libass/ass_fontconfig.h | 16 +- libass/ass_library.c | 18 +- libass/ass_library.h | 4 +- libass/ass_render.c | 441 ++++++++++++++++++++++---------------------- libass/ass_types.h | 27 ++- libass/ass_utils.c | 6 +- libass/ass_utils.h | 6 +- test/test.c | 14 +- 20 files changed, 614 insertions(+), 608 deletions(-) diff --git a/libass/ass.c b/libass/ass.c index 12d2451..6c28a97 100644 --- a/libass/ass.c +++ b/libass/ass.c @@ -38,11 +38,16 @@ #include "ass_utils.h" #include "ass_library.h" -typedef enum { PST_UNKNOWN = - 0, PST_INFO, PST_STYLES, PST_EVENTS, PST_FONTS } parser_state_t; +typedef enum { + PST_UNKNOWN = 0, + PST_INFO, + PST_STYLES, + PST_EVENTS, + PST_FONTS +} ParserState; struct parser_priv { - parser_state_t state; + ParserState state; char *fontname; char *fontdata; int fontdata_size; @@ -52,7 +57,7 @@ struct parser_priv { #define ASS_STYLES_ALLOC 20 #define ASS_EVENTS_ALLOC 200 -void ass_free_track(ass_track_t *track) +void ass_free_track(ASS_Track *track) { int i; @@ -84,7 +89,7 @@ void ass_free_track(ass_track_t *track) /// \brief Allocate a new style struct /// \param track track /// \return style id -int ass_alloc_style(ass_track_t *track) +int ass_alloc_style(ASS_Track *track) { int sid; @@ -93,20 +98,20 @@ int ass_alloc_style(ass_track_t *track) if (track->n_styles == track->max_styles) { track->max_styles += ASS_STYLES_ALLOC; track->styles = - (ass_style_t *) realloc(track->styles, - sizeof(ass_style_t) * - track->max_styles); + (ASS_Style *) realloc(track->styles, + sizeof(ASS_Style) * + track->max_styles); } sid = track->n_styles++; - memset(track->styles + sid, 0, sizeof(ass_style_t)); + memset(track->styles + sid, 0, sizeof(ASS_Style)); return sid; } /// \brief Allocate a new event struct /// \param track track /// \return event id -int ass_alloc_event(ass_track_t *track) +int ass_alloc_event(ASS_Track *track) { int eid; @@ -115,19 +120,19 @@ int ass_alloc_event(ass_track_t *track) if (track->n_events == track->max_events) { track->max_events += ASS_EVENTS_ALLOC; track->events = - (ass_event_t *) realloc(track->events, - sizeof(ass_event_t) * - track->max_events); + (ASS_Event *) realloc(track->events, + sizeof(ASS_Event) * + track->max_events); } eid = track->n_events++; - memset(track->events + eid, 0, sizeof(ass_event_t)); + memset(track->events + eid, 0, sizeof(ASS_Event)); return eid; } -void ass_free_event(ass_track_t *track, int eid) +void ass_free_event(ASS_Track *track, int eid) { - ass_event_t *event = track->events + eid; + ASS_Event *event = track->events + eid; if (event->Name) free(event->Name); if (event->Effect) @@ -138,9 +143,9 @@ void ass_free_event(ass_track_t *track, int eid) free(event->render_priv); } -void ass_free_style(ass_track_t *track, int sid) +void ass_free_style(ASS_Track *track, int sid) { - ass_style_t *style = track->styles + sid; + ASS_Style *style = track->styles + sid; if (style->Name) free(style->Name); if (style->FontName) @@ -173,7 +178,7 @@ static void rskip_spaces(char **str, char *limit) * Returnes 0 if no styles found => expects at least 1 style. * Parsing code always adds "Default" style in the end. */ -static int lookup_style(ass_track_t *track, char *name) +static int lookup_style(ASS_Track *track, char *name) { int i; if (*name == '*') @@ -190,14 +195,14 @@ static int lookup_style(ass_track_t *track, char *name) return i; // use the first style } -static uint32_t string2color(ass_library_t *library, char *p) +static uint32_t string2color(ASS_Library *library, char *p) { uint32_t tmp; (void) strtocolor(library, &p, &tmp); return tmp; } -static long long string2timecode(ass_library_t *library, char *p) +static long long string2timecode(ASS_Library *library, char *p) { unsigned h, m, s, ms; long long tm; @@ -294,14 +299,14 @@ static char *next_token(char **str) * \param str string to parse, zero-terminated * \param n_ignored number of format options to skip at the beginning */ -static int process_event_tail(ass_track_t *track, ass_event_t *event, +static int process_event_tail(ASS_Track *track, ASS_Event *event, char *str, int n_ignored) { char *token; char *tname; char *p = str; int i; - ass_event_t *target = event; + ASS_Event *target = event; char *format = strdup(track->event_format); char *q = format; // format scanning pointer @@ -357,10 +362,10 @@ static int process_event_tail(ass_track_t *track, ass_event_t *event, * \param track track to apply overrides to * The format for overrides is [StyleName.]Field=Value */ -void ass_process_force_style(ass_track_t *track) +void ass_process_force_style(ASS_Track *track) { char **fs, *eq, *dt, *style, *tname, *token; - ass_style_t *target; + ASS_Style *target; int sid; char **list = track->library->style_overrides; @@ -436,7 +441,7 @@ void ass_process_force_style(ass_track_t *track) * \param str string to parse, zero-terminated * Allocates a new style struct. */ -static int process_style(ass_track_t *track, char *str) +static int process_style(ASS_Track *track, char *str) { char *token; @@ -445,8 +450,8 @@ static int process_style(ass_track_t *track, char *str) char *format; char *q; // format scanning pointer int sid; - ass_style_t *style; - ass_style_t *target; + ASS_Style *style; + ASS_Style *target; if (!track->style_format) { // no style format header @@ -474,7 +479,8 @@ static int process_style(ass_track_t *track, char *str) style = track->styles + sid; target = style; -// fill style with some default values + + // fill style with some default values style->ScaleX = 100.; style->ScaleY = 100.; @@ -482,8 +488,6 @@ static int process_style(ass_track_t *track, char *str) NEXT(q, tname); NEXT(p, token); -// ALIAS(TertiaryColour,OutlineColour) // ignore TertiaryColour; it appears only in SSA, and is overridden by BackColour - if (0) { // cool ;) STRVAL(Name) if ((strcmp(target->Name, "Default") == 0) @@ -539,7 +543,7 @@ static int process_style(ass_track_t *track, char *str) } -static int process_styles_line(ass_track_t *track, char *str) +static int process_styles_line(ASS_Track *track, char *str) { if (!strncmp(str, "Format:", 7)) { char *p = str + 7; @@ -555,7 +559,7 @@ static int process_styles_line(ass_track_t *track, char *str) return 0; } -static int process_info_line(ass_track_t *track, char *str) +static int process_info_line(ASS_Track *track, char *str) { if (!strncmp(str, "PlayResX:", 9)) { track->PlayResX = atoi(str + 9); @@ -571,7 +575,7 @@ static int process_info_line(ass_track_t *track, char *str) return 0; } -static void event_format_fallback(ass_track_t *track) +static void event_format_fallback(ASS_Track *track) { track->parser_priv->state = PST_EVENTS; if (track->track_type == TRACK_TYPE_SSA) @@ -584,7 +588,7 @@ static void event_format_fallback(ass_track_t *track) "No event format found, using fallback"); } -static int process_events_line(ass_track_t *track, char *str) +static int process_events_line(ASS_Track *track, char *str) { if (!strncmp(str, "Format:", 7)) { char *p = str + 7; @@ -596,7 +600,7 @@ static int process_events_line(ass_track_t *track, char *str) // They have slightly different format and are parsed in ass_process_chunk, // called directly from demuxer int eid; - ass_event_t *event; + ASS_Event *event; str += 9; skip_spaces(&str); @@ -636,7 +640,7 @@ static unsigned char *decode_chars(unsigned char c1, unsigned char c2, return dst; } -static int decode_font(ass_track_t *track) +static int decode_font(ASS_Track *track) { unsigned char *p; unsigned char *q; @@ -684,7 +688,7 @@ static int decode_font(ass_track_t *track) return 0; } -static int process_fonts_line(ass_track_t *track, char *str) +static int process_fonts_line(ASS_Track *track, char *str) { int len; @@ -730,7 +734,7 @@ static int process_fonts_line(ass_track_t *track, char *str) * \param track track * \param str string to parse, zero-terminated */ -static int process_line(ass_track_t *track, char *str) +static int process_line(ASS_Track *track, char *str) { if (!strncasecmp(str, "[Script Info]", 13)) { track->parser_priv->state = PST_INFO; @@ -771,7 +775,7 @@ static int process_line(ass_track_t *track, char *str) return 0; } -static int process_text(ass_track_t *track, char *str) +static int process_text(ASS_Track *track, char *str) { char *p = str; while (1) { @@ -804,7 +808,7 @@ static int process_text(ass_track_t *track, char *str) * \param data string to parse * \param size length of data */ -void ass_process_data(ass_track_t *track, char *data, int size) +void ass_process_data(ASS_Track *track, char *data, int size) { char *str = malloc(size + 1); @@ -823,7 +827,7 @@ void ass_process_data(ass_track_t *track, char *data, int size) * \param size length of data CodecPrivate section contains [Stream Info] and [V4+ Styles] ([V4 Styles] for SSA) sections */ -void ass_process_codec_private(ass_track_t *track, char *data, int size) +void ass_process_codec_private(ASS_Track *track, char *data, int size) { ass_process_data(track, data, size); @@ -835,7 +839,7 @@ void ass_process_codec_private(ass_track_t *track, char *data, int size) ass_process_force_style(track); } -static int check_duplicate_event(ass_track_t *track, int ReadOrder) +static int check_duplicate_event(ASS_Track *track, int ReadOrder) { int i; for (i = 0; i < track->n_events - 1; ++i) // ignoring last event, it is the one we are comparing with @@ -852,14 +856,14 @@ static int check_duplicate_event(ass_track_t *track, int ReadOrder) * \param timecode starting time of the event (milliseconds) * \param duration duration of the event (milliseconds) */ -void ass_process_chunk(ass_track_t *track, char *data, int size, +void ass_process_chunk(ASS_Track *track, char *data, int size, long long timecode, long long duration) { char *str; int eid; char *p; char *token; - ass_event_t *event; + ASS_Event *event; if (!track->event_format) { ass_msg(track->library, MSGL_WARN, "Event format header missing"); @@ -908,7 +912,7 @@ void ass_process_chunk(ass_track_t *track, char *data, int size, * \param size buffer size * \return a pointer to recoded buffer, caller is responsible for freeing it **/ -static char *sub_recode(ass_library_t *library, char *data, size_t size, +static char *sub_recode(ASS_Library *library, char *data, size_t size, char *codepage) { iconv_t icdsc; @@ -987,7 +991,7 @@ static char *sub_recode(ass_library_t *library, char *data, size_t size, * \param bufsize out: file size * \return pointer to file contents. Caller is responsible for its deallocation. */ -static char *read_file(ass_library_t *library, char *fname, size_t *bufsize) +static char *read_file(ASS_Library *library, char *fname, size_t *bufsize) { int res; long sz; @@ -1046,9 +1050,9 @@ static char *read_file(ass_library_t *library, char *fname, size_t *bufsize) /* * \param buf pointer to subtitle text in utf-8 */ -static ass_track_t *parse_memory(ass_library_t *library, char *buf) +static ASS_Track *parse_memory(ASS_Library *library, char *buf) { - ass_track_t *track; + ASS_Track *track; int i; track = ass_new_track(library); @@ -1082,10 +1086,10 @@ static ass_track_t *parse_memory(ass_library_t *library, char *buf) * \param codepage recode buffer contents from given codepage * \return newly allocated track */ -ass_track_t *ass_read_memory(ass_library_t *library, char *buf, - size_t bufsize, char *codepage) +ASS_Track *ass_read_memory(ASS_Library *library, char *buf, + size_t bufsize, char *codepage) { - ass_track_t *track; + ASS_Track *track; int need_free = 0; if (!buf) @@ -1111,7 +1115,7 @@ ass_track_t *ass_read_memory(ass_library_t *library, char *buf, return track; } -static char *read_file_recode(ass_library_t *library, char *fname, +static char *read_file_recode(ASS_Library *library, char *fname, char *codepage, size_t *size) { char *buf; @@ -1140,11 +1144,11 @@ static char *read_file_recode(ass_library_t *library, char *fname, * \param codepage recode buffer contents from given codepage * \return newly allocated track */ -ass_track_t *ass_read_file(ass_library_t *library, char *fname, - char *codepage) +ASS_Track *ass_read_file(ASS_Library *library, char *fname, + char *codepage) { char *buf; - ass_track_t *track; + ASS_Track *track; size_t bufsize; buf = read_file_recode(library, fname, codepage, &bufsize); @@ -1167,10 +1171,10 @@ ass_track_t *ass_read_file(ass_library_t *library, char *fname, /** * \brief read styles from file into already initialized track */ -int ass_read_styles(ass_track_t *track, char *fname, char *codepage) +int ass_read_styles(ASS_Track *track, char *fname, char *codepage) { char *buf; - parser_state_t old_state; + ParserState old_state; size_t sz; buf = read_file(track->library, fname, &sz); @@ -1195,7 +1199,7 @@ int ass_read_styles(ass_track_t *track, char *fname, char *codepage) return 0; } -long long ass_step_sub(ass_track_t *track, long long now, int movement) +long long ass_step_sub(ASS_Track *track, long long now, int movement) { int i; @@ -1227,11 +1231,11 @@ long long ass_step_sub(ass_track_t *track, long long now, int movement) return ((long long) track->events[i].Start) - now; } -ass_track_t *ass_new_track(ass_library_t *library) +ASS_Track *ass_new_track(ASS_Library *library) { - ass_track_t *track = calloc(1, sizeof(ass_track_t)); + ASS_Track *track = calloc(1, sizeof(ASS_Track)); track->library = library; track->ScaledBorderAndShadow = 1; - track->parser_priv = calloc(1, sizeof(parser_priv_t)); + track->parser_priv = calloc(1, sizeof(ASS_ParserPriv)); return track; } diff --git a/libass/ass.h b/libass/ass.h index 879d041..d757c76 100644 --- a/libass/ass.h +++ b/libass/ass.h @@ -46,7 +46,7 @@ typedef struct ass_image { int dst_x, dst_y; // Bitmap placement inside the video frame struct ass_image *next; // Next image, or NULL -} ass_image_t; +} ASS_Image; /* * Hintint type. (see ass_set_hinting below) @@ -60,19 +60,19 @@ typedef enum { ASS_HINTING_LIGHT, ASS_HINTING_NORMAL, ASS_HINTING_NATIVE -} ass_hinting_t; +} ASS_Hinting; /** * \brief Initialize the library. * \return library handle or NULL if failed */ -ass_library_t *ass_library_init(void); +ASS_Library *ass_library_init(void); /** * \brief Finalize the library * \param priv library handle */ -void ass_library_done(ass_library_t *priv); +void ass_library_done(ASS_Library *priv); /** * \brief Set private font directory. @@ -81,14 +81,14 @@ void ass_library_done(ass_library_t *priv); * \param priv library handle * \param fonts_dir private directory for font extraction */ -void ass_set_fonts_dir(ass_library_t *priv, const char *fonts_dir); +void ass_set_fonts_dir(ASS_Library *priv, const char *fonts_dir); /** * \brief Whether fonts should be extracted from track data. * \param priv library handle * \param extract whether to extract fonts */ -void ass_set_extract_fonts(ass_library_t *priv, int extract); +void ass_set_extract_fonts(ASS_Library *priv, int extract); /** * \brief Register style overrides with a library instance. @@ -99,13 +99,13 @@ void ass_set_extract_fonts(ass_library_t *priv, int extract); * \param priv library handle * \param list NULL-terminated list of strings */ -void ass_set_style_overrides(ass_library_t *priv, char **list); +void ass_set_style_overrides(ASS_Library *priv, char **list); /** * \brief Explicitly process style overrides for a track. * \param track track handle */ -void ass_process_force_style(ass_track_t *track); +void ass_process_force_style(ASS_Track *track); /** * \brief Register a callback for debug/info messages. @@ -121,7 +121,7 @@ void ass_process_force_style(ass_track_t *track); * \param msg_cb pointer to callback function * \param data additional data, will be passed to callback */ -void ass_set_message_cb(ass_library_t *priv, void (*msg_cb) +void ass_set_message_cb(ASS_Library *priv, void (*msg_cb) (int level, const char *fmt, va_list args, void *data), void *data); @@ -130,13 +130,13 @@ void ass_set_message_cb(ass_library_t *priv, void (*msg_cb) * \param priv library handle * \return renderer handle or NULL if failed */ -ass_renderer_t *ass_renderer_init(ass_library_t *); +ASS_Renderer *ass_renderer_init(ASS_Library *); /** * \brief Finalize the renderer. * \param priv renderer handle */ -void ass_renderer_done(ass_renderer_t *priv); +void ass_renderer_done(ASS_Renderer *priv); /** * \brief Set the frame size in pixels, including margins. @@ -144,7 +144,7 @@ void ass_renderer_done(ass_renderer_t *priv); * \param w width * \param h height */ -void ass_set_frame_size(ass_renderer_t *priv, int w, int h); +void ass_set_frame_size(ASS_Renderer *priv, int w, int h); /** * \brief Set frame margins. These values may be negative if pan-and-scan @@ -155,14 +155,14 @@ void ass_set_frame_size(ass_renderer_t *priv, int w, int h); * \param l left margin * \param r right margin */ -void ass_set_margins(ass_renderer_t *priv, int t, int b, int l, int r); +void ass_set_margins(ASS_Renderer *priv, int t, int b, int l, int r); /** * \brief Whether margins should be used for placing regular events. * \param priv renderer handle * \param use whether to use the margins */ -void ass_set_use_margins(ass_renderer_t *priv, int use); +void ass_set_use_margins(ASS_Renderer *priv, int use); /** * \brief Set aspect ratio parameters. @@ -170,28 +170,28 @@ void ass_set_use_margins(ass_renderer_t *priv, int use); * \param dar display aspect ratio (DAR), prescaled for output PAR * \param sar storage aspect ratio (SAR) */ -void ass_set_aspect_ratio(ass_renderer_t *priv, double dar, double sar); +void ass_set_aspect_ratio(ASS_Renderer *priv, double dar, double sar); /** * \brief Set a fixed font scaling factor. * \param priv renderer handle * \param font_scale scaling factor, default is 1.0 */ -void ass_set_font_scale(ass_renderer_t *priv, double font_scale); +void ass_set_font_scale(ASS_Renderer *priv, double font_scale); /** * \brief Set font hinting method. * \param priv renderer handle * \param ht hinting method */ -void ass_set_hinting(ass_renderer_t *priv, ass_hinting_t ht); +void ass_set_hinting(ASS_Renderer *priv, ASS_Hinting ht); /** * \brief Set line spacing. Will not be scaled with frame size. * \param priv renderer handle * \param line_spacing line spacing in pixels */ -void ass_set_line_spacing(ass_renderer_t *priv, double line_spacing); +void ass_set_line_spacing(ASS_Renderer *priv, double line_spacing); /** * \brief Set font lookup defaults. @@ -201,7 +201,7 @@ void ass_set_line_spacing(ass_renderer_t *priv, double line_spacing); * \param update whether fontconfig cache should be built/updated now. Only * relevant if fontconfig is used. */ -void ass_set_fonts(ass_renderer_t *priv, const char *default_font, +void ass_set_fonts(ASS_Renderer *priv, const char *default_font, const char *default_family, int fc, const char *config, int update); @@ -212,7 +212,7 @@ void ass_set_fonts(ass_renderer_t *priv, const char *default_font, * \param priv renderer handle * \return success */ -int ass_fonts_update(ass_renderer_t *priv); +int ass_fonts_update(ASS_Renderer *priv); /** * \brief Set hard cache limits. Do not set, or set to zero, for reasonable @@ -222,19 +222,19 @@ int ass_fonts_update(ass_renderer_t *priv); * \param glyph_max maximum number of cached glyphs * \param bitmap_max_size maximum bitmap cache size (in MB) */ -void ass_set_cache_limits(ass_renderer_t *priv, int glyph_max, +void ass_set_cache_limits(ASS_Renderer *priv, int glyph_max, int bitmap_max_size); /** - * \brief Render a frame, producing a list of ass_image_t. + * \brief Render a frame, producing a list of ASS_Image. * \param priv renderer handle * \param track subtitle track * \param now video timestamp in milliseconds * \param detect_change will be set to 1 if a change occured compared * to the last invocation */ -ass_image_t *ass_render_frame(ass_renderer_t *priv, ass_track_t *track, - long long now, int *detect_change); +ASS_Image *ass_render_frame(ASS_Renderer *priv, ASS_Track *track, + long long now, int *detect_change); /* @@ -247,27 +247,27 @@ ass_image_t *ass_render_frame(ass_renderer_t *priv, ass_track_t *track, * \param library handle * \return pointer to empty track */ -ass_track_t *ass_new_track(ass_library_t *); +ASS_Track *ass_new_track(ASS_Library *); /** * \brief Deallocate track and all its child objects (styles and events). * \param track track to deallocate */ -void ass_free_track(ass_track_t *track); +void ass_free_track(ASS_Track *track); /** * \brief Allocate new style. * \param track track * \return newly allocated style id */ -int ass_alloc_style(ass_track_t *track); +int ass_alloc_style(ASS_Track *track); /** * \brief Allocate new event. * \param track track * \return newly allocated event id */ -int ass_alloc_event(ass_track_t *track); +int ass_alloc_event(ASS_Track *track); /** * \brief Delete a style. @@ -275,7 +275,7 @@ int ass_alloc_event(ass_track_t *track); * \param sid style id * Deallocates style data. Does not modify track->n_styles. */ -void ass_free_style(ass_track_t *track, int sid); +void ass_free_style(ASS_Track *track, int sid); /** * \brief Delete an event. @@ -283,7 +283,7 @@ void ass_free_style(ass_track_t *track, int sid); * \param eid event id * Deallocates event data. Does not modify track->n_events. */ -void ass_free_event(ass_track_t *track, int eid); +void ass_free_event(ASS_Track *track, int eid); /** * \brief Parse a chunk of subtitle stream data. @@ -291,7 +291,7 @@ void ass_free_event(ass_track_t *track, int eid); * \param data string to parse * \param size length of data */ -void ass_process_data(ass_track_t *track, char *data, int size); +void ass_process_data(ASS_Track *track, char *data, int size); /** * \brief Parse Codec Private section of subtitle stream. @@ -299,7 +299,7 @@ void ass_process_data(ass_track_t *track, char *data, int size); * \param data string to parse * \param size length of data */ -void ass_process_codec_private(ass_track_t *track, char *data, int size); +void ass_process_codec_private(ASS_Track *track, char *data, int size); /** * \brief Parse a chunk of subtitle stream data. In Matroska, @@ -310,7 +310,7 @@ void ass_process_codec_private(ass_track_t *track, char *data, int size); * \param timecode starting time of the event (milliseconds) * \param duration duration of the event (milliseconds) */ -void ass_process_chunk(ass_track_t *track, char *data, int size, +void ass_process_chunk(ASS_Track *track, char *data, int size, long long timecode, long long duration); /** @@ -320,8 +320,8 @@ void ass_process_chunk(ass_track_t *track, char *data, int size, * \param codepage encoding (iconv format) * \return newly allocated track */ -ass_track_t *ass_read_file(ass_library_t *library, char *fname, - char *codepage); +ASS_Track *ass_read_file(ASS_Library *library, char *fname, + char *codepage); /** * \brief Read subtitles from memory. @@ -331,15 +331,15 @@ ass_track_t *ass_read_file(ass_library_t *library, char *fname, * \param codepage encoding (iconv format) * \return newly allocated track */ -ass_track_t *ass_read_memory(ass_library_t *library, char *buf, - size_t bufsize, char *codepage); +ASS_Track *ass_read_memory(ASS_Library *library, char *buf, + size_t bufsize, char *codepage); /** * \brief Read styles from file into already initialized track. * \param fname file name * \param codepage encoding (iconv format) * \return 0 on success */ -int ass_read_styles(ass_track_t *track, char *fname, char *codepage); +int ass_read_styles(ASS_Track *track, char *fname, char *codepage); /** * \brief Add a memory font. @@ -348,14 +348,14 @@ int ass_read_styles(ass_track_t *track, char *fname, char *codepage); * \param data binary font data * \param data_size data size */ -void ass_add_font(ass_library_t *library, char *name, char *data, +void ass_add_font(ASS_Library *library, char *name, char *data, int data_size); /** * \brief Remove all fonts stored in an ass_library object. * \param library library handle */ -void ass_clear_fonts(ass_library_t *library); +void ass_clear_fonts(ASS_Library *library); /** * \brief Calculates timeshift from now to the start of some other subtitle @@ -366,6 +366,6 @@ void ass_clear_fonts(ass_library_t *library); * +2 means "the one after the next", -1 means "previous" * \return timeshift in milliseconds */ -long long ass_step_sub(ass_track_t *track, long long now, int movement); +long long ass_step_sub(ASS_Track *track, long long now, int movement); #endif /* LIBASS_ASS_H */ diff --git a/libass/ass_bitmap.c b/libass/ass_bitmap.c index 39c4996..faddcf3 100644 --- a/libass/ass_bitmap.c +++ b/libass/ass_bitmap.c @@ -44,7 +44,7 @@ struct ass_synth_priv { static const unsigned int maxcolor = 255; static const unsigned base = 256; -static int generate_tables(ass_synth_priv_t *priv, double radius) +static int generate_tables(ASS_SynthPriv *priv, double radius) { double A = log(1.0 / base) / (radius * radius * 2); int mx, i; @@ -101,7 +101,7 @@ static int generate_tables(ass_synth_priv_t *priv, double radius) return 0; } -static void resize_tmp(ass_synth_priv_t *priv, int w, int h) +static void resize_tmp(ASS_SynthPriv *priv, int w, int h) { if (priv->tmp_w >= w && priv->tmp_h >= h) return; @@ -118,14 +118,14 @@ static void resize_tmp(ass_synth_priv_t *priv, int w, int h) priv->tmp = malloc((priv->tmp_w + 1) * priv->tmp_h * sizeof(short)); } -ass_synth_priv_t *ass_synth_init(double radius) +ASS_SynthPriv *ass_synth_init(double radius) { - ass_synth_priv_t *priv = calloc(1, sizeof(ass_synth_priv_t)); + ASS_SynthPriv *priv = calloc(1, sizeof(ASS_SynthPriv)); generate_tables(priv, radius); return priv; } -void ass_synth_done(ass_synth_priv_t *priv) +void ass_synth_done(ASS_SynthPriv *priv) { if (priv->tmp) free(priv->tmp); @@ -136,10 +136,10 @@ void ass_synth_done(ass_synth_priv_t *priv) free(priv); } -static bitmap_t *alloc_bitmap(int w, int h) +static Bitmap *alloc_bitmap(int w, int h) { - bitmap_t *bm; - bm = calloc(1, sizeof(bitmap_t)); + Bitmap *bm; + bm = calloc(1, sizeof(Bitmap)); bm->buffer = malloc(w * h); bm->w = w; bm->h = h; @@ -147,7 +147,7 @@ static bitmap_t *alloc_bitmap(int w, int h) return bm; } -void ass_free_bitmap(bitmap_t *bm) +void ass_free_bitmap(Bitmap *bm) { if (bm) { if (bm->buffer) @@ -156,16 +156,16 @@ void ass_free_bitmap(bitmap_t *bm) } } -static bitmap_t *copy_bitmap(const bitmap_t *src) +static Bitmap *copy_bitmap(const Bitmap *src) { - bitmap_t *dst = alloc_bitmap(src->w, src->h); + Bitmap *dst = alloc_bitmap(src->w, src->h); dst->left = src->left; dst->top = src->top; memcpy(dst->buffer, src->buffer, src->w * src->h); return dst; } -static int check_glyph_area(ass_library_t *library, FT_Glyph glyph) +static int check_glyph_area(ASS_Library *library, FT_Glyph glyph) { FT_BBox bbox; long long dx, dy; @@ -180,12 +180,12 @@ static int check_glyph_area(ass_library_t *library, FT_Glyph glyph) return 0; } -static bitmap_t *glyph_to_bitmap_internal(ass_library_t *library, +static Bitmap *glyph_to_bitmap_internal(ASS_Library *library, FT_Glyph glyph, int bord) { FT_BitmapGlyph bg; FT_Bitmap *bit; - bitmap_t *bm; + Bitmap *bm; int w, h; unsigned char *src; unsigned char *dst; @@ -235,7 +235,7 @@ static bitmap_t *glyph_to_bitmap_internal(ass_library_t *library, * 1. Glyph bitmap is subtracted from outline bitmap. This way looks much better in some cases. * 2. Shadow bitmap is created as a sum of glyph and outline bitmaps. */ -static bitmap_t *fix_outline_and_shadow(bitmap_t *bm_g, bitmap_t *bm_o) +static Bitmap *fix_outline_and_shadow(Bitmap *bm_g, Bitmap *bm_o) { int x, y; const int l = bm_o->left > bm_g->left ? bm_o->left : bm_g->left; @@ -247,7 +247,7 @@ static bitmap_t *fix_outline_and_shadow(bitmap_t *bm_g, bitmap_t *bm_o) bm_o->top + bm_o->h < bm_g->top + bm_g->h ? bm_o->top + bm_o->h : bm_g->top + bm_g->h; - bitmap_t *bm_s = copy_bitmap(bm_o); + Bitmap *bm_s = copy_bitmap(bm_o); unsigned char *g = bm_g->buffer + (t - bm_g->top) * bm_g->w + (l - bm_g->left); @@ -472,9 +472,9 @@ static void be_blur(unsigned char *buf, int w, int h) } } -int glyph_to_bitmap(ass_library_t *library, ass_synth_priv_t *priv_blur, +int glyph_to_bitmap(ASS_Library *library, ASS_SynthPriv *priv_blur, FT_Glyph glyph, FT_Glyph outline_glyph, - bitmap_t **bm_g, bitmap_t **bm_o, bitmap_t **bm_s, + Bitmap **bm_g, Bitmap **bm_o, Bitmap **bm_s, int be, double blur_radius, FT_Vector shadow_offset) { blur_radius *= 2; diff --git a/libass/ass_bitmap.h b/libass/ass_bitmap.h index f7d8fc2..3b63cee 100644 --- a/libass/ass_bitmap.h +++ b/libass/ass_bitmap.h @@ -26,16 +26,16 @@ #include "ass.h" -typedef struct ass_synth_priv ass_synth_priv_t; +typedef struct ass_synth_priv ASS_SynthPriv; -ass_synth_priv_t *ass_synth_init(double); -void ass_synth_done(ass_synth_priv_t *priv); +ASS_SynthPriv *ass_synth_init(double); +void ass_synth_done(ASS_SynthPriv *priv); typedef struct { int left, top; int w, h; // width, height unsigned char *buffer; // w x h buffer -} bitmap_t; +} Bitmap; /** * \brief perform glyph rendering @@ -46,11 +46,11 @@ typedef struct { * \param bm_g out: pointer to the bitmap of glyph shadow is returned here * \param be 1 = produces blurred bitmaps, 0 = normal bitmaps */ -int glyph_to_bitmap(ass_library_t *library, ass_synth_priv_t *priv_blur, +int glyph_to_bitmap(ASS_Library *library, ASS_SynthPriv *priv_blur, FT_Glyph glyph, FT_Glyph outline_glyph, - bitmap_t **bm_g, bitmap_t **bm_o, bitmap_t **bm_s, + Bitmap **bm_g, Bitmap **bm_o, Bitmap **bm_s, int be, double blur_radius, FT_Vector shadow_offset); -void ass_free_bitmap(bitmap_t *bm); +void ass_free_bitmap(Bitmap *bm); #endif /* LIBASS_BITMAP_H */ diff --git a/libass/ass_cache.c b/libass/ass_cache.c index 524a1c8..ac0a00f 100644 --- a/libass/ass_cache.c +++ b/libass/ass_cache.c @@ -51,13 +51,13 @@ static void hashmap_item_dtor(void *key, size_t key_size, void *value, free(value); } -hashmap_t *hashmap_init(ass_library_t *library, size_t key_size, - size_t value_size, int nbuckets, - hashmap_item_dtor_t item_dtor, - hashmap_key_compare_t key_compare, - hashmap_hash_t hash) +Hashmap *hashmap_init(ASS_Library *library, size_t key_size, + size_t value_size, int nbuckets, + HashmapItemDtor item_dtor, + HashmapKeyCompare key_compare, + HashmapHash hash) { - hashmap_t *map = calloc(1, sizeof(hashmap_t)); + Hashmap *map = calloc(1, sizeof(Hashmap)); map->library = library; map->nbuckets = nbuckets; map->key_size = key_size; @@ -69,7 +69,7 @@ hashmap_t *hashmap_init(ass_library_t *library, size_t key_size, return map; } -void hashmap_done(hashmap_t *map) +void hashmap_done(Hashmap *map) { int i; // print stats @@ -81,9 +81,9 @@ void hashmap_done(hashmap_t *map) map->miss_count, map->count); for (i = 0; i < map->nbuckets; ++i) { - hashmap_item_t *item = map->root[i]; + HashmapItem *item = map->root[i]; while (item) { - hashmap_item_t *next = item->next; + HashmapItem *next = item->next; map->item_dtor(item->key, map->key_size, item->value, map->value_size); free(item); @@ -95,17 +95,17 @@ void hashmap_done(hashmap_t *map) } // does nothing if key already exists -void *hashmap_insert(hashmap_t *map, void *key, void *value) +void *hashmap_insert(Hashmap *map, void *key, void *value) { unsigned hash = map->hash(key, map->key_size); - hashmap_item_t **next = map->root + (hash % map->nbuckets); + HashmapItem **next = map->root + (hash % map->nbuckets); while (*next) { if (map->key_compare(key, (*next)->key, map->key_size)) return (*next)->value; next = &((*next)->next); assert(next); } - (*next) = malloc(sizeof(hashmap_item_t)); + (*next) = malloc(sizeof(HashmapItem)); (*next)->key = malloc(map->key_size); (*next)->value = malloc(map->value_size); memcpy((*next)->key, key, map->key_size); @@ -116,10 +116,10 @@ void *hashmap_insert(hashmap_t *map, void *key, void *value) return (*next)->value; } -void *hashmap_find(hashmap_t *map, void *key) +void *hashmap_find(Hashmap *map, void *key) { unsigned hash = map->hash(key, map->key_size); - hashmap_item_t *item = map->root[hash % map->nbuckets]; + HashmapItem *item = map->root[hash % map->nbuckets]; while (item) { if (map->key_compare(key, item->key, map->key_size)) { map->hit_count++; @@ -136,7 +136,7 @@ void *hashmap_find(hashmap_t *map, void *key) static unsigned font_desc_hash(void *buf, size_t len) { - ass_font_desc_t *desc = buf; + ASS_FontDesc *desc = buf; unsigned hval; hval = fnv_32a_str(desc->family, FNV1_32A_INIT); hval = fnv_32a_buf(&desc->bold, sizeof(desc->bold), hval); @@ -146,8 +146,8 @@ static unsigned font_desc_hash(void *buf, size_t len) static int font_compare(void *key1, void *key2, size_t key_size) { - ass_font_desc_t *a = key1; - ass_font_desc_t *b = key2; + ASS_FontDesc *a = key1; + ASS_FontDesc *b = key2; if (strcmp(a->family, b->family) != 0) return 0; if (a->bold != b->bold) @@ -166,8 +166,8 @@ static void font_hash_dtor(void *key, size_t key_size, void *value, free(key); } -ass_font_t *ass_font_cache_find(hashmap_t *font_cache, - ass_font_desc_t *desc) +ASS_Font *ass_font_cache_find(Hashmap *font_cache, + ASS_FontDesc *desc) { return hashmap_find(font_cache, desc); } @@ -176,22 +176,22 @@ ass_font_t *ass_font_cache_find(hashmap_t *font_cache, * \brief Add a face struct to cache. * \param font font struct */ -void *ass_font_cache_add(hashmap_t *font_cache, ass_font_t *font) +void *ass_font_cache_add(Hashmap *font_cache, ASS_Font *font) { return hashmap_insert(font_cache, &(font->desc), font); } -hashmap_t *ass_font_cache_init(ass_library_t *library) +Hashmap *ass_font_cache_init(ASS_Library *library) { - hashmap_t *font_cache; - font_cache = hashmap_init(library, sizeof(ass_font_desc_t), - sizeof(ass_font_t), + Hashmap *font_cache; + font_cache = hashmap_init(library, sizeof(ASS_FontDesc), + sizeof(ASS_Font), 1000, font_hash_dtor, font_compare, font_desc_hash); return font_cache; } -void ass_font_cache_done(hashmap_t *font_cache) +void ass_font_cache_done(Hashmap *font_cache) { hashmap_done(font_cache); } @@ -209,7 +209,7 @@ void ass_font_cache_done(hashmap_t *font_cache) static void bitmap_hash_dtor(void *key, size_t key_size, void *value, size_t value_size) { - bitmap_hash_val_t *v = value; + BitmapHashValue *v = value; if (v->bm) ass_free_bitmap(v->bm); if (v->bm_o) @@ -220,8 +220,8 @@ static void bitmap_hash_dtor(void *key, size_t key_size, void *value, free(value); } -void *cache_add_bitmap(hashmap_t *bitmap_cache, bitmap_hash_key_t *key, - bitmap_hash_val_t *val) +void *cache_add_bitmap(Hashmap *bitmap_cache, BitmapHashKey *key, + BitmapHashValue *val) { // Note: this is only an approximation if (val->bm_o) @@ -237,32 +237,32 @@ void *cache_add_bitmap(hashmap_t *bitmap_cache, bitmap_hash_key_t *key, * \param key hash key * \return requested hash val or 0 if not found */ -bitmap_hash_val_t *cache_find_bitmap(hashmap_t *bitmap_cache, - bitmap_hash_key_t *key) +BitmapHashValue *cache_find_bitmap(Hashmap *bitmap_cache, + BitmapHashKey *key) { return hashmap_find(bitmap_cache, key); } -hashmap_t *ass_bitmap_cache_init(ass_library_t *library) +Hashmap *ass_bitmap_cache_init(ASS_Library *library) { - hashmap_t *bitmap_cache; + Hashmap *bitmap_cache; bitmap_cache = hashmap_init(library, - sizeof(bitmap_hash_key_t), - sizeof(bitmap_hash_val_t), + sizeof(BitmapHashKey), + sizeof(BitmapHashValue), 0xFFFF + 13, bitmap_hash_dtor, bitmap_compare, bitmap_hash); return bitmap_cache; } -void ass_bitmap_cache_done(hashmap_t *bitmap_cache) +void ass_bitmap_cache_done(Hashmap *bitmap_cache) { hashmap_done(bitmap_cache); } -hashmap_t *ass_bitmap_cache_reset(hashmap_t *bitmap_cache) +Hashmap *ass_bitmap_cache_reset(Hashmap *bitmap_cache) { - ass_library_t *lib = bitmap_cache->library; + ASS_Library *lib = bitmap_cache->library; ass_bitmap_cache_done(bitmap_cache); return ass_bitmap_cache_init(lib); @@ -274,7 +274,7 @@ hashmap_t *ass_bitmap_cache_reset(hashmap_t *bitmap_cache) static void glyph_hash_dtor(void *key, size_t key_size, void *value, size_t value_size) { - glyph_hash_val_t *v = value; + GlyphHashValue *v = value; if (v->glyph) FT_Done_Glyph(v->glyph); if (v->outline_glyph) @@ -283,8 +283,8 @@ static void glyph_hash_dtor(void *key, size_t key_size, void *value, free(value); } -void *cache_add_glyph(hashmap_t *glyph_cache, glyph_hash_key_t *key, - glyph_hash_val_t *val) +void *cache_add_glyph(Hashmap *glyph_cache, GlyphHashKey *key, + GlyphHashValue *val) { return hashmap_insert(glyph_cache, key, val); } @@ -294,30 +294,30 @@ void *cache_add_glyph(hashmap_t *glyph_cache, glyph_hash_key_t *key, * \param key hash key * \return requested hash val or 0 if not found */ -glyph_hash_val_t *cache_find_glyph(hashmap_t *glyph_cache, - glyph_hash_key_t *key) +GlyphHashValue *cache_find_glyph(Hashmap *glyph_cache, + GlyphHashKey *key) { return hashmap_find(glyph_cache, key); } -hashmap_t *ass_glyph_cache_init(ass_library_t *library) +Hashmap *ass_glyph_cache_init(ASS_Library *library) { - hashmap_t *glyph_cache; - glyph_cache = hashmap_init(library, sizeof(glyph_hash_key_t), - sizeof(glyph_hash_val_t), + Hashmap *glyph_cache; + glyph_cache = hashmap_init(library, sizeof(GlyphHashKey), + sizeof(GlyphHashValue), 0xFFFF + 13, glyph_hash_dtor, glyph_compare, glyph_hash); return glyph_cache; } -void ass_glyph_cache_done(hashmap_t *glyph_cache) +void ass_glyph_cache_done(Hashmap *glyph_cache) { hashmap_done(glyph_cache); } -hashmap_t *ass_glyph_cache_reset(hashmap_t *glyph_cache) +Hashmap *ass_glyph_cache_reset(Hashmap *glyph_cache) { - ass_library_t *lib = glyph_cache->library; + ASS_Library *lib = glyph_cache->library; ass_glyph_cache_done(glyph_cache); return ass_glyph_cache_init(lib); @@ -330,16 +330,16 @@ hashmap_t *ass_glyph_cache_reset(hashmap_t *glyph_cache) static void composite_hash_dtor(void *key, size_t key_size, void *value, size_t value_size) { - composite_hash_val_t *v = value; + CompositeHashValue *v = value; free(v->a); free(v->b); free(key); free(value); } -void *cache_add_composite(hashmap_t *composite_cache, - composite_hash_key_t *key, - composite_hash_val_t *val) +void *cache_add_composite(Hashmap *composite_cache, + CompositeHashKey *key, + CompositeHashValue *val) { return hashmap_insert(composite_cache, key, val); } @@ -349,31 +349,31 @@ void *cache_add_composite(hashmap_t *composite_cache, * \param key hash key * \return requested hash val or 0 if not found */ -composite_hash_val_t *cache_find_composite(hashmap_t *composite_cache, - composite_hash_key_t *key) +CompositeHashValue *cache_find_composite(Hashmap *composite_cache, + CompositeHashKey *key) { return hashmap_find(composite_cache, key); } -hashmap_t *ass_composite_cache_init(ass_library_t *library) +Hashmap *ass_composite_cache_init(ASS_Library *library) { - hashmap_t *composite_cache; - composite_cache = hashmap_init(library, sizeof(composite_hash_key_t), - sizeof(composite_hash_val_t), + Hashmap *composite_cache; + composite_cache = hashmap_init(library, sizeof(CompositeHashKey), + sizeof(CompositeHashValue), 0xFFFF + 13, composite_hash_dtor, composite_compare, composite_hash); return composite_cache; } -void ass_composite_cache_done(hashmap_t *composite_cache) +void ass_composite_cache_done(Hashmap *composite_cache) { hashmap_done(composite_cache); } -hashmap_t *ass_composite_cache_reset(hashmap_t *composite_cache) +Hashmap *ass_composite_cache_reset(Hashmap *composite_cache) { - ass_library_t *lib = composite_cache->library; + ASS_Library *lib = composite_cache->library; ass_composite_cache_done(composite_cache); return ass_composite_cache_init(lib); diff --git a/libass/ass_cache.h b/libass/ass_cache.h index c2c6d2a..5c9749f 100644 --- a/libass/ass_cache.h +++ b/libass/ass_cache.h @@ -25,79 +25,79 @@ #include "ass_font.h" #include "ass_bitmap.h" -typedef void (*hashmap_item_dtor_t) (void *key, size_t key_size, - void *value, size_t value_size); -typedef int (*hashmap_key_compare_t) (void *key1, void *key2, - size_t key_size); -typedef unsigned (*hashmap_hash_t) (void *key, size_t key_size); +typedef void (*HashmapItemDtor) (void *key, size_t key_size, + void *value, size_t value_size); +typedef int (*HashmapKeyCompare) (void *key1, void *key2, + size_t key_size); +typedef unsigned (*HashmapHash) (void *key, size_t key_size); typedef struct hashmap_item { void *key; void *value; struct hashmap_item *next; -} hashmap_item_t; -typedef hashmap_item_t *hashmap_item_p; +} HashmapItem; +typedef HashmapItem *hashmap_item_p; typedef struct { int nbuckets; size_t key_size, value_size; hashmap_item_p *root; - hashmap_item_dtor_t item_dtor; // a destructor for hashmap key/value pairs - hashmap_key_compare_t key_compare; - hashmap_hash_t hash; + HashmapItemDtor item_dtor; // a destructor for hashmap key/value pairs + HashmapKeyCompare key_compare; + HashmapHash hash; size_t cache_size; // stats int hit_count; int miss_count; int count; - ass_library_t *library; -} hashmap_t; - -hashmap_t *hashmap_init(ass_library_t *library, size_t key_size, - size_t value_size, int nbuckets, - hashmap_item_dtor_t item_dtor, - hashmap_key_compare_t key_compare, - hashmap_hash_t hash); -void hashmap_done(hashmap_t *map); -void *hashmap_insert(hashmap_t *map, void *key, void *value); -void *hashmap_find(hashmap_t *map, void *key); - -hashmap_t *ass_font_cache_init(ass_library_t *library); -ass_font_t *ass_font_cache_find(hashmap_t *, ass_font_desc_t *desc); -void *ass_font_cache_add(hashmap_t *, ass_font_t *font); -void ass_font_cache_done(hashmap_t *); + ASS_Library *library; +} Hashmap; + +Hashmap *hashmap_init(ASS_Library *library, size_t key_size, + size_t value_size, int nbuckets, + HashmapItemDtor item_dtor, + HashmapKeyCompare key_compare, + HashmapHash hash); +void hashmap_done(Hashmap *map); +void *hashmap_insert(Hashmap *map, void *key, void *value); +void *hashmap_find(Hashmap *map, void *key); + +Hashmap *ass_font_cache_init(ASS_Library *library); +ASS_Font *ass_font_cache_find(Hashmap *, ASS_FontDesc *desc); +void *ass_font_cache_add(Hashmap *, ASS_Font *font); +void ass_font_cache_done(Hashmap *); // Create definitions for bitmap_hash_key and glyph_hash_key #define CREATE_STRUCT_DEFINITIONS #include "ass_cache_template.h" typedef struct { - bitmap_t *bm; // the actual bitmaps - bitmap_t *bm_o; - bitmap_t *bm_s; -} bitmap_hash_val_t; + Bitmap *bm; // the actual bitmaps + Bitmap *bm_o; + Bitmap *bm_s; +} BitmapHashValue; -hashmap_t *ass_bitmap_cache_init(ass_library_t *library); -void *cache_add_bitmap(hashmap_t *, bitmap_hash_key_t *key, - bitmap_hash_val_t *val); -bitmap_hash_val_t *cache_find_bitmap(hashmap_t *bitmap_cache, - bitmap_hash_key_t *key); -hashmap_t *ass_bitmap_cache_reset(hashmap_t *bitmap_cache); -void ass_bitmap_cache_done(hashmap_t *bitmap_cache); +Hashmap *ass_bitmap_cache_init(ASS_Library *library); +void *cache_add_bitmap(Hashmap *, BitmapHashKey *key, + BitmapHashValue *val); +BitmapHashValue *cache_find_bitmap(Hashmap *bitmap_cache, + BitmapHashKey *key); +Hashmap *ass_bitmap_cache_reset(Hashmap *bitmap_cache); +void ass_bitmap_cache_done(Hashmap *bitmap_cache); typedef struct { unsigned char *a; unsigned char *b; -} composite_hash_val_t; +} CompositeHashValue; -hashmap_t *ass_composite_cache_init(ass_library_t *library); -void *cache_add_composite(hashmap_t *, composite_hash_key_t *key, - composite_hash_val_t *val); -composite_hash_val_t *cache_find_composite(hashmap_t *composite_cache, - composite_hash_key_t *key); -hashmap_t *ass_composite_cache_reset(hashmap_t *composite_cache); -void ass_composite_cache_done(hashmap_t *composite_cache); +Hashmap *ass_composite_cache_init(ASS_Library *library); +void *cache_add_composite(Hashmap *, CompositeHashKey *key, + CompositeHashValue *val); +CompositeHashValue *cache_find_composite(Hashmap *composite_cache, + CompositeHashKey *key); +Hashmap *ass_composite_cache_reset(Hashmap *composite_cache); +void ass_composite_cache_done(Hashmap *composite_cache); typedef struct { @@ -106,14 +106,14 @@ typedef struct { FT_BBox bbox_scaled; // bbox after scaling, but before rotation FT_Vector advance; // 26.6, advance distance to the next bitmap in line int asc, desc; // ascender/descender of a drawing -} glyph_hash_val_t; - -hashmap_t *ass_glyph_cache_init(ass_library_t *library); -void *cache_add_glyph(hashmap_t *, glyph_hash_key_t *key, - glyph_hash_val_t *val); -glyph_hash_val_t *cache_find_glyph(hashmap_t *glyph_cache, - glyph_hash_key_t *key); -hashmap_t *ass_glyph_cache_reset(hashmap_t *glyph_cache); -void ass_glyph_cache_done(hashmap_t *glyph_cache); +} GlyphHashValue; + +Hashmap *ass_glyph_cache_init(ASS_Library *library); +void *cache_add_glyph(Hashmap *, GlyphHashKey *key, + GlyphHashValue *val); +GlyphHashValue *cache_find_glyph(Hashmap *glyph_cache, + GlyphHashKey *key); +Hashmap *ass_glyph_cache_reset(Hashmap *glyph_cache); +void ass_glyph_cache_done(Hashmap *glyph_cache); #endif /* LIBASS_CACHE_H */ diff --git a/libass/ass_cache_template.h b/libass/ass_cache_template.h index 08bce24..6a6c3f2 100644 --- a/libass/ass_cache_template.h +++ b/libass/ass_cache_template.h @@ -7,7 +7,7 @@ #define FTVECTOR(member) \ FT_Vector member; #define BITMAPHASHKEY(member) \ - bitmap_hash_key_t member; + BitmapHashKey member; #define END(typedefnamename) \ } typedefnamename; @@ -56,7 +56,7 @@ // describes a bitmap; bitmaps with equivalents structs are considered identical START(bitmap, bipmap_hash_key) GENERIC(char, bitmap) // bool : true = bitmap, false = outline - GENERIC(ass_font_t *, font) + GENERIC(ASS_Font *, font) GENERIC(double, size) // font size GENERIC(uint32_t, ch) // character code FTVECTOR(outline) // border width, 16.16 fixed point value @@ -79,11 +79,11 @@ START(bitmap, bipmap_hash_key) FTVECTOR(advance) // subpixel shift vector FTVECTOR(shadow_offset) // shadow subpixel shift GENERIC(unsigned, drawing_hash) // hashcode of a drawing -END(bitmap_hash_key_t) +END(BitmapHashKey) // describes an outline glyph START(glyph, glyph_hash_key) - GENERIC(ass_font_t *, font) + GENERIC(ASS_Font *, font) GENERIC(double, size) // font size GENERIC(uint32_t, ch) // character code GENERIC(int, bold) @@ -93,7 +93,7 @@ START(glyph, glyph_hash_key) FTVECTOR(outline) // border width, 16.16 GENERIC(unsigned, drawing_hash) // hashcode of a drawing GENERIC(unsigned, flags) // glyph decoration flags -END(glyph_hash_key_t) +END(GlyphHashKey) // Cache for composited bitmaps START(composite, composite_hash_key) @@ -107,7 +107,7 @@ START(composite, composite_hash_key) GENERIC(int, by) BITMAPHASHKEY(a) BITMAPHASHKEY(b) -END(composite_hash_key_t) +END(CompositeHashKey) #undef START diff --git a/libass/ass_drawing.c b/libass/ass_drawing.c index 0b270c1..95348a2 100644 --- a/libass/ass_drawing.c +++ b/libass/ass_drawing.c @@ -33,8 +33,8 @@ /* * \brief Get and prepare a FreeType glyph */ -static void drawing_make_glyph(ass_drawing_t *drawing, void *fontconfig_priv, - ass_font_t *font, ass_hinting_t hint) +static void drawing_make_glyph(ASS_Drawing *drawing, void *fontconfig_priv, + ASS_Font *font, ASS_Hinting hint) { FT_OutlineGlyph glyph; @@ -55,7 +55,7 @@ static void drawing_make_glyph(ass_drawing_t *drawing, void *fontconfig_priv, /* * \brief Add a single point to a contour. */ -static inline void drawing_add_point(ass_drawing_t *drawing, +static inline void drawing_add_point(ASS_Drawing *drawing, FT_Vector *point) { FT_Outline *ol = &drawing->glyph->outline; @@ -76,7 +76,7 @@ static inline void drawing_add_point(ass_drawing_t *drawing, /* * \brief Close a contour and check glyph size overflow. */ -static inline void drawing_close_shape(ass_drawing_t *drawing) +static inline void drawing_close_shape(ASS_Drawing *drawing) { FT_Outline *ol = &drawing->glyph->outline; @@ -93,7 +93,7 @@ static inline void drawing_close_shape(ass_drawing_t *drawing) /* * \brief Prepare drawing for parsing. This just sets a few parameters. */ -static void drawing_prepare(ass_drawing_t *drawing) +static void drawing_prepare(ASS_Drawing *drawing) { // Scaling parameters drawing->point_scale_x = drawing->scale_x * @@ -106,7 +106,7 @@ static void drawing_prepare(ass_drawing_t *drawing) * \brief Finish a drawing. This only sets the horizontal advance according * to the glyph's bbox at the moment. */ -static void drawing_finish(ass_drawing_t *drawing, int raw_mode) +static void drawing_finish(ASS_Drawing *drawing, int raw_mode) { int i, offset; FT_BBox bbox; @@ -150,7 +150,7 @@ static void drawing_finish(ass_drawing_t *drawing, int raw_mode) /* * \brief Check whether a number of items on the list is available */ -static int token_check_values(ass_drawing_token_t *token, int i, int type) +static int token_check_values(ASS_DrawingToken *token, int i, int type) { int j; for (j = 0; j < i; j++) { @@ -162,16 +162,16 @@ static int token_check_values(ass_drawing_token_t *token, int i, int type) } /* - * \brief Tokenize a drawing string into a list of ass_drawing_token_t + * \brief Tokenize a drawing string into a list of ASS_DrawingToken * This also expands points for closing b-splines */ -static ass_drawing_token_t *drawing_tokenize(char *str) +static ASS_DrawingToken *drawing_tokenize(char *str) { char *p = str; int i, val, type = -1, is_set = 0; FT_Vector point = {0, 0}; - ass_drawing_token_t *root = NULL, *tail = NULL, *spline_start = NULL; + ASS_DrawingToken *root = NULL, *tail = NULL, *spline_start = NULL; while (*p) { if (*p == 'c' && spline_start) { @@ -179,7 +179,7 @@ static ass_drawing_token_t *drawing_tokenize(char *str) // back to the end if (token_check_values(spline_start->next, 2, TOKEN_B_SPLINE)) { for (i = 0; i < 3; i++) { - tail->next = calloc(1, sizeof(ass_drawing_token_t)); + tail->next = calloc(1, sizeof(ASS_DrawingToken)); tail->next->prev = tail; tail = tail->next; tail->type = TOKEN_B_SPLINE; @@ -214,11 +214,11 @@ static ass_drawing_token_t *drawing_tokenize(char *str) if (type != -1 && is_set == 2) { if (root) { - tail->next = calloc(1, sizeof(ass_drawing_token_t)); + tail->next = calloc(1, sizeof(ASS_DrawingToken)); tail->next->prev = tail; tail = tail->next; } else - root = tail = calloc(1, sizeof(ass_drawing_token_t)); + root = tail = calloc(1, sizeof(ASS_DrawingToken)); tail->type = type; tail->point = point; is_set = 0; @@ -230,7 +230,7 @@ static ass_drawing_token_t *drawing_tokenize(char *str) #if 0 // Check tokens - ass_drawing_token_t *t = root; + ASS_DrawingToken *t = root; while(t) { printf("token %d point (%d, %d)\n", t->type, t->point.x, t->point.y); t = t->next; @@ -243,10 +243,10 @@ static ass_drawing_token_t *drawing_tokenize(char *str) /* * \brief Free a list of tokens */ -static void drawing_free_tokens(ass_drawing_token_t *token) +static void drawing_free_tokens(ASS_DrawingToken *token) { while (token) { - ass_drawing_token_t *at = token; + ASS_DrawingToken *at = token; token = token->next; free(at); } @@ -256,7 +256,7 @@ static void drawing_free_tokens(ass_drawing_token_t *token) * \brief Translate and scale a point coordinate according to baseline * offset and scale. */ -static inline void translate_point(ass_drawing_t *drawing, FT_Vector *point) +static inline void translate_point(ASS_Drawing *drawing, FT_Vector *point) { point->x = drawing->point_scale_x * point->x; point->y = drawing->point_scale_y * -point->y; @@ -267,8 +267,8 @@ static inline void translate_point(ass_drawing_t *drawing, FT_Vector *point) * This curve evaluator is also used in VSFilter (RTS.cpp); it's a simple * implementation of the De Casteljau algorithm. */ -static void drawing_evaluate_curve(ass_drawing_t *drawing, - ass_drawing_token_t *token, char spline, +static void drawing_evaluate_curve(ASS_Drawing *drawing, + ASS_DrawingToken *token, char spline, int started) { double cx3, cx2, cx1, cx0, cy3, cy2, cy1, cy0; @@ -358,10 +358,10 @@ static void drawing_evaluate_curve(ass_drawing_t *drawing, /* * \brief Create and initialize a new drawing and return it */ -ass_drawing_t *ass_drawing_new(void *fontconfig_priv, ass_font_t *font, - ass_hinting_t hint, FT_Library lib) +ASS_Drawing *ass_drawing_new(void *fontconfig_priv, ASS_Font *font, + ASS_Hinting hint, FT_Library lib) { - ass_drawing_t* drawing; + ASS_Drawing* drawing; drawing = calloc(1, sizeof(*drawing)); drawing->text = calloc(1, DRAWING_INITIAL_SIZE); @@ -382,7 +382,7 @@ ass_drawing_t *ass_drawing_new(void *fontconfig_priv, ass_font_t *font, /* * \brief Free a drawing */ -void ass_drawing_free(ass_drawing_t* drawing) +void ass_drawing_free(ASS_Drawing* drawing) { FT_Done_Glyph((FT_Glyph) drawing->glyph); free(drawing->text); @@ -392,7 +392,7 @@ void ass_drawing_free(ass_drawing_t* drawing) /* * \brief Add one ASCII character to the drawing text buffer */ -void ass_drawing_add_char(ass_drawing_t* drawing, char symbol) +void ass_drawing_add_char(ASS_Drawing* drawing, char symbol) { drawing->text[drawing->i++] = symbol; drawing->text[drawing->i] = 0; @@ -407,7 +407,7 @@ void ass_drawing_add_char(ass_drawing_t* drawing, char symbol) * \brief Create a hashcode for the drawing * XXX: To avoid collisions a better hash algorithm might be useful. */ -void ass_drawing_hash(ass_drawing_t* drawing) +void ass_drawing_hash(ASS_Drawing* drawing) { drawing->hash = fnv_32a_str(drawing->text, FNV1_32A_INIT); } @@ -415,10 +415,10 @@ void ass_drawing_hash(ass_drawing_t* drawing) /* * \brief Convert token list to outline. Calls the line and curve evaluators. */ -FT_OutlineGlyph *ass_drawing_parse(ass_drawing_t *drawing, int raw_mode) +FT_OutlineGlyph *ass_drawing_parse(ASS_Drawing *drawing, int raw_mode) { int started = 0; - ass_drawing_token_t *token; + ASS_DrawingToken *token; FT_Vector pen = {0, 0}; drawing->tokens = drawing_tokenize(drawing->text); diff --git a/libass/ass_drawing.h b/libass/ass_drawing.h index 54ef3d0..913588e 100644 --- a/libass/ass_drawing.h +++ b/libass/ass_drawing.h @@ -35,14 +35,14 @@ typedef enum { TOKEN_B_SPLINE, TOKEN_EXTEND_SPLINE, TOKEN_CLOSE -} ass_token_type_t; +} ASS_TokenType; typedef struct ass_drawing_token { - ass_token_type_t type; + ASS_TokenType type; FT_Vector point; struct ass_drawing_token *next; struct ass_drawing_token *prev; -} ass_drawing_token_t; +} ASS_DrawingToken; typedef struct { char *text; // drawing string @@ -58,20 +58,20 @@ typedef struct { // private FT_Library ftlibrary; // FT library instance, needed for font ops - ass_library_t *library; + ASS_Library *library; int size; // current buffer size - ass_drawing_token_t *tokens; // tokenized drawing + ASS_DrawingToken *tokens; // tokenized drawing int max_points; // current maximum size int max_contours; double point_scale_x; double point_scale_y; -} ass_drawing_t; +} ASS_Drawing; -ass_drawing_t *ass_drawing_new(void *fontconfig_priv, ass_font_t *font, - ass_hinting_t hint, FT_Library lib); -void ass_drawing_free(ass_drawing_t* drawing); -void ass_drawing_add_char(ass_drawing_t* drawing, char symbol); -void ass_drawing_hash(ass_drawing_t* drawing); -FT_OutlineGlyph *ass_drawing_parse(ass_drawing_t *drawing, int raw_mode); +ASS_Drawing *ass_drawing_new(void *fontconfig_priv, ASS_Font *font, + ASS_Hinting hint, FT_Library lib); +void ass_drawing_free(ASS_Drawing* drawing); +void ass_drawing_add_char(ASS_Drawing* drawing, char symbol); +void ass_drawing_hash(ASS_Drawing* drawing); +FT_OutlineGlyph *ass_drawing_parse(ASS_Drawing *drawing, int raw_mode); #endif /* LIBASS_DRAWING_H */ diff --git a/libass/ass_font.c b/libass/ass_font.c index 3502ef7..e6da4bc 100644 --- a/libass/ass_font.c +++ b/libass/ass_font.c @@ -39,7 +39,7 @@ * Select Microfost Unicode CharMap, if the font has one. * Otherwise, let FreeType decide. */ -static void charmap_magic(ass_library_t *library, FT_Face face) +static void charmap_magic(ASS_Library *library, FT_Face face) { int i; for (i = 0; i < face->num_charmaps; ++i) { @@ -66,7 +66,7 @@ static void charmap_magic(ass_library_t *library, FT_Face face) } } -static void update_transform(ass_font_t *font) +static void update_transform(ASS_Font *font) { int i; FT_Matrix m; @@ -80,7 +80,7 @@ static void update_transform(ass_font_t *font) /** * \brief find a memory font by name */ -static int find_font(ass_library_t *library, char *name) +static int find_font(ASS_Library *library, char *name) { int i; for (i = 0; i < library->num_fontdata; ++i) @@ -111,10 +111,10 @@ static void buggy_font_workaround(FT_Face face) } /** - * \brief Select a face with the given charcode and add it to ass_font_t + * \brief Select a face with the given charcode and add it to ASS_Font * \return index of the new face in font->faces, -1 if failed */ -static int add_face(void *fc_priv, ass_font_t *font, uint32_t ch) +static int add_face(void *fc_priv, ASS_Font *font, uint32_t ch) { char *path; int index; @@ -166,17 +166,17 @@ static int add_face(void *fc_priv, ass_font_t *font, uint32_t ch) } /** - * \brief Create a new ass_font_t according to "desc" argument + * \brief Create a new ASS_Font according to "desc" argument */ -ass_font_t *ass_font_new(void *font_cache, ass_library_t *library, - FT_Library ftlibrary, void *fc_priv, - ass_font_desc_t *desc) +ASS_Font *ass_font_new(void *font_cache, ASS_Library *library, + FT_Library ftlibrary, void *fc_priv, + ASS_FontDesc *desc) { int error; - ass_font_t *fontp; - ass_font_t font; + ASS_Font *fontp; + ASS_Font font; - fontp = ass_font_ca