annotate subreader.c @ 13252:7dfd84faaa09

Some minor vo_jpeg fixes: Removed unused variable dst. MPlayer now exits if it is unable to create a file for JPEG output and prints an appropriate message, instead of going on if all is right (which is not). Added line to authors file.
author ivo
date Sun, 05 Sep 2004 17:54:09 +0000
parents b1e482fcd919
children 1a4b6e575484
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1 /*
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
2 * Subtitle reader with format autodetection
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
3 *
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
4 * Written by laaz
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
5 * Some code cleanup & realloc() by A'rpi/ESP-team
11873
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
6 *
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
7 */
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
8
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
9
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
10 #include <stdio.h>
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
11 #include <stdlib.h>
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
12 #include <string.h>
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
13 #include <ctype.h>
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
14
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
15 #include <sys/types.h>
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
16 #include <dirent.h>
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
17
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
18 #include "config.h"
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
19 #include "mp_msg.h"
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
20 #include "subreader.h"
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
21
12443
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
22 #ifdef HAVE_ENCA
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
23 #include <enca.h>
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
24 #endif
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
25
3701
a33d0351630e bzero() -> memset()
pl
parents: 3543
diff changeset
26 #define ERR ((void *) -1)
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
27
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
28 #ifdef USE_ICONV
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
29 #include <iconv.h>
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
30 char *sub_cp=NULL;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
31 #endif
9635
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
32 #ifdef USE_FRIBIDI
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
33 #include <fribidi/fribidi.h>
10649
857a34ff479d Fixes FriBiDi support and extends it with configure options. Patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 10555
diff changeset
34 char *fribidi_charset = NULL;
857a34ff479d Fixes FriBiDi support and extends it with configure options. Patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 10555
diff changeset
35 int flip_hebrew = 1;
9635
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
36 #endif
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
37
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
38 extern char* dvdsub_lang;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
39
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
40 /* Maximal length of line of a subtitle */
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
41 #define LINE_LEN 1000
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
42 static float mpsub_position=0;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
43 static float mpsub_multiplier=1.;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
44 static int sub_slacktime = 20000; //20 sec
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
45
9126
7a06258271d6 Add a command line option (-sub-no-text-pp) to disable subtitles
arpi
parents: 9056
diff changeset
46 int sub_no_text_pp=0; // 1 => do not apply text post-processing
7a06258271d6 Add a command line option (-sub-no-text-pp) to disable subtitles
arpi
parents: 9056
diff changeset
47 // like {\...} elimination in SSA format.
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
48
9893
eb274fd5e84e option for sub match fuzziness level
henry
parents: 9888
diff changeset
49 int sub_match_fuzziness=0; // level of sub name matching fuzziness
9884
d7b86f7d1406 turn most of the subtitle matching fuzziness off by default
henry
parents: 9872
diff changeset
50
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
51 /* Use the SUB_* constant defined in the header file */
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
52 int sub_format=SUB_INVALID;
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
53 #ifdef USE_SORTSUB
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
54 /*
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
55 Some subtitling formats, namely AQT and Subrip09, define the end of a
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
56 subtitle as the beginning of the following. Since currently we read one
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
57 subtitle at time, for these format we keep two global *subtitle,
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
58 previous_aqt_sub and previous_subrip09_sub, pointing to previous subtitle,
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
59 so we can change its end when we read current subtitle starting time.
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
60 When USE_SORTSUB is defined, we use a single global unsigned long,
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
61 previous_sub_end, for both (and even future) formats, to store the end of
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
62 the previous sub: it is initialized to 0 in sub_read_file and eventually
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
63 modified by sub_read_aqt_line or sub_read_subrip09_line.
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
64 */
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
65 unsigned long previous_sub_end;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
66 #endif
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
67
3701
a33d0351630e bzero() -> memset()
pl
parents: 3543
diff changeset
68 static int eol(char p) {
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
69 return (p=='\r' || p=='\n' || p=='\0');
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
70 }
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
71
3701
a33d0351630e bzero() -> memset()
pl
parents: 3543
diff changeset
72 /* Remove leading and trailing space */
a33d0351630e bzero() -> memset()
pl
parents: 3543
diff changeset
73 static void trail_space(char *s) {
a33d0351630e bzero() -> memset()
pl
parents: 3543
diff changeset
74 int i = 0;
3924
9f18722fafe9 tail_space infinite loop fix by jeon_goon@lycos.co.kr
arpi
parents: 3735
diff changeset
75 while (isspace(s[i])) ++i;
3701
a33d0351630e bzero() -> memset()
pl
parents: 3543
diff changeset
76 if (i) strcpy(s, s + i);
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
77 i = strlen(s) - 1;
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
78 while (i > 0 && isspace(s[i])) s[i--] = '\0';
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
79 }
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
80
10692
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
81 static char *stristr(const char *haystack, const char *needle) {
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
82 int len = 0;
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
83 const char *p = haystack;
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
84
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
85 if (!(haystack && needle)) return NULL;
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
86
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
87 len=strlen(needle);
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
88 while (*p != '\0') {
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
89 if (strncasecmp(p, needle, len) == 0) return (char*)p;
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
90 p++;
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
91 }
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
92
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
93 return NULL;
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
94 }
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
95
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
96 subtitle *sub_read_line_sami(FILE *fd, subtitle *current) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
97 static char line[LINE_LEN+1];
3235
0cf593b6bab0 patch fixes the showing last line of subtitles and support of SAMI Slacktime option by Evgeny Chukreev <codedj@echo.ru>
arpi
parents: 2915
diff changeset
98 static char *s = NULL, *slacktime_s;
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7460
diff changeset
99 char text[LINE_LEN+1], *p=NULL, *q;
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
100 int state;
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
101
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
102 current->lines = current->start = current->end = 0;
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
103 state = 0;
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
104
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
105 /* read the first line */
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
106 if (!s)
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
107 if (!(s = fgets(line, LINE_LEN, fd))) return 0;
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
108
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
109 do {
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
110 switch (state) {
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
111
3235
0cf593b6bab0 patch fixes the showing last line of subtitles and support of SAMI Slacktime option by Evgeny Chukreev <codedj@echo.ru>
arpi
parents: 2915
diff changeset
112 case 0: /* find "START=" or "Slacktime:" */
10692
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
113 slacktime_s = stristr (s, "Slacktime:");
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
114 if (slacktime_s)
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
115 sub_slacktime = strtol (slacktime_s+10, NULL, 0) / 10;
3235
0cf593b6bab0 patch fixes the showing last line of subtitles and support of SAMI Slacktime option by Evgeny Chukreev <codedj@echo.ru>
arpi
parents: 2915
diff changeset
116
10692
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
117 s = stristr (s, "Start=");
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
118 if (s) {
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
119 current->start = strtol (s + 6, &s, 0) / 10;
11838
b4f1df0c1e3a prevent subreader from segfaulting when sami subs dont have
attila
parents: 11496
diff changeset
120 /* eat '>' */
b4f1df0c1e3a prevent subreader from segfaulting when sami subs dont have
attila
parents: 11496
diff changeset
121 for (; *s != '>' && *s != '\0'; s++);
b4f1df0c1e3a prevent subreader from segfaulting when sami subs dont have
attila
parents: 11496
diff changeset
122 s++;
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
123 state = 1; continue;
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
124 }
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
125 break;
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
126
11838
b4f1df0c1e3a prevent subreader from segfaulting when sami subs dont have
attila
parents: 11496
diff changeset
127 case 1: /* find (optionnal) "<P", skip other TAGs */
b4f1df0c1e3a prevent subreader from segfaulting when sami subs dont have
attila
parents: 11496
diff changeset
128 for (; *s == ' ' || *s == '\t'; s++); /* strip blanks, if any */
b4f1df0c1e3a prevent subreader from segfaulting when sami subs dont have
attila
parents: 11496
diff changeset
129 if (*s == '\0') break;
b4f1df0c1e3a prevent subreader from segfaulting when sami subs dont have
attila
parents: 11496
diff changeset
130 if (*s != '<') { state = 3; p = text; continue; } /* not a TAG */
b4f1df0c1e3a prevent subreader from segfaulting when sami subs dont have
attila
parents: 11496
diff changeset
131 s++;
b4f1df0c1e3a prevent subreader from segfaulting when sami subs dont have
attila
parents: 11496
diff changeset
132 if (*s == 'P' || *s == 'p') { s++; state = 2; continue; } /* found '<P' */
b4f1df0c1e3a prevent subreader from segfaulting when sami subs dont have
attila
parents: 11496
diff changeset
133 for (; *s != '>' && *s != '\0'; s++); /* skip remains of non-<P> TAG */
b4f1df0c1e3a prevent subreader from segfaulting when sami subs dont have
attila
parents: 11496
diff changeset
134 if (s == '\0')
b4f1df0c1e3a prevent subreader from segfaulting when sami subs dont have
attila
parents: 11496
diff changeset
135 break;
b4f1df0c1e3a prevent subreader from segfaulting when sami subs dont have
attila
parents: 11496
diff changeset
136 s++;
b4f1df0c1e3a prevent subreader from segfaulting when sami subs dont have
attila
parents: 11496
diff changeset
137 continue;
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
138
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
139 case 2: /* find ">" */
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
140 if ((s = strchr (s, '>'))) { s++; state = 3; p = text; continue; }
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
141 break;
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
142
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
143 case 3: /* get all text until '<' appears */
3235
0cf593b6bab0 patch fixes the showing last line of subtitles and support of SAMI Slacktime option by Evgeny Chukreev <codedj@echo.ru>
arpi
parents: 2915
diff changeset
144 if (*s == '\0') break;
2836
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
145 else if (!strncasecmp (s, "<br>", 4)) {
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
146 *p = '\0'; p = text; trail_space (text);
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
147 if (text[0] != '\0')
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
148 current->text[current->lines++] = strdup (text);
2836
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
149 s += 4;
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
150 }
12136
8f2e47faee88 skip {...} parts in SAME subs, patch by Salvatore Falco
alex
parents: 11873
diff changeset
151 else if ((*s == '{') && !sub_no_text_pp) { state = 5; ++s; continue; }
2836
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
152 else if (*s == '<') { state = 4; }
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
153 else if (!strncasecmp (s, "&nbsp;", 6)) { *p++ = ' '; s += 6; }
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
154 else if (*s == '\t') { *p++ = ' '; s++; }
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
155 else if (*s == '\r' || *s == '\n') { s++; }
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
156 else *p++ = *s++;
2836
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
157
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
158 /* skip duplicated space */
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
159 if (p > text + 2) if (*(p-1) == ' ' && *(p-2) == ' ') p--;
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
160
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
161 continue;
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
162
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
163 case 4: /* get current->end or skip <TAG> */
10692
7cb48ef05b02 Support for case insensitive string matching in SAMI subtitle files. Patch by Bruno Lecointre.
mosu
parents: 10649
diff changeset
164 q = stristr (s, "Start=");
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
165 if (q) {
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
166 current->end = strtol (q + 6, &q, 0) / 10 - 1;
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
167 *p = '\0'; trail_space (text);
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
168 if (text[0] != '\0')
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
169 current->text[current->lines++] = strdup (text);
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
170 if (current->lines > 0) { state = 99; break; }
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
171 state = 0; continue;
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
172 }
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
173 s = strchr (s, '>');
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
174 if (s) { s++; state = 3; continue; }
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
175 break;
12136
8f2e47faee88 skip {...} parts in SAME subs, patch by Salvatore Falco
alex
parents: 11873
diff changeset
176 case 5: /* get rid of {...} text */
8f2e47faee88 skip {...} parts in SAME subs, patch by Salvatore Falco
alex
parents: 11873
diff changeset
177 if (*s == '}') state = 3;
8f2e47faee88 skip {...} parts in SAME subs, patch by Salvatore Falco
alex
parents: 11873
diff changeset
178 ++s;
8f2e47faee88 skip {...} parts in SAME subs, patch by Salvatore Falco
alex
parents: 11873
diff changeset
179 continue;
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
180 }
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
181
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
182 /* read next line */
3735
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
183 if (state != 99 && !(s = fgets (line, LINE_LEN, fd))) {
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
184 if (current->start > 0) {
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
185 break; // if it is the last subtitle
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
186 } else {
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
187 return 0;
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
188 }
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
189 }
3235
0cf593b6bab0 patch fixes the showing last line of subtitles and support of SAMI Slacktime option by Evgeny Chukreev <codedj@echo.ru>
arpi
parents: 2915
diff changeset
190
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
191 } while (state != 99);
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
192
3235
0cf593b6bab0 patch fixes the showing last line of subtitles and support of SAMI Slacktime option by Evgeny Chukreev <codedj@echo.ru>
arpi
parents: 2915
diff changeset
193 // For the last subtitle
0cf593b6bab0 patch fixes the showing last line of subtitles and support of SAMI Slacktime option by Evgeny Chukreev <codedj@echo.ru>
arpi
parents: 2915
diff changeset
194 if (current->end <= 0) {
0cf593b6bab0 patch fixes the showing last line of subtitles and support of SAMI Slacktime option by Evgeny Chukreev <codedj@echo.ru>
arpi
parents: 2915
diff changeset
195 current->end = current->start + sub_slacktime;
0cf593b6bab0 patch fixes the showing last line of subtitles and support of SAMI Slacktime option by Evgeny Chukreev <codedj@echo.ru>
arpi
parents: 2915
diff changeset
196 *p = '\0'; trail_space (text);
0cf593b6bab0 patch fixes the showing last line of subtitles and support of SAMI Slacktime option by Evgeny Chukreev <codedj@echo.ru>
arpi
parents: 2915
diff changeset
197 if (text[0] != '\0')
0cf593b6bab0 patch fixes the showing last line of subtitles and support of SAMI Slacktime option by Evgeny Chukreev <codedj@echo.ru>
arpi
parents: 2915
diff changeset
198 current->text[current->lines++] = strdup (text);
0cf593b6bab0 patch fixes the showing last line of subtitles and support of SAMI Slacktime option by Evgeny Chukreev <codedj@echo.ru>
arpi
parents: 2915
diff changeset
199 }
0cf593b6bab0 patch fixes the showing last line of subtitles and support of SAMI Slacktime option by Evgeny Chukreev <codedj@echo.ru>
arpi
parents: 2915
diff changeset
200
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
201 return current;
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
202 }
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
203
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
204
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
205 char *sub_readtext(char *source, char **dest) {
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
206 int len=0;
932
c3073fae3120 more stabile
laaz
parents: 921
diff changeset
207 char *p=source;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
208
6242
9c8c3b5e6658 possible sig11 fixed in .rt parser (weisskreuzova.zip)
arpi
parents: 6208
diff changeset
209 // printf("src=%p dest=%p \n",source,dest);
9c8c3b5e6658 possible sig11 fixed in .rt parser (weisskreuzova.zip)
arpi
parents: 6208
diff changeset
210
932
c3073fae3120 more stabile
laaz
parents: 921
diff changeset
211 while ( !eol(*p) && *p!= '|' ) {
c3073fae3120 more stabile
laaz
parents: 921
diff changeset
212 p++,len++;
c3073fae3120 more stabile
laaz
parents: 921
diff changeset
213 }
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
214
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
215 *dest= (char *)malloc (len+1);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
216 if (!dest) {return ERR;}
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
217
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
218 strncpy(*dest, source, len);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
219 (*dest)[len]=0;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
220
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
221 while (*p=='\r' || *p=='\n' || *p=='|') p++;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
222
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
223 if (*p) return p; // not-last text field
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
224 else return NULL; // last text field
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
225 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
226
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
227 subtitle *sub_read_line_microdvd(FILE *fd,subtitle *current) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
228 char line[LINE_LEN+1];
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
229 char line2[LINE_LEN+1];
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
230 char *p, *next;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
231 int i;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
232
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
233 do {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
234 if (!fgets (line, LINE_LEN, fd)) return NULL;
4048
654419a9a228 changed subreader.c to read microdvd lines in form "{%ld}{}[^\r\n]" too
atlka
parents: 3924
diff changeset
235 } while ((sscanf (line,
654419a9a228 changed subreader.c to read microdvd lines in form "{%ld}{}[^\r\n]" too
atlka
parents: 3924
diff changeset
236 "{%ld}{}%[^\r\n]",
654419a9a228 changed subreader.c to read microdvd lines in form "{%ld}{}[^\r\n]" too
atlka
parents: 3924
diff changeset
237 &(current->start), line2) < 2) &&
654419a9a228 changed subreader.c to read microdvd lines in form "{%ld}{}[^\r\n]" too
atlka
parents: 3924
diff changeset
238 (sscanf (line,
654419a9a228 changed subreader.c to read microdvd lines in form "{%ld}{}[^\r\n]" too
atlka
parents: 3924
diff changeset
239 "{%ld}{%ld}%[^\r\n]",
654419a9a228 changed subreader.c to read microdvd lines in form "{%ld}{}[^\r\n]" too
atlka
parents: 3924
diff changeset
240 &(current->start), &(current->end), line2) < 3));
654419a9a228 changed subreader.c to read microdvd lines in form "{%ld}{}[^\r\n]" too
atlka
parents: 3924
diff changeset
241
932
c3073fae3120 more stabile
laaz
parents: 921
diff changeset
242 p=line2;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
243
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
244 next=p, i=0;
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
245 while ((next =sub_readtext (next, &(current->text[i])))) {
270
7d544020e398 no more garbage! (fixed by laaz)
gabucino
parents: 269
diff changeset
246 if (current->text[i]==ERR) {return ERR;}
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
247 i++;
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
248 if (i>=SUB_MAX_TEXT) { mp_msg(MSGT_SUBREADER,MSGL_WARN,"Too many lines in a subtitle\n");current->lines=i;return current;}
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
249 }
932
c3073fae3120 more stabile
laaz
parents: 921
diff changeset
250 current->lines= ++i;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
251
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
252 return current;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
253 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
254
12138
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
255 subtitle *sub_read_line_mpl2(FILE *fd,subtitle *current) {
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
256 char line[LINE_LEN+1];
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
257 char line2[LINE_LEN+1];
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
258 char *p, *next;
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
259 int i;
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
260
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
261 do {
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
262 if (!fgets (line, LINE_LEN, fd)) return NULL;
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
263 } while ((sscanf (line,
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
264 "[%ld][%ld]%[^\r\n]",
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
265 &(current->start), &(current->end), line2) < 3));
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
266 current->start *= 10;
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
267 current->end *= 10;
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
268 p=line2;
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
269
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
270 next=p, i=0;
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
271 while ((next =sub_readtext (next, &(current->text[i])))) {
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
272 if (current->text[i]==ERR) {return ERR;}
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
273 i++;
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
274 if (i>=SUB_MAX_TEXT) { mp_msg(MSGT_SUBREADER,MSGL_WARN,"Too many lines in a subtitle\n");current->lines=i;return current;}
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
275 }
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
276 current->lines= ++i;
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
277
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
278 return current;
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
279 }
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
280
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
281 subtitle *sub_read_line_subrip(FILE *fd, subtitle *current) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
282 char line[LINE_LEN+1];
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
283 int a1,a2,a3,a4,b1,b2,b3,b4;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
284 char *p=NULL, *q=NULL;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
285 int len;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
286
1764
a9e51734ea00 ehh. sizeof(pointer) bug fixed...
arpi
parents: 1761
diff changeset
287 while (1) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
288 if (!fgets (line, LINE_LEN, fd)) return NULL;
269
f5a7323af43f applied patch by lez
arpi_esp
parents: 258
diff changeset
289 if (sscanf (line, "%d:%d:%d.%d,%d:%d:%d.%d",&a1,&a2,&a3,&a4,&b1,&b2,&b3,&b4) < 8) continue;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
290 current->start = a1*360000+a2*6000+a3*100+a4;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
291 current->end = b1*360000+b2*6000+b3*100+b4;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
292
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
293 if (!fgets (line, LINE_LEN, fd)) return NULL;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
294
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
295 p=q=line;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
296 for (current->lines=1; current->lines < SUB_MAX_TEXT; current->lines++) {
6657
766b6fb28ebf subrip sometimes uses pipe as newline separator - patch by MOLNAR Andor <dolphy@inf.elte.hu>
arpi
parents: 6597
diff changeset
297 for (q=p,len=0; *p && *p!='\r' && *p!='\n' && *p!='|' && strncmp(p,"[br]",4); p++,len++);
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
298 current->text[current->lines-1]=(char *)malloc (len+1);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
299 if (!current->text[current->lines-1]) return ERR;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
300 strncpy (current->text[current->lines-1], q, len);
270
7d544020e398 no more garbage! (fixed by laaz)
gabucino
parents: 269
diff changeset
301 current->text[current->lines-1][len]='\0';
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
302 if (!*p || *p=='\r' || *p=='\n') break;
6657
766b6fb28ebf subrip sometimes uses pipe as newline separator - patch by MOLNAR Andor <dolphy@inf.elte.hu>
arpi
parents: 6597
diff changeset
303 if (*p=='|') p++;
766b6fb28ebf subrip sometimes uses pipe as newline separator - patch by MOLNAR Andor <dolphy@inf.elte.hu>
arpi
parents: 6597
diff changeset
304 else while (*p++!=']');
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
305 }
1764
a9e51734ea00 ehh. sizeof(pointer) bug fixed...
arpi
parents: 1761
diff changeset
306 break;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
307 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
308 return current;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
309 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
310
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
311 subtitle *sub_read_line_subviewer(FILE *fd,subtitle *current) {
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
312 char line[LINE_LEN+1];
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
313 int a1,a2,a3,a4,b1,b2,b3,b4;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
314 char *p=NULL;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
315 int i,len;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
316
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
317 while (!current->text[0]) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
318 if (!fgets (line, LINE_LEN, fd)) return NULL;
9217
420e2b2f8e5a compiler warning fixes patch by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 9145
diff changeset
319 if ((len=sscanf (line, "%d:%d:%d%[,.:]%d --> %d:%d:%d%[,.:]%d",&a1,&a2,&a3,(char *)&i,&a4,&b1,&b2,&b3,(char *)&i,&b4)) < 10)
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
320 continue;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
321 current->start = a1*360000+a2*6000+a3*100+a4/10;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
322 current->end = b1*360000+b2*6000+b3*100+b4/10;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
323 for (i=0; i<SUB_MAX_TEXT;) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
324 if (!fgets (line, LINE_LEN, fd)) break;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
325 len=0;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
326 for (p=line; *p!='\n' && *p!='\r' && *p; p++,len++);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
327 if (len) {
7608
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
328 int j=0,skip=0;
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
329 char *curptr=current->text[i]=(char *)malloc (len+1);
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
330 if (!current->text[i]) return ERR;
7608
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
331 //strncpy (current->text[i], line, len); current->text[i][len]='\0';
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 7983
diff changeset
332 for(; j<len; j++) {
7608
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
333 /* let's filter html tags ::atmos */
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
334 if(line[j]=='>') {
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
335 skip=0;
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
336 continue;
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
337 }
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
338 if(line[j]=='<') {
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
339 skip=1;
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
340 continue;
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
341 }
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
342 if(skip) {
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
343 continue;
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
344 }
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
345 *curptr=line[j];
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
346 curptr++;
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
347 }
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
348 *curptr='\0';
e1962f1bb326 Skip html tags (like <i>) inside subviewer subtitles.
atmos4
parents: 7472
diff changeset
349
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
350 i++;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
351 } else {
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
352 break;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
353 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
354 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
355 current->lines=i;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
356 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
357 return current;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
358 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
359
6012
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
360 subtitle *sub_read_line_subviewer2(FILE *fd,subtitle *current) {
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
361 char line[LINE_LEN+1];
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
362 int a1,a2,a3,a4;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
363 char *p=NULL;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
364 int i,len;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
365
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
366 while (!current->text[0]) {
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
367 if (!fgets (line, LINE_LEN, fd)) return NULL;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
368 if (line[0]!='{')
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
369 continue;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
370 if ((len=sscanf (line, "{T %d:%d:%d:%d",&a1,&a2,&a3,&a4)) < 4)
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
371 continue;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
372 current->start = a1*360000+a2*6000+a3*100+a4/10;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
373 for (i=0; i<SUB_MAX_TEXT;) {
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
374 if (!fgets (line, LINE_LEN, fd)) break;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
375 if (line[0]=='}') break;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
376 len=0;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
377 for (p=line; *p!='\n' && *p!='\r' && *p; ++p,++len);
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
378 if (len) {
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
379 current->text[i]=(char *)malloc (len+1);
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
380 if (!current->text[i]) return ERR;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
381 strncpy (current->text[i], line, len); current->text[i][len]='\0';
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
382 ++i;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
383 } else {
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
384 break;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
385 }
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
386 }
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
387 current->lines=i;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
388 }
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
389 return current;
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
390 }
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
391
89c87be7a248 patch by Didier <did-c-debian@ifrance.com>:
pl
parents: 5990
diff changeset
392
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
393 subtitle *sub_read_line_vplayer(FILE *fd,subtitle *current) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
394 char line[LINE_LEN+1];
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
395 int a1,a2,a3;
3735
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
396 char *p=NULL, *next,separator;
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
397 int i,len,plen;
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
398
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
399 while (!current->text[0]) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
400 if (!fgets (line, LINE_LEN, fd)) return NULL;
3724
a2325883c46c vplayer format - no longer crashes on slightly broken subs.
eyck
parents: 3701
diff changeset
401 if ((len=sscanf (line, "%d:%d:%d%c%n",&a1,&a2,&a3,&separator,&plen)) < 4)
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
402 continue;
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
403
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
404 if (!(current->start = a1*360000+a2*6000+a3*100))
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
405 continue;
5363
1f068f4bb6e7 vplayer sub fix by Arkadiusz Podgorski <wodzu@softomat.com.pl>
arpi
parents: 4886
diff changeset
406 /* removed by wodzu
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
407 p=line;
1640
cbedcfab877b Fixup to vplayer subtitle submitted to sourceforge by Igor Wojnicki
eyck
parents: 1501
diff changeset
408 // finds the body of the subtitle
cbedcfab877b Fixup to vplayer subtitle submitted to sourceforge by Igor Wojnicki
eyck
parents: 1501
diff changeset
409 for (i=0; i<3; i++){
3433
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
410 p=strchr(p,':');
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
411 if (p==NULL) break;
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
412 ++p;
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
413 }
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
414 if (p==NULL) {
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
415 printf("SUB: Skipping incorrect subtitle line!\n");
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
416 continue;
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
417 }
5363
1f068f4bb6e7 vplayer sub fix by Arkadiusz Podgorski <wodzu@softomat.com.pl>
arpi
parents: 4886
diff changeset
418 */
1f068f4bb6e7 vplayer sub fix by Arkadiusz Podgorski <wodzu@softomat.com.pl>
arpi
parents: 4886
diff changeset
419 // by wodzu: hey! this time we know what length it has! what is
1f068f4bb6e7 vplayer sub fix by Arkadiusz Podgorski <wodzu@softomat.com.pl>
arpi
parents: 4886
diff changeset
420 // that magic for? it can't deal with space instead of third
1f068f4bb6e7 vplayer sub fix by Arkadiusz Podgorski <wodzu@softomat.com.pl>
arpi
parents: 4886
diff changeset
421 // colon! look, what simple it can be:
1f068f4bb6e7 vplayer sub fix by Arkadiusz Podgorski <wodzu@softomat.com.pl>
arpi
parents: 4886
diff changeset
422 p = &line[ plen ];
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
423
1640
cbedcfab877b Fixup to vplayer subtitle submitted to sourceforge by Igor Wojnicki
eyck
parents: 1501
diff changeset
424 i=0;
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
425 if (*p!='|') {
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
426 //
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
427 next = p,i=0;
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
428 while ((next =sub_readtext (next, &(current->text[i])))) {
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
429 if (current->text[i]==ERR) {return ERR;}
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
430 i++;
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
431 if (i>=SUB_MAX_TEXT) { mp_msg(MSGT_SUBREADER,MSGL_WARN,"Too many lines in a subtitle\n");current->lines=i;return current;}
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
432 }
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
433 current->lines=i+1;
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
434 }
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
435 }
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
436 return current;
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
437 }
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
438
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
439 subtitle *sub_read_line_rt(FILE *fd,subtitle *current) {
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
440 //TODO: This format uses quite rich (sub/super)set of xhtml
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
441 // I couldn't check it since DTD is not included.
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
442 // WARNING: full XML parses can be required for proper parsing
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
443 char line[LINE_LEN+1];
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
444 int a1,a2,a3,a4,b1,b2,b3,b4;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
445 char *p=NULL,*next=NULL;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
446 int i,len,plen;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
447
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
448 while (!current->text[0]) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
449 if (!fgets (line, LINE_LEN, fd)) return NULL;
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
450 //TODO: it seems that format of time is not easily determined, it may be 1:12, 1:12.0 or 0:1:12.0
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
451 //to describe the same moment in time. Maybe there are even more formats in use.
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
452 //if ((len=sscanf (line, "<Time Begin=\"%d:%d:%d.%d\" End=\"%d:%d:%d.%d\"",&a1,&a2,&a3,&a4,&b1,&b2,&b3,&b4)) < 8)
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
453 plen=a1=a2=a3=a4=b1=b2=b3=b4=0;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
454 if (
9322
ac6899c5e320 rt subtitle fixes
arpi
parents: 9217
diff changeset
455 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d.%d\" %*[Ee]nd=\"%d.%d\"%*[^<]<clear/>%n",&a3,&a4,&b3,&b4,&plen)) < 4) &&
ac6899c5e320 rt subtitle fixes
arpi
parents: 9217
diff changeset
456 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d.%d\" %*[Ee]nd=\"%d:%d.%d\"%*[^<]<clear/>%n",&a3,&a4,&b2,&b3,&b4,&plen)) < 5) &&
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
457 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d:%d\" %*[Ee]nd=\"%d:%d\"%*[^<]<clear/>%n",&a2,&a3,&b2,&b3,&plen)) < 4) &&
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
458 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d:%d\" %*[Ee]nd=\"%d:%d.%d\"%*[^<]<clear/>%n",&a2,&a3,&b2,&b3,&b4,&plen)) < 5) &&
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
459 // ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d:%d.%d\" %*[Ee]nd=\"%d:%d\"%*[^<]<clear/>%n",&a2,&a3,&a4,&b2,&b3,&plen)) < 5) &&
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
460 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d:%d.%d\" %*[Ee]nd=\"%d:%d.%d\"%*[^<]<clear/>%n",&a2,&a3,&a4,&b2,&b3,&b4,&plen)) < 6) &&
9322
ac6899c5e320 rt subtitle fixes
arpi
parents: 9217
diff changeset
461 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d:%d:%d.%d\" %*[Ee]nd=\"%d:%d:%d.%d\"%*[^<]<clear/>%n",&a1,&a2,&a3,&a4,&b1,&b2,&b3,&b4,&plen)) < 8) &&
ac6899c5e320 rt subtitle fixes
arpi
parents: 9217
diff changeset
462 //now try it without end time
ac6899c5e320 rt subtitle fixes
arpi
parents: 9217
diff changeset
463 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d.%d\"%*[^<]<clear/>%n",&a3,&a4,&plen)) < 2) &&
ac6899c5e320 rt subtitle fixes
arpi
parents: 9217
diff changeset
464 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d:%d\"%*[^<]<clear/>%n",&a2,&a3,&plen)) < 2) &&
ac6899c5e320 rt subtitle fixes
arpi
parents: 9217
diff changeset
465 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d:%d.%d\"%*[^<]<clear/>%n",&a2,&a3,&a4,&plen)) < 3) &&
ac6899c5e320 rt subtitle fixes
arpi
parents: 9217
diff changeset
466 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d:%d:%d.%d\"%*[^<]<clear/>%n",&a1,&a2,&a3,&a4,&plen)) < 4)
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
467 )
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
468 continue;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
469 current->start = a1*360000+a2*6000+a3*100+a4/10;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
470 current->end = b1*360000+b2*6000+b3*100+b4/10;
9322
ac6899c5e320 rt subtitle fixes
arpi
parents: 9217
diff changeset
471 if (b1 == 0 && b2 == 0 && b3 == 0 && b4 == 0)
ac6899c5e320 rt subtitle fixes
arpi
parents: 9217
diff changeset
472 current->end = current->start+200;
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
473 p=line; p+=plen;i=0;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
474 // TODO: I don't know what kind of convention is here for marking multiline subs, maybe <br/> like in xml?
6242
9c8c3b5e6658 possible sig11 fixed in .rt parser (weisskreuzova.zip)
arpi
parents: 6208
diff changeset
475 next = strstr(line,"<clear/>");
9c8c3b5e6658 possible sig11 fixed in .rt parser (weisskreuzova.zip)
arpi
parents: 6208
diff changeset
476 if(next && strlen(next)>8){
9c8c3b5e6658 possible sig11 fixed in .rt parser (weisskreuzova.zip)
arpi
parents: 6208
diff changeset
477 next+=8;i=0;
9c8c3b5e6658 possible sig11 fixed in .rt parser (weisskreuzova.zip)
arpi
parents: 6208
diff changeset
478 while ((next =sub_readtext (next, &(current->text[i])))) {
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
479 if (current->text[i]==ERR) {return ERR;}
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
480 i++;
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
481 if (i>=SUB_MAX_TEXT) { mp_msg(MSGT_SUBREADER,MSGL_WARN,"Too many lines in a subtitle\n");current->lines=i;return current;}
6242
9c8c3b5e6658 possible sig11 fixed in .rt parser (weisskreuzova.zip)
arpi
parents: 6208
diff changeset
482 }
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
483 }
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
484 current->lines=i+1;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
485 }
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
486 return current;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
487 }
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
488
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
489 subtitle *sub_read_line_ssa(FILE *fd,subtitle *current) {
6597
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
490 /*
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
491 * Sub Station Alpha v4 (and v2?) scripts have 9 commas before subtitle
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
492 * other Sub Station Alpha scripts have only 8 commas before subtitle
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
493 * Reading the "ScriptType:" field is not reliable since many scripts appear
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
494 * w/o it
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
495 *
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
496 * http://www.scriptclub.org is a good place to find more examples
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
497 * http://www.eswat.demon.co.uk is where the SSA specs can be found
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
498 */
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
499 int comma;
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
500 static int max_comma = 32; /* let's use 32 for the case that the */
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
501 /* amount of commas increase with newer SSA versions */
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
502
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
503 int hour1, min1, sec1, hunsec1,
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
504 hour2, min2, sec2, hunsec2, nothing;
2141
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
505 int num;
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
506
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
507 char line[LINE_LEN+1],
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
508 line3[LINE_LEN+1],
9009
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
509 *line2;
2141
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
510 char *tmp;
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
511
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
512 do {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
513 if (!fgets (line, LINE_LEN, fd)) return NULL;
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
514 } while (sscanf (line, "Dialogue: Marked=%d,%d:%d:%d.%d,%d:%d:%d.%d,"
2140
885c9c802373 ssa worx fine. Testers needed :)))
laaz
parents: 1764
diff changeset
515 "%[^\n\r]", &nothing,
885c9c802373 ssa worx fine. Testers needed :)))
laaz
parents: 1764
diff changeset
516 &hour1, &min1, &sec1, &hunsec1,
885c9c802373 ssa worx fine. Testers needed :)))
laaz
parents: 1764
diff changeset
517 &hour2, &min2, &sec2, &hunsec2,
10450
2d3f6a2996da ASS support
henry
parents: 10356
diff changeset
518 line3) < 9
2d3f6a2996da ASS support
henry
parents: 10356
diff changeset
519 &&
2d3f6a2996da ASS support
henry
parents: 10356
diff changeset
520 sscanf (line, "Dialogue: %d,%d:%d:%d.%d,%d:%d:%d.%d,"
2d3f6a2996da ASS support
henry
parents: 10356
diff changeset
521 "%[^\n\r]", &nothing,
2d3f6a2996da ASS support
henry
parents: 10356
diff changeset
522 &hour1, &min1, &sec1, &hunsec1,
2d3f6a2996da ASS support
henry
parents: 10356
diff changeset
523 &hour2, &min2, &sec2, &hunsec2,
2d3f6a2996da ASS support
henry
parents: 10356
diff changeset
524 line3) < 9 );
6597
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
525
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
526 line2=strchr(line3, ',');
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
527
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
528 for (comma = 4; comma < max_comma; comma ++)
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
529 {
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
530 tmp = line2;
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
531 if(!(tmp=strchr(++tmp, ','))) break;
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
532 if(*(++tmp) == ' ') break;
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
533 /* a space after a comma means we're already in a sentence */
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
534 line2 = tmp;
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
535 }
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
536
4e543bd6cc0a support for SSA v4 by Dirk <noisyb at gmx.net>
alex
parents: 6296
diff changeset
537 if(comma < max_comma)max_comma = comma;
8602
36d5c7137876 Attached is a small patch to fix a couple of problems I found when using
arpi
parents: 8363
diff changeset
538 /* eliminate the trailing comma */
36d5c7137876 Attached is a small patch to fix a couple of problems I found when using
arpi
parents: 8363
diff changeset
539 if(*line2 == ',') line2++;
2140
885c9c802373 ssa worx fine. Testers needed :)))
laaz
parents: 1764
diff changeset
540
6247
0b8660d79efe sub_read_line_ssa sig11 fix by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
arpi
parents: 6242
diff changeset
541 current->lines=0;num=0;
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
542 current->start = 360000*hour1 + 6000*min1 + 100*sec1 + hunsec1;
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
543 current->end = 360000*hour2 + 6000*min2 + 100*sec2 + hunsec2;
2141
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
544
5990
e5b3385775b3 accept \N too, patch by Reinder <r.cuperus@student.utwente.nl>
arpi
parents: 5828
diff changeset
545 while (((tmp=strstr(line2, "\\n")) != NULL) || ((tmp=strstr(line2, "\\N")) != NULL) ){
2141
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
546 current->text[num]=(char *)malloc(tmp-line2+1);
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
547 strncpy (current->text[num], line2, tmp-line2);
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
548 current->text[num][tmp-line2]='\0';
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
549 line2=tmp+2;
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
550 num++;
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
551 current->lines++;
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
552 if (current->lines >= SUB_MAX_TEXT) return current;
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
553 }
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
554
3701
a33d0351630e bzero() -> memset()
pl
parents: 3543
diff changeset
555 current->text[num]=strdup(line2);
6247
0b8660d79efe sub_read_line_ssa sig11 fix by Jindrich Makovicka <makovick@kmlinux.fjfi.cvut.cz>
arpi
parents: 6242
diff changeset
556 current->lines++;
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
557
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
558 return current;
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
559 }
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
560
9009
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
561 void sub_pp_ssa(subtitle *sub) {
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
562 int l=sub->lines;
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
563 char *so,*de,*start;
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
564
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
565 while (l){
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
566 /* eliminate any text enclosed with {}, they are font and color settings */
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
567 so=de=sub->text[--l];
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
568 while (*so) {
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
569 if(*so == '{' && so[1]=='\\') {
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
570 for (start=so; *so && *so!='}'; so++);
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
571 if(*so) so++; else so=start;
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
572 }
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
573 if(*so) {
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
574 *de=*so;
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
575 so++; de++;
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
576 }
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
577 }
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
578 *de=*so;
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
579 }
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
580 }
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
581
11873
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
582 /*
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
583 * PJS subtitles reader.
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
584 * That's the "Phoenix Japanimation Society" format.
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
585 * I found some of them in http://www.scriptsclub.org/ (used for anime).
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
586 * The time is in tenths of second.
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
587 *
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
588 * by set, based on code by szabi (dunnowhat sub format ;-)
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
589 */
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
590 subtitle *sub_read_line_pjs(FILE *fd,subtitle *current) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
591 char line[LINE_LEN+1];
11873
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
592 char text[LINE_LEN+1], *s, *d;
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
593
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
594 if (!fgets (line, LINE_LEN, fd))
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
595 return NULL;
11873
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
596 /* skip spaces */
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
597 for (s=line; *s && isspace(*s); s++);
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
598 /* allow empty lines at the end of the file */
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
599 if (*s==0)
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
600 return NULL;
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
601 /* get the time */
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
602 if (sscanf (s, "%ld,%ld,", &(current->start),
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
603 &(current->end)) <2) {
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
604 return ERR;
11873
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
605 }
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
606 /* the files I have are in tenths of second */
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
607 current->start *= 10;
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
608 current->end *= 10;
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
609 /* walk to the beggining of the string */
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
610 for (; *s; s++) if (*s==',') break;
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
611 if (*s) {
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
612 for (s++; *s; s++) if (*s==',') break;
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
613 if (*s) s++;
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
614 }
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
615 if (*s!='"') {
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
616 return ERR;
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
617 }
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
618 /* copy the string to the text buffer */
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
619 for (s++, d=text; *s && *s!='"'; s++, d++)
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
620 *d=*s;
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
621 *d=0;
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
622 current->text[0] = strdup(text);
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
623 current->lines = 1;
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
624
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
625 return current;
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
626 }
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
627
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
628 subtitle *sub_read_line_mpsub(FILE *fd, subtitle *current) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
629 char line[LINE_LEN+1];
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
630 float a,b;
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
631 int num=0;
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
632 char *p, *q;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
633
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
634 do
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
635 {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
636 if (!fgets(line, LINE_LEN, fd)) return NULL;
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
637 } while (sscanf (line, "%f %f", &a, &b) !=2);
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
638
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
639 mpsub_position += a*mpsub_multiplier;
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
640 current->start=(int) mpsub_position;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
641 mpsub_position += b*mpsub_multiplier;
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
642 current->end=(int) mpsub_position;
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
643
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
644 while (num < SUB_MAX_TEXT) {
4098
0eb21bf98baa fixed mpsub bug requested by Gabucino
laaz
parents: 4064
diff changeset
645 if (!fgets (line, LINE_LEN, fd)) {
0eb21bf98baa fixed mpsub bug requested by Gabucino
laaz
parents: 4064
diff changeset
646 if (num == 0) return NULL;
0eb21bf98baa fixed mpsub bug requested by Gabucino
laaz
parents: 4064
diff changeset
647 else return current;
0eb21bf98baa fixed mpsub bug requested by Gabucino
laaz
parents: 4064
diff changeset
648 }
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
649 p=line;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
650 while (isspace(*p)) p++;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
651 if (eol(*p) && num > 0) return current;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
652 if (eol(*p)) return NULL;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
653
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
654 for (q=p; !eol(*q); q++);
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
655 *q='\0';
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
656 if (strlen(p)) {
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
657 current->text[num]=strdup(p);
4098
0eb21bf98baa fixed mpsub bug requested by Gabucino
laaz
parents: 4064
diff changeset
658 // printf (">%s<\n",p);
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
659 current->lines = ++num;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
660 } else {
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
661 if (num) return current;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
662 else return NULL;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
663 }
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
664 }
3735
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
665 return NULL; // we should have returned before if it's OK
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
666 }
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
667
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
668 #ifndef USE_SORTSUB
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
669 //we don't need this if we use previous_sub_end
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
670 subtitle *previous_aqt_sub = NULL;
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
671 #endif
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
672
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
673 subtitle *sub_read_line_aqt(FILE *fd,subtitle *current) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
674 char line[LINE_LEN+1];
6076
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
675 char *next;
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
676 int i;
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
677
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
678 while (1) {
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
679 // try to locate next subtitle
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
680 if (!fgets (line, LINE_LEN, fd))
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
681 return NULL;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
682 if (!(sscanf (line, "-->> %ld", &(current->start)) <1))
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
683 break;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
684 }
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
685
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
686 #ifdef USE_SORTSUB
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
687 previous_sub_end = (current->start) ? current->start - 1 : 0;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
688 #else
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
689 if (previous_aqt_sub != NULL)
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
690 previous_aqt_sub->end = current->start-1;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
691
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
692 previous_aqt_sub = current;
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
693 #endif
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
694
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
695 if (!fgets (line, LINE_LEN, fd))
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
696 return NULL;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
697
2468
24427e03cd66 remowing warning message
atlka
parents: 2449
diff changeset
698 sub_readtext((char *) &line,&current->text[0]);
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
699 current->lines = 1;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
700 current->end = current->start; // will be corrected by next subtitle
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
701
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
702 if (!fgets (line, LINE_LEN, fd))
8862
356534b9e7d4 Since version 2.7 the file extension for JACOsub changed from
arpi
parents: 8789
diff changeset
703 return current;
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
704
6076
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
705 next = line,i=1;
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
706 while ((next =sub_readtext (next, &(current->text[i])))) {
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
707 if (current->text[i]==ERR) {return ERR;}
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
708 i++;
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
709 if (i>=SUB_MAX_TEXT) { mp_msg(MSGT_SUBREADER,MSGL_WARN,"Too many lines in a subtitle\n");current->lines=i;return current;}
6076
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
710 }
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
711 current->lines=i+1;
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
712
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
713 if ((current->text[0]=="") && (current->text[1]=="")) {
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
714 #ifdef USE_SORTSUB
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
715 previous_sub_end = 0;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
716 #else
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
717 // void subtitle -> end of previous marked and exit
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
718 previous_aqt_sub = NULL;
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
719 #endif
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
720 return NULL;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
721 }
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
722
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
723 return current;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
724 }
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
725
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
726 #ifndef USE_SORTSUB
6076
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
727 subtitle *previous_subrip09_sub = NULL;
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
728 #endif
6076
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
729
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
730 subtitle *sub_read_line_subrip09(FILE *fd,subtitle *current) {
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
731 char line[LINE_LEN+1];
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
732 int a1,a2,a3;
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
733 char * next=NULL;
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
734 int i,len;
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
735
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
736 while (1) {
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
737 // try to locate next subtitle
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
738 if (!fgets (line, LINE_LEN, fd))
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
739 return NULL;
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
740 if (!((len=sscanf (line, "[%d:%d:%d]",&a1,&a2,&a3)) < 3))
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
741 break;
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
742 }
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
743
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
744 current->start = a1*360000+a2*6000+a3*100;
6076
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
745
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
746 #ifdef USE_SORTSUB
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
747 previous_sub_end = (current->start) ? current->start - 1 : 0;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
748 #else
6076
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
749 if (previous_subrip09_sub != NULL)
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
750 previous_subrip09_sub->end = current->start-1;
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
751
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
752 previous_subrip09_sub = current;
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
753 #endif
6076
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
754
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
755 if (!fgets (line, LINE_LEN, fd))
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
756 return NULL;
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
757
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
758 next = line,i=0;
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
759
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7460
diff changeset
760 current->text[0]=""; // just to be sure that string is clear
6076
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
761
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
762 while ((next =sub_readtext (next, &(current->text[i])))) {
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
763 if (current->text[i]==ERR) {return ERR;}
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
764 i++;
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
765 if (i>=SUB_MAX_TEXT) { mp_msg(MSGT_SUBREADER,MSGL_WARN,"Too many lines in a subtitle\n");current->lines=i;return current;}
6076
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
766 }
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
767 current->lines=i+1;
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
768
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
769 if ((current->text[0]=="") && (i==0)) {
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
770 #ifdef USE_SORTSUB
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
771 previous_sub_end = 0;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
772 #else
6076
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
773 // void subtitle -> end of previous marked and exit
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
774 previous_subrip09_sub = NULL;
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
775 #endif
6076
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
776 return NULL;
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
777 }
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
778
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
779 return current;
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
780 }
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
781
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
782 subtitle *sub_read_line_jacosub(FILE * fd, subtitle * current)
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
783 {
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
784 char line1[LINE_LEN], line2[LINE_LEN], directive[LINE_LEN], *p, *q;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
785 unsigned a1, a2, a3, a4, b1, b2, b3, b4, comment = 0;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
786 static unsigned jacoTimeres = 30;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
787 static int jacoShift = 0;
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
788
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
789 bzero(current, sizeof(subtitle));
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
790 bzero(line1, LINE_LEN);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
791 bzero(line2, LINE_LEN);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
792 bzero(directive, LINE_LEN);
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
793 while (!current->text[0]) {
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
794 if (!fgets(line1, LINE_LEN, fd)) {
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
795 return NULL;
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
796 }
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
797 if (sscanf
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
798 (line1, "%u:%u:%u.%u %u:%u:%u.%u %[^\n\r]", &a1, &a2, &a3, &a4,
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
799 &b1, &b2, &b3, &b4, line2) < 9) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
800 if (sscanf(line1, "@%u @%u %[^\n\r]", &a4, &b4, line2) < 3) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
801 if (line1[0] == '#') {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
802 int hours = 0, minutes = 0, seconds, delta, inverter =
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
803 1;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
804 unsigned units = jacoShift;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
805 switch (toupper(line1[1])) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
806 case 'S':
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
807 if (isalpha(line1[2])) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
808 delta = 6;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
809 } else {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
810 delta = 2;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
811 }
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
812 if (sscanf(&line1[delta], "%d", &hours)) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
813 if (hours < 0) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
814 hours *= -1;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
815 inverter = -1;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
816 }
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
817 if (sscanf(&line1[delta], "%*d:%d", &minutes)) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
818 if (sscanf
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
819 (&line1[delta], "%*d:%*d:%d",
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
820 &seconds)) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
821 sscanf(&line1[delta], "%*d:%*d:%*d.%d",
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
822 &units);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
823 } else {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
824 hours = 0;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
825 sscanf(&line1[delta], "%d:%d.%d",
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
826 &minutes, &seconds, &units);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
827 minutes *= inverter;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
828 }
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
829 } else {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
830 hours = minutes = 0;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
831 sscanf(&line1[delta], "%d.%d", &seconds,
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
832 &units);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
833 seconds *= inverter;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
834 }
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
835 jacoShift =
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
836 ((hours * 3600 + minutes * 60 +
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
837 seconds) * jacoTimeres +
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
838 units) * inverter;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
839 }
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
840 break;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
841 case 'T':
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
842 if (isalpha(line1[2])) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
843 delta = 8;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
844 } else {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
845 delta = 2;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
846 }
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
847 sscanf(&line1[delta], "%u", &jacoTimeres);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
848 break;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
849 }
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
850 }
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
851 continue;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
852 } else {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
853 current->start =
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
854 (unsigned long) ((a4 + jacoShift) * 100.0 /
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
855 jacoTimeres);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
856 current->end =
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
857 (unsigned long) ((b4 + jacoShift) * 100.0 /
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
858 jacoTimeres);
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
859 }
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
860 } else {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
861 current->start =
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
862 (unsigned
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
863 long) (((a1 * 3600 + a2 * 60 + a3) * jacoTimeres + a4 +
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
864 jacoShift) * 100.0 / jacoTimeres);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
865 current->end =
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
866 (unsigned
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
867 long) (((b1 * 3600 + b2 * 60 + b3) * jacoTimeres + b4 +
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
868 jacoShift) * 100.0 / jacoTimeres);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
869 }
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
870 current->lines = 0;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
871 p = line2;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
872 while ((*p == ' ') || (*p == '\t')) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
873 ++p;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
874 }
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
875 if (isalpha(*p)||*p == '[') {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
876 int cont, jLength;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
877
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
878 if (sscanf(p, "%s %[^\n\r]", directive, line1) < 2)
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
879 return (subtitle *) ERR;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
880 jLength = strlen(directive);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
881 for (cont = 0; cont < jLength; ++cont) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
882 if (isalpha(*(directive + cont)))
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
883 *(directive + cont) = toupper(*(directive + cont));
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
884 }
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
885 if ((strstr(directive, "RDB") != NULL)
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
886 || (strstr(directive, "RDC") != NULL)
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
887 || (strstr(directive, "RLB") != NULL)
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
888 || (strstr(directive, "RLG") != NULL)) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
889 continue;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
890 }
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10801
diff changeset
891 if (strstr(directive, "JL") != NULL) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10801
diff changeset
892 current->alignment = SUB_ALIGNMENT_HLEFT;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10801
diff changeset
893 } else if (strstr(directive, "JR") != NULL) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10801
diff changeset
894 current->alignment = SUB_ALIGNMENT_HRIGHT;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10801
diff changeset
895 } else {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10801
diff changeset
896 current->alignment = SUB_ALIGNMENT_HCENTER;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10801
diff changeset
897 }
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
898 strcpy(line2, line1);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
899 p = line2;
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
900 }
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10801
diff changeset
901 for (q = line1; (!eol(*p)) && (current->lines < SUB_MAX_TEXT); ++p) {
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
902 switch (*p) {
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
903 case '{':
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
904 comment++;
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
905 break;
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
906 case '}':
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
907 if (comment) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
908 --comment;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
909 //the next line to get rid of a blank after the comment
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
910 if ((*(p + 1)) == ' ')
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
911 p++;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
912 }
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
913 break;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
914 case '~':
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
915 if (!comment) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
916 *q = ' ';
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
917 ++q;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
918 }
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
919 break;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
920 case ' ':
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
921 case '\t':
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
922 if ((*(p + 1) == ' ') || (*(p + 1) == '\t'))
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
923 break;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
924 if (!comment) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
925 *q = ' ';
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
926 ++q;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
927 }
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
928 break;
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
929 case '\\':
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
930 if (*(p + 1) == 'n') {
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
931 *q = '\0';
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
932 q = line1;
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
933 current->text[current->lines++] = strdup(line1);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
934 ++p;
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
935 break;
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
936 }
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
937 if ((toupper(*(p + 1)) == 'C')
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
938 || (toupper(*(p + 1)) == 'F')) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
939 ++p,++p;
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
940 break;
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
941 }
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
942 if ((*(p + 1) == 'B') || (*(p + 1) == 'b') || (*(p + 1) == 'D') || //actually this means "insert current date here"
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
943 (*(p + 1) == 'I') || (*(p + 1) == 'i') || (*(p + 1) == 'N') || (*(p + 1) == 'T') || //actually this means "insert current time here"
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
944 (*(p + 1) == 'U') || (*(p + 1) == 'u')) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
945 ++p;
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
946 break;
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
947 }
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
948 if ((*(p + 1) == '\\') ||
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
949 (*(p + 1) == '~') || (*(p + 1) == '{')) {
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
950 ++p;
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
951 } else if (eol(*(p + 1))) {
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
952 if (!fgets(directive, LINE_LEN, fd))
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
953 return NULL;
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
954 trail_space(directive);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
955 strncat(line2, directive,
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
956 (LINE_LEN > 511) ? LINE_LEN : 511);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
957 break;
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
958 }
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
959 default:
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
960 if (!comment) {
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
961 *q = *p;
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
962 ++q;
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
963 }
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
964 } //-- switch
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
965 } //-- for
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
966 *q = '\0';
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
967 current->text[current->lines] = strdup(line1);
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
968 } //-- while
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
969 current->lines++;
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
970 return current;
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
971 }
6076
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
972
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
973 int sub_autodetect (FILE *fd, int *uses_time) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
974 char line[LINE_LEN+1];
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
975 int i,j=0;
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
976 char p;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
977
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
978 while (j < 100) {
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
979 j++;
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
980 if (!fgets (line, LINE_LEN, fd))
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
981 return SUB_INVALID;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
982
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
983 if (sscanf (line, "{%d}{%d}", &i, &i)==2)
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
984 {*uses_time=0;return SUB_MICRODVD;}
4519
c8bf6fd27d68 too many arguments to sscan in subdetect.
eyck
parents: 4444
diff changeset
985 if (sscanf (line, "{%d}{}", &i)==1)
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
986 {*uses_time=0;return SUB_MICRODVD;}
12138
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
987 if (sscanf (line, "[%d][%d]", &i, &i)==2)
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
988 {*uses_time=1;return SUB_MPL2;}
269
f5a7323af43f applied patch by lez
arpi_esp
parents: 258
diff changeset
989 if (sscanf (line, "%d:%d:%d.%d,%d:%d:%d.%d", &i, &i, &i, &i, &i, &i, &i, &i)==8)
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
990 {*uses_time=1;return SUB_SUBRIP;}
9217
420e2b2f8e5a compiler warning fixes patch by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents: 9145
diff changeset
991 if (sscanf (line, "%d:%d:%d%[,.:]%d --> %d:%d:%d%[,.:]%d", &i, &i, &i, (char *)&i, &i, &i, &i, &i, (char *)&i, &i)==10)
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
992 {*uses_time=1;return SUB_SUBVIEWER;}
11496
luran
parents: 11062
diff changeset
993 if (sscanf (line, "{T %d:%d:%d:%d",&i, &i, &i, &i)==4)
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
994 {*uses_time=1;return SUB_SUBVIEWER2;}
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
995 if (strstr (line, "<SAMI>"))
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
996 {*uses_time=1; return SUB_SAMI;}
7982
eac680483e6c JACOSub is another subtitling format, whose specifications are at:
arpi
parents: 7775
diff changeset
997 if (sscanf(line, "%d:%d:%d.%d %d:%d:%d.%d", &i, &i, &i, &i, &i, &i, &i, &i) == 8)
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
998 {*uses_time = 1; return SUB_JACOSUB;}
8207
467ffae428b0 I recently sent a patch for a new subtitles format, JACOsub. Since then I
arpi
parents: 8206
diff changeset
999 if (sscanf(line, "@%d @%d", &i, &i) == 2)
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1000 {*uses_time = 1; return SUB_JACOSUB;}
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
1001 if (sscanf (line, "%d:%d:%d:", &i, &i, &i )==3)
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1002 {*uses_time=1;return SUB_VPLAYER;}
5363
1f068f4bb6e7 vplayer sub fix by Arkadiusz Podgorski <wodzu@softomat.com.pl>
arpi
parents: 4886
diff changeset
1003 if (sscanf (line, "%d:%d:%d ", &i, &i, &i )==3)
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1004 {*uses_time=1;return SUB_VPLAYER;}
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
1005 //TODO: just checking if first line of sub starts with "<" is WAY
913
18c43d261c35 corrected strcmp() bug, now it works again with every subs (it was broken)
laaz
parents: 896
diff changeset
1006 // too weak test for RT
18c43d261c35 corrected strcmp() bug, now it works again with every subs (it was broken)
laaz
parents: 896
diff changeset
1007 // Please someone who knows the format of RT... FIX IT!!!
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
1008 // It may conflict with other sub formats in the future (actually it doesn't)
913
18c43d261c35 corrected strcmp() bug, now it works again with every subs (it was broken)
laaz
parents: 896
diff changeset
1009 if ( *line == '<' )
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1010 {*uses_time=1;return SUB_RT;}
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
1011
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
1012 if (!memcmp(line, "Dialogue: Marked", 16))
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1013 {*uses_time=1; return SUB_SSA;}
10450
2d3f6a2996da ASS support
henry
parents: 10356
diff changeset
1014 if (!memcmp(line, "Dialogue: ", 10))
2d3f6a2996da ASS support
henry
parents: 10356
diff changeset
1015 {*uses_time=1; return SUB_SSA;}
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
1016 if (sscanf (line, "%d,%d,\"%c", &i, &i, (char *) &i) == 3)
11873
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
1017 {*uses_time=1;return SUB_PJS;}
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
1018 if (sscanf (line, "FORMAT=%d", &i) == 1)
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1019 {*uses_time=0; return SUB_MPSUB;}
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
1020 if (sscanf (line, "FORMAT=TIM%c", &p)==1 && p=='E')
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1021 {*uses_time=1; return SUB_MPSUB;}
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
1022 if (strstr (line, "-->>"))
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1023 {*uses_time=0; return SUB_AQTITLE;}
6076
eff64fb1ffea patch fixes broken detecniou of AQTitle subtiles and adds support for subtitles created by subrip 0.9 - by Jiri.Svoboda@seznam.cz
arpi
parents: 6012
diff changeset
1024 if (sscanf (line, "[%d:%d:%d]", &i, &i, &i)==3)
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1025 {*uses_time=1;return SUB_SUBRIP09;}
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1026 }
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
1027
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
1028 return SUB_INVALID; // too many bad lines
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1029 }
2449
7ef89d9b06ed added DUMPSUBS recognition if we need compile only subreader.c alone
atlka
parents: 2358
diff changeset
1030
7ef89d9b06ed added DUMPSUBS recognition if we need compile only subreader.c alone
atlka
parents: 2358
diff changeset
1031 #ifdef DUMPSUBS
7ef89d9b06ed added DUMPSUBS recognition if we need compile only subreader.c alone
atlka
parents: 2358
diff changeset
1032 int sub_utf8=0;
7ef89d9b06ed added DUMPSUBS recognition if we need compile only subreader.c alone
atlka
parents: 2358
diff changeset
1033 #else
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1034 extern int sub_utf8;
9056
3086611e8213 - add subcp
pontscho
parents: 9009
diff changeset
1035 int sub_utf8_prev=0;
2449
7ef89d9b06ed added DUMPSUBS recognition if we need compile only subreader.c alone
atlka
parents: 2358
diff changeset
1036 #endif
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1037
4886
712c8fc897fd -subfps and -subdelay alters -dumpmpsub's output
laaz
parents: 4880
diff changeset
1038 extern float sub_delay;
712c8fc897fd -subfps and -subdelay alters -dumpmpsub's output
laaz
parents: 4880
diff changeset
1039 extern float sub_fps;
712c8fc897fd -subfps and -subdelay alters -dumpmpsub's output
laaz
parents: 4880
diff changeset
1040
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1041 #ifdef USE_ICONV
10354
18ad3cda99d4 sub_utf8 fiddling
atlka
parents: 10353
diff changeset
1042 static iconv_t icdsc = (iconv_t)(-1);
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1043
12909
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1044 void subcp_open (FILE *enca_fd)
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1045 {
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1046 char *tocp = "UTF-8";
9056
3086611e8213 - add subcp
pontscho
parents: 9009
diff changeset
1047
12909
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1048 if (sub_cp){
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1049 char *cp_tmp = sub_cp;
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1050 #ifdef HAVE_ENCA
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1051 char enca_lang[3], enca_fallback[100];
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1052 int free_cp_tmp = 0;
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1053 if (sscanf(sub_cp, "enca:%2s:%99s", enca_lang, enca_fallback) == 2
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1054 || sscanf(sub_cp, "ENCA:%2s:%99s", enca_lang, enca_fallback) == 2) {
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1055 if (enca_fd) {
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1056 cp_tmp = guess_cp(enca_fd, enca_lang, enca_fallback);
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1057 free_cp_tmp = 1;
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1058 } else {
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1059 cp_tmp = enca_fallback;
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1060 }
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1061 }
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1062 #endif
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1063 if ((icdsc = iconv_open (tocp, cp_tmp)) != (iconv_t)(-1)){
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
1064 mp_msg(MSGT_SUBREADER,MSGL_V,"SUB: opened iconv descriptor.\n");
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1065 sub_utf8 = 2;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1066 } else
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
1067 mp_msg(MSGT_SUBREADER,MSGL_ERR,"SUB: error opening iconv descriptor.\n");
12909
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1068 #ifdef HAVE_ENCA
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1069 if (free_cp_tmp && cp_tmp) free(cp_tmp);
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1070 #endif
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1071 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1072 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1073
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1074 void subcp_close (void)
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1075 {
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1076 if (icdsc != (iconv_t)(-1)){
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1077 (void) iconv_close (icdsc);
9143
6af323788366 maybe fix ogm vs. iconv
arpi
parents: 9126
diff changeset
1078 icdsc = (iconv_t)(-1);
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
1079 mp_msg(MSGT_SUBREADER,MSGL_V,"SUB: closed iconv descriptor.\n");
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1080 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1081 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1082
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1083 #define ICBUFFSIZE 512
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1084 static char icbuffer[ICBUFFSIZE];
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1085
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1086 subtitle* subcp_recode (subtitle *sub)
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1087 {
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1088 int l=sub->lines;
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7460
diff changeset
1089 size_t ileft, oleft;
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1090 char *op, *ip, *ot;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1091
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1092 while (l){
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1093 op = icbuffer;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1094 ip = sub->text[--l];
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1095 ileft = strlen(ip);
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1096 oleft = ICBUFFSIZE - 1;
9056
3086611e8213 - add subcp
pontscho
parents: 9009
diff changeset
1097
6163
141a082e6da6 applied 64bit patch from Ulrich Hecht <uli at suse dot de>
alex
parents: 6076
diff changeset
1098 if (iconv(icdsc, &ip, &ileft,
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1099 &op, &oleft) == (size_t)(-1)) {
9056
3086611e8213 - add subcp
pontscho
parents: 9009
diff changeset
1100 mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: error recoding line (1).\n");
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1101 l++;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1102 break;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1103 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1104 if (!(ot = (char *)malloc(op - icbuffer + 1))){
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
1105 mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: error allocating mem.\n");
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1106 l++;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1107 break;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1108 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1109 *op='\0' ;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1110 strcpy (ot, icbuffer);
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1111 free (sub->text[l]);
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1112 sub->text[l] = ot;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1113 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1114 if (l){
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1115 for (l = sub->lines; l;)
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1116 free (sub->text[--l]);
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1117 return ERR;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1118 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1119 return sub;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1120 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1121
8618
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1122 // for demux_ogg.c:
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1123 subtitle* subcp_recode1 (subtitle *sub)
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1124 {
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1125 int l=sub->lines;
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1126 size_t ileft, oleft;
9143
6af323788366 maybe fix ogm vs. iconv
arpi
parents: 9126
diff changeset
1127
6af323788366 maybe fix ogm vs. iconv
arpi
parents: 9126
diff changeset
1128 if(icdsc == (iconv_t)(-1)) return sub;
8618
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1129
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1130 while (l){
9143
6af323788366 maybe fix ogm vs. iconv
arpi
parents: 9126
diff changeset
1131 char *ip = icbuffer;
6af323788366 maybe fix ogm vs. iconv
arpi
parents: 9126
diff changeset
1132 char *op = sub->text[--l];
12646
9a495bdc3a1e string handling security fixes
diego
parents: 12493
diff changeset
1133 strlcpy(ip, op, ICBUFFSIZE);
8618
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1134 ileft = strlen(ip);
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1135 oleft = ICBUFFSIZE - 1;
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1136
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1137 if (iconv(icdsc, &ip, &ileft,
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1138 &op, &oleft) == (size_t)(-1)) {
9143
6af323788366 maybe fix ogm vs. iconv
arpi
parents: 9126
diff changeset
1139 mp_msg(MSGT_SUBREADER,MSGL_V,"SUB: error recoding line (2).\n");
8618
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1140 return sub;
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1141 }
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1142 *op='\0' ;
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1143 }
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1144 return sub;
a879b231b7e3 This patch adds a call to subcp_recode1(), so this subtitles too are
arpi
parents: 8602
diff changeset
1145 }
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1146 #endif
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1147
9635
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1148 #ifdef USE_FRIBIDI
10555
alex
parents: 10551
diff changeset
1149 #ifndef max
9635
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1150 #define max(a,b) (((a)>(b))?(a):(b))
10555
alex
parents: 10551
diff changeset
1151 #endif
9635
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1152 subtitle* sub_fribidi (subtitle *sub, int sub_utf8)
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1153 {
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1154 FriBidiChar logical[LINE_LEN+1], visual[LINE_LEN+1]; // Hopefully these two won't smash the stack
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1155 char *ip = NULL, *op = NULL;
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1156 FriBidiCharType base;
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1157 size_t len,orig_len;
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1158 int l=sub->lines;
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1159 int char_set_num;
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1160 fribidi_boolean log2vis;
10649
857a34ff479d Fixes FriBiDi support and extends it with configure options. Patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 10555
diff changeset
1161 if(flip_hebrew) { // Please fix the indentation someday
9635
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1162 fribidi_set_mirroring (FRIBIDI_TRUE);
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1163 fribidi_set_reorder_nsm (FRIBIDI_FALSE);
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1164
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1165 if( sub_utf8 == 0 ) {
10649
857a34ff479d Fixes FriBiDi support and extends it with configure options. Patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 10555
diff changeset
1166 char_set_num = fribidi_parse_charset (fribidi_charset?fribidi_charset:"ISO8859-8");
9635
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1167 }else {
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1168 char_set_num = fribidi_parse_charset ("UTF-8");
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1169 }
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1170 while (l) {
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1171 ip = sub->text[--l];
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1172 orig_len = len = strlen( ip ); // We assume that we don't use full unicode, only UTF-8 or ISO8859-x
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1173 if(len > LINE_LEN) {
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1174 mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: sub->text is longer than LINE_LEN.\n");
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1175 l++;
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1176 break;
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1177 }
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1178 len = fribidi_charset_to_unicode (char_set_num, ip, len, logical);
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1179 base = FRIBIDI_TYPE_ON;
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1180 log2vis = fribidi_log2vis (logical, len, &base,
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1181 /* output */
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1182 visual, NULL, NULL, NULL);
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1183 if(log2vis) {
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1184 len = fribidi_remove_bidi_marks (visual, len, NULL, NULL,
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1185 NULL);
10555
alex
parents: 10551
diff changeset
1186 if((op = (char*)malloc(sizeof(char)*(max(2*orig_len,2*len) + 1))) == NULL) {
9635
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1187 mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: error allocating mem.\n");
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1188 l++;
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1189 break;
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1190 }
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1191 fribidi_unicode_to_charset ( char_set_num, visual, len,op);
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1192 free (ip);
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1193 sub->text[l] = op;
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1194 }
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1195 }
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1196 if (l){
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1197 for (l = sub->lines; l;)
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1198 free (sub->text[--l]);
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1199 return ERR;
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1200 }
10649
857a34ff479d Fixes FriBiDi support and extends it with configure options. Patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 10555
diff changeset
1201 }
9635
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1202 return sub;
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1203 }
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1204
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1205 #endif
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1206
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1207 static void adjust_subs_time(subtitle* sub, float subtime, float fps, int block,
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1208 int sub_num, int sub_uses_time) {
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
1209 int n,m;
4052
505f206d80d1 corrections to adjust_subs_time function which now uses fps if needed
atlka
parents: 4051
diff changeset
1210 subtitle* nextsub;
4051
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
1211 int i = sub_num;
4052
505f206d80d1 corrections to adjust_subs_time function which now uses fps if needed
atlka
parents: 4051
diff changeset
1212 unsigned long subfms = (sub_uses_time ? 100 : fps) * subtime;
8206
72647ce8471f allow max 0.2s overlapping without splitting subs
arpi
parents: 8123
diff changeset
1213 unsigned long overlap = (sub_uses_time ? 100 : fps) / 5; // 0.2s
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
1214
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
1215 n=m=0;
7610
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1216 if (i) for (;;){
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
1217 if (sub->end <= sub->start){
4052
505f206d80d1 corrections to adjust_subs_time function which now uses fps if needed
atlka
parents: 4051
diff changeset
1218 sub->end = sub->start + subfms;
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
1219 m++;
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
1220 n++;
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
1221 }
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
1222 if (!--i) break;
4051
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
1223 nextsub = sub + 1;
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1224 if(block){
8206
72647ce8471f allow max 0.2s overlapping without splitting subs
arpi
parents: 8123
diff changeset
1225 if ((sub->end > nextsub->start) && (sub->end <= nextsub->start + overlap)) {
72647ce8471f allow max 0.2s overlapping without splitting subs
arpi
parents: 8123
diff changeset
1226 // these subtitles overlap for less than 0.2 seconds
72647ce8471f allow max 0.2s overlapping without splitting subs
arpi
parents: 8123
diff changeset
1227 // and would result in very short overlapping subtitle
72647ce8471f allow max 0.2s overlapping without splitting subs
arpi
parents: 8123
diff changeset
1228 // so let's fix the problem here, before overlapping code
72647ce8471f allow max 0.2s overlapping without splitting subs
arpi
parents: 8123
diff changeset
1229 // get its hands on them
72647ce8471f allow max 0.2s overlapping without splitting subs
arpi
parents: 8123
diff changeset
1230 unsigned delta = sub->end - nextsub->start, half = delta / 2;
72647ce8471f allow max 0.2s overlapping without splitting subs
arpi
parents: 8123
diff changeset
1231 sub->end -= half + 1;
72647ce8471f allow max 0.2s overlapping without splitting subs
arpi
parents: 8123
diff changeset
1232 nextsub->start += delta - half;
72647ce8471f allow max 0.2s overlapping without splitting subs
arpi
parents: 8123
diff changeset
1233 }
4051
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
1234 if (sub->end >= nextsub->start){
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
1235 sub->end = nextsub->start - 1;
4052
505f206d80d1 corrections to adjust_subs_time function which now uses fps if needed
atlka
parents: 4051
diff changeset
1236 if (sub->end - sub->start > subfms)
505f206d80d1 corrections to adjust_subs_time function which now uses fps if needed
atlka
parents: 4051
diff changeset
1237 sub->end = sub->start + subfms;
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
1238 if (!m)
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
1239 n++;
4051
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
1240 }
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1241 }
7610
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1242
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1243 /* Theory:
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1244 * Movies are often converted from FILM (24 fps)
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1245 * to PAL (25) by simply speeding it up, so we
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1246 * to multiply the original timestmaps by
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1247 * (Movie's FPS / Subtitle's (guessed) FPS)
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1248 * so eg. for 23.98 fps movie and PAL time based
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1249 * subtitles we say -subfps 25 and we're fine!
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1250 */
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1251
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1252 /* timed sub fps correction ::atmos */
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1253 if(sub_uses_time && sub_fps) {
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1254 sub->start *= sub_fps/fps;
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1255 sub->end *= sub_fps/fps;
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1256 }
876495f714dc Enable -subfps for time based subtitles, too.
atmos4
parents: 7608
diff changeset
1257
4051
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
1258 sub = nextsub;
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
1259 m = 0;
4051
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
1260 }
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
1261 if (n) mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Adjusted %d subtitle(s).\n", n);
4051
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
1262 }
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
1263
9009
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1264 struct subreader {
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1265 subtitle * (*read)(FILE *fd,subtitle *dest);
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1266 void (*post)(subtitle *dest);
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1267 const char *name;
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1268 };
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1269
12443
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1270 #ifdef HAVE_ENCA
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1271 #define MAX_GUESS_BUFFER_SIZE (256*1024)
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1272 void* guess_cp(FILE *fd, char *preferred_language, char *fallback)
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1273 {
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1274 const char **languages;
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1275 size_t langcnt, buflen;
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1276 EncaAnalyser analyser;
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1277 EncaEncoding encoding;
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1278 unsigned char *buffer;
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1279 char *detected_sub_cp = NULL;
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1280 int i;
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1281
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1282 buffer = (unsigned char*)malloc(MAX_GUESS_BUFFER_SIZE*sizeof(char));
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1283 buflen = fread(buffer, 1, MAX_GUESS_BUFFER_SIZE, fd);
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1284
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1285 languages = enca_get_languages(&langcnt);
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1286 mp_msg(MSGT_SUBREADER, MSGL_V, "ENCA supported languages: ");
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1287 for (i = 0; i < langcnt; i++) {
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1288 mp_msg(MSGT_SUBREADER, MSGL_V, "%s ", languages[i]);
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1289 }
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1290 mp_msg(MSGT_SUBREADER, MSGL_V, "\n");
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1291
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1292 for (i = 0; i < langcnt; i++) {
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1293 if (strcasecmp(languages[i], preferred_language) != 0) continue;
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1294 analyser = enca_analyser_alloc(languages[i]);
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1295 encoding = enca_analyse_const(analyser, buffer, buflen);
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1296 mp_msg(MSGT_SUBREADER, MSGL_INFO, "ENCA detected charset: %s\n", enca_charset_name(encoding.charset, ENCA_NAME_STYLE_ICONV));
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1297 detected_sub_cp = strdup(enca_charset_name(encoding.charset, ENCA_NAME_STYLE_ICONV));
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1298 enca_analyser_free(analyser);
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1299 }
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1300
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1301 free(languages);
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1302 free(buffer);
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1303 rewind(fd);
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1304
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1305 if (!detected_sub_cp) detected_sub_cp = strdup(fallback);
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1306
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1307 return detected_sub_cp;
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1308 }
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1309 #endif
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1310
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1311 sub_data* sub_read_file (char *filename, float fps) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1312 //filename is assumed to be malloc'ed, free() is used in sub_free()
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1313 FILE *fd;
7983
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1314 int n_max, n_first, i, j, sub_first, sub_orig;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1315 subtitle *first, *second, *sub, *return_sub;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1316 sub_data *subt_data;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1317 int uses_time = 0, sub_num = 0, sub_errs = 0;
9009
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1318 struct subreader sr[]=
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1319 {
9009
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1320 { sub_read_line_microdvd, NULL, "microdvd" },
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1321 { sub_read_line_subrip, NULL, "subrip" },
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1322 { sub_read_line_subviewer, NULL, "subviewer" },
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1323 { sub_read_line_sami, NULL, "sami" },
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1324 { sub_read_line_vplayer, NULL, "vplayer" },
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1325 { sub_read_line_rt, NULL, "rt" },
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1326 { sub_read_line_ssa, sub_pp_ssa, "ssa" },
11873
9c66ef56b1b1 Fix the PJS (aka dunnowhat) subtitles
attila
parents: 11838
diff changeset
1327 { sub_read_line_pjs, NULL, "pjs" },
9009
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1328 { sub_read_line_mpsub, NULL, "mpsub" },
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1329 { sub_read_line_aqt, NULL, "aqt" },
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1330 { sub_read_line_subviewer2, NULL, "subviewer 2.0" },
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1331 { sub_read_line_subrip09, NULL, "subrip 0.9" },
12138
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
1332 { sub_read_line_jacosub, NULL, "jacosub" },
eb3ad04675e1 MPL2 subreader, patch by Cezary Jackiewicz (cjackiewicz@poczta.onet.pl)
alex
parents: 12136
diff changeset
1333 { sub_read_line_mpl2, NULL, "mpl2" }
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1334 };
9009
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1335 struct subreader *srp;
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1336
2915
80954dfeabed fopen(NULL,r) segfault on qnx
iive
parents: 2912
diff changeset
1337 if(filename==NULL) return NULL; //qnx segfault
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1338 fd=fopen (filename, "r"); if (!fd) return NULL;
10353
ee46cdf03028 small correction of sub_utf8 restoring between reading sub files
atlka
parents: 10340
diff changeset
1339
ee46cdf03028 small correction of sub_utf8 restoring between reading sub files
atlka
parents: 10340
diff changeset
1340 sub_format=sub_autodetect (fd, &uses_time);
ee46cdf03028 small correction of sub_utf8 restoring between reading sub files
atlka
parents: 10340
diff changeset
1341 mpsub_multiplier = (uses_time ? 100.0 : 1.0);
ee46cdf03028 small correction of sub_utf8 restoring between reading sub files
atlka
parents: 10340
diff changeset
1342 if (sub_format==SUB_INVALID) {mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: Could not determine file format\n");return NULL;}
ee46cdf03028 small correction of sub_utf8 restoring between reading sub files
atlka
parents: 10340
diff changeset
1343 srp=sr+sub_format;
ee46cdf03028 small correction of sub_utf8 restoring between reading sub files
atlka
parents: 10340
diff changeset
1344 mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Detected subtitle file format: %s\n", srp->name);
ee46cdf03028 small correction of sub_utf8 restoring between reading sub files
atlka
parents: 10340
diff changeset
1345
ee46cdf03028 small correction of sub_utf8 restoring between reading sub files
atlka
parents: 10340
diff changeset
1346 rewind (fd);
ee46cdf03028 small correction of sub_utf8 restoring between reading sub files
atlka
parents: 10340
diff changeset
1347
12455
092875b4fea7 more cola for jindrich
rfelker
parents: 12449
diff changeset
1348 #ifdef USE_ICONV
10353
ee46cdf03028 small correction of sub_utf8 restoring between reading sub files
atlka
parents: 10340
diff changeset
1349 sub_utf8_prev=sub_utf8;
10340
2eaabacd1429 prefer UTF-8 encoding subs and automatically recognize them by suffix
atlka
parents: 10336
diff changeset
1350 {
10354
18ad3cda99d4 sub_utf8 fiddling
atlka
parents: 10353
diff changeset
1351 int l,k;
18ad3cda99d4 sub_utf8 fiddling
atlka
parents: 10353
diff changeset
1352 k = -1;
10340
2eaabacd1429 prefer UTF-8 encoding subs and automatically recognize them by suffix
atlka
parents: 10336
diff changeset
1353 if ((l=strlen(filename))>4){
2eaabacd1429 prefer UTF-8 encoding subs and automatically recognize them by suffix
atlka
parents: 10336
diff changeset
1354 char *exts[] = {".utf", ".utf8", ".utf-8" };
2eaabacd1429 prefer UTF-8 encoding subs and automatically recognize them by suffix
atlka
parents: 10336
diff changeset
1355 for (k=3;--k>=0;)
2eaabacd1429 prefer UTF-8 encoding subs and automatically recognize them by suffix
atlka
parents: 10336
diff changeset
1356 if (!strcasecmp(filename+(l - strlen(exts[k])), exts[k])){
2eaabacd1429 prefer UTF-8 encoding subs and automatically recognize them by suffix
atlka
parents: 10336
diff changeset
1357 sub_utf8 = 1;
2eaabacd1429 prefer UTF-8 encoding subs and automatically recognize them by suffix
atlka
parents: 10336
diff changeset
1358 break;
2eaabacd1429 prefer UTF-8 encoding subs and automatically recognize them by suffix
atlka
parents: 10336
diff changeset
1359 }
2eaabacd1429 prefer UTF-8 encoding subs and automatically recognize them by suffix
atlka
parents: 10336
diff changeset
1360 }
12909
dc8eba991005 fixes a crash and unchecked string-handling in ENCA code.
reimar
parents: 12646
diff changeset
1361 if (k<0) subcp_open(fd);
10340
2eaabacd1429 prefer UTF-8 encoding subs and automatically recognize them by suffix
atlka
parents: 10336
diff changeset
1362 }
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1363 #endif
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1364
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1365 sub_num=0;n_max=32;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1366 first=(subtitle *)malloc(n_max*sizeof(subtitle));
10354
18ad3cda99d4 sub_utf8 fiddling
atlka
parents: 10353
diff changeset
1367 if(!first){
18ad3cda99d4 sub_utf8 fiddling
atlka
parents: 10353
diff changeset
1368 #ifdef USE_ICONV
18ad3cda99d4 sub_utf8 fiddling
atlka
parents: 10353
diff changeset
1369 subcp_close();
18ad3cda99d4 sub_utf8 fiddling
atlka
parents: 10353
diff changeset
1370 sub_utf8=sub_utf8_prev;
18ad3cda99d4 sub_utf8 fiddling
atlka
parents: 10353
diff changeset
1371 #endif
18ad3cda99d4 sub_utf8 fiddling
atlka
parents: 10353
diff changeset
1372 return NULL;
18ad3cda99d4 sub_utf8 fiddling
atlka
parents: 10353
diff changeset
1373 }
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1374
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1375 #ifdef USE_SORTSUB
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1376 sub = (subtitle *)malloc(sizeof(subtitle));
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1377 //This is to deal with those formats (AQT & Subrip) which define the end of a subtitle
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1378 //as the beginning of the following
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1379 previous_sub_end = 0;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1380 #endif
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1381 while(1){
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1382 if(sub_num>=n_max){
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1383 n_max+=16;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1384 first=realloc(first,n_max*sizeof(subtitle));
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1385 }
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1386 #ifndef USE_SORTSUB
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
1387 sub = &first[sub_num];
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1388 #endif
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
1389 memset(sub, '\0', sizeof(subtitle));
9009
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1390 sub=srp->read(fd,sub);
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1391 if(!sub) break; // EOF
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1392 #ifdef USE_ICONV
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1393 if ((sub!=ERR) && (sub_utf8 & 2)) sub=subcp_recode(sub);
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1394 #endif
9635
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1395 #ifdef USE_FRIBIDI
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1396 if (sub!=ERR) sub=sub_fribidi(sub,sub_utf8);
cc20a6dc9bc3 hebrew support using fribidi libs, patch by Raindel Shachar <raindel@techunix.technion.ac.il>
alex
parents: 9322
diff changeset
1397 #endif
9056
3086611e8213 - add subcp
pontscho
parents: 9009
diff changeset
1398 if ( sub == ERR )
3086611e8213 - add subcp
pontscho
parents: 9009
diff changeset
1399 {
3086611e8213 - add subcp
pontscho
parents: 9009
diff changeset
1400 #ifdef USE_ICONV
3086611e8213 - add subcp
pontscho
parents: 9009
diff changeset
1401 subcp_close();
3086611e8213 - add subcp
pontscho
parents: 9009
diff changeset
1402 #endif
3086611e8213 - add subcp
pontscho
parents: 9009
diff changeset
1403 if ( first ) free(first);
3086611e8213 - add subcp
pontscho
parents: 9009
diff changeset
1404 return NULL;
3086611e8213 - add subcp
pontscho
parents: 9009
diff changeset
1405 }
9009
f2d4324561b2 1) Removed the code to remove {} from sub_read_line_ssa
arpi
parents: 8940
diff changeset
1406 // Apply any post processing that needs recoding first
9126
7a06258271d6 Add a command line option (-sub-no-text-pp) to disable subtitles
arpi
parents: 9056
diff changeset
1407 if ((sub!=ERR) && !sub_no_text_pp && srp->post) srp->post(sub);
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1408 #ifdef USE_SORTSUB
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1409 if(!sub_num || (first[sub_num - 1].start <= sub->start)){
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1410 first[sub_num].start = sub->start;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1411 first[sub_num].end = sub->end;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1412 first[sub_num].lines = sub->lines;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10801
diff changeset
1413 first[sub_num].alignment = sub->alignment;
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1414 for(i = 0; i < sub->lines; ++i){
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1415 first[sub_num].text[i] = sub->text[i];
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1416 }
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1417 if (previous_sub_end){
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1418 first[sub_num - 1].end = previous_sub_end;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1419 previous_sub_end = 0;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1420 }
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1421 } else {
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1422 for(j = sub_num - 1; j >= 0; --j){
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1423 first[j + 1].start = first[j].start;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1424 first[j + 1].end = first[j].end;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1425 first[j + 1].lines = first[j].lines;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10801
diff changeset
1426 first[j + 1].alignment = first[j].alignment;
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1427 for(i = 0; i < first[j].lines; ++i){
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1428 first[j + 1].text[i] = first[j].text[i];
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1429 }
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1430 if(!j || (first[j - 1].start <= sub->start)){
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1431 first[j].start = sub->start;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1432 first[j].end = sub->end;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1433 first[j].lines = sub->lines;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10801
diff changeset
1434 first[j].alignment = sub->alignment;
8362
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1435 for(i = 0; i < SUB_MAX_TEXT; ++i){
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1436 first[j].text[i] = sub->text[i];
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1437 }
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1438 if (previous_sub_end){
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1439 first[j].end = first[j - 1].end;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1440 first[j - 1].end = previous_sub_end;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1441 previous_sub_end = 0;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1442 }
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1443 break;
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1444 }
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1445 }
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1446 }
b5478134c853 optional (compile-time switch) subtitles-sorting feature
arpi
parents: 8361
diff changeset
1447 #endif
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1448 if(sub==ERR) ++sub_errs; else ++sub_num; // Error vs. Valid
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1449 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1450
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1451 fclose(fd);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1452
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1453 #ifdef USE_ICONV
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1454 subcp_close();
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1455 #endif
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
1456
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1457 // printf ("SUB: Subtitle format %s time.\n", uses_time?"uses":"doesn't use");
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
1458 mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Read %i subtitles", sub_num);
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
1459 if (sub_errs) mp_msg(MSGT_SUBREADER,MSGL_INFO,", %i bad line(s).\n", sub_errs);
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
1460 else mp_msg(MSGT_SUBREADER,MSGL_INFO,".\n");
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1461
2880
d6343a243515 11110001.txt find_sub sig11 fixed
arpi
parents: 2836
diff changeset
1462 if(sub_num<=0){
d6343a243515 11110001.txt find_sub sig11 fixed
arpi
parents: 2836
diff changeset
1463 free(first);
d6343a243515 11110001.txt find_sub sig11 fixed
arpi
parents: 2836
diff changeset
1464 return NULL;
d6343a243515 11110001.txt find_sub sig11 fixed
arpi
parents: 2836
diff changeset
1465 }
d6343a243515 11110001.txt find_sub sig11 fixed
arpi
parents: 2836
diff changeset
1466
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1467 // we do overlap if the user forced it (suboverlap_enable == 2) or
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1468 // the user didn't forced no-overlapsub and the format is Jacosub or Ssa.
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1469 // this is because usually overlapping subtitles are found in these formats,
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1470 // while in others they are probably result of bad timing
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1471 if ((suboverlap_enabled == 2) ||
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1472 ((suboverlap_enabled) && ((sub_format == SUB_JACOSUB) || (sub_format == SUB_SSA)))) {
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1473 adjust_subs_time(first, 6.0, fps, 0, sub_num, uses_time);/*~6 secs AST*/
7983
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1474 // here we manage overlapping subtitles
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1475 sub_orig = sub_num;
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1476 n_first = sub_num;
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1477 sub_num = 0;
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1478 second = NULL;
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1479 // for each subtitle in first[] we deal with its 'block' of
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1480 // bonded subtitles
7983
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1481 for (sub_first = 0; sub_first < n_first; ++sub_first) {
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1482 unsigned long global_start = first[sub_first].start,
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1483 global_end = first[sub_first].end, local_start, local_end;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1484 int lines_to_add = first[sub_first].lines, sub_to_add = 0,
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1485 **placeholder = NULL, higher_line = 0, counter, start_block_sub = sub_num;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1486 char real_block = 1;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1487
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1488 // here we find the number of subtitles inside the 'block'
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1489 // and its span interval. this works well only with sorted
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1490 // subtitles
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1491 while ((sub_first + sub_to_add + 1 < n_first) && (first[sub_first + sub_to_add + 1].start < global_end)) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1492 ++sub_to_add;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1493 lines_to_add += first[sub_first + sub_to_add].lines;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1494 if (first[sub_first + sub_to_add].start < global_start) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1495 global_start = first[sub_first + sub_to_add].start;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1496 }
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1497 if (first[sub_first + sub_to_add].end > global_end) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1498 global_end = first[sub_first + sub_to_add].end;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1499 }
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1500 }
7983
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1501
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1502 // we need a structure to keep trace of the screen lines
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1503 // used by the subs, a 'placeholder'
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1504 counter = 2 * sub_to_add + 1; // the maximum number of subs derived
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1505 // from a block of sub_to_add+1 subs
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1506 placeholder = (int **) malloc(sizeof(int *) * counter);
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1507 for (i = 0; i < counter; ++i) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1508 placeholder[i] = (int *) malloc(sizeof(int) * lines_to_add);
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1509 for (j = 0; j < lines_to_add; ++j) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1510 placeholder[i][j] = -1;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1511 }
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1512 }
7983
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1513
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1514 counter = 0;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1515 local_end = global_start - 1;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1516 do {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1517 int ls;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1518
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1519 // here we find the beginning and the end of a new
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1520 // subtitle in the block
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1521 local_start = local_end + 1;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1522 local_end = global_end;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1523 for (j = 0; j <= sub_to_add; ++j) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1524 if ((first[sub_first + j].start - 1 > local_start) && (first[sub_first + j].start - 1 < local_end)) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1525 local_end = first[sub_first + j].start - 1;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1526 } else if ((first[sub_first + j].end > local_start) && (first[sub_first + j].end < local_end)) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1527 local_end = first[sub_first + j].end;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1528 }
7983
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1529 }
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1530 // here we allocate the screen lines to subs we must
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1531 // display in current local_start-local_end interval.
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1532 // if the subs were yet presents in the previous interval
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1533 // they keep the same lines, otherside they get unused lines
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1534 for (j = 0; j <= sub_to_add; ++j) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1535 if ((first[sub_first + j].start <= local_end) && (first[sub_first + j].end > local_start)) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1536 unsigned long sub_lines = first[sub_first + j].lines, fragment_length = lines_to_add + 1,
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1537 tmp = 0;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1538 char boolean = 0;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1539 int fragment_position = -1;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1540
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1541 // if this is not the first new sub of the block
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1542 // we find if this sub was present in the previous
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1543 // new sub
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1544 if (counter)
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1545 for (i = 0; i < lines_to_add; ++i) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1546 if (placeholder[counter - 1][i] == sub_first + j) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1547 placeholder[counter][i] = sub_first + j;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1548 boolean = 1;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1549 }
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1550 }
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1551 if (boolean)
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1552 continue;
7983
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1553
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1554 // we are looking for the shortest among all groups of
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1555 // sequential blank lines whose length is greater than or
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1556 // equal to sub_lines. we store in fragment_position the
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1557 // position of the shortest group, in fragment_length its
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1558 // length, and in tmp the length of the group currently
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1559 // examinated
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1560 for (i = 0; i < lines_to_add; ++i) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1561 if (placeholder[counter][i] == -1) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1562 // placeholder[counter][i] is part of the current group
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1563 // of blank lines
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1564 ++tmp;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1565 } else {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1566 if (tmp == sub_lines) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1567 // current group's size fits exactly the one we
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1568 // need, so we stop looking
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1569 fragment_position = i - tmp;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1570 tmp = 0;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1571 break;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1572 }
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1573 if ((tmp) && (tmp > sub_lines) && (tmp < fragment_length)) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1574 // current group is the best we found till here,
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1575 // but is still bigger than the one we are looking
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1576 // for, so we keep on looking
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1577 fragment_length = tmp;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1578 fragment_position = i - tmp;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1579 tmp = 0;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1580 } else {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1581 // current group doesn't fit at all, so we forget it
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1582 tmp = 0;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1583 }
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1584 }
7983
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1585 }
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1586 if (tmp) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1587 // last screen line is blank, a group ends with it
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1588 if ((tmp >= sub_lines) && (tmp < fragment_length)) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1589 fragment_position = i - tmp;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1590 }
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1591 }
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1592 if (fragment_position == -1) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1593 // it was not possible to find free screen line(s) for a subtitle,
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1594 // usually this means a bug in the code; however we do not overlap
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1595 mp_msg(MSGT_SUBREADER, MSGL_WARN, "SUB: we could not find a suitable position for an overlapping subtitle\n");
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1596 higher_line = SUB_MAX_TEXT + 1;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1597 break;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1598 } else {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1599 for (tmp = 0; tmp < sub_lines; ++tmp) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1600 placeholder[counter][fragment_position + tmp] = sub_first + j;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1601 }
7983
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1602 }
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1603 }
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1604 }
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1605 for (j = higher_line + 1; j < lines_to_add; ++j) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1606 if (placeholder[counter][j] != -1)
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1607 higher_line = j;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1608 else
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1609 break;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1610 }
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1611 if (higher_line >= SUB_MAX_TEXT) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1612 // the 'block' has too much lines, so we don't overlap the
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1613 // subtitles
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1614 second = (subtitle *) realloc(second, (sub_num + sub_to_add + 1) * sizeof(subtitle));
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1615 for (j = 0; j <= sub_to_add; ++j) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1616 int ls;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1617 memset(&second[sub_num + j], '\0', sizeof(subtitle));
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1618 second[sub_num + j].start = first[sub_first + j].start;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1619 second[sub_num + j].end = first[sub_first + j].end;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1620 second[sub_num + j].lines = first[sub_first + j].lines;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10801
diff changeset
1621 second[sub_num + j].alignment = first[sub_first + j].alignment;
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1622 for (ls = 0; ls < second[sub_num + j].lines; ls++) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1623 second[sub_num + j].text[ls] = strdup(first[sub_first + j].text[ls]);
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1624 }
7983
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1625 }
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1626 sub_num += sub_to_add + 1;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1627 sub_first += sub_to_add;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1628 real_block = 0;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1629 break;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1630 }
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1631
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1632 // we read the placeholder structure and create the new
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1633 // subs.
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1634 second = (subtitle *) realloc(second, (sub_num + 1) * sizeof(subtitle));
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1635 memset(&second[sub_num], '\0', sizeof(subtitle));
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1636 second[sub_num].start = local_start;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1637 second[sub_num].end = local_end;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10801
diff changeset
1638 second[sub_num].alignment = SUB_ALIGNMENT_HCENTER;
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1639 n_max = (lines_to_add < SUB_MAX_TEXT) ? lines_to_add : SUB_MAX_TEXT;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1640 for (i = 0, j = 0; j < n_max; ++j) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1641 if (placeholder[counter][j] != -1) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1642 int lines = first[placeholder[counter][j]].lines;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1643 for (ls = 0; ls < lines; ++ls) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1644 second[sub_num].text[i++] = strdup(first[placeholder[counter][j]].text[ls]);
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1645 }
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1646 j += lines - 1;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1647 } else {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1648 second[sub_num].text[i++] = strdup(" ");
7983
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1649 }
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1650 }
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1651 ++sub_num;
8882
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1652 ++counter;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1653 } while (local_end < global_end);
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1654 if (real_block)
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1655 for (i = 0; i < counter; ++i)
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1656 second[start_block_sub + i].lines = higher_line + 1;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1657
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1658 counter = 2 * sub_to_add + 1;
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1659 for (i = 0; i < counter; ++i) {
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1660 free(placeholder[i]);
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1661 }
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1662 free(placeholder);
1c44c46ed57f Overlapping subs are a feature mainly present in subtitling
arpi
parents: 8862
diff changeset
1663 sub_first += sub_to_add;
7983
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1664 }
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1665
8734
arpi
parents: 8643
diff changeset
1666 for (j = sub_orig - 1; j >= 0; --j) {
arpi
parents: 8643
diff changeset
1667 for (i = first[j].lines - 1; i >= 0; --i) {
7983
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1668 free(first[j].text[i]);
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1669 }
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1670 }
8785
arpi
parents: 8734
diff changeset
1671 free(first);
7983
8344414c59cf This patch is to add support for overlapping subtitles, that is
arpi
parents: 7982
diff changeset
1672
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1673 return_sub = second;
8361
2202c00001e3 overlapping subtitles support is now optional, can be disabled (-nooverlapsub)
arpi
parents: 8360
diff changeset
1674 } else { //if(suboverlap_enabled)
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1675 adjust_subs_time(first, 6.0, fps, 1, sub_num, uses_time);/*~6 secs AST*/
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1676 return_sub = first;
8361
2202c00001e3 overlapping subtitles support is now optional, can be disabled (-nooverlapsub)
arpi
parents: 8360
diff changeset
1677 }
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1678 if (return_sub == NULL) return NULL;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1679 subt_data = (sub_data *)malloc(sizeof(sub_data));
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1680 subt_data->filename = filename;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1681 subt_data->sub_uses_time = uses_time;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1682 subt_data->sub_num = sub_num;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1683 subt_data->sub_errs = sub_errs;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1684 subt_data->subtitles = return_sub;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1685 return subt_data;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1686 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
1687
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
1688 #if 0
509
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1689 char * strreplace( char * in,char * what,char * whereof )
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1690 {
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1691 int i;
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1692 char * tmp;
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1693
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1694 if ( ( in == NULL )||( what == NULL )||( whereof == NULL )||( ( tmp=strstr( in,what ) ) == NULL ) ) return NULL;
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1695 for( i=0;i<strlen( whereof );i++ ) tmp[i]=whereof[i];
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1696 if ( strlen( what ) > strlen( whereof ) ) tmp[i]=0;
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1697 return in;
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1698 }
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
1699 #endif
509
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1700
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1701
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1702 static void strcpy_trim(char *d, char *s)
509
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1703 {
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1704 // skip leading whitespace
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1705 while (*s && !isalnum(*s)) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1706 s++;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1707 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1708 for (;;) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1709 // copy word
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1710 while (*s && isalnum(*s)) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1711 *d = tolower(*s);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1712 s++; d++;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1713 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1714 if (*s == 0) break;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1715 // trim excess whitespace
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1716 while (*s && !isalnum(*s)) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1717 s++;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1718 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1719 if (*s == 0) break;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1720 *d++ = ' ';
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1721 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1722 *d = 0;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1723 }
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
1724
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1725 static void strcpy_strip_ext(char *d, char *s)
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1726 {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1727 char *tmp = strrchr(s,'.');
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1728 if (!tmp) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1729 strcpy(d, s);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1730 return;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1731 } else {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1732 strncpy(d, s, tmp-s);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1733 d[tmp-s] = 0;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1734 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1735 while (*d) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1736 *d = tolower(*d);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1737 d++;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1738 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1739 }
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
1740
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1741 static void strcpy_get_ext(char *d, char *s)
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1742 {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1743 char *tmp = strrchr(s,'.');
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1744 if (!tmp) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1745 strcpy(d, "");
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1746 return;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1747 } else {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1748 strcpy(d, tmp+1);
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
1749 }
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1750 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1751
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1752 static int whiteonly(char *s)
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1753 {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1754 while (*s) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1755 if (isalnum(*s)) return 0;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1756 s++;
509
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1757 }
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1758 return 1;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1759 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1760
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1761 typedef struct _subfn
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1762 {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1763 int priority;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1764 char *fname;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1765 } subfn;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1766
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1767 static int compare_sub_priority(const void *a, const void *b)
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1768 {
9895
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1769 if (((subfn*)a)->priority > ((subfn*)b)->priority) {
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1770 return -1;
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1771 } else if (((subfn*)a)->priority < ((subfn*)b)->priority) {
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1772 return 1;
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1773 } else {
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1774 return strcoll(((subfn*)a)->fname, ((subfn*)b)->fname);
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1775 }
509
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1776 }
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
1777
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1778 char** sub_filenames(char* path, char *fname)
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1779 {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1780 char *f_dir, *f_fname, *f_fname_noext, *f_fname_trim, *tmp, *tmp_sub_id;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1781 char *tmp_fname_noext, *tmp_fname_trim, *tmp_fname_ext, *tmpresult;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1782
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1783 int len, pos, found, i, j;
10801
6c56b4aff706 Jacosub files can have the extension '.js' too. Patch by Vladimir Mosgalin <mosgalin@VM10124.spb.edu>
alex
parents: 10692
diff changeset
1784 char * sub_exts[] = { "utf", "utf8", "utf-8", "sub", "srt", "smi", "rt", "txt", "ssa", "aqt", "jss", "js", "ass", NULL};
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1785 subfn *result;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1786 char **result2;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1787
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1788 int subcnt;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1789
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1790 FILE *f;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1791
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1792 DIR *d;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1793 struct dirent *de;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1794
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1795 len = (strlen(fname) > 256 ? strlen(fname) : 256)
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1796 +(strlen(path) > 256 ? strlen(path) : 256)+2;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1797
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1798 f_dir = (char*)malloc(len);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1799 f_fname = (char*)malloc(len);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1800 f_fname_noext = (char*)malloc(len);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1801 f_fname_trim = (char*)malloc(len);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1802
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1803 tmp_fname_noext = (char*)malloc(len);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1804 tmp_fname_trim = (char*)malloc(len);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1805 tmp_fname_ext = (char*)malloc(len);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1806
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1807 tmpresult = (char*)malloc(len);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1808
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1809 result = (subfn*)malloc(sizeof(subfn)*MAX_SUBTITLE_FILES);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1810 memset(result, 0, sizeof(subfn)*MAX_SUBTITLE_FILES);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1811
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1812 subcnt = 0;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1813
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1814 tmp = strrchr(fname,'/');
11062
42cb00f7209f sub autoloading fix for windows
faust3
parents: 10932
diff changeset
1815 #ifdef WIN32
42cb00f7209f sub autoloading fix for windows
faust3
parents: 10932
diff changeset
1816 if(!tmp)tmp = strrchr(fname,'\\');
42cb00f7209f sub autoloading fix for windows
faust3
parents: 10932
diff changeset
1817 #endif
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1818
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1819 // extract filename & dirname from fname
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1820 if (tmp) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1821 strcpy(f_fname, tmp+1);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1822 pos = tmp - fname;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1823 strncpy(f_dir, fname, pos+1);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1824 f_dir[pos+1] = 0;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1825 } else {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1826 strcpy(f_fname, fname);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1827 strcpy(f_dir, "./");
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1828 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1829
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1830 strcpy_strip_ext(f_fname_noext, f_fname);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1831 strcpy_trim(f_fname_trim, f_fname_noext);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1832
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1833 tmp_sub_id = NULL;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1834 if (dvdsub_lang && !whiteonly(dvdsub_lang)) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1835 tmp_sub_id = (char*)malloc(strlen(dvdsub_lang)+1);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1836 strcpy_trim(tmp_sub_id, dvdsub_lang);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1837 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1838
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1839 // 0 = nothing
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1840 // 1 = any subtitle file
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1841 // 2 = any sub file containing movie name
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1842 // 3 = sub file containing movie name and the lang extension
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1843 for (j = 0; j <= 1; j++) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1844 d = opendir(j == 0 ? f_dir : path);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1845 if (d) {
10236
4640f25fef12 warning fixes by Dominik
alex
parents: 10220
diff changeset
1846 while ((de = readdir(d))) {
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1847 // retrieve various parts of the filename
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1848 strcpy_strip_ext(tmp_fname_noext, de->d_name);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1849 strcpy_get_ext(tmp_fname_ext, de->d_name);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1850 strcpy_trim(tmp_fname_trim, tmp_fname_noext);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1851
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1852 // does it end with a subtitle extension?
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1853 found = 0;
9872
eea06a971711 fix compilation without iconv
henry
parents: 9870
diff changeset
1854 #ifdef USE_ICONV
12443
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1855 #ifdef HAVE_ENCA
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1856 for (i = ((sub_cp && strncasecmp(sub_cp, "enca", 4) != 0) ? 3 : 0); sub_exts[i]; i++) {
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1857 #else
10340
2eaabacd1429 prefer UTF-8 encoding subs and automatically recognize them by suffix
atlka
parents: 10336
diff changeset
1858 for (i = (sub_cp ? 3 : 0); sub_exts[i]; i++) {
12443
ae4ae7ab636c ENCA support (http://trific.ath.cx/software/enca/)
henry
parents: 12138
diff changeset
1859 #endif
9872
eea06a971711 fix compilation without iconv
henry
parents: 9870
diff changeset
1860 #else
eea06a971711 fix compilation without iconv
henry
parents: 9870
diff changeset
1861 for (i = 0; sub_exts[i]; i++) {
eea06a971711 fix compilation without iconv
henry
parents: 9870
diff changeset
1862 #endif
13229
b1e482fcd919 subtitle autodetection regardles of case (bug #65), patches Michal Svec <rebel at atrey.karlin.mff.cuni.cz> and Reynaldo H. Verdejo Pinochet <reynaldo at opendot.cl>
faust3
parents: 12909
diff changeset
1863 if (strcasecmp(sub_exts[i], tmp_fname_ext) == 0) {
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1864 found = 1;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1865 break;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1866 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1867 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1868
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1869 // we have a (likely) subtitle file
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1870 if (found) {
9895
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1871 int prio = 0;
10551
b16cc4867b2d another attempt to fix the subtitle searching
henry
parents: 10544
diff changeset
1872 if (!prio && tmp_sub_id)
10486
f3540688a9ec fix against dummy solaris sprintf, bug reported by Gotz Waschk
alex
parents: 10450
diff changeset
1873 {
10551
b16cc4867b2d another attempt to fix the subtitle searching
henry
parents: 10544
diff changeset
1874 sprintf(tmpresult, "%s %s", f_fname_trim, tmp_sub_id);
b16cc4867b2d another attempt to fix the subtitle searching
henry
parents: 10544
diff changeset
1875 printf("dvdsublang...%s\n", tmpresult);
b16cc4867b2d another attempt to fix the subtitle searching
henry
parents: 10544
diff changeset
1876 if (strcmp(tmp_fname_trim, tmpresult) == 0 && sub_match_fuzziness >= 1) {
b16cc4867b2d another attempt to fix the subtitle searching
henry
parents: 10544
diff changeset
1877 // matches the movie name + lang extension
b16cc4867b2d another attempt to fix the subtitle searching
henry
parents: 10544
diff changeset
1878 prio = 5;
b16cc4867b2d another attempt to fix the subtitle searching
henry
parents: 10544
diff changeset
1879 }
b16cc4867b2d another attempt to fix the subtitle searching
henry
parents: 10544
diff changeset
1880 }
b16cc4867b2d another attempt to fix the subtitle searching
henry
parents: 10544
diff changeset
1881 if (!prio && strcmp(tmp_fname_trim, f_fname_trim) == 0) {
9895
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1882 // matches the movie name
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1883 prio = 4;
10551
b16cc4867b2d another attempt to fix the subtitle searching
henry
parents: 10544
diff changeset
1884 }
b16cc4867b2d another attempt to fix the subtitle searching
henry
parents: 10544
diff changeset
1885 if (!prio && (tmp = strstr(tmp_fname_trim, f_fname_trim)) && (sub_match_fuzziness >= 1)) {
9895
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1886 // contains the movie name
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1887 tmp += strlen(f_fname_trim);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1888 if (tmp_sub_id && strstr(tmp, tmp_sub_id)) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1889 // with sub_id specified prefer localized subtitles
9895
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1890 prio = 3;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1891 } else if ((tmp_sub_id == NULL) && whiteonly(tmp)) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1892 // without sub_id prefer "plain" name
9895
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1893 prio = 3;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1894 } else {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1895 // with no localized subs found, try any else instead
9895
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1896 prio = 2;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1897 }
10551
b16cc4867b2d another attempt to fix the subtitle searching
henry
parents: 10544
diff changeset
1898 }
b16cc4867b2d another attempt to fix the subtitle searching
henry
parents: 10544
diff changeset
1899 if (!prio) {
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1900 // doesn't contain the movie name
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1901 // don't try in the mplayer subtitle directory
9893
eb274fd5e84e option for sub match fuzziness level
henry
parents: 9888
diff changeset
1902 if ((j == 0) && (sub_match_fuzziness >= 2)) {
9895
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1903 prio = 1;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1904 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1905 }
9895
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1906
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1907 if (prio) {
10340
2eaabacd1429 prefer UTF-8 encoding subs and automatically recognize them by suffix
atlka
parents: 10336
diff changeset
1908 prio += prio;
10494
db0bc96da95f 1, micro-speedup 2, fixed 10l: only prefer utf8 if iconv is present
alex
parents: 10486
diff changeset
1909 #ifdef USE_ICONV
10932
80276a5ccb34 subtitles priority calculation correction
atlka
parents: 10929
diff changeset
1910 if (i<3){ // prefer UTF-8 coded
10340
2eaabacd1429 prefer UTF-8 encoding subs and automatically recognize them by suffix
atlka
parents: 10336
diff changeset
1911 prio++;
10929
fc2cfb994784 corrected utf8 files autoselection
atlka
parents: 10916
diff changeset
1912 }
10494
db0bc96da95f 1, micro-speedup 2, fixed 10l: only prefer utf8 if iconv is present
alex
parents: 10486
diff changeset
1913 #endif
10336
henry
parents: 10236
diff changeset
1914 sprintf(tmpresult, "%s%s", j == 0 ? f_dir : path, de->d_name);
9895
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1915 // fprintf(stderr, "%s priority %d\n", tmpresult, prio);
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1916 if ((f = fopen(tmpresult, "rt"))) {
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1917 fclose(f);
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1918 result[subcnt].priority = prio;
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1919 result[subcnt].fname = strdup(tmpresult);
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1920 subcnt++;
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1921 }
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1922 }
fd2dbce1ba3b cleanups/bugfixes
henry
parents: 9893
diff changeset
1923
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1924 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1925 if (subcnt >= MAX_SUBTITLE_FILES) break;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1926 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1927 closedir(d);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1928 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1929
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1930 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1931
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1932 if (tmp_sub_id) free(tmp_sub_id);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1933
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1934 free(f_dir);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1935 free(f_fname);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1936 free(f_fname_noext);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1937 free(f_fname_trim);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1938
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1939 free(tmp_fname_noext);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1940 free(tmp_fname_trim);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1941 free(tmp_fname_ext);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1942
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1943 free(tmpresult);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1944
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1945 qsort(result, subcnt, sizeof(subfn), compare_sub_priority);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1946
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1947 result2 = (char**)malloc(sizeof(char*)*(subcnt+1));
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1948 memset(result2, 0, sizeof(char*)*(subcnt+1));
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1949
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1950 for (i = 0; i < subcnt; i++) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1951 result2[i] = result[i].fname;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1952 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1953 result2[subcnt] = NULL;
10220
alex
parents: 9895
diff changeset
1954
alex
parents: 9895
diff changeset
1955 free(result);
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1956
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1957 return result2;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1958 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1959
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1960 void list_sub_file(sub_data* subd){
1761
827b551bbcab subdump
arpi
parents: 1640
diff changeset
1961 int i,j;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1962 subtitle *subs = subd->subtitles;
1761
827b551bbcab subdump
arpi
parents: 1640
diff changeset
1963
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1964 for(j=0; j < subd->sub_num; j++){
1761
827b551bbcab subdump
arpi
parents: 1640
diff changeset
1965 subtitle* egysub=&subs[j];
8862
356534b9e7d4 Since version 2.7 the file extension for JACOsub changed from
arpi
parents: 8789
diff changeset
1966 printf ("%i line%c (%li-%li)\n",
1761
827b551bbcab subdump
arpi
parents: 1640
diff changeset
1967 egysub->lines,
827b551bbcab subdump
arpi
parents: 1640
diff changeset
1968 (1==egysub->lines)?' ':'s',
827b551bbcab subdump
arpi
parents: 1640
diff changeset
1969 egysub->start,
827b551bbcab subdump
arpi
parents: 1640
diff changeset
1970 egysub->end);
827b551bbcab subdump
arpi
parents: 1640
diff changeset
1971 for (i=0; i<egysub->lines; i++) {
8862
356534b9e7d4 Since version 2.7 the file extension for JACOsub changed from
arpi
parents: 8789
diff changeset
1972 printf ("\t\t%d: %s%s", i,egysub->text[i], i==egysub->lines-1?"":" \n ");
1761
827b551bbcab subdump
arpi
parents: 1640
diff changeset
1973 }
827b551bbcab subdump
arpi
parents: 1640
diff changeset
1974 printf ("\n");
827b551bbcab subdump
arpi
parents: 1640
diff changeset
1975 }
827b551bbcab subdump
arpi
parents: 1640
diff changeset
1976
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1977 printf ("Subtitle format %s time.\n",
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1978 subd->sub_uses_time ? "uses":"doesn't use");
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1979 printf ("Read %i subtitles, %i errors.\n", subd->sub_num, subd->sub_errs);
1761
827b551bbcab subdump
arpi
parents: 1640
diff changeset
1980 }
6208
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
1981
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1982 void dump_srt(sub_data* subd, float fps){
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1983 int i,j;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1984 int h,m,s,ms;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1985 FILE * fd;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1986 subtitle * onesub;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1987 unsigned long temp;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1988 subtitle *subs = subd->subtitles;
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1989
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1990 if (!subd->sub_uses_time && sub_fps == 0)
6792
0d08931fb3c3 Correct dump_srt millisecond output
kmkaplan
parents: 6657
diff changeset
1991 sub_fps = fps;
6208
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
1992 fd=fopen("dumpsub.srt","w");
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
1993 if(!fd)
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
1994 {
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
1995 perror("dump_srt: fopen");
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
1996 return;
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
1997 }
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
1998 for(i=0; i < subd->sub_num; i++)
6208
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
1999 {
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2000 onesub=subs+i; //=&subs[i];
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2001 fprintf(fd,"%d\n",i+1);//line number
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2002
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2003 temp=onesub->start;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2004 if (!subd->sub_uses_time)
6792
0d08931fb3c3 Correct dump_srt millisecond output
kmkaplan
parents: 6657
diff changeset
2005 temp = temp * 100 / sub_fps;
0d08931fb3c3 Correct dump_srt millisecond output
kmkaplan
parents: 6657
diff changeset
2006 temp -= sub_delay * 100;
6208
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2007 h=temp/360000;temp%=360000; //h =1*100*60*60
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2008 m=temp/6000; temp%=6000; //m =1*100*60
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2009 s=temp/100; temp%=100; //s =1*100
6792
0d08931fb3c3 Correct dump_srt millisecond output
kmkaplan
parents: 6657
diff changeset
2010 ms=temp*10; //ms=1*10
6208
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2011 fprintf(fd,"%02d:%02d:%02d,%03d --> ",h,m,s,ms);
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2012
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2013 temp=onesub->end;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2014 if (!subd->sub_uses_time)
6792
0d08931fb3c3 Correct dump_srt millisecond output
kmkaplan
parents: 6657
diff changeset
2015 temp = temp * 100 / sub_fps;
0d08931fb3c3 Correct dump_srt millisecond output
kmkaplan
parents: 6657
diff changeset
2016 temp -= sub_delay * 100;
6208
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2017 h=temp/360000;temp%=360000;
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2018 m=temp/6000; temp%=6000;
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2019 s=temp/100; temp%=100;
6792
0d08931fb3c3 Correct dump_srt millisecond output
kmkaplan
parents: 6657
diff changeset
2020 ms=temp*10;
6208
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2021 fprintf(fd,"%02d:%02d:%02d,%03d\n",h,m,s,ms);
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2022
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2023 for(j=0;j<onesub->lines;j++)
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2024 fprintf(fd,"%s\n",onesub->text[j]);
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2025
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2026 fprintf(fd,"\n");
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2027 }
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2028 fclose(fd);
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
2029 mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dumpsub.srt\'.\n");
6208
86162cb34bc9 added dump subtitles to .srt
iive
parents: 6163
diff changeset
2030 }
1761
827b551bbcab subdump
arpi
parents: 1640
diff changeset
2031
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2032 void dump_mpsub(sub_data* subd, float fps){
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2033 int i,j;
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2034 FILE *fd;
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2035 float a,b;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2036 subtitle *subs = subd->subtitles;
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2037
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2038 mpsub_position = subd->sub_uses_time? (sub_delay*100) : (sub_delay*fps);
4886
712c8fc897fd -subfps and -subdelay alters -dumpmpsub's output
laaz
parents: 4880
diff changeset
2039 if (sub_fps==0) sub_fps=fps;
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2040
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2041 fd=fopen ("dump.mpsub", "w");
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2042 if (!fd) {
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2043 perror ("dump_mpsub: fopen");
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2044 return;
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2045 }
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2046
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2047
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2048 if (subd->sub_uses_time) fprintf (fd,"FORMAT=TIME\n\n");
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
2049 else fprintf (fd, "FORMAT=%5.2f\n\n", fps);
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2050
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2051 for(j=0; j < subd->sub_num; j++){
2495
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2052 subtitle* egysub=&subs[j];
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2053 if (subd->sub_uses_time) {
2495
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2054 a=((egysub->start-mpsub_position)/100.0);
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2055 b=((egysub->end-egysub->start)/100.0);
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2056 if ( (float)((int)a) == a)
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2057 fprintf (fd, "%.0f",a);
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2058 else
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2059 fprintf (fd, "%.2f",a);
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2060
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2061 if ( (float)((int)b) == b)
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2062 fprintf (fd, " %.0f\n",b);
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2063 else
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2064 fprintf (fd, " %.2f\n",b);
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2065 } else {
4886
712c8fc897fd -subfps and -subdelay alters -dumpmpsub's output
laaz
parents: 4880
diff changeset
2066 fprintf (fd, "%ld %ld\n", (long)((egysub->start*(fps/sub_fps))-((mpsub_position*(fps/sub_fps)))),
712c8fc897fd -subfps and -subdelay alters -dumpmpsub's output
laaz
parents: 4880
diff changeset
2067 (long)(((egysub->end)-(egysub->start))*(fps/sub_fps)));
2495
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2068 }
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2069
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2070 mpsub_position = egysub->end;
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2071 for (i=0; i<egysub->lines; i++) {
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2072 fprintf (fd, "%s\n",egysub->text[i]);
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2073 }
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
2074 fprintf (fd, "\n");
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2075 }
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2076 fclose (fd);
6296
74115095d9fe msg/i18n fixes and some printf->mp_msg
arpi
parents: 6247
diff changeset
2077 mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dump.mpsub\'.\n");
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2078 }
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2079
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2080 void dump_microdvd(sub_data* subd, float fps) {
7460
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2081 int i, delay;
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2082 FILE *fd;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2083 subtitle *subs = subd->subtitles;
7460
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2084 if (sub_fps == 0)
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2085 sub_fps = fps;
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2086 fd = fopen("dumpsub.txt", "w");
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2087 if (!fd) {
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2088 perror("dumpsub.txt: fopen");
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2089 return;
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2090 }
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2091 delay = sub_delay * sub_fps;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2092 for (i = 0; i < subd->sub_num; ++i) {
7460
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2093 int j, start, end;
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2094 start = subs[i].start;
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2095 end = subs[i].end;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2096 if (subd->sub_uses_time) {
7460
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2097 start = start * sub_fps / 100 ;
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2098 end = end * sub_fps / 100;
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2099 }
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2100 else {
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2101 start = start * sub_fps / fps;
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2102 end = end * sub_fps / fps;
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2103 }
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2104 start -= delay;
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2105 end -= delay;
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2106 fprintf(fd, "{%d}{%d}", start, end);
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2107 for (j = 0; j < subs[i].lines; ++j)
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2108 fprintf(fd, "%s%s", j ? "|" : "", subs[i].text[j]);
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2109 fprintf(fd, "\n");
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2110 }
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2111 fclose(fd);
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2112 mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dumpsub.txt\'.\n");
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2113 }
fdf31bb0450f New option for mplayer: -dumpmicrodvdsub
kmkaplan
parents: 7128
diff changeset
2114
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2115 void dump_jacosub(sub_data* subd, float fps) {
8360
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2116 int i,j;
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2117 int h,m,s,cs;
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2118 FILE * fd;
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2119 subtitle * onesub;
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2120 unsigned long temp;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2121 subtitle *subs = subd->subtitles;
8360
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2122
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2123 if (!subd->sub_uses_time && sub_fps == 0)
8360
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2124 sub_fps = fps;
8862
356534b9e7d4 Since version 2.7 the file extension for JACOsub changed from
arpi
parents: 8789
diff changeset
2125 fd=fopen("dumpsub.jss","w");
8360
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2126 if(!fd)
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2127 {
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2128 perror("dump_jacosub: fopen");
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2129 return;
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2130 }
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2131 fprintf(fd, "#TIMERES %d\n", (subd->sub_uses_time) ? 100 : (int)sub_fps);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2132 for(i=0; i < subd->sub_num; i++)
8360
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2133 {
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2134 onesub=subs+i; //=&subs[i];
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2135
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2136 temp=onesub->start;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2137 if (!subd->sub_uses_time)
8360
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2138 temp = temp * 100 / sub_fps;
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2139 temp -= sub_delay * 100;
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2140 h=temp/360000;temp%=360000; //h =1*100*60*60
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2141 m=temp/6000; temp%=6000; //m =1*100*60
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2142 s=temp/100; temp%=100; //s =1*100
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2143 cs=temp; //cs=1*10
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2144 fprintf(fd,"%02d:%02d:%02d.%02d ",h,m,s,cs);
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2145
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2146 temp=onesub->end;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2147 if (!subd->sub_uses_time)
8360
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2148 temp = temp * 100 / sub_fps;
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2149 temp -= sub_delay * 100;
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2150 h=temp/360000;temp%=360000;
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2151 m=temp/6000; temp%=6000;
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2152 s=temp/100; temp%=100;
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2153 cs=temp;
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2154 fprintf(fd,"%02d:%02d:%02d.%02d {~} ",h,m,s,cs);
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2155
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2156 for(j=0;j<onesub->lines;j++)
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2157 fprintf(fd,"%s%s",j ? "\\n" : "", onesub->text[j]);
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2158
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2159 fprintf(fd,"\n");
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2160 }
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2161 fclose(fd);
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2162 mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dumpsub.js\'.\n");
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2163 }
ad75993b8deb dump in JACOsub format
arpi
parents: 8207
diff changeset
2164
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2165 void dump_sami(sub_data* subd, float fps) {
8363
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2166 int i,j;
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2167 FILE * fd;
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2168 subtitle * onesub;
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2169 unsigned long temp;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2170 subtitle *subs = subd->subtitles;
8363
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2171
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2172 if (!subd->sub_uses_time && sub_fps == 0)
8363
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2173 sub_fps = fps;
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2174 fd=fopen("dumpsub.smi","w");
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2175 if(!fd)
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2176 {
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2177 perror("dump_jacosub: fopen");
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2178 return;
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2179 }
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2180 fprintf(fd, "<SAMI>\n"
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2181 "<HEAD>\n"
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2182 " <STYLE TYPE=\"Text/css\">\n"
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2183 " <!--\n"
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2184 " P {margin-left: 29pt; margin-right: 29pt; font-size: 24pt; text-align: center; font-family: Tahoma; font-weight: bold; color: #FCDD03; background-color: #000000;}\n"
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2185 " .SUBTTL {Name: 'Subtitles'; Lang: en-US; SAMIType: CC;}\n"
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2186 " -->\n"
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2187 " </STYLE>\n"
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2188 "</HEAD>\n"
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2189 "<BODY>\n");
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2190 for(i=0; i < subd->sub_num; i++)
8363
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2191 {
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2192 onesub=subs+i; //=&subs[i];
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2193
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2194 temp=onesub->start;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2195 if (!subd->sub_uses_time)
8363
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2196 temp = temp * 100 / sub_fps;
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2197 temp -= sub_delay * 100;
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2198 fprintf(fd,"\t<SYNC Start=%lu>\n"
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2199 "\t <P>", temp * 10);
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2200
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2201 for(j=0;j<onesub->lines;j++)
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2202 fprintf(fd,"%s%s",j ? "<br>" : "", onesub->text[j]);
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2203
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2204 fprintf(fd,"\n");
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2205
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2206 temp=onesub->end;
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2207 if (!subd->sub_uses_time)
8363
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2208 temp = temp * 100 / sub_fps;
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2209 temp -= sub_delay * 100;
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2210 fprintf(fd,"\t<SYNC Start=%lu>\n"
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2211 "\t <P>&nbsp;\n", temp * 10);
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2212 }
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2213 fprintf(fd, "</BODY>\n"
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2214 "</SAMI>\n");
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2215 fclose(fd);
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2216 mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dumpsub.smi\'.\n");
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2217 }
ae74be3e2ed0 dump subtitles in SAMI format
arpi
parents: 8362
diff changeset
2218
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2219 void sub_free( sub_data * subd )
3543
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
2220 {
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
2221 int i;
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
2222
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2223 if ( !subd ) return;
3543
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
2224
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2225 if (subd->subtitles) {
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2226 for (i=0; i < subd->subtitles->lines; i++) free( subd->subtitles->text[i] );
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2227 free( subd->subtitles );
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2228 }
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2229 if (subd->filename) free( subd->filename );
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2230 free( subd );
3543
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
2231 }
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
2232
2449
7ef89d9b06ed added DUMPSUBS recognition if we need compile only subreader.c alone
atlka
parents: 2358
diff changeset
2233 #ifdef DUMPSUBS
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
2234 int main(int argc, char **argv) { // for testing
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2235 sub_data *subd;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
2236
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
2237 if(argc<2){
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
2238 printf("\nUsage: subreader filename.sub\n\n");
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
2239 exit(1);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
2240 }
2449
7ef89d9b06ed added DUMPSUBS recognition if we need compile only subreader.c alone
atlka
parents: 2358
diff changeset
2241 sub_cp = argv[2];
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2242 subd = sub_read_file(argv[1]);
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2243 if(!subd){
4886
712c8fc897fd -subfps and -subdelay alters -dumpmpsub's output
laaz
parents: 4880
diff changeset
2244 printf("Couldn't load file.\n");
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
2245 exit(1);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
2246 }
1761
827b551bbcab subdump
arpi
parents: 1640
diff changeset
2247
9870
09d630a4f991 support for multiple subtitle files by Marcin Wojdyr <wojdyr@unipress.waw.pl>
henry
parents: 9635
diff changeset
2248 list_sub_file(subd);
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
2249
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
2250 return 0;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
2251 }
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
2252 #endif