# HG changeset patch # User arpi # Date 1039046615 0 # Node ID 2202c00001e332958a3770ce604017efd5156563 # Parent ad75993b8deb962127f020989cea1dd8c4a05d8a overlapping subtitles support is now optional, can be disabled (-nooverlapsub) patch by Salvatore Falco diff -r ad75993b8deb -r 2202c00001e3 DOCS/mplayer.1 --- a/DOCS/mplayer.1 Wed Dec 04 23:58:38 2002 +0000 +++ b/DOCS/mplayer.1 Thu Dec 05 00:03:35 2002 +0000 @@ -774,6 +774,9 @@ .B \-noautosub Turns off automatic loading of subtitle files. .TP +.B \-nooverlapsub +Turns off support for overlapping subtitles. +.TP .B \-osdlevel <0\-2> (MPLAYER only) Specifies which mode the OSD should start in (0: none, 1: seek, 2: seek+timer, default is 1). diff -r ad75993b8deb -r 2202c00001e3 cfg-common.h --- a/cfg-common.h Wed Dec 04 23:58:38 2002 +0000 +++ b/cfg-common.h Thu Dec 05 00:03:35 2002 +0000 @@ -180,6 +180,7 @@ {"ifo", &spudec_ifo, CONF_TYPE_STRING, 0, 0, 0, NULL}, // enable Closed Captioning display {"subcc", &subcc_enabled, CONF_TYPE_FLAG, 0, 0, 1, NULL}, + {"nooverlapsub", &suboverlap_enabled, CONF_TYPE_FLAG, 0, 0, 0, NULL}, #endif #ifdef USE_OSD {"font", &font_name, CONF_TYPE_STRING, 0, 0, 0, NULL}, diff -r ad75993b8deb -r 2202c00001e3 libvo/sub.c --- a/libvo/sub.c Wed Dec 04 23:58:38 2002 +0000 +++ b/libvo/sub.c Thu Dec 05 00:03:35 2002 +0000 @@ -351,7 +351,20 @@ lastk=k; lastStripPosition=j; lastxsize=xsize; - } else if ((font=vo_font->font[c])>=0){ + } else if ((!suboverlap_enabled) && ((font = vo_font->font[c]) >= 0)) { + /* + With overlapping subtitles, we need to comment this out, + beacuse that part of the code creates subtitles with the + last line blank (" "): in this case previous 'if' statement + is false an following 'if' is not executed. When, instead, + a subtitle with a non-blank last line arrives, the following + code is executed, and the result is a small 'jump' of the + subtiles. We can not simply delete the following, unless + having the last subtitle line partly drawn outside the + screen, so, some lines forward, we introduce an increment + which affects both blank and non-blank lines. + *sfalco* + */ if (vo_font->pic_a[font]->h > h){ h=vo_font->pic_a[font]->h; } @@ -396,6 +409,13 @@ } } + /* + Here is the little increment we talked about before. '40' is the + ASCII code for '(', which, hopefully, is the highest char of the + font. + *sfalco* + */ + if(suboverlap_enabled) obj->y -= vo_font->pic_a[vo_font->font[40]]->h - vo_font->height; if (obj->y >= (dys * sub_pos / 100)){ int old=obj->y; obj->y = dys * sub_pos /100; diff -r ad75993b8deb -r 2202c00001e3 libvo/sub.h --- a/libvo/sub.h Wed Dec 04 23:58:38 2002 +0000 +++ b/libvo/sub.h Thu Dec 05 00:03:35 2002 +0000 @@ -98,6 +98,7 @@ #endif extern int sub_pos; extern int sub_visibility; +extern int suboverlap_enabled; //extern void vo_draw_text_osd(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)); //extern void vo_draw_text_progbar(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)); diff -r ad75993b8deb -r 2202c00001e3 mencoder.c --- a/mencoder.c Wed Dec 04 23:58:38 2002 +0000 +++ b/mencoder.c Thu Dec 05 00:03:35 2002 +0000 @@ -162,6 +162,7 @@ float sub_fps=0; int sub_auto = 0; int subcc_enabled=0; +int suboverlap_enabled = 1; #ifdef USE_SUB static subtitle* subtitles=NULL; diff -r ad75993b8deb -r 2202c00001e3 mplayer.c --- a/mplayer.c Wed Dec 04 23:58:38 2002 +0000 +++ b/mplayer.c Thu Dec 05 00:03:35 2002 +0000 @@ -256,6 +256,7 @@ char *vobsub_name=NULL; /*DSP!!char *dsp=NULL;*/ int subcc_enabled=0; +int suboverlap_enabled = 1; #ifdef USE_SUB subtitle* subtitles=NULL; float sub_last_pts = -303; diff -r ad75993b8deb -r 2202c00001e3 subreader.c --- a/subreader.c Wed Dec 04 23:58:38 2002 +0000 +++ b/subreader.c Thu Dec 05 00:03:35 2002 +0000 @@ -1048,7 +1048,7 @@ } adjust_subs_time(first, 6.0, fps, 0); /* ~6 secs AST */ - +if(suboverlap_enabled){ // here we manage overlapping subtitles sub_orig = sub_num; n_first = sub_num; @@ -1057,7 +1057,7 @@ second = NULL; // for each subtitle in first[] for (sub_first = 0; sub_first < n_first; ++sub_first) { - while (first[sub_first].start <= first[sub_first].end) { + while (first[sub_first].start < first[sub_first].end) { unsigned long end_time = first[sub_first].end; int lines_to_add = 0, sub_to_add, event, ls, lf; @@ -1144,6 +1144,11 @@ } return second; +} else { //if(suboverlap_enabled) + adjust_subs_time(first, 6.0, fps, 1); /* ~6 secs AST */ + + return first; +} } #if 0 diff -r ad75993b8deb -r 2202c00001e3 subreader.h --- a/subreader.h Wed Dec 04 23:58:38 2002 +0000 +++ b/subreader.h Thu Dec 05 00:03:35 2002 +0000 @@ -4,6 +4,7 @@ extern int sub_uses_time; extern int sub_errs; extern int sub_num; // number of subtitle structs +extern int suboverlap_enabled; // subtitle formats #define SUB_INVALID -1