mirror of
https://github.com/mpv-player/mpv
synced 2025-03-06 22:28:01 +00:00
This time is a patch to improve subtitle alignment management. It
implements SSA alignment styles; note that alignment for SSA files is not actually supported, but for SAMI files (which use the same alignment codes) it is. patch by Salvatore Falco <sfalco at studenti.ing.uniroma1.it> git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@13344 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
f6674ba8be
commit
5e00ed042b
19
libvo/sub.c
19
libvo/sub.c
@ -653,16 +653,23 @@ inline static void vo_update_text_sub(mp_osd_obj_t* obj,int dxs,int dys){
|
||||
|
||||
y = obj->y;
|
||||
|
||||
obj->alignment = 0;
|
||||
switch(vo_sub->alignment) {
|
||||
case SUB_ALIGNMENT_HLEFT:
|
||||
case SUB_ALIGNMENT_BOTTOMLEFT:
|
||||
case SUB_ALIGNMENT_MIDDLELEFT:
|
||||
case SUB_ALIGNMENT_TOPLEFT:
|
||||
obj->alignment |= 0x1;
|
||||
break;
|
||||
case SUB_ALIGNMENT_HCENTER:
|
||||
obj->alignment |= 0x0;
|
||||
break;
|
||||
case SUB_ALIGNMENT_HRIGHT:
|
||||
default:
|
||||
case SUB_ALIGNMENT_BOTTOMRIGHT:
|
||||
case SUB_ALIGNMENT_MIDDLERIGHT:
|
||||
case SUB_ALIGNMENT_TOPRIGHT:
|
||||
obj->alignment |= 0x2;
|
||||
break;
|
||||
case SUB_ALIGNMENT_BOTTOMCENTER:
|
||||
case SUB_ALIGNMENT_MIDDLECENTER:
|
||||
case SUB_ALIGNMENT_TOPCENTER:
|
||||
default:
|
||||
obj->alignment |= 0x0;
|
||||
}
|
||||
|
||||
i=j=0;
|
||||
|
42
subreader.c
42
subreader.c
@ -100,6 +100,7 @@ subtitle *sub_read_line_sami(FILE *fd, subtitle *current) {
|
||||
int state;
|
||||
|
||||
current->lines = current->start = current->end = 0;
|
||||
current->alignment = SUB_ALIGNMENT_BOTTOMCENTER;
|
||||
state = 0;
|
||||
|
||||
/* read the first line */
|
||||
@ -173,7 +174,38 @@ subtitle *sub_read_line_sami(FILE *fd, subtitle *current) {
|
||||
s = strchr (s, '>');
|
||||
if (s) { s++; state = 3; continue; }
|
||||
break;
|
||||
case 5: /* get rid of {...} text */
|
||||
case 5: /* get rid of {...} text, but read the alignment code */
|
||||
if ((*s == '\\') && (*(s + 1) == 'a') && !sub_no_text_pp) {
|
||||
if (stristr(s, "\\a1") != NULL) {
|
||||
current->alignment = SUB_ALIGNMENT_BOTTOMLEFT;
|
||||
s = s + 3;
|
||||
}
|
||||
if (stristr(s, "\\a2") != NULL) {
|
||||
current->alignment = SUB_ALIGNMENT_BOTTOMCENTER;
|
||||
s = s + 3;
|
||||
} else if (stristr(s, "\\a3") != NULL) {
|
||||
current->alignment = SUB_ALIGNMENT_BOTTOMRIGHT;
|
||||
s = s + 3;
|
||||
} else if ((stristr(s, "\\a4") != NULL) || (stristr(s, "\\a5") != NULL) || (stristr(s, "\\a8") != NULL)) {
|
||||
current->alignment = SUB_ALIGNMENT_TOPLEFT;
|
||||
s = s + 3;
|
||||
} else if (stristr(s, "\\a6") != NULL) {
|
||||
current->alignment = SUB_ALIGNMENT_TOPCENTER;
|
||||
s = s + 3;
|
||||
} else if (stristr(s, "\\a7") != NULL) {
|
||||
current->alignment = SUB_ALIGNMENT_TOPRIGHT;
|
||||
s = s + 3;
|
||||
} else if (stristr(s, "\\a9") != NULL) {
|
||||
current->alignment = SUB_ALIGNMENT_MIDDLELEFT;
|
||||
s = s + 3;
|
||||
} else if (stristr(s, "\\a10") != NULL) {
|
||||
current->alignment = SUB_ALIGNMENT_MIDDLECENTER;
|
||||
s = s + 4;
|
||||
} else if (stristr(s, "\\a11") != NULL) {
|
||||
current->alignment = SUB_ALIGNMENT_MIDDLERIGHT;
|
||||
s = s + 4;
|
||||
}
|
||||
}
|
||||
if (*s == '}') state = 3;
|
||||
++s;
|
||||
continue;
|
||||
@ -889,11 +921,11 @@ subtitle *sub_read_line_jacosub(FILE * fd, subtitle * current)
|
||||
continue;
|
||||
}
|
||||
if (strstr(directive, "JL") != NULL) {
|
||||
current->alignment = SUB_ALIGNMENT_HLEFT;
|
||||
current->alignment = SUB_ALIGNMENT_BOTTOMLEFT;
|
||||
} else if (strstr(directive, "JR") != NULL) {
|
||||
current->alignment = SUB_ALIGNMENT_HRIGHT;
|
||||
current->alignment = SUB_ALIGNMENT_BOTTOMRIGHT;
|
||||
} else {
|
||||
current->alignment = SUB_ALIGNMENT_HCENTER;
|
||||
current->alignment = SUB_ALIGNMENT_BOTTOMCENTER;
|
||||
}
|
||||
strcpy(line2, line1);
|
||||
p = line2;
|
||||
@ -1635,7 +1667,7 @@ if ((suboverlap_enabled == 2) ||
|
||||
memset(&second[sub_num], '\0', sizeof(subtitle));
|
||||
second[sub_num].start = local_start;
|
||||
second[sub_num].end = local_end;
|
||||
second[sub_num].alignment = SUB_ALIGNMENT_HCENTER;
|
||||
second[sub_num].alignment = first[sub_first].alignment;
|
||||
n_max = (lines_to_add < SUB_MAX_TEXT) ? lines_to_add : SUB_MAX_TEXT;
|
||||
for (i = 0, j = 0; j < n_max; ++j) {
|
||||
if (placeholder[counter][j] != -1) {
|
||||
|
12
subreader.h
12
subreader.h
@ -30,9 +30,15 @@ extern int sub_format;
|
||||
#define MAX_SUBTITLE_FILES 128
|
||||
|
||||
#define SUB_MAX_TEXT 10
|
||||
#define SUB_ALIGNMENT_HLEFT 1
|
||||
#define SUB_ALIGNMENT_HCENTER 0
|
||||
#define SUB_ALIGNMENT_HRIGHT 2
|
||||
#define SUB_ALIGNMENT_BOTTOMLEFT 1
|
||||
#define SUB_ALIGNMENT_BOTTOMCENTER 2
|
||||
#define SUB_ALIGNMENT_BOTTOMRIGHT 3
|
||||
#define SUB_ALIGNMENT_MIDDLELEFT 4
|
||||
#define SUB_ALIGNMENT_MIDDLECENTER 5
|
||||
#define SUB_ALIGNMENT_MIDDLERIGHT 6
|
||||
#define SUB_ALIGNMENT_TOPLEFT 7
|
||||
#define SUB_ALIGNMENT_TOPCENTER 8
|
||||
#define SUB_ALIGNMENT_TOPRIGHT 9
|
||||
|
||||
typedef struct {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user