diff options
author | 2006-10-18 16:09:59 +0000 | |
---|---|---|
committer | 2006-10-18 16:09:59 +0000 | |
commit | 325912bf97562e2345470848699cdf56d66bdde4 (patch) | |
tree | 0f944dd39cd0a5d5b423cd4b9e0700ea76385fac | |
parent | 6d4ad204b2b4fb3a0ba3d8fa38bf7c7ea8eb9085 (diff) |
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
-rw-r--r-- | libmpdemux/demux_ogg.c | 2 | ||||
-rw-r--r-- | 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 |