annotate subreader.c @ 11330:a974c00c779d

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