annotate subreader.c @ 19619:a83e5b8d2e63

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