summaryrefslogtreecommitdiffstats
path: root/subreader.c
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-10-18 16:09:59 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-10-18 16:09:59 +0000
commit325912bf97562e2345470848699cdf56d66bdde4 (patch)
tree0f944dd39cd0a5d5b423cd4b9e0700ea76385fac /subreader.c
parent6d4ad204b2b4fb3a0ba3d8fa38bf7c7ea8eb9085 (diff)
downloadmpv-325912bf97562e2345470848699cdf56d66bdde4.tar.bz2
mpv-325912bf97562e2345470848699cdf56d66bdde4.tar.xz
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
Diffstat (limited to 'subreader.c')
-rw-r--r--subreader.c56
1 files changed, 11 insertions, 45 deletions
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