diff libass/ass_library.c @ 30200:48d020c5ceca

Update internal libass copy to commit 8db4a5
author greg
date Fri, 08 Jan 2010 18:35:44 +0000
parents 0f1b5b68af32
children ac6e48baa03d
line wrap: on
line diff
--- a/libass/ass_library.c	Fri Jan 08 18:19:10 2010 +0000
+++ b/libass/ass_library.c	Fri Jan 08 18:35:44 2010 +0000
@@ -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"
 
-ass_library_t* ass_library_init(void)
+static void ass_msg_handler(int level, const char *fmt, va_list va, void *data)
 {
-	return calloc(1, sizeof(ass_library_t));
+    if (level > MSGL_INFO)
+        return;
+    fprintf(stderr, "[ass] ");
+    vfprintf(stderr, fmt, va);
+    fprintf(stderr, "\n");
 }
 
-void ass_library_done(ass_library_t* priv)
+ASS_Library *ass_library_init(void)
 {
-	if (priv) {
-		ass_set_fonts_dir(priv, NULL);
-		ass_set_style_overrides(priv, NULL);
-		ass_clear_fonts(priv);
-		free(priv);
-	}
+    ASS_Library* lib = calloc(1, sizeof(*lib));
+    lib->msg_callback = ass_msg_handler;
+
+    return lib;
 }
 
-void ass_set_fonts_dir(ass_library_t* priv, const char* fonts_dir)
+void ass_library_done(ASS_Library *priv)
 {
-	if (priv->fonts_dir)
-		free(priv->fonts_dir);
-
-	priv->fonts_dir = fonts_dir ? strdup(fonts_dir) : 0;
+    if (priv) {
+        ass_set_fonts_dir(priv, NULL);
+        ass_set_style_overrides(priv, NULL);
+        ass_clear_fonts(priv);
+        free(priv);
+    }
 }
 
-void ass_set_extract_fonts(ass_library_t* priv, int extract)
+void ass_set_fonts_dir(ASS_Library *priv, const char *fonts_dir)
 {
-	priv->extract_fonts = !!extract;
+    if (priv->fonts_dir)
+        free(priv->fonts_dir);
+
+    priv->fonts_dir = fonts_dir ? strdup(fonts_dir) : 0;
+}
+
+void ass_set_extract_fonts(ASS_Library *priv, int 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;
+    char **p;
+    char **q;
+    int cnt;
 
-	if (priv->style_overrides) {
-		for (p = priv->style_overrides; *p; ++p)
-			free(*p);
-		free(priv->style_overrides);
-	}
+    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) {}
+    if (!list)
+        return;
 
-	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;
+    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 *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));
+
+    priv->fontdata[idx].name = strdup(name);
+
+    priv->fontdata[idx].data = malloc(size);
+    memcpy(priv->fontdata[idx].data, data, size);
+
+    priv->fontdata[idx].size = size;
+
+    priv->num_fontdata++;
 }
 
-void ass_add_font(ass_library_t* priv, char* name, char* data, int size)
+void ass_clear_fonts(ASS_Library *priv)
 {
-	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].data = malloc(size);
-	memcpy(priv->fontdata[idx].data, data, size);
-
-	priv->fontdata[idx].size = size;
-
-	priv->num_fontdata ++;
+    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;
 }
 
-void ass_clear_fonts(ass_library_t* priv)
+/*
+ * 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;
+    }
 }