From 384b13c5fd3fa87bad4bedbb3db369cdfb05de2b Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 11 Nov 2015 21:28:20 +0100 Subject: demux_libass: remove this demuxer This loaded external .ass files via libass. libavformat's .ass reader is now good enough, so use that instead. Apparently libavformat still doesn't support fonts embedded into text .ass files, but support for this has been accidentally broken in mpv for a while anyway. (And only 1 person complained.) --- demux/demux.c | 4 -- demux/demux_libass.c | 111 --------------------------------------------------- 2 files changed, 115 deletions(-) delete mode 100644 demux/demux_libass.c (limited to 'demux') diff --git a/demux/demux.c b/demux/demux.c index 3233541be2..a00a3617cc 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -48,7 +48,6 @@ extern const demuxer_desc_t demuxer_desc_tv; extern const demuxer_desc_t demuxer_desc_mf; extern const demuxer_desc_t demuxer_desc_matroska; extern const demuxer_desc_t demuxer_desc_lavf; -extern const demuxer_desc_t demuxer_desc_libass; extern const demuxer_desc_t demuxer_desc_subreader; extern const demuxer_desc_t demuxer_desc_playlist; extern const demuxer_desc_t demuxer_desc_disc; @@ -67,9 +66,6 @@ const demuxer_desc_t *const demuxer_list[] = { &demuxer_desc_rawvideo, #if HAVE_TV &demuxer_desc_tv, -#endif -#if HAVE_LIBASS - &demuxer_desc_libass, #endif &demuxer_desc_matroska, #if HAVE_LIBARCHIVE diff --git a/demux/demux_libass.c b/demux/demux_libass.c deleted file mode 100644 index ef09f042ed..0000000000 --- a/demux/demux_libass.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * This file is part of mpv. - * - * mpv 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. - * - * mpv 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 mpv. If not, see . - */ - -// Note: just wraps libass, and makes the subtitle track available though -// sh_sub->track. It doesn't produce packets and doesn't support seeking. - -#include -#include - -#include "options/options.h" -#include "common/msg.h" -#include "misc/charset_conv.h" -#include "stream/stream.h" -#include "demux.h" - -#define PROBE_SIZE (8 * 1024) - -static void message_callback(int level, const char *format, va_list va, void *ctx) -{ - // ignore -} - -static int d_check_file(struct demuxer *demuxer, enum demux_check check) -{ - const char *user_cp = demuxer->opts->sub_cp; - struct stream *s = demuxer->stream; - struct mp_log *log = demuxer->log; - - if (!demuxer->params || !demuxer->params->expect_subtitle) - return -1; - - if (check >= DEMUX_CHECK_UNSAFE) { - ASS_Library *lib = ass_library_init(); - if (!lib) - return -1; - ass_set_message_cb(lib, message_callback, NULL); - - // Probe by loading a part of the beginning of the file with libass. - // Incomplete scripts are usually ok, and we hope libass is not verbose - // when dealing with (from its perspective) completely broken binary - // garbage. - - bstr buf = stream_peek(s, PROBE_SIZE); - // Older versions of libass will overwrite the input buffer, and despite - // passing length, expect a 0 termination. - void *tmp = talloc_size(NULL, buf.len + 1); - memcpy(tmp, buf.start, buf.len); - buf.start = tmp; - buf.start[buf.len] = '\0'; - bstr cbuf = mp_charset_guess_and_conv_to_utf8(log, buf, user_cp, - MP_ICONV_ALLOW_CUTOFF); - if (cbuf.start == NULL) - cbuf = buf; - ASS_Track *track = ass_read_memory(lib, cbuf.start, cbuf.len, NULL); - bool ok = !!track; - if (cbuf.start != buf.start) - talloc_free(cbuf.start); - talloc_free(buf.start); - if (track) - ass_free_track(track); - ass_library_done(lib); - if (!ok) - return -1; - } - - // Actually load the full thing. - - bstr buf = stream_read_complete(s, NULL, 100000000); - if (!buf.start) { - MP_ERR(demuxer, "Refusing to load subtitle file " - "larger than 100 MB: %s\n", demuxer->filename); - return -1; - } - bstr cbuf = mp_charset_guess_and_conv_to_utf8(log, buf, user_cp, - MP_ICONV_VERBOSE); - if (cbuf.start == NULL) - cbuf = buf; - if (cbuf.start != buf.start) - talloc_free(buf.start); - talloc_steal(demuxer, cbuf.start); - - struct sh_stream *sh = new_sh_stream(demuxer, STREAM_SUB); - sh->codec = "ass"; - sh->extradata = cbuf.start; - sh->extradata_size = cbuf.len; - - demuxer->seekable = true; - demuxer->fully_read = true; - - return 0; -} - -const struct demuxer_desc demuxer_desc_libass = { - .name = "libass", - .desc = "ASS/SSA subtitles (libass)", - .open = d_check_file, -}; -- cgit v1.2.3