annotate subreader.c @ 31702:74360873ab4d

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