From 4c1f9e93addaa511f96908fe502e8d5709ed7500 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Sat, 27 Jun 2009 06:31:45 +0200 Subject: 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. --- libass/Makefile.am | 6 +- libass/ass_utils.c | 215 ++++++++++++++++++++++++++++++++++++++++++----- libass/ass_utils.h | 28 +++++++ libass/mputils.c | 239 ----------------------------------------------------- libass/mputils.h | 24 ------ 5 files changed, 226 insertions(+), 286 deletions(-) delete mode 100644 libass/mputils.c delete mode 100644 libass/mputils.h (limited to 'libass') 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 +#include #include +#include +#include +#include + +#ifdef CONFIG_ENCA +#include +#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 - * Copyright (C) 2009 Grigori Goronzy - * - * 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 -#include -#include -#include -#include -#include - -#ifdef CONFIG_ENCA -#include -#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 -- cgit v1.2.3