annotate subreader.c @ 10218:f82646fc1431

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