Mercurial > mplayer.hg
changeset 11873:9c66ef56b1b1
Fix the PJS (aka dunnowhat) subtitles
patch by Salvador Eduardo Tropea <salvador@inti.gov.ar>
author | attila |
---|---|
date | Thu, 29 Jan 2004 10:53:19 +0000 |
parents | d158978a3d3c |
children | 3f6cecc44fc7 |
files | DOCS/man/en/mplayer.1 subreader.c subreader.h |
diffstat | 3 files changed, 41 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/DOCS/man/en/mplayer.1 Thu Jan 29 10:36:33 2004 +0000 +++ b/DOCS/man/en/mplayer.1 Thu Jan 29 10:53:19 2004 +0000 @@ -162,8 +162,8 @@ MPlayer has an onscreen display (OSD) for status information, nice big antialiased shaded subtitles and visual feedback for keyboard controls. European/\:ISO 8859-1,2 (Hungarian, English, Czech, etc), Cyrillic and Korean -fonts are supported along with 10 subtitle formats (MicroDVD, SubRip, -SubViewer, Sami, VPlayer, RT, SSA, AQTitle, JACOsub and our own: MPsub) and +fonts are supported along with 11 subtitle formats (MicroDVD, SubRip, +SubViewer, Sami, VPlayer, RT, SSA, AQTitle, JACOsub, PJS and our own: MPsub) and DVD subtitles (SPU streams, VobSub and Closed Captions). .PP .B mencoder
--- a/subreader.c Thu Jan 29 10:36:33 2004 +0000 +++ b/subreader.c Thu Jan 29 10:53:19 2004 +0000 @@ -3,7 +3,7 @@ * * Written by laaz * Some code cleanup & realloc() by A'rpi/ESP-team - * dunnowhat sub format by szabi + * */ @@ -544,15 +544,46 @@ } } -subtitle *sub_read_line_dunnowhat(FILE *fd,subtitle *current) { +/* + * PJS subtitles reader. + * That's the "Phoenix Japanimation Society" format. + * I found some of them in http://www.scriptsclub.org/ (used for anime). + * The time is in tenths of second. + * + * by set, based on code by szabi (dunnowhat sub format ;-) + */ +subtitle *sub_read_line_pjs(FILE *fd,subtitle *current) { char line[LINE_LEN+1]; - char text[LINE_LEN+1]; + char text[LINE_LEN+1], *s, *d; if (!fgets (line, LINE_LEN, fd)) return NULL; - if (sscanf (line, "%ld,%ld,\"%[^\"]", &(current->start), - &(current->end), text) <3) + /* skip spaces */ + for (s=line; *s && isspace(*s); s++); + /* allow empty lines at the end of the file */ + if (*s==0) + return NULL; + /* get the time */ + if (sscanf (s, "%ld,%ld,", &(current->start), + &(current->end)) <2) { return ERR; + } + /* the files I have are in tenths of second */ + current->start *= 10; + current->end *= 10; + /* walk to the beggining of the string */ + for (; *s; s++) if (*s==',') break; + if (*s) { + for (s++; *s; s++) if (*s==',') break; + if (*s) s++; + } + if (*s!='"') { + return ERR; + } + /* copy the string to the text buffer */ + for (s++, d=text; *s && *s!='"'; s++, d++) + *d=*s; + *d=0; current->text[0] = strdup(text); current->lines = 1; @@ -946,7 +977,7 @@ if (!memcmp(line, "Dialogue: ", 10)) {*uses_time=1; return SUB_SSA;} if (sscanf (line, "%d,%d,\"%c", &i, &i, (char *) &i) == 3) - {*uses_time=0;return SUB_DUNNOWHAT;} + {*uses_time=1;return SUB_PJS;} if (sscanf (line, "FORMAT=%d", &i) == 1) {*uses_time=0; return SUB_MPSUB;} if (sscanf (line, "FORMAT=TIM%c", &p)==1 && p=='E') @@ -1198,7 +1229,7 @@ { sub_read_line_vplayer, NULL, "vplayer" }, { sub_read_line_rt, NULL, "rt" }, { sub_read_line_ssa, sub_pp_ssa, "ssa" }, - { sub_read_line_dunnowhat, NULL, "dunnowhat" }, + { sub_read_line_pjs, NULL, "pjs" }, { sub_read_line_mpsub, NULL, "mpsub" }, { sub_read_line_aqt, NULL, "aqt" }, { sub_read_line_subviewer2, NULL, "subviewer 2.0" },
--- a/subreader.h Thu Jan 29 10:36:33 2004 +0000 +++ b/subreader.h Thu Jan 29 10:53:19 2004 +0000 @@ -14,7 +14,7 @@ #define SUB_VPLAYER 4 #define SUB_RT 5 #define SUB_SSA 6 -#define SUB_DUNNOWHAT 7 // FIXME what format is it ? +#define SUB_PJS 7 #define SUB_MPSUB 8 #define SUB_AQTITLE 9 #define SUB_SUBVIEWER2 10