From 325912bf97562e2345470848699cdf56d66bdde4 Mon Sep 17 00:00:00 2001 From: reimar Date: Wed, 18 Oct 2006 16:09:59 +0000 Subject: redone subcp_recode: get rid of static buffer, skip lines that failed to convert instead of removing all remaining lines and remove subcp_recode1 since subcp_recode should now work just as well. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@20298 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_ogg.c | 2 +- subreader.c | 56 ++++++++++---------------------------------------- 2 files changed, 12 insertions(+), 46 deletions(-) diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c index 822ad3e283..039c1b4422 100644 --- a/libmpdemux/demux_ogg.c +++ b/libmpdemux/demux_ogg.c @@ -293,7 +293,7 @@ void demux_ogg_add_sub (ogg_stream_t* os,ogg_packet* pack) { mp_msg(MSGT_DEMUX,MSGL_DBG2,"Ogg sub lines: %d first: '%s'\n", ogg_sub.lines, ogg_sub.text[0]); #ifdef USE_ICONV - subcp_recode1(&ogg_sub); + subcp_recode(&ogg_sub); #endif vo_sub = &ogg_sub; vo_osd_changed(OSDTYPE_SUBTITLE); diff --git a/subreader.c b/subreader.c index a722d5e479..f7c714349a 100644 --- a/subreader.c +++ b/subreader.c @@ -1116,69 +1116,35 @@ void subcp_close (void) } } -#define ICBUFFSIZE 512 -static char icbuffer[ICBUFFSIZE]; - -static subtitle* subcp_recode (subtitle *sub) +subtitle* subcp_recode (subtitle *sub) { int l=sub->lines; size_t ileft, oleft; char *op, *ip, *ot; + if(icdsc == (iconv_t)(-1)) return sub; while (l){ - op = icbuffer; ip = sub->text[--l]; ileft = strlen(ip); - oleft = ICBUFFSIZE - 1; + oleft = 4 * ileft; + if (!(ot = malloc(oleft + 1))){ + mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: error allocating mem.\n"); + continue; + } + op = ot; if (iconv(icdsc, &ip, &ileft, &op, &oleft) == (size_t)(-1)) { - mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: error recoding line (1).\n"); - l++; - break; - } - if (!(ot = malloc(op - icbuffer + 1))){ - mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: error allocating mem.\n"); - l++; - break; + mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: error recoding line.\n"); + free(ot); + continue; } *op='\0' ; - strcpy (ot, icbuffer); free (sub->text[l]); sub->text[l] = ot; } - if (l){ - for (l = sub->lines; l;) - free (sub->text[--l]); - return ERR; - } return sub; } - -// for demux_ogg.c: -subtitle* subcp_recode1 (subtitle *sub) -{ - int l=sub->lines; - size_t ileft, oleft; - - if(icdsc == (iconv_t)(-1)) return sub; - - while (l){ - char *ip = icbuffer; - char *op = sub->text[--l]; - strlcpy(ip, op, ICBUFFSIZE); - ileft = strlen(ip); - oleft = ICBUFFSIZE - 1; - - if (iconv(icdsc, &ip, &ileft, - &op, &oleft) == (size_t)(-1)) { - mp_msg(MSGT_SUBREADER,MSGL_V,"SUB: error recoding line (2).\n"); - return sub; - } - *op='\0' ; - } - return sub; -} #endif #ifdef USE_FRIBIDI -- cgit v1.2.3