summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmpdemux/demux_ogg.c11
-rw-r--r--subreader.c23
-rw-r--r--subreader.h1
3 files changed, 35 insertions, 0 deletions
diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c
index d550e66d3c..9ed49ae333 100644
--- a/libmpdemux/demux_ogg.c
+++ b/libmpdemux/demux_ogg.c
@@ -231,6 +231,9 @@ void demux_ogg_add_sub (char* packet) {
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);
+#endif
vo_sub = &ogg_sub;
vo_osd_changed(OSDTYPE_SUBTITLE);
}
@@ -465,6 +468,10 @@ int demux_ogg_open(demuxer_t* demuxer) {
sh_audio_t* sh_a;
sh_video_t* sh_v;
+#ifdef USE_ICONV
+ subcp_open();
+#endif
+
s = demuxer->stream;
ogg_d = (ogg_demuxer_t*)calloc(1,sizeof(ogg_demuxer_t));
@@ -1006,6 +1013,10 @@ void demux_close_ogg(demuxer_t* demuxer) {
if(!ogg_d)
return;
+#ifdef USE_ICONV
+ subcp_close();
+#endif
+
if(ogg_d->subs)
free(ogg_d->subs);
if(ogg_d->syncpoints)
diff --git a/subreader.c b/subreader.c
index 50c4456b1d..2add84f7c8 100644
--- a/subreader.c
+++ b/subreader.c
@@ -964,6 +964,29 @@ subtitle* subcp_recode (subtitle *sub)
return sub;
}
+// for demux_ogg.c:
+subtitle* subcp_recode1 (subtitle *sub)
+{
+ int l=sub->lines;
+ size_t ileft, oleft;
+ char *op, *ip;
+
+ while (l){
+ ip = icbuffer;
+ op = sub->text[--l];
+ strcpy(ip, op);
+ ileft = strlen(ip);
+ oleft = ICBUFFSIZE - 1;
+
+ if (iconv(icdsc, &ip, &ileft,
+ &op, &oleft) == (size_t)(-1)) {
+ mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: error recoding line.\n");
+ return sub;
+ }
+ *op='\0' ;
+ }
+ return sub;
+}
#endif
static void adjust_subs_time(subtitle* sub, float subtime, float fps, int block){
diff --git a/subreader.h b/subreader.h
index 78bfd907ac..401a0cd0ad 100644
--- a/subreader.h
+++ b/subreader.h
@@ -38,6 +38,7 @@ typedef struct {
} subtitle;
subtitle* sub_read_file (char *filename, float pts);
+subtitle* subcp_recode1 (subtitle *sub);
char * sub_filename(char *path, char * fname);
void list_sub_file(subtitle* subs);
void dump_srt(subtitle* subs, float fps);