summaryrefslogtreecommitdiffstats
path: root/libass
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@blackbox>2009-06-27 06:31:45 +0200
committerGrigori Goronzy <greg@blackbox>2009-06-27 06:46:20 +0200
commit4c1f9e93addaa511f96908fe502e8d5709ed7500 (patch)
tree8b26aa78db213efd4fd7dfdd8ea298e219bf7f22 /libass
parent917e02edda4392b465ffa179628a5032ff969900 (diff)
downloadlibass-4c1f9e93addaa511f96908fe502e8d5709ed7500.tar.bz2
libass-4c1f9e93addaa511f96908fe502e8d5709ed7500.tar.xz
Incorporate mputils.c into ass_utils.c
Move helper functions originating from MPlayer into ass_utils.c. Remove some debugging code that is #if 0'ed for ages now. Delete mputils.c and mputils.h and remove them from the build system.
Diffstat (limited to 'libass')
-rw-r--r--libass/Makefile.am6
-rw-r--r--libass/ass_utils.c215
-rw-r--r--libass/ass_utils.h28
-rw-r--r--libass/mputils.c239
-rw-r--r--libass/mputils.h24
5 files changed, 226 insertions, 286 deletions
diff --git a/libass/Makefile.am b/libass/Makefile.am
index 59f5433..8703f6a 100644
--- a/libass/Makefile.am
+++ b/libass/Makefile.am
@@ -4,9 +4,9 @@ LIBASS_LT_AGE = 0
lib_LTLIBRARIES = libass.la
libass_la_SOURCES = ass.c ass_cache.c ass_font.c ass_fontconfig.c ass_render.c \
- ass_utils.c ass_bitmap.c ass_library.c mputils.c \
- ass_bitmap.h ass_cache.h ass_fontconfig.h ass_font.h ass.h \
- ass_library.h ass_types.h ass_utils.h help_mp.h mputils.h
+ ass_utils.c ass_bitmap.c ass_library.c ass_bitmap.h \
+ ass_cache.h ass_fontconfig.h ass_font.h ass.h \
+ ass_library.h ass_types.h ass_utils.h help_mp.h
libass_la_LDFLAGS = -version-info $(LIBASS_LT_CURRENT):$(LIBASS_LT_REVISION):$(LIBASS_LT_AGE)
assheadersdir = $(includedir)/ass
diff --git a/libass/ass_utils.c b/libass/ass_utils.c
index 072f325..90655c4 100644
--- a/libass/ass_utils.c
+++ b/libass/ass_utils.c
@@ -121,31 +121,206 @@ char parse_bool(char *str)
return 0;
}
-#if 0
-static void sprint_tag(uint32_t tag, char *dst)
+void ass_msg(int lvl, char *fmt, ...)
{
- dst[0] = (tag >> 24) & 0xFF;
- dst[1] = (tag >> 16) & 0xFF;
- dst[2] = (tag >> 8) & 0xFF;
- dst[3] = tag & 0xFF;
- dst[4] = 0;
+ va_list va;
+ if (lvl > MSGL_INFO)
+ return;
+ va_start(va, fmt);
+ vprintf(fmt, va);
+ va_end(va);
}
-void dump_glyph(FT_Glyph g)
+unsigned ass_utf8_get_char(char **str)
{
- char tag[5];
+ uint8_t *strp = (uint8_t *) * str;
+ unsigned c = *strp++;
+ unsigned mask = 0x80;
+ int len = -1;
+ while (c & mask) {
+ mask >>= 1;
+ len++;
+ }
+ if (len <= 0 || len > 4)
+ goto no_utf8;
+ c &= mask - 1;
+ while ((*strp & 0xc0) == 0x80) {
+ if (len-- <= 0)
+ goto no_utf8;
+ c = (c << 6) | (*strp++ & 0x3f);
+ }
+ if (len)
+ goto no_utf8;
+ *str = (char *) strp;
+ return c;
+
+ no_utf8:
+ strp = (uint8_t *) * str;
+ c = *strp++;
+ *str = (char *) strp;
+ return c;
+}
+
+// gaussian blur
+void ass_gauss_blur(unsigned char *buffer,
+ unsigned short *tmp2,
+ int width, int height, int stride, int *m2, int r, int mwidth)
+{
+
+ int x, y;
+
+ unsigned char *s = buffer;
+ unsigned short *t = tmp2 + 1;
+ for (y = 0; y < height; y++) {
+ memset(t - 1, 0, (width + 1) * sizeof(short));
+
+ for (x = 0; x < r; x++) {
+ const int src = s[x];
+ if (src) {
+ register unsigned short *dstp = t + x - r;
+ int mx;
+ unsigned *m3 = (unsigned *) (m2 + src * mwidth);
+ for (mx = r - x; mx < mwidth; mx++) {
+ dstp[mx] += m3[mx];
+ }
+ }
+ }
+
+ for (; x < width - r; x++) {
+ const int src = s[x];
+ if (src) {
+ register unsigned short *dstp = t + x - r;
+ int mx;
+ unsigned *m3 = (unsigned *) (m2 + src * mwidth);
+ for (mx = 0; mx < mwidth; mx++) {
+ dstp[mx] += m3[mx];
+ }
+ }
+ }
+
+ for (; x < width; x++) {
+ const int src = s[x];
+ if (src) {
+ register unsigned short *dstp = t + x - r;
+ int mx;
+ const int x2 = r + width - x;
+ unsigned *m3 = (unsigned *) (m2 + src * mwidth);
+ for (mx = 0; mx < x2; mx++) {
+ dstp[mx] += m3[mx];
+ }
+ }
+ }
+
+ s += stride;
+ t += width + 1;
+ }
+
+ t = tmp2;
+ for (x = 0; x < width; x++) {
+ for (y = 0; y < r; y++) {
+ unsigned short *srcp = t + y * (width + 1) + 1;
+ int src = *srcp;
+ if (src) {
+ register unsigned short *dstp = srcp - 1 + width + 1;
+ const int src2 = (src + 128) >> 8;
+ unsigned *m3 = (unsigned *) (m2 + src2 * mwidth);
+
+ int mx;
+ *srcp = 128;
+ for (mx = r - 1; mx < mwidth; mx++) {
+ *dstp += m3[mx];
+ dstp += width + 1;
+ }
+ }
+ }
+ for (; y < height - r; y++) {
+ unsigned short *srcp = t + y * (width + 1) + 1;
+ int src = *srcp;
+ if (src) {
+ register unsigned short *dstp = srcp - 1 - r * (width + 1);
+ const int src2 = (src + 128) >> 8;
+ unsigned *m3 = (unsigned *) (m2 + src2 * mwidth);
+
+ int mx;
+ *srcp = 128;
+ for (mx = 0; mx < mwidth; mx++) {
+ *dstp += m3[mx];
+ dstp += width + 1;
+ }
+ }
+ }
+ for (; y < height; y++) {
+ unsigned short *srcp = t + y * (width + 1) + 1;
+ int src = *srcp;
+ if (src) {
+ const int y2 = r + height - y;
+ register unsigned short *dstp = srcp - 1 - r * (width + 1);
+ const int src2 = (src + 128) >> 8;
+ unsigned *m3 = (unsigned *) (m2 + src2 * mwidth);
+
+ int mx;
+ *srcp = 128;
+ for (mx = 0; mx < y2; mx++) {
+ *dstp += m3[mx];
+ dstp += width + 1;
+ }
+ }
+ }
+ t++;
+ }
+
+ t = tmp2;
+ s = buffer;
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+ s[x] = t[x] >> 8;
+ }
+ s += stride;
+ t += width + 1;
+ }
+}
+
+#ifdef CONFIG_ENCA
+void *ass_guess_buffer_cp(unsigned char *buffer, int buflen,
+ char *preferred_language, char *fallback)
+{
+ const char **languages;
+ size_t langcnt;
+ EncaAnalyser analyser;
+ EncaEncoding encoding;
+ char *detected_sub_cp = NULL;
int i;
- FT_OutlineGlyph og = (FT_OutlineGlyph) g;
- FT_Outline *o = &(og->outline);
- sprint_tag(g->format, tag);
- printf("glyph: %p \n", g);
- printf("format: %s \n", tag);
- printf("outline: %p \n", o);
- printf("contours: %d, points: %d, points ptr: %p \n", o->n_contours,
- o->n_points, o->points);
- for (i = 0; i < o->n_points; ++i) {
- printf(" point %f, %f \n", d6_to_double(o->points[i].x),
- d6_to_double(o->points[i].y));
+
+ languages = enca_get_languages(&langcnt);
+ ass_msg(MSGL_V, "ENCA supported languages: ");
+ for (i = 0; i < langcnt; i++) {
+ ass_msg(MSGL_V, "%s ", languages[i]);
}
+ ass_msg(MSGL_V, "\n");
+
+ for (i = 0; i < langcnt; i++) {
+ const char *tmp;
+
+ if (strcasecmp(languages[i], preferred_language) != 0)
+ continue;
+ analyser = enca_analyser_alloc(languages[i]);
+ encoding = enca_analyse_const(analyser, buffer, buflen);
+ tmp = enca_charset_name(encoding.charset, ENCA_NAME_STYLE_ICONV);
+ if (tmp && encoding.charset != ENCA_CS_UNKNOWN) {
+ detected_sub_cp = strdup(tmp);
+ ass_msg(MSGL_INFO, "ENCA detected charset: %s\n", tmp);
+ }
+ enca_analyser_free(analyser);
+ }
+
+ free(languages);
+
+ if (!detected_sub_cp) {
+ detected_sub_cp = strdup(fallback);
+ ass_msg(MSGL_INFO,
+ "ENCA detection failed: fallback to %s\n", fallback);
+ }
+
+ return detected_sub_cp;
}
#endif
diff --git a/libass/ass_utils.h b/libass/ass_utils.h
index 54c8fe0..553a69d 100644
--- a/libass/ass_utils.h
+++ b/libass/ass_utils.h
@@ -21,7 +21,28 @@
#ifndef LIBASS_UTILS_H
#define LIBASS_UTILS_H
+#include <stdio.h>
+#include <stdarg.h>
#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#ifdef CONFIG_ENCA
+#include <enca.h>
+#endif
+
+#include "help_mp.h"
+
+#define MSGL_FATAL 0
+#define MSGL_ERR 1
+#define MSGL_WARN 2
+#define MSGL_INFO 4
+#define MSGL_V 6
+#define MSGL_DBG2 7
+
+#define FFMAX(a,b) ((a) > (b) ? (a) : (b))
+#define FFMIN(a,b) ((a) > (b) ? (b) : (a))
int mystrtoi(char **p, int *res);
int mystrtoll(char **p, long long *res);
@@ -29,6 +50,13 @@ int mystrtou32(char **p, int base, uint32_t *res);
int mystrtod(char **p, double *res);
int strtocolor(char **q, uint32_t *res);
char parse_bool(char *str);
+unsigned ass_utf8_get_char(char **str);
+void ass_msg(int lvl, char *fmt, ...);
+void ass_gauss_blur(unsigned char *buffer, unsigned short *tmp2,
+ int width, int height, int stride, int *m2,
+ int r, int mwidth);
+void *ass_guess_buffer_cp(unsigned char *buffer, int buflen,
+ char *preferred_language, char *fallback);
static inline int d6_to_int(int x)
{
diff --git a/libass/mputils.c b/libass/mputils.c
deleted file mode 100644
index 7ab7bc0..0000000
--- a/libass/mputils.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (C) 2006 Evgeniy Stepanov <eugeni.stepanov@gmail.com>
- * Copyright (C) 2009 Grigori Goronzy <greg@geekmind.org>
- *
- * This file is part of libass.
- *
- * libass is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * libass is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with libass; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include "config.h"
-
-#include "mputils.h"
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#ifdef CONFIG_ENCA
-#include <enca.h>
-#endif
-
-void ass_msg(int lvl, char *fmt, ...)
-{
- va_list va;
- if (lvl > MSGL_INFO)
- return;
- va_start(va, fmt);
- vprintf(fmt, va);
- va_end(va);
-}
-
-unsigned ass_utf8_get_char(char **str)
-{
- uint8_t *strp = (uint8_t *) * str;
- unsigned c = *strp++;
- unsigned mask = 0x80;
- int len = -1;
- while (c & mask) {
- mask >>= 1;
- len++;
- }
- if (len <= 0 || len > 4)
- goto no_utf8;
- c &= mask - 1;
- while ((*strp & 0xc0) == 0x80) {
- if (len-- <= 0)
- goto no_utf8;
- c = (c << 6) | (*strp++ & 0x3f);
- }
- if (len)
- goto no_utf8;
- *str = (char *) strp;
- return c;
-
- no_utf8:
- strp = (uint8_t *) * str;
- c = *strp++;
- *str = (char *) strp;
- return c;
-}
-
-// gaussian blur
-void ass_gauss_blur(unsigned char *buffer,
- unsigned short *tmp2,
- int width, int height, int stride, int *m2, int r, int mwidth)
-{
-
- int x, y;
-
- unsigned char *s = buffer;
- unsigned short *t = tmp2 + 1;
- for (y = 0; y < height; y++) {
- memset(t - 1, 0, (width + 1) * sizeof(short));
-
- for (x = 0; x < r; x++) {
- const int src = s[x];
- if (src) {
- register unsigned short *dstp = t + x - r;
- int mx;
- unsigned *m3 = (unsigned *) (m2 + src * mwidth);
- for (mx = r - x; mx < mwidth; mx++) {
- dstp[mx] += m3[mx];
- }
- }
- }
-
- for (; x < width - r; x++) {
- const int src = s[x];
- if (src) {
- register unsigned short *dstp = t + x - r;
- int mx;
- unsigned *m3 = (unsigned *) (m2 + src * mwidth);
- for (mx = 0; mx < mwidth; mx++) {
- dstp[mx] += m3[mx];
- }
- }
- }
-
- for (; x < width; x++) {
- const int src = s[x];
- if (src) {
- register unsigned short *dstp = t + x - r;
- int mx;
- const int x2 = r + width - x;
- unsigned *m3 = (unsigned *) (m2 + src * mwidth);
- for (mx = 0; mx < x2; mx++) {
- dstp[mx] += m3[mx];
- }
- }
- }
-
- s += stride;
- t += width + 1;
- }
-
- t = tmp2;
- for (x = 0; x < width; x++) {
- for (y = 0; y < r; y++) {
- unsigned short *srcp = t + y * (width + 1) + 1;
- int src = *srcp;
- if (src) {
- register unsigned short *dstp = srcp - 1 + width + 1;
- const int src2 = (src + 128) >> 8;
- unsigned *m3 = (unsigned *) (m2 + src2 * mwidth);
-
- int mx;
- *srcp = 128;
- for (mx = r - 1; mx < mwidth; mx++) {
- *dstp += m3[mx];
- dstp += width + 1;
- }
- }
- }
- for (; y < height - r; y++) {
- unsigned short *srcp = t + y * (width + 1) + 1;
- int src = *srcp;
- if (src) {
- register unsigned short *dstp = srcp - 1 - r * (width + 1);
- const int src2 = (src + 128) >> 8;
- unsigned *m3 = (unsigned *) (m2 + src2 * mwidth);
-
- int mx;
- *srcp = 128;
- for (mx = 0; mx < mwidth; mx++) {
- *dstp += m3[mx];
- dstp += width + 1;
- }
- }
- }
- for (; y < height; y++) {
- unsigned short *srcp = t + y * (width + 1) + 1;
- int src = *srcp;
- if (src) {
- const int y2 = r + height - y;
- register unsigned short *dstp = srcp - 1 - r * (width + 1);
- const int src2 = (src + 128) >> 8;
- unsigned *m3 = (unsigned *) (m2 + src2 * mwidth);
-
- int mx;
- *srcp = 128;
- for (mx = 0; mx < y2; mx++) {
- *dstp += m3[mx];
- dstp += width + 1;
- }
- }
- }
- t++;
- }
-
- t = tmp2;
- s = buffer;
- for (y = 0; y < height; y++) {
- for (x = 0; x < width; x++) {
- s[x] = t[x] >> 8;
- }
- s += stride;
- t += width + 1;
- }
-}
-
-#ifdef CONFIG_ENCA
-void *ass_guess_buffer_cp(unsigned char *buffer, int buflen,
- char *preferred_language, char *fallback)
-{
- const char **languages;
- size_t langcnt;
- EncaAnalyser analyser;
- EncaEncoding encoding;
- char *detected_sub_cp = NULL;
- int i;
-
- languages = enca_get_languages(&langcnt);
- ass_msg(MSGL_V, "ENCA supported languages: ");
- for (i = 0; i < langcnt; i++) {
- ass_msg(MSGL_V, "%s ", languages[i]);
- }
- ass_msg(MSGL_V, "\n");
-
- for (i = 0; i < langcnt; i++) {
- const char *tmp;
-
- if (strcasecmp(languages[i], preferred_language) != 0)
- continue;
- analyser = enca_analyser_alloc(languages[i]);
- encoding = enca_analyse_const(analyser, buffer, buflen);
- tmp = enca_charset_name(encoding.charset, ENCA_NAME_STYLE_ICONV);
- if (tmp && encoding.charset != ENCA_CS_UNKNOWN) {
- detected_sub_cp = strdup(tmp);
- ass_msg(MSGL_INFO, "ENCA detected charset: %s\n", tmp);
- }
- enca_analyser_free(analyser);
- }
-
- free(languages);
-
- if (!detected_sub_cp) {
- detected_sub_cp = strdup(fallback);
- ass_msg(MSGL_INFO,
- "ENCA detection failed: fallback to %s\n", fallback);
- }
-
- return detected_sub_cp;
-}
-#endif
diff --git a/libass/mputils.h b/libass/mputils.h
deleted file mode 100644
index 199f74b..0000000
--- a/libass/mputils.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef __MPUTILS_H__
-#define __MPUTILS_H__
-
-#define MSGL_FATAL 0
-#define MSGL_ERR 1
-#define MSGL_WARN 2
-#define MSGL_INFO 4
-#define MSGL_V 6
-#define MSGL_DBG2 7
-
-#define FFMAX(a,b) ((a) > (b) ? (a) : (b))
-#define FFMIN(a,b) ((a) > (b) ? (b) : (a))
-
-#include "help_mp.h"
-
-unsigned ass_utf8_get_char(char **str);
-void ass_msg(int lvl, char *fmt, ...);
-void ass_gauss_blur(unsigned char *buffer, unsigned short *tmp2,
- int width, int height, int stride, int *m2,
- int r, int mwidth);
-void *ass_guess_buffer_cp(unsigned char *buffer, int buflen,
- char *preferred_language, char *fallback);
-
-#endif