diff options
author | greg <greg@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2010-01-08 18:35:44 +0000 |
---|---|---|
committer | greg <greg@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2010-01-08 18:35:44 +0000 |
commit | 9aea06cf7dde9592672e4dba09fb03b2b89d6863 (patch) | |
tree | 0062d1e95bc58bd51028e14a6d88240a1d94ee7d /libass/ass_library.c | |
parent | f51c039c5fcdc24c3f33e1a48bed73bdb17e9e11 (diff) | |
download | mpv-9aea06cf7dde9592672e4dba09fb03b2b89d6863.tar.bz2 mpv-9aea06cf7dde9592672e4dba09fb03b2b89d6863.tar.xz |
Update internal libass copy to commit 8db4a5
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30242 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libass/ass_library.c')
-rw-r--r-- | libass/ass_library.c | 146 |
1 files changed, 89 insertions, 57 deletions
diff --git a/libass/ass_library.c b/libass/ass_library.c index 304f2326de..53b91af169 100644 --- a/libass/ass_library.c +++ b/libass/ass_library.c @@ -1,5 +1,3 @@ -// -*- c-basic-offset: 8; indent-tabs-mode: t -*- -// vim:ts=8:sw=8:noet:ai: /* * Copyright (C) 2006 Evgeniy Stepanov <eugeni.stepanov@gmail.com> * @@ -24,92 +22,126 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <stdarg.h> #include "ass.h" #include "ass_library.h" +#include "ass_utils.h" +static void ass_msg_handler(int level, const char *fmt, va_list va, void *data) +{ + if (level > MSGL_INFO) + return; + fprintf(stderr, "[ass] "); + vfprintf(stderr, fmt, va); + fprintf(stderr, "\n"); +} -ass_library_t* ass_library_init(void) +ASS_Library *ass_library_init(void) { - return calloc(1, sizeof(ass_library_t)); + ASS_Library* lib = calloc(1, sizeof(*lib)); + lib->msg_callback = ass_msg_handler; + + return lib; } -void ass_library_done(ass_library_t* priv) +void ass_library_done(ASS_Library *priv) { - if (priv) { - ass_set_fonts_dir(priv, NULL); - ass_set_style_overrides(priv, NULL); - ass_clear_fonts(priv); - free(priv); - } + if (priv) { + ass_set_fonts_dir(priv, NULL); + ass_set_style_overrides(priv, NULL); + ass_clear_fonts(priv); + free(priv); + } } -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) { - if (priv->fonts_dir) - free(priv->fonts_dir); + if (priv->fonts_dir) + free(priv->fonts_dir); - priv->fonts_dir = fonts_dir ? strdup(fonts_dir) : 0; + priv->fonts_dir = fonts_dir ? strdup(fonts_dir) : 0; } -void ass_set_extract_fonts(ass_library_t* priv, int extract) +void ass_set_extract_fonts(ASS_Library *priv, int extract) { - priv->extract_fonts = !!extract; + priv->extract_fonts = !!extract; } -void ass_set_style_overrides(ass_library_t* priv, char** list) +void ass_set_style_overrides(ASS_Library *priv, char **list) { - char** p; - char** q; - int cnt; - - if (priv->style_overrides) { - for (p = priv->style_overrides; *p; ++p) - free(*p); - free(priv->style_overrides); - } - - if (!list) return; - - for (p = list, cnt = 0; *p; ++p, ++cnt) {} - - priv->style_overrides = malloc((cnt + 1) * sizeof(char*)); - for (p = list, q = priv->style_overrides; *p; ++p, ++q) - *q = strdup(*p); - priv->style_overrides[cnt] = NULL; + char **p; + char **q; + int cnt; + + if (priv->style_overrides) { + for (p = priv->style_overrides; *p; ++p) + free(*p); + free(priv->style_overrides); + } + + if (!list) + return; + + for (p = list, cnt = 0; *p; ++p, ++cnt) { + } + + priv->style_overrides = malloc((cnt + 1) * sizeof(char *)); + for (p = list, q = priv->style_overrides; *p; ++p, ++q) + *q = strdup(*p); + priv->style_overrides[cnt] = NULL; } static void grow_array(void **array, int nelem, size_t elsize) { - if (!(nelem & 31)) - *array = realloc(*array, (nelem + 32) * elsize); + if (!(nelem & 31)) + *array = realloc(*array, (nelem + 32) * elsize); } -void ass_add_font(ass_library_t* priv, char* name, char* data, int size) +void ass_add_font(ASS_Library *priv, char *name, char *data, int size) { - int idx = priv->num_fontdata; - if (!name || !data || !size) - return; - grow_array((void**)&priv->fontdata, priv->num_fontdata, sizeof(*priv->fontdata)); + int idx = priv->num_fontdata; + if (!name || !data || !size) + return; + grow_array((void **) &priv->fontdata, priv->num_fontdata, + sizeof(*priv->fontdata)); - priv->fontdata[idx].name = strdup(name); + priv->fontdata[idx].name = strdup(name); - priv->fontdata[idx].data = malloc(size); - memcpy(priv->fontdata[idx].data, data, size); + priv->fontdata[idx].data = malloc(size); + memcpy(priv->fontdata[idx].data, data, size); - priv->fontdata[idx].size = size; + priv->fontdata[idx].size = size; - priv->num_fontdata ++; + priv->num_fontdata++; } -void ass_clear_fonts(ass_library_t* priv) +void ass_clear_fonts(ASS_Library *priv) +{ + int i; + for (i = 0; i < priv->num_fontdata; ++i) { + free(priv->fontdata[i].name); + free(priv->fontdata[i].data); + } + free(priv->fontdata); + priv->fontdata = NULL; + priv->num_fontdata = 0; +} + +/* + * Register a message callback function with libass. Without setting one, + * a default handler is used which prints everything with MSGL_INFO or + * higher to the standard output. + * + * \param msg_cb the callback function + * \param data additional data that will be passed to the callback + */ +void ass_set_message_cb(ASS_Library *priv, + void (*msg_cb)(int, const char *, va_list, void *), + void *data) { - int i; - for (i = 0; i < priv->num_fontdata; ++i) { - free(priv->fontdata[i].name); - free(priv->fontdata[i].data); - } - free(priv->fontdata); - priv->fontdata = NULL; - priv->num_fontdata = 0; + if (msg_cb) { + priv->msg_callback = msg_cb; + priv->msg_callback_data = data; + } } |