mirror of
https://github.com/mpv-player/mpv
synced 2024-12-18 12:55:16 +00:00
overlapping subtitles support is now optional, can be disabled (-nooverlapsub)
patch by Salvatore Falco <sfalco@studenti.ing.uniroma1.it> git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8362 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
7228f67795
commit
268b2c1a0f
@ -774,6 +774,9 @@ If FreeType support is enabled, the old font support can't be used.
|
|||||||
.B \-noautosub
|
.B \-noautosub
|
||||||
Turns off automatic loading of subtitle files.
|
Turns off automatic loading of subtitle files.
|
||||||
.TP
|
.TP
|
||||||
|
.B \-nooverlapsub
|
||||||
|
Turns off support for overlapping subtitles.
|
||||||
|
.TP
|
||||||
.B \-osdlevel <0\-2> (MPLAYER only)
|
.B \-osdlevel <0\-2> (MPLAYER only)
|
||||||
Specifies which mode the OSD should start in (0: none, 1: seek, 2: seek+timer,
|
Specifies which mode the OSD should start in (0: none, 1: seek, 2: seek+timer,
|
||||||
default is 1).
|
default is 1).
|
||||||
|
@ -180,6 +180,7 @@
|
|||||||
{"ifo", &spudec_ifo, CONF_TYPE_STRING, 0, 0, 0, NULL},
|
{"ifo", &spudec_ifo, CONF_TYPE_STRING, 0, 0, 0, NULL},
|
||||||
// enable Closed Captioning display
|
// enable Closed Captioning display
|
||||||
{"subcc", &subcc_enabled, CONF_TYPE_FLAG, 0, 0, 1, NULL},
|
{"subcc", &subcc_enabled, CONF_TYPE_FLAG, 0, 0, 1, NULL},
|
||||||
|
{"nooverlapsub", &suboverlap_enabled, CONF_TYPE_FLAG, 0, 0, 0, NULL},
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_OSD
|
#ifdef USE_OSD
|
||||||
{"font", &font_name, CONF_TYPE_STRING, 0, 0, 0, NULL},
|
{"font", &font_name, CONF_TYPE_STRING, 0, 0, 0, NULL},
|
||||||
|
22
libvo/sub.c
22
libvo/sub.c
@ -351,7 +351,20 @@ inline static void vo_update_text_sub(mp_osd_obj_t* obj,int dxs,int dys){
|
|||||||
lastk=k;
|
lastk=k;
|
||||||
lastStripPosition=j;
|
lastStripPosition=j;
|
||||||
lastxsize=xsize;
|
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){
|
if (vo_font->pic_a[font]->h > h){
|
||||||
h=vo_font->pic_a[font]->h;
|
h=vo_font->pic_a[font]->h;
|
||||||
}
|
}
|
||||||
@ -396,6 +409,13 @@ inline static void vo_update_text_sub(mp_osd_obj_t* obj,int dxs,int dys){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
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)){
|
if (obj->y >= (dys * sub_pos / 100)){
|
||||||
int old=obj->y;
|
int old=obj->y;
|
||||||
obj->y = dys * sub_pos /100;
|
obj->y = dys * sub_pos /100;
|
||||||
|
@ -98,6 +98,7 @@ extern char *sub_cp;
|
|||||||
#endif
|
#endif
|
||||||
extern int sub_pos;
|
extern int sub_pos;
|
||||||
extern int sub_visibility;
|
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_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));
|
//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));
|
||||||
|
@ -162,6 +162,7 @@ float sub_delay=0;
|
|||||||
float sub_fps=0;
|
float sub_fps=0;
|
||||||
int sub_auto = 0;
|
int sub_auto = 0;
|
||||||
int subcc_enabled=0;
|
int subcc_enabled=0;
|
||||||
|
int suboverlap_enabled = 1;
|
||||||
|
|
||||||
#ifdef USE_SUB
|
#ifdef USE_SUB
|
||||||
static subtitle* subtitles=NULL;
|
static subtitle* subtitles=NULL;
|
||||||
|
@ -256,6 +256,7 @@ int sub_auto = 1;
|
|||||||
char *vobsub_name=NULL;
|
char *vobsub_name=NULL;
|
||||||
/*DSP!!char *dsp=NULL;*/
|
/*DSP!!char *dsp=NULL;*/
|
||||||
int subcc_enabled=0;
|
int subcc_enabled=0;
|
||||||
|
int suboverlap_enabled = 1;
|
||||||
#ifdef USE_SUB
|
#ifdef USE_SUB
|
||||||
subtitle* subtitles=NULL;
|
subtitle* subtitles=NULL;
|
||||||
float sub_last_pts = -303;
|
float sub_last_pts = -303;
|
||||||
|
@ -1048,7 +1048,7 @@ subtitle* sub_read_file (char *filename, float fps) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
adjust_subs_time(first, 6.0, fps, 0); /* ~6 secs AST */
|
adjust_subs_time(first, 6.0, fps, 0); /* ~6 secs AST */
|
||||||
|
if(suboverlap_enabled){
|
||||||
// here we manage overlapping subtitles
|
// here we manage overlapping subtitles
|
||||||
sub_orig = sub_num;
|
sub_orig = sub_num;
|
||||||
n_first = sub_num;
|
n_first = sub_num;
|
||||||
@ -1057,7 +1057,7 @@ subtitle* sub_read_file (char *filename, float fps) {
|
|||||||
second = NULL;
|
second = NULL;
|
||||||
// for each subtitle in first[]
|
// for each subtitle in first[]
|
||||||
for (sub_first = 0; sub_first < n_first; ++sub_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;
|
unsigned long end_time = first[sub_first].end;
|
||||||
int lines_to_add = 0, sub_to_add, event, ls, lf;
|
int lines_to_add = 0, sub_to_add, event, ls, lf;
|
||||||
|
|
||||||
@ -1144,6 +1144,11 @@ subtitle* sub_read_file (char *filename, float fps) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return second;
|
return second;
|
||||||
|
} else { //if(suboverlap_enabled)
|
||||||
|
adjust_subs_time(first, 6.0, fps, 1); /* ~6 secs AST */
|
||||||
|
|
||||||
|
return first;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
extern int sub_uses_time;
|
extern int sub_uses_time;
|
||||||
extern int sub_errs;
|
extern int sub_errs;
|
||||||
extern int sub_num; // number of subtitle structs
|
extern int sub_num; // number of subtitle structs
|
||||||
|
extern int suboverlap_enabled;
|
||||||
|
|
||||||
// subtitle formats
|
// subtitle formats
|
||||||
#define SUB_INVALID -1
|
#define SUB_INVALID -1
|
||||||
|
Loading…
Reference in New Issue
Block a user