annotate subreader.c @ 5623:cdf5b88bdaa8

Most of informational printk's ifdef'd. Now without debug only initial and error messages go to syslog. eyck added to list of people who messed with this file(?).
author eyck
date Sun, 14 Apr 2002 23:14:26 +0000
parents 1f068f4bb6e7
children 880008901169
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
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
15 #include "config.h"
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
16 #include "subreader.h"
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
17
3701
a33d0351630e bzero() -> memset()
pl
parents: 3543
diff changeset
18 #define ERR ((void *) -1)
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
19
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
20 #ifdef USE_ICONV
2358
8b971caf9e03 better FreeBSD iconv implementation
nexus
parents: 2343
diff changeset
21 #ifdef __FreeBSD__
8b971caf9e03 better FreeBSD iconv implementation
nexus
parents: 2343
diff changeset
22 #include <giconv.h>
8b971caf9e03 better FreeBSD iconv implementation
nexus
parents: 2343
diff changeset
23 #else
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
24 #include <iconv.h>
2358
8b971caf9e03 better FreeBSD iconv implementation
nexus
parents: 2343
diff changeset
25 #endif
2151
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
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
28
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
29 /* Maximal length of line of a subtitle */
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
30 #define LINE_LEN 1000
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
31
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
32 static float mpsub_position=0;
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
33
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
34 int sub_uses_time=0;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
35 int sub_errs=0;
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
36 int sub_num=0; // number of subtitle structs
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
37 int sub_slacktime=2000; // 20 seconds
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
38
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
39 /* Use the SUB_* constant defined in the header file */
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
40 int sub_format=SUB_INVALID;
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
41
3701
a33d0351630e bzero() -> memset()
pl
parents: 3543
diff changeset
42 static int eol(char p) {
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
43 return (p=='\r' || p=='\n' || p=='\0');
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
44 }
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
45
3701
a33d0351630e bzero() -> memset()
pl
parents: 3543
diff changeset
46 /* Remove leading and trailing space */
a33d0351630e bzero() -> memset()
pl
parents: 3543
diff changeset
47 static void trail_space(char *s) {
a33d0351630e bzero() -> memset()
pl
parents: 3543
diff changeset
48 int i = 0;
3924
9f18722fafe9 tail_space infinite loop fix by jeon_goon@lycos.co.kr
arpi
parents: 3735
diff changeset
49 while (isspace(s[i])) ++i;
3701
a33d0351630e bzero() -> memset()
pl
parents: 3543
diff changeset
50 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
51 i = strlen(s) - 1;
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
52 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
53 }
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
54
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
55
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
56 subtitle *sub_read_line_sami(FILE *fd, subtitle *current) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
57 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
58 static char *s = NULL, *slacktime_s;
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
59 char text[LINE_LEN+1], *p, *q;
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
60 int state;
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
61
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
62 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
63 state = 0;
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
64
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
65 /* read the first line */
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
66 if (!s)
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
67 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
68
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
69 do {
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
70 switch (state) {
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
71
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
72 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
73 slacktime_s = strstr (s, "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
74 if (slacktime_s) sub_slacktime = strtol (slacktime_s + 10, NULL, 0) / 10;
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
75
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
76 s = strstr (s, "Start=");
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
77 if (s) {
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
78 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
79 state = 1; continue;
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
80 }
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
81 break;
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
82
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
83 case 1: /* find "<P" */
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
84 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
85 break;
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
86
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
87 case 2: /* find ">" */
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
88 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
89 break;
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
90
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
91 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
92 if (*s == '\0') break;
2836
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
93 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
94 *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
95 if (text[0] != '\0')
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
96 current->text[current->lines++] = strdup (text);
2836
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
97 s += 4;
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
98 }
2836
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
99 else if (*s == '<') { state = 4; }
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
100 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
101 else if (*s == '\t') { *p++ = ' '; s++; }
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
102 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
103 else *p++ = *s++;
2836
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
104
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
105 /* skip duplicated space */
ec672ea5ac2c Applied SAMI patch by Evgeny Chukreev <codedj at echo dot ru>
atmos4
parents: 2495
diff changeset
106 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
107
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
108 continue;
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
109
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
110 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
111 q = strstr (s, "Start=");
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
112 if (q) {
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
113 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
114 *p = '\0'; trail_space (text);
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
115 if (text[0] != '\0')
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
116 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
117 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
118 state = 0; continue;
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
119 }
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
120 s = strchr (s, '>');
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
121 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
122 break;
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
123 }
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
124
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
125 /* read next line */
3735
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
126 if (state != 99 && !(s = fgets (line, LINE_LEN, fd))) {
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
127 if (current->start > 0) {
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
128 break; // if it is the last subtitle
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
129 } else {
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
130 return 0;
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
131 }
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
132 }
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
133
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
134 } while (state != 99);
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
135
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
136 // 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
137 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
138 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
139 *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
140 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
141 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
142 }
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
143
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
144 return current;
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
145 }
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
146
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
147
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
148 char *sub_readtext(char *source, char **dest) {
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
149 int len=0;
932
c3073fae3120 more stabile
laaz
parents: 921
diff changeset
150 char *p=source;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
151
932
c3073fae3120 more stabile
laaz
parents: 921
diff changeset
152 while ( !eol(*p) && *p!= '|' ) {
c3073fae3120 more stabile
laaz
parents: 921
diff changeset
153 p++,len++;
c3073fae3120 more stabile
laaz
parents: 921
diff changeset
154 }
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
155
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
156 *dest= (char *)malloc (len+1);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
157 if (!dest) {return ERR;}
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
158
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
159 strncpy(*dest, source, len);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
160 (*dest)[len]=0;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
161
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
162 while (*p=='\r' || *p=='\n' || *p=='|') p++;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
163
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
164 if (*p) return p; // not-last text field
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
165 else return NULL; // last text field
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
166 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
167
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
168 subtitle *sub_read_line_microdvd(FILE *fd,subtitle *current) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
169 char line[LINE_LEN+1];
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
170 char line2[LINE_LEN+1];
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
171 char *p, *next;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
172 int i;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
173
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
174 do {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
175 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
176 } while ((sscanf (line,
654419a9a228 changed subreader.c to read microdvd lines in form "{%ld}{}[^\r\n]" too
atlka
parents: 3924
diff changeset
177 "{%ld}{}%[^\r\n]",
654419a9a228 changed subreader.c to read microdvd lines in form "{%ld}{}[^\r\n]" too
atlka
parents: 3924
diff changeset
178 &(current->start), line2) < 2) &&
654419a9a228 changed subreader.c to read microdvd lines in form "{%ld}{}[^\r\n]" too
atlka
parents: 3924
diff changeset
179 (sscanf (line,
654419a9a228 changed subreader.c to read microdvd lines in form "{%ld}{}[^\r\n]" too
atlka
parents: 3924
diff changeset
180 "{%ld}{%ld}%[^\r\n]",
654419a9a228 changed subreader.c to read microdvd lines in form "{%ld}{}[^\r\n]" too
atlka
parents: 3924
diff changeset
181 &(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
182
932
c3073fae3120 more stabile
laaz
parents: 921
diff changeset
183 p=line2;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
184
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
185 next=p, i=0;
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
186 while ((next =sub_readtext (next, &(current->text[i])))) {
270
7d544020e398 no more garbage! (fixed by laaz)
gabucino
parents: 269
diff changeset
187 if (current->text[i]==ERR) {return ERR;}
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
188 i++;
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
189 if (i>=SUB_MAX_TEXT) { printf ("Too many lines in a subtitle\n");current->lines=i;return current;}
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
190 }
932
c3073fae3120 more stabile
laaz
parents: 921
diff changeset
191 current->lines= ++i;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
192
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
193 return current;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
194 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
195
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
196 subtitle *sub_read_line_subrip(FILE *fd, subtitle *current) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
197 char line[LINE_LEN+1];
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
198 int a1,a2,a3,a4,b1,b2,b3,b4;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
199 char *p=NULL, *q=NULL;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
200 int len;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
201
1764
a9e51734ea00 ehh. sizeof(pointer) bug fixed...
arpi
parents: 1761
diff changeset
202 while (1) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
203 if (!fgets (line, LINE_LEN, fd)) return NULL;
269
f5a7323af43f applied patch by lez
arpi_esp
parents: 258
diff changeset
204 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
205 current->start = a1*360000+a2*6000+a3*100+a4;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
206 current->end = b1*360000+b2*6000+b3*100+b4;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
207
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
208 if (!fgets (line, LINE_LEN, fd)) return NULL;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
209
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
210 p=q=line;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
211 for (current->lines=1; current->lines < SUB_MAX_TEXT; current->lines++) {
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
212 for (q=p,len=0; *p && *p!='\r' && *p!='\n' && strncmp(p,"[br]",4); p++,len++);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
213 current->text[current->lines-1]=(char *)malloc (len+1);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
214 if (!current->text[current->lines-1]) return ERR;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
215 strncpy (current->text[current->lines-1], q, len);
270
7d544020e398 no more garbage! (fixed by laaz)
gabucino
parents: 269
diff changeset
216 current->text[current->lines-1][len]='\0';
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
217 if (!*p || *p=='\r' || *p=='\n') break;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
218 while (*p++!=']');
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
219 }
1764
a9e51734ea00 ehh. sizeof(pointer) bug fixed...
arpi
parents: 1761
diff changeset
220 break;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
221 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
222 return current;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
223 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
224
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
225 subtitle *sub_read_line_subviewer(FILE *fd,subtitle *current) {
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
226 char line[LINE_LEN+1];
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
227 int a1,a2,a3,a4,b1,b2,b3,b4;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
228 char *p=NULL;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
229 int i,len;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
230
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
231 while (!current->text[0]) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
232 if (!fgets (line, LINE_LEN, fd)) return NULL;
269
f5a7323af43f applied patch by lez
arpi_esp
parents: 258
diff changeset
233 if ((len=sscanf (line, "%d:%d:%d,%d --> %d:%d:%d,%d",&a1,&a2,&a3,&a4,&b1,&b2,&b3,&b4)) < 8)
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
234 continue;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
235 current->start = a1*360000+a2*6000+a3*100+a4/10;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
236 current->end = b1*360000+b2*6000+b3*100+b4/10;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
237 for (i=0; i<SUB_MAX_TEXT;) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
238 if (!fgets (line, LINE_LEN, fd)) break;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
239 len=0;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
240 for (p=line; *p!='\n' && *p!='\r' && *p; p++,len++);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
241 if (len) {
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
242 current->text[i]=(char *)malloc (len+1);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
243 if (!current->text[i]) return ERR;
270
7d544020e398 no more garbage! (fixed by laaz)
gabucino
parents: 269
diff changeset
244 strncpy (current->text[i], line, len); current->text[i][len]='\0';
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
245 i++;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
246 } else {
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
247 break;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
248 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
249 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
250 current->lines=i;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
251 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
252 return current;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
253 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
254
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
255 subtitle *sub_read_line_vplayer(FILE *fd,subtitle *current) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
256 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
257 int a1,a2,a3;
3735
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
258 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
259 int i,len,plen;
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
260
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
261 while (!current->text[0]) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
262 if (!fgets (line, LINE_LEN, fd)) return NULL;
3724
a2325883c46c vplayer format - no longer crashes on slightly broken subs.
eyck
parents: 3701
diff changeset
263 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
264 continue;
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
265
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
266 if (!(current->start = a1*360000+a2*6000+a3*100))
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
267 continue;
5363
1f068f4bb6e7 vplayer sub fix by Arkadiusz Podgorski <wodzu@softomat.com.pl>
arpi
parents: 4886
diff changeset
268 /* removed by wodzu
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
269 p=line;
1640
cbedcfab877b Fixup to vplayer subtitle submitted to sourceforge by Igor Wojnicki
eyck
parents: 1501
diff changeset
270 // finds the body of the subtitle
cbedcfab877b Fixup to vplayer subtitle submitted to sourceforge by Igor Wojnicki
eyck
parents: 1501
diff changeset
271 for (i=0; i<3; i++){
3433
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
272 p=strchr(p,':');
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
273 if (p==NULL) break;
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
274 ++p;
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
275 }
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
276 if (p==NULL) {
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
277 printf("SUB: Skipping incorrect subtitle line!\n");
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
278 continue;
8519aba2644d Patch by artur Zaprzala:
atmos4
parents: 3235
diff changeset
279 }
5363
1f068f4bb6e7 vplayer sub fix by Arkadiusz Podgorski <wodzu@softomat.com.pl>
arpi
parents: 4886
diff changeset
280 */
1f068f4bb6e7 vplayer sub fix by Arkadiusz Podgorski <wodzu@softomat.com.pl>
arpi
parents: 4886
diff changeset
281 // 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
282 // 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
283 // colon! look, what simple it can be:
1f068f4bb6e7 vplayer sub fix by Arkadiusz Podgorski <wodzu@softomat.com.pl>
arpi
parents: 4886
diff changeset
284 p = &line[ plen ];
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
285
1640
cbedcfab877b Fixup to vplayer subtitle submitted to sourceforge by Igor Wojnicki
eyck
parents: 1501
diff changeset
286 i=0;
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
287 if (*p!='|') {
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
288 //
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
289 next = p,i=0;
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
290 while ((next =sub_readtext (next, &(current->text[i])))) {
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
291 if (current->text[i]==ERR) {return ERR;}
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
292 i++;
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
293 if (i>=SUB_MAX_TEXT) { printf ("Too many lines in a subtitle\n");current->lines=i;return current;}
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
294 }
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
295 current->lines=i+1;
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
296 }
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
297 }
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
298 return current;
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
299 }
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
300
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
301 subtitle *sub_read_line_rt(FILE *fd,subtitle *current) {
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
302 //TODO: This format uses quite rich (sub/super)set of xhtml
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
303 // I couldn't check it since DTD is not included.
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
304 // WARNING: full XML parses can be required for proper parsing
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
305 char line[LINE_LEN+1];
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
306 int a1,a2,a3,a4,b1,b2,b3,b4;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
307 char *p=NULL,*next=NULL;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
308 int i,len,plen;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
309
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
310 while (!current->text[0]) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
311 if (!fgets (line, LINE_LEN, fd)) return NULL;
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
312 //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
313 //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
314 //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
315 plen=a1=a2=a3=a4=b1=b2=b3=b4=0;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
316 if (
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
317 ((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
318 ((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
319 // ((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
320 ((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) &&
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
321 ((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)
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
322 )
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
323 continue;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
324 current->start = a1*360000+a2*6000+a3*100+a4/10;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
325 current->end = b1*360000+b2*6000+b3*100+b4/10;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
326 p=line; p+=plen;i=0;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
327 // TODO: I don't know what kind of convention is here for marking multiline subs, maybe <br/> like in xml?
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
328 next = strstr(line,"<clear/>")+8;i=0;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
329 while ((next =sub_readtext (next, &(current->text[i])))) {
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
330 if (current->text[i]==ERR) {return ERR;}
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
331 i++;
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
332 if (i>=SUB_MAX_TEXT) { printf ("Too many lines in a subtitle\n");current->lines=i;return current;}
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
333 }
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
334 current->lines=i+1;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
335 }
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
336 return current;
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
337 }
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
338
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
339 subtitle *sub_read_line_ssa(FILE *fd,subtitle *current) {
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
340 int hour1, min1, sec1, hunsec1,
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
341 hour2, min2, sec2, hunsec2, nothing;
2141
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
342 int num;
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
343
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
344 char line[LINE_LEN+1],
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
345 line3[LINE_LEN+1],
2140
885c9c802373 ssa worx fine. Testers needed :)))
laaz
parents: 1764
diff changeset
346 *line2;
2141
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
347 char *tmp;
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
348
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
349 do {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
350 if (!fgets (line, LINE_LEN, fd)) return NULL;
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
351 } 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
352 "%[^\n\r]", &nothing,
885c9c802373 ssa worx fine. Testers needed :)))
laaz
parents: 1764
diff changeset
353 &hour1, &min1, &sec1, &hunsec1,
885c9c802373 ssa worx fine. Testers needed :)))
laaz
parents: 1764
diff changeset
354 &hour2, &min2, &sec2, &hunsec2,
885c9c802373 ssa worx fine. Testers needed :)))
laaz
parents: 1764
diff changeset
355 line3) < 9);
885c9c802373 ssa worx fine. Testers needed :)))
laaz
parents: 1764
diff changeset
356 line2=strstr(line3,",,");
885c9c802373 ssa worx fine. Testers needed :)))
laaz
parents: 1764
diff changeset
357 if (!line2) return NULL;
885c9c802373 ssa worx fine. Testers needed :)))
laaz
parents: 1764
diff changeset
358 line2 ++;
885c9c802373 ssa worx fine. Testers needed :)))
laaz
parents: 1764
diff changeset
359 line2 ++;
885c9c802373 ssa worx fine. Testers needed :)))
laaz
parents: 1764
diff changeset
360
2141
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
361 current->lines=1;num=0;
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
362 current->start = 360000*hour1 + 6000*min1 + 100*sec1 + hunsec1;
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
363 current->end = 360000*hour2 + 6000*min2 + 100*sec2 + hunsec2;
2141
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
364
3735
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
365 while ((tmp=strstr(line2, "\\n")) != NULL) {
2141
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
366 current->text[num]=(char *)malloc(tmp-line2+1);
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
367 strncpy (current->text[num], line2, tmp-line2);
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
368 current->text[num][tmp-line2]='\0';
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
369 line2=tmp+2;
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
370 num++;
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
371 current->lines++;
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
372 if (current->lines >= SUB_MAX_TEXT) return current;
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
373 }
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
374
fa62c11857e8 SSA 2. felvonas (egyre jobban programozok!!!)
laaz
parents: 2140
diff changeset
375
3701
a33d0351630e bzero() -> memset()
pl
parents: 3543
diff changeset
376 current->text[num]=strdup(line2);
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
377
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
378 return current;
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
379 }
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
380
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
381 subtitle *sub_read_line_dunnowhat(FILE *fd,subtitle *current) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
382 char line[LINE_LEN+1];
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
383 char text[LINE_LEN+1];
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
384
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
385 if (!fgets (line, LINE_LEN, fd))
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
386 return NULL;
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
387 if (sscanf (line, "%ld,%ld,\"%[^\"]", &(current->start),
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
388 &(current->end), text) <3)
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
389 return ERR;
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
390 current->text[0] = strdup(text);
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
391 current->lines = 1;
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
392
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
393 return current;
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
394 }
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
395
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
396 subtitle *sub_read_line_mpsub(FILE *fd, subtitle *current) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
397 char line[LINE_LEN+1];
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
398 float a,b;
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
399 int num=0;
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
400 char *p, *q;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
401
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
402 do
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
403 {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
404 if (!fgets(line, LINE_LEN, fd)) return NULL;
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
405 } while (sscanf (line, "%f %f", &a, &b) !=2);
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
406
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
407 mpsub_position += (a*100.0);
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
408 current->start=(int) mpsub_position;
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
409 mpsub_position += (b*100.0);
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
410 current->end=(int) mpsub_position;
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
411
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
412 while (num < SUB_MAX_TEXT) {
4098
0eb21bf98baa fixed mpsub bug requested by Gabucino
laaz
parents: 4064
diff changeset
413 if (!fgets (line, LINE_LEN, fd)) {
0eb21bf98baa fixed mpsub bug requested by Gabucino
laaz
parents: 4064
diff changeset
414 if (num == 0) return NULL;
0eb21bf98baa fixed mpsub bug requested by Gabucino
laaz
parents: 4064
diff changeset
415 else return current;
0eb21bf98baa fixed mpsub bug requested by Gabucino
laaz
parents: 4064
diff changeset
416 }
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
417 p=line;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
418 while (isspace(*p)) p++;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
419 if (eol(*p) && num > 0) return current;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
420 if (eol(*p)) return NULL;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
421
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
422 for (q=p; !eol(*q); q++);
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
423 *q='\0';
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
424 if (strlen(p)) {
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
425 current->text[num]=strdup(p);
4098
0eb21bf98baa fixed mpsub bug requested by Gabucino
laaz
parents: 4064
diff changeset
426 // printf (">%s<\n",p);
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
427 current->lines = ++num;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
428 } else {
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
429 if (num) return current;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
430 else return NULL;
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
431 }
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
432 }
3735
8baf42fa69b9 fix a warning (ambiguous 'if else')
pl
parents: 3724
diff changeset
433 return NULL; // we should have returned before if it's OK
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
434 }
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
435
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
436 subtitle *previous_aqt_sub = NULL;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
437
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
438 subtitle *sub_read_line_aqt(FILE *fd,subtitle *current) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
439 char line[LINE_LEN+1];
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
440
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
441 while (1) {
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
442 // try to locate next subtitle
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
443 if (!fgets (line, LINE_LEN, fd))
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
444 return NULL;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
445 if (!(sscanf (line, "-->> %ld", &(current->start)) <1))
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
446 break;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
447 }
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
448
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
449 if (previous_aqt_sub != NULL)
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
450 previous_aqt_sub->end = current->start-1;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
451
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
452 previous_aqt_sub = current;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
453
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
454 if (!fgets (line, LINE_LEN, fd))
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
455 return NULL;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
456
2468
24427e03cd66 remowing warning message
atlka
parents: 2449
diff changeset
457 sub_readtext((char *) &line,&current->text[0]);
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
458 current->lines = 1;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
459 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
460
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
461 if (!fgets (line, LINE_LEN, fd))
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
462 return current;;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
463
2468
24427e03cd66 remowing warning message
atlka
parents: 2449
diff changeset
464 sub_readtext((char *) &line,&current->text[1]);
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
465 current->lines = 2;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
466
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
467 if ((current->text[0]=="") && (current->text[1]=="")) {
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
468 // void subtitle -> end of previous marked and exit
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
469 previous_aqt_sub = NULL;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
470 return NULL;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
471 }
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
472
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
473 return current;
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
474 }
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
475
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
476 int sub_autodetect (FILE *fd) {
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
477 char line[LINE_LEN+1];
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
478 int i,j=0;
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
479 char p;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
480
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
481 while (j < 100) {
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
482 j++;
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
483 if (!fgets (line, LINE_LEN, fd))
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
484 return SUB_INVALID;
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
485
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
486 if (sscanf (line, "{%d}{%d}", &i, &i)==2)
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
487 {sub_uses_time=0;return SUB_MICRODVD;}
4519
c8bf6fd27d68 too many arguments to sscan in subdetect.
eyck
parents: 4444
diff changeset
488 if (sscanf (line, "{%d}{}", &i)==1)
4444
b09348223925 detect microdvd with empty second frame.
eyck
parents: 4098
diff changeset
489 {sub_uses_time=0;return SUB_MICRODVD;}
269
f5a7323af43f applied patch by lez
arpi_esp
parents: 258
diff changeset
490 if (sscanf (line, "%d:%d:%d.%d,%d:%d:%d.%d", &i, &i, &i, &i, &i, &i, &i, &i)==8)
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
491 {sub_uses_time=1;return SUB_SUBRIP;}
269
f5a7323af43f applied patch by lez
arpi_esp
parents: 258
diff changeset
492 if (sscanf (line, "%d:%d:%d,%d --> %d:%d:%d,%d", &i, &i, &i, &i, &i, &i, &i, &i)==8)
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
493 {sub_uses_time=1;return SUB_SUBVIEWER;}
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
494 if (strstr (line, "<SAMI>"))
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
495 {sub_uses_time=1; return SUB_SAMI;}
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
496 if (sscanf (line, "%d:%d:%d:", &i, &i, &i )==3)
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
497 {sub_uses_time=1;return SUB_VPLAYER;}
5363
1f068f4bb6e7 vplayer sub fix by Arkadiusz Podgorski <wodzu@softomat.com.pl>
arpi
parents: 4886
diff changeset
498 if (sscanf (line, "%d:%d:%d ", &i, &i, &i )==3)
1f068f4bb6e7 vplayer sub fix by Arkadiusz Podgorski <wodzu@softomat.com.pl>
arpi
parents: 4886
diff changeset
499 {sub_uses_time=1;return SUB_VPLAYER;}
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
500 //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
501 // too weak test for RT
18c43d261c35 corrected strcmp() bug, now it works again with every subs (it was broken)
laaz
parents: 896
diff changeset
502 // Please someone who knows the format of RT... FIX IT!!!
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
503 // 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
504 if ( *line == '<' )
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
505 {sub_uses_time=1;return SUB_RT;}
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
506
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
507 if (!memcmp(line, "Dialogue: Marked", 16))
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
508 {sub_uses_time=1; return SUB_SSA;}
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
509 if (sscanf (line, "%d,%d,\"%c", &i, &i, (char *) &i) == 3)
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
510 {sub_uses_time=0;return SUB_DUNNOWHAT;}
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
511 if (sscanf (line, "FORMAT=%d", &i) == 1)
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
512 {sub_uses_time=0; return SUB_MPSUB;}
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
513 if (sscanf (line, "FORMAT=TIM%c", &p)==1 && p=='E')
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
514 {sub_uses_time=1; return SUB_MPSUB;}
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
515 if (strstr (line, "-->>"))
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
516 {sub_uses_time=0; return SUB_MPSUB;}
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
517 }
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
518
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
519 return SUB_INVALID; // too many bad lines
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
520 }
2449
7ef89d9b06ed added DUMPSUBS recognition if we need compile only subreader.c alone
atlka
parents: 2358
diff changeset
521
7ef89d9b06ed added DUMPSUBS recognition if we need compile only subreader.c alone
atlka
parents: 2358
diff changeset
522 #ifdef DUMPSUBS
7ef89d9b06ed added DUMPSUBS recognition if we need compile only subreader.c alone
atlka
parents: 2358
diff changeset
523 int sub_utf8=0;
7ef89d9b06ed added DUMPSUBS recognition if we need compile only subreader.c alone
atlka
parents: 2358
diff changeset
524 #else
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
525 extern int sub_utf8;
2449
7ef89d9b06ed added DUMPSUBS recognition if we need compile only subreader.c alone
atlka
parents: 2358
diff changeset
526 #endif
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
527
4886
712c8fc897fd -subfps and -subdelay alters -dumpmpsub's output
laaz
parents: 4880
diff changeset
528 extern float sub_delay;
712c8fc897fd -subfps and -subdelay alters -dumpmpsub's output
laaz
parents: 4880
diff changeset
529 extern float sub_fps;
712c8fc897fd -subfps and -subdelay alters -dumpmpsub's output
laaz
parents: 4880
diff changeset
530
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
531 #ifdef USE_ICONV
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
532 static iconv_t icdsc;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
533
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
534 void subcp_open (void)
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
535 {
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
536 char *tocp = "UTF-8";
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
537 icdsc = (iconv_t)(-1);
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
538 if (sub_cp){
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
539 if ((icdsc = iconv_open (tocp, sub_cp)) != (iconv_t)(-1)){
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
540 printf ("SUB: opened iconv descriptor.\n");
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
541 sub_utf8 = 2;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
542 } else
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
543 printf ("SUB: error opening iconv descriptor.\n");
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
544 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
545 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
546
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
547 void subcp_close (void)
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
548 {
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
549 if (icdsc != (iconv_t)(-1)){
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
550 (void) iconv_close (icdsc);
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
551 printf ("SUB: closed iconv descriptor.\n");
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
552 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
553 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
554
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
555 #define ICBUFFSIZE 512
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
556 static char icbuffer[ICBUFFSIZE];
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
557
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
558 subtitle* subcp_recode (subtitle *sub)
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
559 {
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
560 int l=sub->lines;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
561 size_t ileft, oleft, otlen;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
562 char *op, *ip, *ot;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
563
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
564 while (l){
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
565 op = icbuffer;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
566 ip = sub->text[--l];
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
567 ileft = strlen(ip);
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
568 oleft = ICBUFFSIZE - 1;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
569
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
570 if (iconv(icdsc, (const char **) &ip, &ileft,
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
571 &op, &oleft) == (size_t)(-1)) {
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
572 printf ("SUB: error recoding line.\n");
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
573 l++;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
574 break;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
575 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
576 if (!(ot = (char *)malloc(op - icbuffer + 1))){
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
577 printf ("SUB: error allocating mem.\n");
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
578 l++;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
579 break;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
580 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
581 *op='\0' ;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
582 strcpy (ot, icbuffer);
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
583 free (sub->text[l]);
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
584 sub->text[l] = ot;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
585 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
586 if (l){
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
587 for (l = sub->lines; l;)
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
588 free (sub->text[--l]);
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
589 return ERR;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
590 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
591 return sub;
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
592 }
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
593
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
594 #endif
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
595
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
596 static void adjust_subs_time(subtitle* sub, float subtime, float fps){
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
597 int n,m;
4052
505f206d80d1 corrections to adjust_subs_time function which now uses fps if needed
atlka
parents: 4051
diff changeset
598 subtitle* nextsub;
4051
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
599 int i = sub_num;
4052
505f206d80d1 corrections to adjust_subs_time function which now uses fps if needed
atlka
parents: 4051
diff changeset
600 unsigned long subfms = (sub_uses_time ? 100 : fps) * subtime;
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
601
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
602 n=m=0;
4052
505f206d80d1 corrections to adjust_subs_time function which now uses fps if needed
atlka
parents: 4051
diff changeset
603 if (i) for (;;){
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
604 if (sub->end <= sub->start){
4052
505f206d80d1 corrections to adjust_subs_time function which now uses fps if needed
atlka
parents: 4051
diff changeset
605 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
606 m++;
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
607 n++;
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
608 }
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
609 if (!--i) break;
4051
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
610 nextsub = sub + 1;
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
611 if (sub->end >= nextsub->start){
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
612 sub->end = nextsub->start - 1;
4052
505f206d80d1 corrections to adjust_subs_time function which now uses fps if needed
atlka
parents: 4051
diff changeset
613 if (sub->end - sub->start > subfms)
505f206d80d1 corrections to adjust_subs_time function which now uses fps if needed
atlka
parents: 4051
diff changeset
614 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
615 if (!m)
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
616 n++;
4051
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
617 }
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
618 sub = nextsub;
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
619 m = 0;
4051
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
620 }
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
621 if (n) printf ("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
622 }
0e7c382bc53a added adjust_subs_time function which corrects bad sub->end time
atlka
parents: 4048
diff changeset
623
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
624 subtitle* sub_read_file (char *filename, float fps) {
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
625 FILE *fd;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
626 int n_max;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
627 subtitle *first;
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
628 char *fmtname[] = { "microdvd", "subrip", "subviewer", "sami", "vplayer",
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
629 "rt", "ssa", "dunnowhat", "mpsub", "aqt" };
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
630 subtitle * (*func[])(FILE *fd,subtitle *dest)=
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
631 {
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
632 sub_read_line_microdvd,
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
633 sub_read_line_subrip,
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
634 sub_read_line_subviewer,
818
16ba80b47ec4 Support for vplayer subtitles
eyck
parents: 706
diff changeset
635 sub_read_line_sami,
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
636 sub_read_line_vplayer,
921
6b02113cd41a Added support for .ssa subtitles
laaz
parents: 913
diff changeset
637 sub_read_line_rt,
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
638 sub_read_line_ssa,
2177
f723e4e8f4fd mpsub read support
laaz
parents: 2151
diff changeset
639 sub_read_line_dunnowhat,
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
640 sub_read_line_mpsub,
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
641 sub_read_line_aqt
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
642
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
643 };
2915
80954dfeabed fopen(NULL,r) segfault on qnx
iive
parents: 2912
diff changeset
644 if(filename==NULL) return NULL; //qnx segfault
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
645 fd=fopen (filename, "r"); if (!fd) return NULL;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
646
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
647 sub_format=sub_autodetect (fd);
2912
2f04b5f9a615 minor cleanups:
pl
parents: 2880
diff changeset
648 if (sub_format==SUB_INVALID) {printf ("SUB: Could not determine file format\n");return NULL;}
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
649 printf ("SUB: Detected subtitle file format: %s\n", fmtname[sub_format]);
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
650
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
651 rewind (fd);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
652
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
653 #ifdef USE_ICONV
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
654 subcp_open();
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
655 #endif
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
656
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
657 sub_num=0;n_max=32;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
658 first=(subtitle *)malloc(n_max*sizeof(subtitle));
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
659 if(!first) return NULL;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
660
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
661 while(1){
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
662 subtitle *sub;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
663 if(sub_num>=n_max){
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
664 n_max+=16;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
665 first=realloc(first,n_max*sizeof(subtitle));
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
666 }
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
667 sub = &first[sub_num];
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
668 memset(sub, '\0', sizeof(subtitle));
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
669 sub=func[sub_format](fd,sub);
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
670 if(!sub) break; // EOF
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
671 #ifdef USE_ICONV
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
672 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
673 #endif
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
674 if(sub==ERR) ++sub_errs; else ++sub_num; // Error vs. Valid
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
675 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
676
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
677 fclose(fd);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
678
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
679 #ifdef USE_ICONV
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
680 subcp_close();
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
681 #endif
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
682
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
683 // printf ("SUB: Subtitle format %s time.\n", sub_uses_time?"uses":"doesn't use");
269
f5a7323af43f applied patch by lez
arpi_esp
parents: 258
diff changeset
684 printf ("SUB: Read %i subtitles", sub_num);
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
685 if (sub_errs) printf (", %i bad line(s).\n", sub_errs);
269
f5a7323af43f applied patch by lez
arpi_esp
parents: 258
diff changeset
686 else printf (".\n");
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
687
2880
d6343a243515 11110001.txt find_sub sig11 fixed
arpi
parents: 2836
diff changeset
688 if(sub_num<=0){
d6343a243515 11110001.txt find_sub sig11 fixed
arpi
parents: 2836
diff changeset
689 free(first);
d6343a243515 11110001.txt find_sub sig11 fixed
arpi
parents: 2836
diff changeset
690 return NULL;
d6343a243515 11110001.txt find_sub sig11 fixed
arpi
parents: 2836
diff changeset
691 }
d6343a243515 11110001.txt find_sub sig11 fixed
arpi
parents: 2836
diff changeset
692
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
693 adjust_subs_time(first, 6.0, fps); /* ~6 secs AST */
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
694 return first;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
695 }
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
696
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
697 #if 0
509
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
698 char * strreplace( char * in,char * what,char * whereof )
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
699 {
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
700 int i;
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
701 char * tmp;
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
702
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
703 if ( ( in == NULL )||( what == NULL )||( whereof == NULL )||( ( tmp=strstr( in,what ) ) == NULL ) ) return NULL;
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
704 for( i=0;i<strlen( whereof );i++ ) tmp[i]=whereof[i];
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
705 if ( strlen( what ) > strlen( whereof ) ) tmp[i]=0;
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
706 return in;
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
707 }
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
708 #endif
509
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
709
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
710 char * sub_filename(char* path, char * fname )
509
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
711 {
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
712 char * sub_name1;
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
713 char * sub_name2;
934
b2c7c4b49948 Gabucino (CGA user)'s request (finds default.subs well)
laaz
parents: 932
diff changeset
714 char * aviptr1, * aviptr2, * tmp;
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
715 int i,j;
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
716 FILE * f;
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
717 int pos=0;
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
718 char * sub_exts[] =
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1081
diff changeset
719 { ".utf",
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1081
diff changeset
720 ".UTF",
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1081
diff changeset
721 ".sub",
509
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
722 ".SUB",
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
723 ".srt",
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
724 ".SRT",
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
725 ".smi",
850
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
726 ".SMI",
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
727 ".rt",
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
728 ".RT",
2cc743142e79 Preliminary support for RT-type subs.
eyck
parents: 818
diff changeset
729 ".txt",
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
730 ".TXT",
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
731 ".ssa",
2343
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
732 ".SSA",
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
733 ".aqt",
da8dbcfb89d0 AQT type support patch by Jiri.Svoboda@seznam.cz
arpi
parents: 2178
diff changeset
734 ".AQT"};
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
735
934
b2c7c4b49948 Gabucino (CGA user)'s request (finds default.subs well)
laaz
parents: 932
diff changeset
736
509
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
737 if ( fname == NULL ) return NULL;
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
738
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
739 sub_name1=strrchr(fname,'.');
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
740 if (!sub_name1) return NULL;
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
741 pos=sub_name1-fname;
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
742
934
b2c7c4b49948 Gabucino (CGA user)'s request (finds default.subs well)
laaz
parents: 932
diff changeset
743 sub_name1=malloc(strlen(fname)+8);
b2c7c4b49948 Gabucino (CGA user)'s request (finds default.subs well)
laaz
parents: 932
diff changeset
744 strcpy(sub_name1,fname);
b2c7c4b49948 Gabucino (CGA user)'s request (finds default.subs well)
laaz
parents: 932
diff changeset
745
b2c7c4b49948 Gabucino (CGA user)'s request (finds default.subs well)
laaz
parents: 932
diff changeset
746 sub_name2=malloc (strlen(path) + strlen(fname) + 8);
1081
48cd2c5a9542 new sub format...
szabii
parents: 935
diff changeset
747 if ((tmp=strrchr(fname,'/')))
934
b2c7c4b49948 Gabucino (CGA user)'s request (finds default.subs well)
laaz
parents: 932
diff changeset
748 sprintf (sub_name2, "%s%s", path, tmp+1);
b2c7c4b49948 Gabucino (CGA user)'s request (finds default.subs well)
laaz
parents: 932
diff changeset
749 else
b2c7c4b49948 Gabucino (CGA user)'s request (finds default.subs well)
laaz
parents: 932
diff changeset
750 sprintf (sub_name2, "%s%s", path, fname);
b2c7c4b49948 Gabucino (CGA user)'s request (finds default.subs well)
laaz
parents: 932
diff changeset
751
b2c7c4b49948 Gabucino (CGA user)'s request (finds default.subs well)
laaz
parents: 932
diff changeset
752 aviptr1=strrchr(sub_name1,'.');
b2c7c4b49948 Gabucino (CGA user)'s request (finds default.subs well)
laaz
parents: 932
diff changeset
753 aviptr2=strrchr(sub_name2,'.');
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
754
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
755 for(j=0;j<=1;j++){
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
756 char* sub_name=j?sub_name1:sub_name2;
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
757 #ifdef USE_ICONV
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
758 for ( i=(sub_cp?2:0);i<(sizeof(sub_exts)/sizeof(char*));i++ ) {
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
759 #else
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
760 for ( i=0;i<(sizeof(sub_exts)/sizeof(char*));i++ ) {
2151
a9d91476085a modifications to use iconv(3) function to recode text of subs (autodetect)
atlka
parents: 2141
diff changeset
761 #endif
934
b2c7c4b49948 Gabucino (CGA user)'s request (finds default.subs well)
laaz
parents: 932
diff changeset
762 strcpy(j?aviptr1:aviptr2,sub_exts[i]);
935
0b1b0bac67e9 debug stuff removed
laaz
parents: 934
diff changeset
763 // printf("trying: '%s'\n",sub_name);
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
764 if((f=fopen( sub_name,"rt" ))) {
509
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
765 fclose( f );
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
766 printf( "SUB: Detected sub file: %s\n",sub_name );
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1081
diff changeset
767 if (i<2) sub_utf8=1;
509
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
768 return sub_name;
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
769 }
509
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
770 }
892
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
771 }
bad858a47870 implemented ~/.mplayer/sub/filename.sub stuff
arpi_esp
parents: 858
diff changeset
772
509
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
773 return NULL;
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
774 }
1b2cd175236f add sub autodetect
pontscho
parents: 270
diff changeset
775
1761
827b551bbcab subdump
arpi
parents: 1640
diff changeset
776 void list_sub_file(subtitle* subs){
827b551bbcab subdump
arpi
parents: 1640
diff changeset
777 int i,j;
827b551bbcab subdump
arpi
parents: 1640
diff changeset
778
827b551bbcab subdump
arpi
parents: 1640
diff changeset
779 for(j=0;j<sub_num;j++){
827b551bbcab subdump
arpi
parents: 1640
diff changeset
780 subtitle* egysub=&subs[j];
827b551bbcab subdump
arpi
parents: 1640
diff changeset
781 printf ("%i line%c (%li-%li) ",
827b551bbcab subdump
arpi
parents: 1640
diff changeset
782 egysub->lines,
827b551bbcab subdump
arpi
parents: 1640
diff changeset
783 (1==egysub->lines)?' ':'s',
827b551bbcab subdump
arpi
parents: 1640
diff changeset
784 egysub->start,
827b551bbcab subdump
arpi
parents: 1640
diff changeset
785 egysub->end);
827b551bbcab subdump
arpi
parents: 1640
diff changeset
786 for (i=0; i<egysub->lines; i++) {
827b551bbcab subdump
arpi
parents: 1640
diff changeset
787 printf ("%s%s",egysub->text[i], i==egysub->lines-1?"":" <BREAK> ");
827b551bbcab subdump
arpi
parents: 1640
diff changeset
788 }
827b551bbcab subdump
arpi
parents: 1640
diff changeset
789 printf ("\n");
827b551bbcab subdump
arpi
parents: 1640
diff changeset
790 }
827b551bbcab subdump
arpi
parents: 1640
diff changeset
791
827b551bbcab subdump
arpi
parents: 1640
diff changeset
792 printf ("Subtitle format %s time.\n", sub_uses_time?"uses":"doesn't use");
827b551bbcab subdump
arpi
parents: 1640
diff changeset
793 printf ("Read %i subtitles, %i errors.\n", sub_num, sub_errs);
827b551bbcab subdump
arpi
parents: 1640
diff changeset
794
827b551bbcab subdump
arpi
parents: 1640
diff changeset
795 }
827b551bbcab subdump
arpi
parents: 1640
diff changeset
796
4064
3c747168eb6e 1. subs know are readed after reading AVI header so we already know fps
atlka
parents: 4052
diff changeset
797 void dump_mpsub(subtitle* subs, float fps){
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
798 int i,j;
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
799 FILE *fd;
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
800 float a,b;
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
801
4886
712c8fc897fd -subfps and -subdelay alters -dumpmpsub's output
laaz
parents: 4880
diff changeset
802 mpsub_position=sub_uses_time?(sub_delay*100):(sub_delay*fps);
712c8fc897fd -subfps and -subdelay alters -dumpmpsub's output
laaz
parents: 4880
diff changeset
803 if (sub_fps==0) sub_fps=fps;
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
804
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
805 fd=fopen ("dump.mpsub", "w");
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
806 if (!fd) {
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
807 perror ("dump_mpsub: fopen");
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
808 return;
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
809 }
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
810
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
811
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
812 if (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
813 else fprintf (fd, "FORMAT=%5.2f\n\n", fps);
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
814
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
815 for(j=0;j<sub_num;j++){
2495
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
816 subtitle* egysub=&subs[j];
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
817 if (sub_uses_time) {
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
818 a=((egysub->start-mpsub_position)/100.0);
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
819 b=((egysub->end-egysub->start)/100.0);
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
820 if ( (float)((int)a) == a)
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
821 fprintf (fd, "%.0f",a);
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
822 else
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
823 fprintf (fd, "%.2f",a);
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
824
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
825 if ( (float)((int)b) == b)
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
826 fprintf (fd, " %.0f\n",b);
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
827 else
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
828 fprintf (fd, " %.2f\n",b);
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
829 } else {
4886
712c8fc897fd -subfps and -subdelay alters -dumpmpsub's output
laaz
parents: 4880
diff changeset
830 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
831 (long)(((egysub->end)-(egysub->start))*(fps/sub_fps)));
2495
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
832 }
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
833
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
834 mpsub_position = egysub->end;
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
835 for (i=0; i<egysub->lines; i++) {
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
836 fprintf (fd, "%s\n",egysub->text[i]);
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
837 }
d767086efcda mpsub, FORMAT=<frame> alpha version
laaz
parents: 2468
diff changeset
838 fprintf (fd, "\n");
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
839 }
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
840 fclose (fd);
4880
e6cd9c81db9d Fixed a bug with -dumpmpsub
laaz
parents: 4519
diff changeset
841 printf ("SUB: Subtitles dumped in \'dump.mpsub\'.\n");
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
842 }
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
843
3543
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
844 void sub_free( subtitle * subs )
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
845 {
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
846 int i;
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
847
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
848 if ( !subs ) return;
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
849
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
850 sub_num=0;
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
851 sub_errs=0;
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
852 for ( i=0;i<subs->lines;i++ ) free( subs->text[i] );
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
853 free( subs );
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
854 subs=NULL;
5a11cbf8791f some small sub bug fix
pontscho
parents: 3433
diff changeset
855 }
2178
e509abdbf195 MPsub read/write support 0.5 (-dumpmpsub switch)
laaz
parents: 2177
diff changeset
856
2449
7ef89d9b06ed added DUMPSUBS recognition if we need compile only subreader.c alone
atlka
parents: 2358
diff changeset
857 #ifdef DUMPSUBS
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
858 int main(int argc, char **argv) { // for testing
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
859
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
860 int i,j;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
861 subtitle *subs;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
862 subtitle *egysub;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
863
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
864 if(argc<2){
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
865 printf("\nUsage: subreader filename.sub\n\n");
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
866 exit(1);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
867 }
2449
7ef89d9b06ed added DUMPSUBS recognition if we need compile only subreader.c alone
atlka
parents: 2358
diff changeset
868 sub_cp = argv[2];
624
44b764d348a0 added support for SAMI subtitle support (.smi)
laaz
parents: 605
diff changeset
869 subs=sub_read_file(argv[1]);
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
870 if(!subs){
4886
712c8fc897fd -subfps and -subdelay alters -dumpmpsub's output
laaz
parents: 4880
diff changeset
871 printf("Couldn't load file.\n");
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
872 exit(1);
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
873 }
1761
827b551bbcab subdump
arpi
parents: 1640
diff changeset
874
827b551bbcab subdump
arpi
parents: 1640
diff changeset
875 list_sub_file(subs);
258
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
876
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
877 return 0;
66017e126280 subtitles (.sub files) support
arpi_esp
parents:
diff changeset
878 }
706
8a7666a78f83 better .smi support and display two-byte characters- patch by Sunjin Yang
arpi_esp
parents: 678
diff changeset
879 #endif