Mercurial > mplayer.hg
annotate sub/subreader.c @ 33259:04dc3e55cd90
Increase the maximum value of the DVB timeout to 240 seconds.
Some devices may need more time for the initial tune (e.g. firmware loading).
Let the user specify higher timeout value if there is need to.
The default remains 30 seconds.
author | iive |
---|---|
date | Sun, 01 May 2011 18:07:59 +0000 |
parents | a61e62388508 |
children | 4898b17f68f9 |
rev | line source |
---|---|
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1 /* |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2 * Subtitle reader with format autodetection |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
3 * |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
4 * Copyright (c) 2001 laaz |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
5 * Some code cleanup & realloc() by A'rpi/ESP-team |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
6 * |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
7 * This file is part of MPlayer. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
8 * |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
9 * MPlayer is free software; you can redistribute it and/or modify |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
10 * it under the terms of the GNU General Public License as published by |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
11 * the Free Software Foundation; either version 2 of the License, or |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
12 * (at your option) any later version. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
13 * |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
14 * MPlayer is distributed in the hope that it will be useful, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
17 * GNU General Public License for more details. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
18 * |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
19 * You should have received a copy of the GNU General Public License along |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
20 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
22 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
23 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
24 #include <stdio.h> |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
25 #include <stdlib.h> |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
26 #include <string.h> |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
27 #include <ctype.h> |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
28 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
29 #include <sys/types.h> |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
30 #include <dirent.h> |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
31 |
32464
22888a8cb312
Do not use a path for including files in the same directory.
reimar
parents:
32462
diff
changeset
|
32 #include "ass_mp.h" |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
33 #include "config.h" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
34 #include "mp_msg.h" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
35 #include "mpcommon.h" |
32642
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
36 #include "path.h" |
32464
22888a8cb312
Do not use a path for including files in the same directory.
reimar
parents:
32462
diff
changeset
|
37 #include "subreader.h" |
22888a8cb312
Do not use a path for including files in the same directory.
reimar
parents:
32462
diff
changeset
|
38 #include "subassconvert.h" |
32467 | 39 #include "sub.h" |
32724
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
40 #include "vobsub.h" |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
41 #include "stream/stream.h" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
42 #include "libavutil/common.h" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
43 #include "libavutil/avstring.h" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
44 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
45 #ifdef CONFIG_ENCA |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
46 #include <enca.h> |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
47 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
48 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
49 #define ERR ((void *) -1) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
50 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
51 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
52 #include <iconv.h> |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
53 char *sub_cp=NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
54 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
55 #ifdef CONFIG_FRIBIDI |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
56 #include <fribidi/fribidi.h> |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
57 char *fribidi_charset = NULL; ///character set that will be passed to FriBiDi |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
58 int flip_hebrew = 1; ///flip subtitles using fribidi |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
59 int fribidi_flip_commas = 0; ///flip comma when fribidi is used |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
60 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
61 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
62 /* Maximal length of line of a subtitle */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
63 #define LINE_LEN 1000 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
64 static float mpsub_position=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
65 static float mpsub_multiplier=1.; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
66 static int sub_slacktime = 20000; //20 sec |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
67 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
68 int sub_no_text_pp=0; // 1 => do not apply text post-processing |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
69 // like {\...} elimination in SSA format. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
70 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
71 int sub_match_fuzziness=0; // level of sub name matching fuzziness |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
72 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
73 /* Use the SUB_* constant defined in the header file */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
74 int sub_format=SUB_INVALID; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
75 #ifdef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
76 /* |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
77 Some subtitling formats, namely AQT and Subrip09, define the end of a |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
78 subtitle as the beginning of the following. Since currently we read one |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
79 subtitle at time, for these format we keep two global *subtitle, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
80 previous_aqt_sub and previous_subrip09_sub, pointing to previous subtitle, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
81 so we can change its end when we read current subtitle starting time. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
82 When CONFIG_SORTSUB is defined, we use a single global unsigned long, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
83 previous_sub_end, for both (and even future) formats, to store the end of |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
84 the previous sub: it is initialized to 0 in sub_read_file and eventually |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
85 modified by sub_read_aqt_line or sub_read_subrip09_line. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
86 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
87 unsigned long previous_sub_end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
88 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
89 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
90 static int eol(char p) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
91 return p=='\r' || p=='\n' || p=='\0'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
92 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
93 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
94 /* Remove leading and trailing space */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
95 static void trail_space(char *s) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
96 int i = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
97 while (isspace(s[i])) ++i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
98 if (i) strcpy(s, s + i); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
99 i = strlen(s) - 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
100 while (i > 0 && isspace(s[i])) s[i--] = '\0'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
101 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
102 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
103 static char *stristr(const char *haystack, const char *needle) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
104 int len = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
105 const char *p = haystack; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
106 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
107 if (!(haystack && needle)) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
108 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
109 len=strlen(needle); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
110 while (*p != '\0') { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
111 if (strncasecmp(p, needle, len) == 0) return (char*)p; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
112 p++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
113 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
114 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
115 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
116 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
117 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
118 static void sami_add_line(subtitle *current, char *buffer, char **pos) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
119 char *p = *pos; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
120 *p = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
121 trail_space(buffer); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
122 if (*buffer && current->lines < SUB_MAX_TEXT) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
123 current->text[current->lines++] = strdup(buffer); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
124 *pos = buffer; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
125 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
126 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
127 static subtitle *sub_read_line_sami(stream_t* st, subtitle *current, int utf16) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
128 static char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
129 static char *s = NULL, *slacktime_s; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
130 char text[LINE_LEN+1], *p=NULL, *q; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
131 int state; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
132 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
133 current->lines = current->start = current->end = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
134 current->alignment = SUB_ALIGNMENT_BOTTOMCENTER; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
135 state = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
136 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
137 /* read the first line */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
138 if (!s) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
139 if (!(s = stream_read_line(st, line, LINE_LEN, utf16))) return 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
140 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
141 do { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
142 switch (state) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
143 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
144 case 0: /* find "START=" or "Slacktime:" */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
145 slacktime_s = stristr (s, "Slacktime:"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
146 if (slacktime_s) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
147 sub_slacktime = strtol (slacktime_s+10, NULL, 0) / 10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
148 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
149 s = stristr (s, "Start="); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
150 if (s) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
151 current->start = strtol (s + 6, &s, 0) / 10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
152 /* eat '>' */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
153 for (; *s != '>' && *s != '\0'; s++); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
154 s++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
155 state = 1; continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
156 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
157 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
158 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
159 case 1: /* find (optional) "<P", skip other TAGs */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
160 for (; *s == ' ' || *s == '\t'; s++); /* strip blanks, if any */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
161 if (*s == '\0') break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
162 if (*s != '<') { state = 3; p = text; continue; } /* not a TAG */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
163 s++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
164 if (*s == 'P' || *s == 'p') { s++; state = 2; continue; } /* found '<P' */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
165 for (; *s != '>' && *s != '\0'; s++); /* skip remains of non-<P> TAG */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
166 if (s == '\0') |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
167 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
168 s++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
169 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
170 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
171 case 2: /* find ">" */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
172 if ((s = strchr (s, '>'))) { s++; state = 3; p = text; continue; } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
173 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
174 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
175 case 3: /* get all text until '<' appears */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
176 if (*s == '\0') break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
177 else if (!strncasecmp (s, "<br>", 4)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
178 sami_add_line(current, text, &p); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
179 s += 4; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
180 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
181 else if ((*s == '{') && !sub_no_text_pp) { state = 5; ++s; continue; } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
182 else if (*s == '<') { state = 4; } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
183 else if (!strncasecmp (s, " ", 6)) { *p++ = ' '; s += 6; } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
184 else if (*s == '\t') { *p++ = ' '; s++; } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
185 else if (*s == '\r' || *s == '\n') { s++; } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
186 else *p++ = *s++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
187 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
188 /* skip duplicated space */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
189 if (p > text + 2) if (*(p-1) == ' ' && *(p-2) == ' ') p--; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
190 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
191 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
192 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
193 case 4: /* get current->end or skip <TAG> */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
194 q = stristr (s, "Start="); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
195 if (q) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
196 current->end = strtol (q + 6, &q, 0) / 10 - 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
197 *p = '\0'; trail_space (text); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
198 if (text[0] != '\0') |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
199 current->text[current->lines++] = strdup (text); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
200 if (current->lines > 0) { state = 99; break; } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
201 state = 0; continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
202 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
203 s = strchr (s, '>'); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
204 if (s) { s++; state = 3; continue; } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
205 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
206 case 5: /* get rid of {...} text, but read the alignment code */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
207 if ((*s == '\\') && (*(s + 1) == 'a') && !sub_no_text_pp) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
208 if (stristr(s, "\\a1") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
209 current->alignment = SUB_ALIGNMENT_BOTTOMLEFT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
210 s = s + 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
211 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
212 if (stristr(s, "\\a2") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
213 current->alignment = SUB_ALIGNMENT_BOTTOMCENTER; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
214 s = s + 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
215 } else if (stristr(s, "\\a3") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
216 current->alignment = SUB_ALIGNMENT_BOTTOMRIGHT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
217 s = s + 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
218 } else if ((stristr(s, "\\a4") != NULL) || (stristr(s, "\\a5") != NULL) || (stristr(s, "\\a8") != NULL)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
219 current->alignment = SUB_ALIGNMENT_TOPLEFT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
220 s = s + 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
221 } else if (stristr(s, "\\a6") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
222 current->alignment = SUB_ALIGNMENT_TOPCENTER; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
223 s = s + 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
224 } else if (stristr(s, "\\a7") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
225 current->alignment = SUB_ALIGNMENT_TOPRIGHT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
226 s = s + 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
227 } else if (stristr(s, "\\a9") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
228 current->alignment = SUB_ALIGNMENT_MIDDLELEFT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
229 s = s + 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
230 } else if (stristr(s, "\\a10") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
231 current->alignment = SUB_ALIGNMENT_MIDDLECENTER; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
232 s = s + 4; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
233 } else if (stristr(s, "\\a11") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
234 current->alignment = SUB_ALIGNMENT_MIDDLERIGHT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
235 s = s + 4; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
236 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
237 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
238 if (*s == '}') state = 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
239 ++s; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
240 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
241 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
242 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
243 /* read next line */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
244 if (state != 99 && !(s = stream_read_line (st, line, LINE_LEN, utf16))) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
245 if (current->start > 0) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
246 break; // if it is the last subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
247 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
248 return 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
249 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
250 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
251 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
252 } while (state != 99); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
253 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
254 // For the last subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
255 if (current->end <= 0) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
256 current->end = current->start + sub_slacktime; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
257 sami_add_line(current, text, &p); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
258 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
259 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
260 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
261 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
262 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
263 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
264 static char *sub_readtext(char *source, char **dest) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
265 int len=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
266 char *p=source; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
267 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
268 // printf("src=%p dest=%p \n",source,dest); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
269 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
270 while ( !eol(*p) && *p!= '|' ) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
271 p++,len++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
272 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
273 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
274 *dest= malloc (len+1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
275 if (!dest) {return ERR;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
276 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
277 strncpy(*dest, source, len); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
278 (*dest)[len]=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
279 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
280 while (*p=='\r' || *p=='\n' || *p=='|') p++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
281 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
282 if (*p) return p; // not-last text field |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
283 else return NULL; // last text field |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
284 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
285 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
286 static subtitle *sub_read_line_microdvd(stream_t *st,subtitle *current, int utf16) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
287 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
288 char line2[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
289 char *p, *next; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
290 int i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
291 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
292 do { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
293 if (!stream_read_line (st, line, LINE_LEN, utf16)) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
294 } while ((sscanf (line, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
295 "{%ld}{}%[^\r\n]", |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
296 &(current->start), line2) < 2) && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
297 (sscanf (line, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
298 "{%ld}{%ld}%[^\r\n]", |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
299 &(current->start), &(current->end), line2) < 3)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
300 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
301 #ifdef CONFIG_ASS |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
302 if (ass_enabled) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
303 subassconvert_microdvd(line2, line, LINE_LEN + 1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
304 p = line; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
305 } else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
306 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
307 p = line2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
308 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
309 next=p, i=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
310 while ((next =sub_readtext (next, &(current->text[i])))) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
311 if (current->text[i]==ERR) {return ERR;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
312 i++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
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;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
314 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
315 current->lines= ++i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
316 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
317 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
318 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
319 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
320 static subtitle *sub_read_line_mpl2(stream_t *st,subtitle *current, int utf16) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
321 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
322 char line2[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
323 char *p, *next; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
324 int i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
325 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
326 do { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
327 if (!stream_read_line (st, line, LINE_LEN, utf16)) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
328 } while ((sscanf (line, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
329 "[%ld][%ld]%[^\r\n]", |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
330 &(current->start), &(current->end), line2) < 3)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
331 current->start *= 10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
332 current->end *= 10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
333 p=line2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
334 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
335 next=p, i=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
336 while ((next =sub_readtext (next, &(current->text[i])))) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
337 if (current->text[i]==ERR) {return ERR;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
338 i++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
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;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
340 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
341 current->lines= ++i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
342 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
343 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
344 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
345 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
346 static subtitle *sub_read_line_subrip(stream_t* st, subtitle *current, int utf16) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
347 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
348 int a1,a2,a3,a4,b1,b2,b3,b4; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
349 char *p=NULL, *q=NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
350 int len; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
351 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
352 while (1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
353 if (!stream_read_line (st, line, LINE_LEN, utf16)) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
354 if (sscanf (line, "%d:%d:%d.%d,%d:%d:%d.%d",&a1,&a2,&a3,&a4,&b1,&b2,&b3,&b4) < 8) continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
355 current->start = a1*360000+a2*6000+a3*100+a4; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
356 current->end = b1*360000+b2*6000+b3*100+b4; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
357 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
358 if (!stream_read_line (st, line, LINE_LEN, utf16)) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
359 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
360 p=q=line; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
361 for (current->lines=1; current->lines < SUB_MAX_TEXT; current->lines++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
362 for (q=p,len=0; *p && *p!='\r' && *p!='\n' && *p!='|' && strncmp(p,"[br]",4); p++,len++); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
363 current->text[current->lines-1]=malloc (len+1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
364 if (!current->text[current->lines-1]) return ERR; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
365 strncpy (current->text[current->lines-1], q, len); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
366 current->text[current->lines-1][len]='\0'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
367 if (!*p || *p=='\r' || *p=='\n') break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
368 if (*p=='|') p++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
369 else while (*p++!=']'); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
370 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
371 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
372 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
373 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
374 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
375 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
376 #ifdef CONFIG_ASS |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
377 static subtitle *sub_ass_read_line_subviewer(stream_t *st, subtitle *current, int utf16) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
378 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
379 int h1, m1, s1, ms1, h2, m2, s2, ms2, j = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
380 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
381 while (!current->text[0]) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
382 char line[LINE_LEN + 1], full_line[LINE_LEN + 1], sep; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
383 int i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
384 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
385 /* Parse SubRip header */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
386 if (!stream_read_line(st, line, LINE_LEN, utf16)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
387 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
388 if (sscanf(line, "%d:%d:%d%[,.:]%d --> %d:%d:%d%[,.:]%d", |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
389 &h1, &m1, &s1, &sep, &ms1, &h2, &m2, &s2, &sep, &ms2) < 10) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
390 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
391 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
392 current->start = h1 * 360000 + m1 * 6000 + s1 * 100 + ms1 / 10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
393 current->end = h2 * 360000 + m2 * 6000 + s2 * 100 + ms2 / 10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
394 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
395 /* Concat lines */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
396 full_line[0] = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
397 for (i = 0; i < SUB_MAX_TEXT; i++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
398 int blank = 1, len = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
399 char *p; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
400 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
401 if (!stream_read_line(st, line, LINE_LEN, utf16)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
402 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
403 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
404 for (p = line; *p != '\n' && *p != '\r' && *p; p++, len++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
405 if (*p != ' ' && *p != '\t') |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
406 blank = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
407 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
408 if (blank) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
409 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
410 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
411 *p = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
412 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
413 if (len >= sizeof(full_line) - j - 2) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
414 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
415 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
416 if (j != 0) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
417 full_line[j++] = '\n'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
418 strcpy(&full_line[j], line); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
419 j += len; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
420 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
421 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
422 /* Use the ASS/SSA converter to transform the whole lines */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
423 if (full_line[0]) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
424 char converted_line[LINE_LEN + 1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
425 subassconvert_subrip(full_line, converted_line, LINE_LEN + 1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
426 current->text[0] = strdup(converted_line); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
427 current->lines = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
428 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
429 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
430 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
431 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
432 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
433 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
434 static subtitle *sub_read_line_subviewer(stream_t *st,subtitle *current, int utf16) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
435 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
436 int a1,a2,a3,a4,b1,b2,b3,b4; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
437 char *p=NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
438 int i,len; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
439 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
440 #ifdef CONFIG_ASS |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
441 if (ass_enabled) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
442 return sub_ass_read_line_subviewer(st, current, utf16); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
443 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
444 while (!current->text[0]) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
445 if (!stream_read_line (st, line, LINE_LEN, utf16)) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
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) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
447 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
448 current->start = a1*360000+a2*6000+a3*100+a4/10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
449 current->end = b1*360000+b2*6000+b3*100+b4/10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
450 for (i=0; i<SUB_MAX_TEXT;) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
451 int blank = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
452 if (!stream_read_line (st, line, LINE_LEN, utf16)) break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
453 len=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
454 for (p=line; *p!='\n' && *p!='\r' && *p; p++,len++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
455 if (*p != ' ' && *p != '\t') |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
456 blank = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
457 if (len && !blank) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
458 int j=0,skip=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
459 char *curptr=current->text[i]=malloc (len+1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
460 if (!current->text[i]) return ERR; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
461 //strncpy (current->text[i], line, len); current->text[i][len]='\0'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
462 for(; j<len; j++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
463 /* let's filter html tags ::atmos */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
464 if(line[j]=='>') { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
465 skip=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
466 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
467 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
468 if(line[j]=='<') { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
469 skip=1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
470 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
471 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
472 if(skip) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
473 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
474 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
475 *curptr=line[j]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
476 curptr++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
477 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
478 *curptr='\0'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
479 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
480 i++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
481 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
482 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
483 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
484 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
485 current->lines=i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
486 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
487 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
488 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
489 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
490 static subtitle *sub_read_line_subviewer2(stream_t *st,subtitle *current, int utf16) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
491 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
492 int a1,a2,a3,a4; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
493 char *p=NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
494 int i,len; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
495 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
496 while (!current->text[0]) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
497 if (!stream_read_line (st, line, LINE_LEN, utf16)) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
498 if (line[0]!='{') |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
499 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
500 if ((len=sscanf (line, "{T %d:%d:%d:%d",&a1,&a2,&a3,&a4)) < 4) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
501 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
502 current->start = a1*360000+a2*6000+a3*100+a4/10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
503 for (i=0; i<SUB_MAX_TEXT;) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
504 if (!stream_read_line (st, line, LINE_LEN, utf16)) break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
505 if (line[0]=='}') break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
506 len=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
507 for (p=line; *p!='\n' && *p!='\r' && *p; ++p,++len); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
508 if (len) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
509 current->text[i]=malloc (len+1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
510 if (!current->text[i]) return ERR; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
511 strncpy (current->text[i], line, len); current->text[i][len]='\0'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
512 ++i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
513 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
514 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
515 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
516 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
517 current->lines=i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
518 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
519 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
520 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
521 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
522 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
523 static subtitle *sub_read_line_vplayer(stream_t *st,subtitle *current, int utf16) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
524 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
525 int a1,a2,a3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
526 char *p=NULL, *next,separator; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
527 int i,len,plen; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
528 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
529 while (!current->text[0]) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
530 if (!stream_read_line (st, line, LINE_LEN, utf16)) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
531 if ((len=sscanf (line, "%d:%d:%d%c%n",&a1,&a2,&a3,&separator,&plen)) < 4) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
532 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
533 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
534 if (!(current->start = a1*360000+a2*6000+a3*100)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
535 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
536 /* removed by wodzu |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
537 p=line; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
538 // finds the body of the subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
539 for (i=0; i<3; i++){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
540 p=strchr(p,':'); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
541 if (p==NULL) break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
542 ++p; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
543 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
544 if (p==NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
545 printf("SUB: Skipping incorrect subtitle line!\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
546 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
547 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
548 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
549 // by wodzu: hey! this time we know what length it has! what is |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
550 // that magic for? it can't deal with space instead of third |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
551 // colon! look, what simple it can be: |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
552 p = &line[ plen ]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
553 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
554 i=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
555 if (*p!='|') { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
556 // |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
557 next = p,i=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
558 while ((next =sub_readtext (next, &(current->text[i])))) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
559 if (current->text[i]==ERR) {return ERR;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
560 i++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
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;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
562 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
563 current->lines=i+1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
564 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
565 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
566 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
567 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
568 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
569 static subtitle *sub_read_line_rt(stream_t *st,subtitle *current, int utf16) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
570 //TODO: This format uses quite rich (sub/super)set of xhtml |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
571 // I couldn't check it since DTD is not included. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
572 // WARNING: full XML parses can be required for proper parsing |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
573 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
574 int a1,a2,a3,a4,b1,b2,b3,b4; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
575 char *p=NULL,*next=NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
576 int i,len,plen; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
577 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
578 while (!current->text[0]) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
579 if (!stream_read_line (st, line, LINE_LEN, utf16)) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
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 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
581 //to describe the same moment in time. Maybe there are even more formats in use. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
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) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
583 plen=a1=a2=a3=a4=b1=b2=b3=b4=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
584 if ( |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
585 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d.%d\" %*[Ee]nd=\"%d.%d\"%*[^<]<clear/>%n",&a3,&a4,&b3,&b4,&plen)) < 4) && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
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) && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
587 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d:%d\" %*[Ee]nd=\"%d:%d\"%*[^<]<clear/>%n",&a2,&a3,&b2,&b3,&plen)) < 4) && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
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) && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
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) && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
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) && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
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) && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
592 //now try it without end time |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
593 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d.%d\"%*[^<]<clear/>%n",&a3,&a4,&plen)) < 2) && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
594 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d:%d\"%*[^<]<clear/>%n",&a2,&a3,&plen)) < 2) && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
595 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d:%d.%d\"%*[^<]<clear/>%n",&a2,&a3,&a4,&plen)) < 3) && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
596 ((len=sscanf (line, "<%*[tT]ime %*[bB]egin=\"%d:%d:%d.%d\"%*[^<]<clear/>%n",&a1,&a2,&a3,&a4,&plen)) < 4) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
597 ) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
598 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
599 current->start = a1*360000+a2*6000+a3*100+a4/10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
600 current->end = b1*360000+b2*6000+b3*100+b4/10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
601 if (b1 == 0 && b2 == 0 && b3 == 0 && b4 == 0) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
602 current->end = current->start+200; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
603 p=line; p+=plen;i=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
604 // TODO: I don't know what kind of convention is here for marking multiline subs, maybe <br/> like in xml? |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
605 next = strstr(line,"<clear/>"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
606 if(next && strlen(next)>8){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
607 next+=8;i=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
608 while ((next =sub_readtext (next, &(current->text[i])))) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
609 if (current->text[i]==ERR) {return ERR;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
610 i++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
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;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
612 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
613 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
614 current->lines=i+1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
615 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
616 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
617 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
618 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
619 static subtitle *sub_read_line_ssa(stream_t *st,subtitle *current, int utf16) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
620 /* |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
621 * Sub Station Alpha v4 (and v2?) scripts have 9 commas before subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
622 * other Sub Station Alpha scripts have only 8 commas before subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
623 * Reading the "ScriptType:" field is not reliable since many scripts appear |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
624 * w/o it |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
625 * |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
626 * http://www.scriptclub.org is a good place to find more examples |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
627 * http://www.eswat.demon.co.uk is where the SSA specs can be found |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
628 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
629 int comma; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
630 static int max_comma = 32; /* let's use 32 for the case that the */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
631 /* amount of commas increase with newer SSA versions */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
632 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
633 int hour1, min1, sec1, hunsec1, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
634 hour2, min2, sec2, hunsec2, nothing; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
635 int num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
636 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
637 char line[LINE_LEN+1], |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
638 line3[LINE_LEN+1], |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
639 *line2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
640 char *tmp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
641 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
642 do { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
643 if (!stream_read_line (st, line, LINE_LEN, utf16)) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
644 } while (sscanf (line, "Dialogue: Marked=%d,%d:%d:%d.%d,%d:%d:%d.%d" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
645 "%[^\n\r]", ¬hing, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
646 &hour1, &min1, &sec1, &hunsec1, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
647 &hour2, &min2, &sec2, &hunsec2, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
648 line3) < 9 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
649 && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
650 sscanf (line, "Dialogue: %d,%d:%d:%d.%d,%d:%d:%d.%d" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
651 "%[^\n\r]", ¬hing, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
652 &hour1, &min1, &sec1, &hunsec1, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
653 &hour2, &min2, &sec2, &hunsec2, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
654 line3) < 9 ); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
655 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
656 line2=strchr(line3, ','); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
657 if (!line2) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
658 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
659 for (comma = 4; comma < max_comma; comma ++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
660 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
661 tmp = line2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
662 if(!(tmp=strchr(++tmp, ','))) break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
663 if(*(++tmp) == ' ') break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
664 /* a space after a comma means we're already in a sentence */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
665 line2 = tmp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
666 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
667 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
668 if(comma < max_comma)max_comma = comma; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
669 /* eliminate the trailing comma */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
670 if(*line2 == ',') line2++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
671 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
672 current->lines=0;num=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
673 current->start = 360000*hour1 + 6000*min1 + 100*sec1 + hunsec1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
674 current->end = 360000*hour2 + 6000*min2 + 100*sec2 + hunsec2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
675 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
676 while (((tmp=strstr(line2, "\\n")) != NULL) || ((tmp=strstr(line2, "\\N")) != NULL) ){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
677 current->text[num]=malloc(tmp-line2+1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
678 strncpy (current->text[num], line2, tmp-line2); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
679 current->text[num][tmp-line2]='\0'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
680 line2=tmp+2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
681 num++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
682 current->lines++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
683 if (current->lines >= SUB_MAX_TEXT) return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
684 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
685 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
686 current->text[num]=strdup(line2); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
687 current->lines++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
688 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
689 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
690 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
691 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
692 static void sub_pp_ssa(subtitle *sub) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
693 int l=sub->lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
694 char *so,*de,*start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
695 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
696 while (l){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
697 /* eliminate any text enclosed with {}, they are font and color settings */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
698 so=de=sub->text[--l]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
699 while (*so) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
700 if(*so == '{' && so[1]=='\\') { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
701 for (start=so; *so && *so!='}'; so++); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
702 if(*so) so++; else so=start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
703 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
704 if(*so) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
705 *de=*so; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
706 so++; de++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
707 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
708 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
709 *de=*so; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
710 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
711 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
712 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
713 /* |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
714 * PJS subtitles reader. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
715 * That's the "Phoenix Japanimation Society" format. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
716 * I found some of them in http://www.scriptsclub.org/ (used for anime). |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
717 * The time is in tenths of second. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
718 * |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
719 * by set, based on code by szabi (dunnowhat sub format ;-) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
720 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
721 static subtitle *sub_read_line_pjs(stream_t *st,subtitle *current, int utf16) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
722 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
723 char text[LINE_LEN+1], *s, *d; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
724 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
725 if (!stream_read_line (st, line, LINE_LEN, utf16)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
726 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
727 /* skip spaces */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
728 for (s=line; *s && isspace(*s); s++); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
729 /* allow empty lines at the end of the file */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
730 if (*s==0) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
731 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
732 /* get the time */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
733 if (sscanf (s, "%ld,%ld,", &(current->start), |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
734 &(current->end)) <2) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
735 return ERR; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
736 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
737 /* the files I have are in tenths of second */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
738 current->start *= 10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
739 current->end *= 10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
740 /* walk to the beggining of the string */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
741 for (; *s; s++) if (*s==',') break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
742 if (*s) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
743 for (s++; *s; s++) if (*s==',') break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
744 if (*s) s++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
745 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
746 if (*s!='"') { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
747 return ERR; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
748 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
749 /* copy the string to the text buffer */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
750 for (s++, d=text; *s && *s!='"'; s++, d++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
751 *d=*s; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
752 *d=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
753 current->text[0] = strdup(text); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
754 current->lines = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
755 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
756 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
757 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
758 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
759 static subtitle *sub_read_line_mpsub(stream_t *st, subtitle *current, int utf16) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
760 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
761 float a,b; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
762 int num=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
763 char *p, *q; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
764 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
765 do |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
766 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
767 if (!stream_read_line(st, line, LINE_LEN, utf16)) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
768 } while (sscanf (line, "%f %f", &a, &b) !=2); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
769 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
770 mpsub_position += a*mpsub_multiplier; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
771 current->start=(int) mpsub_position; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
772 mpsub_position += b*mpsub_multiplier; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
773 current->end=(int) mpsub_position; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
774 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
775 while (num < SUB_MAX_TEXT) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
776 if (!stream_read_line (st, line, LINE_LEN, utf16)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
777 if (num == 0) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
778 else return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
779 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
780 p=line; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
781 while (isspace(*p)) p++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
782 if (eol(*p) && num > 0) return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
783 if (eol(*p)) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
784 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
785 for (q=p; !eol(*q); q++); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
786 *q='\0'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
787 if (strlen(p)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
788 current->text[num]=strdup(p); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
789 // printf (">%s<\n",p); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
790 current->lines = ++num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
791 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
792 if (num) return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
793 else return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
794 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
795 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
796 return NULL; // we should have returned before if it's OK |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
797 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
798 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
799 #ifndef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
800 //we don't need this if we use previous_sub_end |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
801 subtitle *previous_aqt_sub = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
802 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
803 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
804 static subtitle *sub_read_line_aqt(stream_t *st,subtitle *current, int utf16) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
805 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
806 char *next; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
807 int i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
808 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
809 while (1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
810 // try to locate next subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
811 if (!stream_read_line (st, line, LINE_LEN, utf16)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
812 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
813 if (!(sscanf (line, "-->> %ld", &(current->start)) <1)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
814 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
815 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
816 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
817 #ifdef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
818 previous_sub_end = (current->start) ? current->start - 1 : 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
819 #else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
820 if (previous_aqt_sub != NULL) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
821 previous_aqt_sub->end = current->start-1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
822 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
823 previous_aqt_sub = current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
824 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
825 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
826 if (!stream_read_line (st, line, LINE_LEN, utf16)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
827 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
828 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
829 sub_readtext((char *) &line,¤t->text[0]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
830 current->lines = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
831 current->end = current->start; // will be corrected by next subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
832 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
833 if (!stream_read_line (st, line, LINE_LEN, utf16)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
834 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
835 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
836 next = line,i=1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
837 while ((next =sub_readtext (next, &(current->text[i])))) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
838 if (current->text[i]==ERR) {return ERR;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
839 i++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
840 if (i>=SUB_MAX_TEXT) { mp_msg(MSGT_SUBREADER,MSGL_WARN,"Too many lines in a subtitle\n");current->lines=i;return current;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
841 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
842 current->lines=i+1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
843 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
844 if (!strlen(current->text[0]) && !strlen(current->text[1])) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
845 #ifdef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
846 previous_sub_end = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
847 #else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
848 // void subtitle -> end of previous marked and exit |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
849 previous_aqt_sub = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
850 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
851 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
852 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
853 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
854 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
855 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
856 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
857 #ifndef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
858 subtitle *previous_subrip09_sub = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
859 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
860 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
861 static subtitle *sub_read_line_subrip09(stream_t *st,subtitle *current, int utf16) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
862 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
863 int a1,a2,a3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
864 char * next=NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
865 int i,len; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
866 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
867 while (1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
868 // try to locate next subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
869 if (!stream_read_line (st, line, LINE_LEN, utf16)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
870 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
871 if (!((len=sscanf (line, "[%d:%d:%d]",&a1,&a2,&a3)) < 3)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
872 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
873 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
874 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
875 current->start = a1*360000+a2*6000+a3*100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
876 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
877 #ifdef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
878 previous_sub_end = (current->start) ? current->start - 1 : 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
879 #else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
880 if (previous_subrip09_sub != NULL) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
881 previous_subrip09_sub->end = current->start-1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
882 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
883 previous_subrip09_sub = current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
884 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
885 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
886 if (!stream_read_line (st, line, LINE_LEN, utf16)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
887 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
888 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
889 next = line,i=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
890 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
891 current->text[0]=""; // just to be sure that string is clear |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
892 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
893 while ((next =sub_readtext (next, &(current->text[i])))) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
894 if (current->text[i]==ERR) {return ERR;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
895 i++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
896 if (i>=SUB_MAX_TEXT) { mp_msg(MSGT_SUBREADER,MSGL_WARN,"Too many lines in a subtitle\n");current->lines=i;return current;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
897 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
898 current->lines=i+1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
899 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
900 if (!strlen(current->text[0]) && (i==0)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
901 #ifdef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
902 previous_sub_end = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
903 #else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
904 // void subtitle -> end of previous marked and exit |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
905 previous_subrip09_sub = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
906 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
907 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
908 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
909 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
910 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
911 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
912 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
913 static subtitle *sub_read_line_jacosub(stream_t* st, subtitle * current, int utf16) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
914 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
915 char line1[LINE_LEN], line2[LINE_LEN], directive[LINE_LEN], *p, *q; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
916 unsigned a1, a2, a3, a4, b1, b2, b3, b4, comment = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
917 static unsigned jacoTimeres = 30; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
918 static int jacoShift = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
919 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
920 memset(current, 0, sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
921 memset(line1, 0, LINE_LEN); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
922 memset(line2, 0, LINE_LEN); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
923 memset(directive, 0, LINE_LEN); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
924 while (!current->text[0]) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
925 if (!stream_read_line(st, line1, LINE_LEN, utf16)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
926 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
927 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
928 if (sscanf |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
929 (line1, "%u:%u:%u.%u %u:%u:%u.%u %[^\n\r]", &a1, &a2, &a3, &a4, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
930 &b1, &b2, &b3, &b4, line2) < 9) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
931 if (sscanf(line1, "@%u @%u %[^\n\r]", &a4, &b4, line2) < 3) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
932 if (line1[0] == '#') { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
933 int hours = 0, minutes = 0, seconds, delta, inverter = |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
934 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
935 unsigned units = jacoShift; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
936 switch (toupper(line1[1])) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
937 case 'S': |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
938 if (isalpha(line1[2])) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
939 delta = 6; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
940 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
941 delta = 2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
942 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
943 if (sscanf(&line1[delta], "%d", &hours)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
944 if (hours < 0) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
945 hours *= -1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
946 inverter = -1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
947 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
948 if (sscanf(&line1[delta], "%*d:%d", &minutes)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
949 if (sscanf |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
950 (&line1[delta], "%*d:%*d:%d", |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
951 &seconds)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
952 sscanf(&line1[delta], "%*d:%*d:%*d.%d", |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
953 &units); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
954 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
955 hours = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
956 sscanf(&line1[delta], "%d:%d.%d", |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
957 &minutes, &seconds, &units); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
958 minutes *= inverter; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
959 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
960 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
961 hours = minutes = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
962 sscanf(&line1[delta], "%d.%d", &seconds, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
963 &units); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
964 seconds *= inverter; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
965 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
966 jacoShift = |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
967 ((hours * 3600 + minutes * 60 + |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
968 seconds) * jacoTimeres + |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
969 units) * inverter; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
970 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
971 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
972 case 'T': |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
973 if (isalpha(line1[2])) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
974 delta = 8; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
975 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
976 delta = 2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
977 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
978 sscanf(&line1[delta], "%u", &jacoTimeres); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
979 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
980 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
981 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
982 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
983 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
984 current->start = |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
985 (unsigned long) ((a4 + jacoShift) * 100.0 / |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
986 jacoTimeres); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
987 current->end = |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
988 (unsigned long) ((b4 + jacoShift) * 100.0 / |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
989 jacoTimeres); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
990 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
991 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
992 current->start = |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
993 (unsigned |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
994 long) (((a1 * 3600 + a2 * 60 + a3) * jacoTimeres + a4 + |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
995 jacoShift) * 100.0 / jacoTimeres); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
996 current->end = |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
997 (unsigned |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
998 long) (((b1 * 3600 + b2 * 60 + b3) * jacoTimeres + b4 + |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
999 jacoShift) * 100.0 / jacoTimeres); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1000 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1001 current->lines = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1002 p = line2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1003 while ((*p == ' ') || (*p == '\t')) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1004 ++p; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1005 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1006 if (isalpha(*p)||*p == '[') { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1007 int cont, jLength; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1008 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1009 if (sscanf(p, "%s %[^\n\r]", directive, line1) < 2) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1010 return (subtitle *) ERR; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1011 jLength = strlen(directive); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1012 for (cont = 0; cont < jLength; ++cont) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1013 if (isalpha(*(directive + cont))) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1014 *(directive + cont) = toupper(*(directive + cont)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1015 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1016 if ((strstr(directive, "RDB") != NULL) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1017 || (strstr(directive, "RDC") != NULL) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1018 || (strstr(directive, "RLB") != NULL) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1019 || (strstr(directive, "RLG") != NULL)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1020 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1021 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1022 if (strstr(directive, "JL") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1023 current->alignment = SUB_ALIGNMENT_BOTTOMLEFT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1024 } else if (strstr(directive, "JR") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1025 current->alignment = SUB_ALIGNMENT_BOTTOMRIGHT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1026 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1027 current->alignment = SUB_ALIGNMENT_BOTTOMCENTER; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1028 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1029 strcpy(line2, line1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1030 p = line2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1031 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1032 for (q = line1; (!eol(*p)) && (current->lines < SUB_MAX_TEXT); ++p) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1033 switch (*p) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1034 case '{': |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1035 comment++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1036 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1037 case '}': |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1038 if (comment) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1039 --comment; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1040 //the next line to get rid of a blank after the comment |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1041 if ((*(p + 1)) == ' ') |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1042 p++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1043 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1044 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1045 case '~': |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1046 if (!comment) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1047 *q = ' '; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1048 ++q; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1049 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1050 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1051 case ' ': |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1052 case '\t': |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1053 if ((*(p + 1) == ' ') || (*(p + 1) == '\t')) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1054 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1055 if (!comment) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1056 *q = ' '; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1057 ++q; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1058 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1059 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1060 case '\\': |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1061 if (*(p + 1) == 'n') { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1062 *q = '\0'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1063 q = line1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1064 current->text[current->lines++] = strdup(line1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1065 ++p; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1066 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1067 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1068 if ((toupper(*(p + 1)) == 'C') |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1069 || (toupper(*(p + 1)) == 'F')) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1070 ++p,++p; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1071 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1072 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1073 if ((*(p + 1) == 'B') || (*(p + 1) == 'b') || (*(p + 1) == 'D') || //actually this means "insert current date here" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1074 (*(p + 1) == 'I') || (*(p + 1) == 'i') || (*(p + 1) == 'N') || (*(p + 1) == 'T') || //actually this means "insert current time here" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1075 (*(p + 1) == 'U') || (*(p + 1) == 'u')) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1076 ++p; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1077 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1078 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1079 if ((*(p + 1) == '\\') || |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1080 (*(p + 1) == '~') || (*(p + 1) == '{')) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1081 ++p; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1082 } else if (eol(*(p + 1))) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1083 if (!stream_read_line(st, directive, LINE_LEN, utf16)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1084 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1085 trail_space(directive); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1086 av_strlcat(line2, directive, LINE_LEN); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1087 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1088 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1089 default: |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1090 if (!comment) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1091 *q = *p; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1092 ++q; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1093 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1094 } //-- switch |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1095 } //-- for |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1096 *q = '\0'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1097 current->text[current->lines] = strdup(line1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1098 } //-- while |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1099 current->lines++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1100 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1101 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1102 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1103 static int sub_autodetect (stream_t* st, int *uses_time, int utf16) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1104 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1105 int i,j=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1106 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1107 while (j < 100) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1108 j++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1109 if (!stream_read_line (st, line, LINE_LEN, utf16)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1110 return SUB_INVALID; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1111 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1112 if (sscanf (line, "{%d}{%d}", &i, &i)==2) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1113 {*uses_time=0;return SUB_MICRODVD;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1114 if (sscanf (line, "{%d}{}", &i)==1) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1115 {*uses_time=0;return SUB_MICRODVD;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1116 if (sscanf (line, "[%d][%d]", &i, &i)==2) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1117 {*uses_time=1;return SUB_MPL2;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1118 if (sscanf (line, "%d:%d:%d.%d,%d:%d:%d.%d", &i, &i, &i, &i, &i, &i, &i, &i)==8) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1119 {*uses_time=1;return SUB_SUBRIP;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
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) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1121 {*uses_time=1;return SUB_SUBVIEWER;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1122 if (sscanf (line, "{T %d:%d:%d:%d",&i, &i, &i, &i)==4) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1123 {*uses_time=1;return SUB_SUBVIEWER2;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1124 if (strstr (line, "<SAMI>")) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1125 {*uses_time=1; return SUB_SAMI;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1126 if (sscanf(line, "%d:%d:%d.%d %d:%d:%d.%d", &i, &i, &i, &i, &i, &i, &i, &i) == 8) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1127 {*uses_time = 1; return SUB_JACOSUB;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1128 if (sscanf(line, "@%d @%d", &i, &i) == 2) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1129 {*uses_time = 1; return SUB_JACOSUB;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1130 if (sscanf (line, "%d:%d:%d:", &i, &i, &i )==3) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1131 {*uses_time=1;return SUB_VPLAYER;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1132 if (sscanf (line, "%d:%d:%d ", &i, &i, &i )==3) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1133 {*uses_time=1;return SUB_VPLAYER;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1134 if (!strncasecmp(line, "<window", 7)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1135 {*uses_time=1;return SUB_RT;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1136 if (!memcmp(line, "Dialogue: Marked", 16)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1137 {*uses_time=1; return SUB_SSA;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1138 if (!memcmp(line, "Dialogue: ", 10)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1139 {*uses_time=1; return SUB_SSA;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1140 if (sscanf (line, "%d,%d,\"%c", &i, &i, (char *) &i) == 3) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1141 {*uses_time=1;return SUB_PJS;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1142 if (sscanf (line, "FORMAT=%d", &i) == 1) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1143 {*uses_time=0; return SUB_MPSUB;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1144 if (!memcmp(line, "FORMAT=TIME", 11)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1145 {*uses_time=1; return SUB_MPSUB;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1146 if (strstr (line, "-->>")) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1147 {*uses_time=0; return SUB_AQTITLE;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1148 if (sscanf (line, "[%d:%d:%d]", &i, &i, &i)==3) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1149 {*uses_time=1;return SUB_SUBRIP09;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1150 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1151 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1152 return SUB_INVALID; // too many bad lines |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1153 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1154 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1155 int sub_utf8_prev=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1156 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1157 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1158 static iconv_t icdsc = (iconv_t)(-1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1159 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1160 void subcp_open (stream_t *st) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1161 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1162 char *tocp = "UTF-8"; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1163 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1164 if (sub_cp){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1165 const char *cp_tmp = sub_cp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1166 #ifdef CONFIG_ENCA |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1167 char enca_lang[3], enca_fallback[100]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1168 if (sscanf(sub_cp, "enca:%2s:%99s", enca_lang, enca_fallback) == 2 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1169 || sscanf(sub_cp, "ENCA:%2s:%99s", enca_lang, enca_fallback) == 2) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1170 if (st && st->flags & MP_STREAM_SEEK ) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1171 cp_tmp = guess_cp(st, enca_lang, enca_fallback); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1172 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1173 cp_tmp = enca_fallback; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1174 if (st) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1175 mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: enca failed, stream must be seekable.\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1176 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1177 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1178 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1179 if ((icdsc = iconv_open (tocp, cp_tmp)) != (iconv_t)(-1)){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1180 mp_msg(MSGT_SUBREADER,MSGL_V,"SUB: opened iconv descriptor.\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1181 sub_utf8 = 2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1182 } else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1183 mp_msg(MSGT_SUBREADER,MSGL_ERR,"SUB: error opening iconv descriptor.\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1184 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1185 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1186 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1187 void subcp_close (void) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1188 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1189 if (icdsc != (iconv_t)(-1)){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1190 (void) iconv_close (icdsc); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1191 icdsc = (iconv_t)(-1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1192 mp_msg(MSGT_SUBREADER,MSGL_V,"SUB: closed iconv descriptor.\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1193 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1194 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1195 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1196 subtitle* subcp_recode (subtitle *sub) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1197 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1198 int l=sub->lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1199 size_t ileft, oleft; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1200 char *op, *ip, *ot; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1201 if(icdsc == (iconv_t)(-1)) return sub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1202 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1203 while (l){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1204 ip = sub->text[--l]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1205 ileft = strlen(ip); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1206 oleft = 4 * ileft; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1207 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1208 if (!(ot = malloc(oleft + 1))){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1209 mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: error allocating mem.\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1210 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1211 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1212 op = ot; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1213 if (iconv(icdsc, &ip, &ileft, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1214 &op, &oleft) == (size_t)(-1)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1215 mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: error recoding line.\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1216 free(ot); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1217 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1218 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1219 // In some stateful encodings, we must clear the state to handle the last character |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1220 if (iconv(icdsc, NULL, NULL, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1221 &op, &oleft) == (size_t)(-1)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1222 mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: error recoding line, can't clear encoding state.\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1223 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1224 *op='\0' ; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1225 free (sub->text[l]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1226 sub->text[l] = ot; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1227 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1228 return sub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1229 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1230 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1231 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1232 #ifdef CONFIG_FRIBIDI |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1233 /** |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1234 * Do conversion necessary for right-to-left language support via fribidi. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1235 * @param sub subtitle to convert |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1236 * @param sub_utf8 whether the subtitle is encoded in UTF-8 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1237 * @param from first new subtitle, all lines before this are assumed to be already converted |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1238 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1239 static subtitle* sub_fribidi (subtitle *sub, int sub_utf8, int from) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1240 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1241 FriBidiChar logical[LINE_LEN+1], visual[LINE_LEN+1]; // Hopefully these two won't smash the stack |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1242 char *ip = NULL, *op = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1243 FriBidiCharType base; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1244 size_t len,orig_len; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1245 int l=sub->lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1246 int char_set_num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1247 fribidi_boolean log2vis; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1248 if (!flip_hebrew) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1249 return sub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1250 fribidi_set_mirroring(1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1251 fribidi_set_reorder_nsm(0); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1252 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1253 if( sub_utf8 == 0 ) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1254 char_set_num = fribidi_parse_charset (fribidi_charset?fribidi_charset:"ISO8859-8"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1255 }else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1256 char_set_num = fribidi_parse_charset ("UTF-8"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1257 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1258 while (l > from) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1259 ip = sub->text[--l]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1260 orig_len = len = strlen( ip ); // We assume that we don't use full unicode, only UTF-8 or ISO8859-x |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1261 if(len > LINE_LEN) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1262 mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: sub->text is longer than LINE_LEN.\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1263 l++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1264 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1265 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1266 len = fribidi_charset_to_unicode (char_set_num, ip, len, logical); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1267 base = fribidi_flip_commas?FRIBIDI_TYPE_ON:FRIBIDI_TYPE_L; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1268 log2vis = fribidi_log2vis (logical, len, &base, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1269 /* output */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1270 visual, NULL, NULL, NULL); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1271 if(log2vis) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1272 len = fribidi_remove_bidi_marks (visual, len, NULL, NULL, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1273 NULL); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1274 if((op = malloc((FFMAX(2*orig_len,2*len) + 1))) == NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1275 mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: error allocating mem.\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1276 l++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1277 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1278 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1279 fribidi_unicode_to_charset ( char_set_num, visual, len,op); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1280 free (ip); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1281 sub->text[l] = op; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1282 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1283 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1284 if (!from && l){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1285 for (l = sub->lines; l;) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1286 free (sub->text[--l]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1287 return ERR; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1288 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1289 return sub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1290 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1291 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1292 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1293 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1294 static void adjust_subs_time(subtitle* sub, float subtime, float fps, int block, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1295 int sub_num, int sub_uses_time) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1296 int n,m; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1297 subtitle* nextsub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1298 int i = sub_num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1299 unsigned long subfms = (sub_uses_time ? 100 : fps) * subtime; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1300 unsigned long overlap = (sub_uses_time ? 100 : fps) / 5; // 0.2s |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1301 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1302 n=m=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1303 if (i) for (;;){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1304 if (sub->end <= sub->start){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1305 sub->end = sub->start + subfms; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1306 m++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1307 n++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1308 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1309 if (!--i) break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1310 nextsub = sub + 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1311 if(block){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1312 if ((sub->end > nextsub->start) && (sub->end <= nextsub->start + overlap)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1313 // these subtitles overlap for less than 0.2 seconds |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1314 // and would result in very short overlapping subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1315 // so let's fix the problem here, before overlapping code |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1316 // get its hands on them |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1317 unsigned delta = sub->end - nextsub->start, half = delta / 2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1318 sub->end -= half + 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1319 nextsub->start += delta - half; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1320 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1321 if (sub->end >= nextsub->start){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1322 sub->end = nextsub->start - 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1323 if (sub->end - sub->start > subfms) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1324 sub->end = sub->start + subfms; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1325 if (!m) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1326 n++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1327 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1328 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1329 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1330 /* Theory: |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1331 * Movies are often converted from FILM (24 fps) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1332 * to PAL (25) by simply speeding it up, so we |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1333 * to multiply the original timestmaps by |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1334 * (Movie's FPS / Subtitle's (guessed) FPS) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1335 * so eg. for 23.98 fps movie and PAL time based |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1336 * subtitles we say -subfps 25 and we're fine! |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1337 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1338 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1339 /* timed sub fps correction ::atmos */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1340 /* the frame-based case is handled in mpcommon.c |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1341 * where find_sub is called */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1342 if(sub_uses_time && sub_fps) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1343 sub->start *= sub_fps/fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1344 sub->end *= sub_fps/fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1345 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1346 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1347 sub = nextsub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1348 m = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1349 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1350 if (n) mp_msg(MSGT_SUBREADER,MSGL_V,"SUB: Adjusted %d subtitle(s).\n", n); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1351 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1352 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1353 struct subreader { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1354 subtitle * (*read)(stream_t *st,subtitle *dest,int utf16); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1355 void (*post)(subtitle *dest); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1356 const char *name; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1357 }; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1358 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1359 #ifdef CONFIG_ENCA |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1360 const char* guess_buffer_cp(unsigned char* buffer, int buflen, const char *preferred_language, const char *fallback) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1361 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1362 const char **languages; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1363 size_t langcnt; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1364 EncaAnalyser analyser; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1365 EncaEncoding encoding; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1366 const char *detected_sub_cp = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1367 int i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1368 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1369 languages = enca_get_languages(&langcnt); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1370 mp_msg(MSGT_SUBREADER, MSGL_V, "ENCA supported languages: "); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1371 for (i = 0; i < langcnt; i++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1372 mp_msg(MSGT_SUBREADER, MSGL_V, "%s ", languages[i]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1373 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1374 mp_msg(MSGT_SUBREADER, MSGL_V, "\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1375 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1376 for (i = 0; i < langcnt; i++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1377 if (strcasecmp(languages[i], preferred_language) != 0) continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1378 analyser = enca_analyser_alloc(languages[i]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1379 encoding = enca_analyse_const(analyser, buffer, buflen); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1380 enca_analyser_free(analyser); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1381 if (encoding.charset != ENCA_CS_UNKNOWN) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1382 detected_sub_cp = enca_charset_name(encoding.charset, ENCA_NAME_STYLE_ICONV); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1383 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1384 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1385 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1386 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1387 free(languages); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1388 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1389 if (!detected_sub_cp) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1390 detected_sub_cp = fallback; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1391 mp_msg(MSGT_SUBREADER, MSGL_INFO, "ENCA detection failed: fallback to %s\n", fallback); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1392 }else{ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1393 mp_msg(MSGT_SUBREADER, MSGL_INFO, "ENCA detected charset: %s\n", detected_sub_cp); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1394 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1395 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1396 return detected_sub_cp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1397 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1398 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1399 #define MAX_GUESS_BUFFER_SIZE (256*1024) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1400 const char* guess_cp(stream_t *st, const char *preferred_language, const char *fallback) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1401 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1402 size_t buflen; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1403 unsigned char *buffer; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1404 const char *detected_sub_cp = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1405 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1406 buffer = malloc(MAX_GUESS_BUFFER_SIZE); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1407 buflen = stream_read(st,buffer, MAX_GUESS_BUFFER_SIZE); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1408 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1409 detected_sub_cp = guess_buffer_cp(buffer, buflen, preferred_language, fallback); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1410 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1411 free(buffer); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1412 stream_reset(st); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1413 stream_seek(st,0); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1414 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1415 return detected_sub_cp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1416 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1417 #undef MAX_GUESS_BUFFER_SIZE |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1418 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1419 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1420 sub_data* sub_read_file (char *filename, float fps) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1421 int utf16; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1422 stream_t* fd; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1423 int n_max, n_first, i, j, sub_first, sub_orig; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1424 subtitle *first, *second, *sub, *return_sub, *alloced_sub = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1425 sub_data *subt_data; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1426 int uses_time = 0, sub_num = 0, sub_errs = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1427 static const struct subreader sr[]= |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1428 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1429 { sub_read_line_microdvd, NULL, "microdvd" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1430 { sub_read_line_subrip, NULL, "subrip" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1431 { sub_read_line_subviewer, NULL, "subviewer" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1432 { sub_read_line_sami, NULL, "sami" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1433 { sub_read_line_vplayer, NULL, "vplayer" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1434 { sub_read_line_rt, NULL, "rt" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1435 { sub_read_line_ssa, sub_pp_ssa, "ssa" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1436 { sub_read_line_pjs, NULL, "pjs" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1437 { sub_read_line_mpsub, NULL, "mpsub" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1438 { sub_read_line_aqt, NULL, "aqt" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1439 { sub_read_line_subviewer2, NULL, "subviewer 2.0" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1440 { sub_read_line_subrip09, NULL, "subrip 0.9" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1441 { sub_read_line_jacosub, NULL, "jacosub" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1442 { sub_read_line_mpl2, NULL, "mpl2" } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1443 }; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1444 const struct subreader *srp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1445 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1446 if(filename==NULL) return NULL; //qnx segfault |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1447 fd=open_stream (filename, NULL, NULL); if (!fd) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1448 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1449 sub_format = SUB_INVALID; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1450 for (utf16 = 0; sub_format == SUB_INVALID && utf16 < 3; utf16++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1451 sub_format=sub_autodetect (fd, &uses_time, utf16); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1452 stream_reset(fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1453 stream_seek(fd,0); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1454 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1455 utf16--; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1456 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1457 mpsub_multiplier = (uses_time ? 100.0 : 1.0); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1458 if (sub_format==SUB_INVALID) {mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: Could not determine file format\n");return NULL;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1459 srp=sr+sub_format; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1460 mp_msg(MSGT_SUBREADER, MSGL_V, "SUB: Detected subtitle file format: %s\n", srp->name); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1461 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1462 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1463 sub_utf8_prev=sub_utf8; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1464 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1465 int l,k; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1466 k = -1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1467 if ((l=strlen(filename))>4){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1468 char *exts[] = {".utf", ".utf8", ".utf-8" }; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1469 for (k=3;--k>=0;) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1470 if (l >= strlen(exts[k]) && !strcasecmp(filename+(l - strlen(exts[k])), exts[k])){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1471 sub_utf8 = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1472 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1473 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1474 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1475 if (k<0) subcp_open(fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1476 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1477 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1478 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1479 sub_num=0;n_max=32; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1480 first=malloc(n_max*sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1481 if(!first){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1482 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1483 subcp_close(); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1484 sub_utf8=sub_utf8_prev; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1485 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1486 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1487 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1488 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1489 #ifdef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1490 alloced_sub = |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1491 sub = malloc(sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1492 //This is to deal with those formats (AQT & Subrip) which define the end of a subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1493 //as the beginning of the following |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1494 previous_sub_end = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1495 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1496 while(1){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1497 if(sub_num>=n_max){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1498 n_max+=16; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1499 first=realloc(first,n_max*sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1500 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1501 #ifndef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1502 sub = &first[sub_num]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1503 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1504 memset(sub, '\0', sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1505 sub=srp->read(fd,sub,utf16); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1506 if(!sub) break; // EOF |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1507 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1508 if ((sub!=ERR) && sub_utf8 == 2) sub=subcp_recode(sub); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1509 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1510 #ifdef CONFIG_FRIBIDI |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1511 if (sub!=ERR) sub=sub_fribidi(sub,sub_utf8,0); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1512 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1513 if ( sub == ERR ) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1514 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1515 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1516 subcp_close(); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1517 #endif |
32511
b39155e98ac3
Remove some useless NULL pointer checks before invoking free() on the pointer.
diego
parents:
32467
diff
changeset
|
1518 free(first); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1519 free(alloced_sub); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1520 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1521 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1522 // Apply any post processing that needs recoding first |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1523 if ((sub!=ERR) && !sub_no_text_pp && srp->post) srp->post(sub); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1524 #ifdef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1525 if(!sub_num || (first[sub_num - 1].start <= sub->start)){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1526 first[sub_num].start = sub->start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1527 first[sub_num].end = sub->end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1528 first[sub_num].lines = sub->lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1529 first[sub_num].alignment = sub->alignment; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1530 for(i = 0; i < sub->lines; ++i){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1531 first[sub_num].text[i] = sub->text[i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1532 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1533 if (previous_sub_end){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1534 first[sub_num - 1].end = previous_sub_end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1535 previous_sub_end = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1536 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1537 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1538 for(j = sub_num - 1; j >= 0; --j){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1539 first[j + 1].start = first[j].start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1540 first[j + 1].end = first[j].end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1541 first[j + 1].lines = first[j].lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1542 first[j + 1].alignment = first[j].alignment; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1543 for(i = 0; i < first[j].lines; ++i){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1544 first[j + 1].text[i] = first[j].text[i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1545 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1546 if(!j || (first[j - 1].start <= sub->start)){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1547 first[j].start = sub->start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1548 first[j].end = sub->end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1549 first[j].lines = sub->lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1550 first[j].alignment = sub->alignment; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1551 for(i = 0; i < SUB_MAX_TEXT; ++i){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1552 first[j].text[i] = sub->text[i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1553 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1554 if (previous_sub_end){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1555 first[j].end = first[j - 1].end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1556 first[j - 1].end = previous_sub_end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1557 previous_sub_end = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1558 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1559 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1560 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1561 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1562 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1563 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1564 if(sub==ERR) ++sub_errs; else ++sub_num; // Error vs. Valid |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1565 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1566 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1567 free_stream(fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1568 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1569 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1570 subcp_close(); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1571 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1572 free(alloced_sub); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1573 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1574 // printf ("SUB: Subtitle format %s time.\n", uses_time?"uses":"doesn't use"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1575 mp_msg(MSGT_SUBREADER, MSGL_V,"SUB: Read %i subtitles, %i bad line(s).\n", |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1576 sub_num, sub_errs); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1577 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1578 if(sub_num<=0){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1579 free(first); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1580 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1581 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1582 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1583 // we do overlap if the user forced it (suboverlap_enable == 2) or |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1584 // the user didn't forced no-overlapsub and the format is Jacosub or Ssa. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1585 // this is because usually overlapping subtitles are found in these formats, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1586 // while in others they are probably result of bad timing |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1587 if ((suboverlap_enabled == 2) || |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1588 ((suboverlap_enabled) && ((sub_format == SUB_JACOSUB) || (sub_format == SUB_SSA)))) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1589 adjust_subs_time(first, 6.0, fps, 0, sub_num, uses_time);/*~6 secs AST*/ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1590 // here we manage overlapping subtitles |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1591 sub_orig = sub_num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1592 n_first = sub_num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1593 sub_num = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1594 second = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1595 // for each subtitle in first[] we deal with its 'block' of |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1596 // bonded subtitles |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1597 for (sub_first = 0; sub_first < n_first; ++sub_first) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1598 unsigned long global_start = first[sub_first].start, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1599 global_end = first[sub_first].end, local_start, local_end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1600 int lines_to_add = first[sub_first].lines, sub_to_add = 0, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1601 **placeholder = NULL, higher_line = 0, counter, start_block_sub = sub_num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1602 char real_block = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1603 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1604 // here we find the number of subtitles inside the 'block' |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1605 // and its span interval. this works well only with sorted |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1606 // subtitles |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1607 while ((sub_first + sub_to_add + 1 < n_first) && (first[sub_first + sub_to_add + 1].start < global_end)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1608 ++sub_to_add; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1609 lines_to_add += first[sub_first + sub_to_add].lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1610 if (first[sub_first + sub_to_add].start < global_start) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1611 global_start = first[sub_first + sub_to_add].start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1612 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1613 if (first[sub_first + sub_to_add].end > global_end) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1614 global_end = first[sub_first + sub_to_add].end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1615 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1616 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1617 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1618 // we need a structure to keep trace of the screen lines |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1619 // used by the subs, a 'placeholder' |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1620 counter = 2 * sub_to_add + 1; // the maximum number of subs derived |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1621 // from a block of sub_to_add+1 subs |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1622 placeholder = malloc(sizeof(int *) * counter); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1623 for (i = 0; i < counter; ++i) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1624 placeholder[i] = malloc(sizeof(int) * lines_to_add); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1625 for (j = 0; j < lines_to_add; ++j) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1626 placeholder[i][j] = -1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1627 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1628 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1629 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1630 counter = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1631 local_end = global_start - 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1632 do { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1633 int ls; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1634 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1635 // here we find the beginning and the end of a new |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1636 // subtitle in the block |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1637 local_start = local_end + 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1638 local_end = global_end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1639 for (j = 0; j <= sub_to_add; ++j) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1640 if ((first[sub_first + j].start - 1 > local_start) && (first[sub_first + j].start - 1 < local_end)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1641 local_end = first[sub_first + j].start - 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1642 } else if ((first[sub_first + j].end > local_start) && (first[sub_first + j].end < local_end)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1643 local_end = first[sub_first + j].end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1644 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1645 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1646 // here we allocate the screen lines to subs we must |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1647 // display in current local_start-local_end interval. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1648 // if the subs were yet presents in the previous interval |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1649 // they keep the same lines, otherside they get unused lines |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1650 for (j = 0; j <= sub_to_add; ++j) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1651 if ((first[sub_first + j].start <= local_end) && (first[sub_first + j].end > local_start)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1652 unsigned long sub_lines = first[sub_first + j].lines, fragment_length = lines_to_add + 1, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1653 tmp = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1654 char boolean = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1655 int fragment_position = -1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1656 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1657 // if this is not the first new sub of the block |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1658 // we find if this sub was present in the previous |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1659 // new sub |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1660 if (counter) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1661 for (i = 0; i < lines_to_add; ++i) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1662 if (placeholder[counter - 1][i] == sub_first + j) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1663 placeholder[counter][i] = sub_first + j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1664 boolean = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1665 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1666 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1667 if (boolean) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1668 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1669 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1670 // we are looking for the shortest among all groups of |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1671 // sequential blank lines whose length is greater than or |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1672 // equal to sub_lines. we store in fragment_position the |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1673 // position of the shortest group, in fragment_length its |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1674 // length, and in tmp the length of the group currently |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1675 // examinated |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1676 for (i = 0; i < lines_to_add; ++i) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1677 if (placeholder[counter][i] == -1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1678 // placeholder[counter][i] is part of the current group |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1679 // of blank lines |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1680 ++tmp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1681 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1682 if (tmp == sub_lines) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1683 // current group's size fits exactly the one we |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1684 // need, so we stop looking |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1685 fragment_position = i - tmp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1686 tmp = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1687 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1688 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1689 if ((tmp) && (tmp > sub_lines) && (tmp < fragment_length)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1690 // current group is the best we found till here, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1691 // but is still bigger than the one we are looking |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1692 // for, so we keep on looking |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1693 fragment_length = tmp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1694 fragment_position = i - tmp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1695 tmp = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1696 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1697 // current group doesn't fit at all, so we forget it |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1698 tmp = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1699 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1700 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1701 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1702 if (tmp) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1703 // last screen line is blank, a group ends with it |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1704 if ((tmp >= sub_lines) && (tmp < fragment_length)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1705 fragment_position = i - tmp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1706 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1707 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1708 if (fragment_position == -1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1709 // it was not possible to find free screen line(s) for a subtitle, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1710 // usually this means a bug in the code; however we do not overlap |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1711 mp_msg(MSGT_SUBREADER, MSGL_WARN, "SUB: we could not find a suitable position for an overlapping subtitle\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1712 higher_line = SUB_MAX_TEXT + 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1713 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1714 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1715 for (tmp = 0; tmp < sub_lines; ++tmp) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1716 placeholder[counter][fragment_position + tmp] = sub_first + j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1717 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1718 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1719 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1720 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1721 for (j = higher_line + 1; j < lines_to_add; ++j) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1722 if (placeholder[counter][j] != -1) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1723 higher_line = j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1724 else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1725 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1726 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1727 if (higher_line >= SUB_MAX_TEXT) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1728 // the 'block' has too much lines, so we don't overlap the |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1729 // subtitles |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1730 second = realloc(second, (sub_num + sub_to_add + 1) * sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1731 for (j = 0; j <= sub_to_add; ++j) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1732 int ls; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1733 memset(&second[sub_num + j], '\0', sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1734 second[sub_num + j].start = first[sub_first + j].start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1735 second[sub_num + j].end = first[sub_first + j].end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1736 second[sub_num + j].lines = first[sub_first + j].lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1737 second[sub_num + j].alignment = first[sub_first + j].alignment; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1738 for (ls = 0; ls < second[sub_num + j].lines; ls++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1739 second[sub_num + j].text[ls] = strdup(first[sub_first + j].text[ls]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1740 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1741 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1742 sub_num += sub_to_add + 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1743 sub_first += sub_to_add; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1744 real_block = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1745 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1746 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1747 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1748 // we read the placeholder structure and create the new |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1749 // subs. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1750 second = realloc(second, (sub_num + 1) * sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1751 memset(&second[sub_num], '\0', sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1752 second[sub_num].start = local_start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1753 second[sub_num].end = local_end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1754 second[sub_num].alignment = first[sub_first].alignment; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1755 n_max = (lines_to_add < SUB_MAX_TEXT) ? lines_to_add : SUB_MAX_TEXT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1756 for (i = 0, j = 0; j < n_max; ++j) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1757 if (placeholder[counter][j] != -1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1758 int lines = first[placeholder[counter][j]].lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1759 for (ls = 0; ls < lines; ++ls) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1760 second[sub_num].text[i++] = strdup(first[placeholder[counter][j]].text[ls]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1761 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1762 j += lines - 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1763 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1764 second[sub_num].text[i++] = strdup(" "); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1765 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1766 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1767 ++sub_num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1768 ++counter; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1769 } while (local_end < global_end); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1770 if (real_block) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1771 for (i = 0; i < counter; ++i) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1772 second[start_block_sub + i].lines = higher_line + 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1773 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1774 counter = 2 * sub_to_add + 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1775 for (i = 0; i < counter; ++i) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1776 free(placeholder[i]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1777 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1778 free(placeholder); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1779 sub_first += sub_to_add; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1780 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1781 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1782 for (j = sub_orig - 1; j >= 0; --j) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1783 for (i = first[j].lines - 1; i >= 0; --i) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1784 free(first[j].text[i]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1785 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1786 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1787 free(first); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1788 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1789 return_sub = second; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1790 } else { //if(suboverlap_enabled) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1791 adjust_subs_time(first, 6.0, fps, 1, sub_num, uses_time);/*~6 secs AST*/ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1792 return_sub = first; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1793 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1794 if (return_sub == NULL) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1795 subt_data = malloc(sizeof(sub_data)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1796 subt_data->filename = strdup(filename); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1797 subt_data->sub_uses_time = uses_time; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1798 subt_data->sub_num = sub_num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1799 subt_data->sub_errs = sub_errs; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1800 subt_data->subtitles = return_sub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1801 return subt_data; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1802 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1803 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1804 #if 0 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1805 char * strreplace( char * in,char * what,char * whereof ) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1806 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1807 int i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1808 char * tmp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1809 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1810 if ( ( in == NULL )||( what == NULL )||( whereof == NULL )||( ( tmp=strstr( in,what ) ) == NULL ) ) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1811 for( i=0;i<strlen( whereof );i++ ) tmp[i]=whereof[i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1812 if ( strlen( what ) > strlen( whereof ) ) tmp[i]=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1813 return in; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1814 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1815 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1816 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1817 |
32691
98ddd06f0e9b
Mark source strings const in some subtitles string processing functions.
cboesch
parents:
32684
diff
changeset
|
1818 static void strcpy_trim(char *d, const char *s) |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1819 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1820 // skip leading whitespace |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1821 while (*s && isspace(*s)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1822 s++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1823 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1824 for (;;) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1825 // copy word |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1826 while (*s && !isspace(*s)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1827 *d = tolower(*s); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1828 s++; d++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1829 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1830 if (*s == 0) break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1831 // trim excess whitespace |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1832 while (*s && isspace(*s)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1833 s++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1834 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1835 if (*s == 0) break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1836 *d++ = ' '; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1837 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1838 *d = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1839 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1840 |
32691
98ddd06f0e9b
Mark source strings const in some subtitles string processing functions.
cboesch
parents:
32684
diff
changeset
|
1841 static void strcpy_strip_ext(char *d, const char *s) |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1842 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1843 char *tmp = strrchr(s,'.'); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1844 if (!tmp) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1845 strcpy(d, s); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1846 return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1847 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1848 strncpy(d, s, tmp-s); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1849 d[tmp-s] = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1850 } |
32706
7a79424a81ac
Rename strcpy_strip_ext to strcpy_strip_ext_lower.
cboesch
parents:
32691
diff
changeset
|
1851 } |
7a79424a81ac
Rename strcpy_strip_ext to strcpy_strip_ext_lower.
cboesch
parents:
32691
diff
changeset
|
1852 |
7a79424a81ac
Rename strcpy_strip_ext to strcpy_strip_ext_lower.
cboesch
parents:
32691
diff
changeset
|
1853 static void strcpy_strip_ext_lower(char *d, const char *s) |
7a79424a81ac
Rename strcpy_strip_ext to strcpy_strip_ext_lower.
cboesch
parents:
32691
diff
changeset
|
1854 { |
7a79424a81ac
Rename strcpy_strip_ext to strcpy_strip_ext_lower.
cboesch
parents:
32691
diff
changeset
|
1855 strcpy_strip_ext(d, s); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1856 while (*d) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1857 *d = tolower(*d); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1858 d++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1859 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1860 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1861 |
32691
98ddd06f0e9b
Mark source strings const in some subtitles string processing functions.
cboesch
parents:
32684
diff
changeset
|
1862 static void strcpy_get_ext(char *d, const char *s) |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1863 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1864 char *tmp = strrchr(s,'.'); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1865 if (!tmp) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1866 strcpy(d, ""); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1867 return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1868 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1869 strcpy(d, tmp+1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1870 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1871 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1872 |
32691
98ddd06f0e9b
Mark source strings const in some subtitles string processing functions.
cboesch
parents:
32684
diff
changeset
|
1873 static int whiteonly(const char *s) |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1874 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1875 while (*s) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1876 if (!isspace(*s)) return 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1877 s++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1878 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1879 return 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1880 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1881 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1882 typedef struct subfn |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1883 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1884 int priority; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1885 char *fname; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1886 } subfn; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1887 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1888 static int compare_sub_priority(const void *a, const void *b) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1889 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1890 if (((const subfn*)a)->priority > ((const subfn*)b)->priority) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1891 return -1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1892 } else if (((const subfn*)a)->priority < ((const subfn*)b)->priority) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1893 return 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1894 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1895 return strcoll(((const subfn*)a)->fname, ((const subfn*)b)->fname); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1896 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1897 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1898 |
32684 | 1899 struct sub_list { |
1900 struct subfn *subs; | |
1901 int sid; | |
1902 }; | |
1903 | |
1904 /** | |
1905 * @brief Append all the subtitles in the given path matching fname | |
1906 * | |
1907 * @param path Look for subtitles in this directory | |
1908 * @param fname Subtitle filename (pattern) | |
1909 * @param limit_fuzziness Ignore flag when sub_fuziness == 2 | |
1910 */ | |
1911 static void append_dir_subtitles(struct sub_list *slist, const char *path, | |
1912 const char *fname, int limit_fuzziness) | |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1913 { |
32684 | 1914 char *f_fname, *f_fname_noext, *f_fname_trim, *tmp, *tmp_sub_id; |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1915 char *tmp_fname_noext, *tmp_fname_trim, *tmp_fname_ext, *tmpresult; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1916 |
32684 | 1917 int len, found, i; |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1918 char *sub_exts[] = {"utf", "utf8", "utf-8", "sub", "srt", "smi", "rt", "txt", "ssa", "aqt", "jss", "js", "ass", NULL}; |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1919 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1920 FILE *f; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1921 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1922 DIR *d; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1923 struct dirent *de; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1924 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1925 len = (strlen(fname) > 256 ? strlen(fname) : 256) |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1926 + (strlen(path) > 256 ? strlen(path) : 256) + 2; |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1927 |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1928 f_fname = strdup(mp_basename(fname)); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1929 f_fname_noext = malloc(len); |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1930 f_fname_trim = malloc(len); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1931 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1932 tmp_fname_noext = malloc(len); |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1933 tmp_fname_trim = malloc(len); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1934 tmp_fname_ext = malloc(len); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1935 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1936 tmpresult = malloc(len); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1937 |
32706
7a79424a81ac
Rename strcpy_strip_ext to strcpy_strip_ext_lower.
cboesch
parents:
32691
diff
changeset
|
1938 strcpy_strip_ext_lower(f_fname_noext, f_fname); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1939 strcpy_trim(f_fname_trim, f_fname_noext); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1940 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1941 tmp_sub_id = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1942 if (dvdsub_lang && !whiteonly(dvdsub_lang)) { |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1943 tmp_sub_id = malloc(strlen(dvdsub_lang) + 1); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1944 strcpy_trim(tmp_sub_id, dvdsub_lang); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1945 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1946 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1947 // 0 = nothing |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1948 // 1 = any subtitle file |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1949 // 2 = any sub file containing movie name |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1950 // 3 = sub file containing movie name and the lang extension |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1951 d = opendir(path); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1952 if (d) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1953 mp_msg(MSGT_SUBREADER, MSGL_INFO, "Load subtitles in %s\n", path); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1954 while ((de = readdir(d))) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1955 // retrieve various parts of the filename |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1956 strcpy_strip_ext_lower(tmp_fname_noext, de->d_name); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1957 strcpy_get_ext(tmp_fname_ext, de->d_name); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1958 strcpy_trim(tmp_fname_trim, tmp_fname_noext); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1959 |
32774
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1960 // If it's a .sub, check if there is a .idx with the same name. If |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1961 // there is one, it's certainly a vobsub so we skip it. |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1962 if (strcasecmp(tmp_fname_ext, "sub") == 0) { |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1963 char *idx, *idxname = strdup(de->d_name); |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1964 |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1965 strcpy(idxname + strlen(de->d_name) - sizeof("idx") + 1, "idx"); |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1966 idx = mp_dir_join(path, idxname); |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1967 free(idxname); |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1968 f = fopen(idx, "rt"); |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1969 free(idx); |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1970 if (f) { |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1971 fclose(f); |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1972 continue; |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1973 } |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1974 } |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1975 |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1976 // does it end with a subtitle extension? |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1977 found = 0; |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1978 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1979 #ifdef CONFIG_ENCA |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1980 for (i = ((sub_cp && strncasecmp(sub_cp, "enca", 4) != 0) ? 3 : 0); sub_exts[i]; i++) { |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1981 #else |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1982 for (i = (sub_cp ? 3 : 0); sub_exts[i]; i++) { |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1983 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1984 #else |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1985 for (i = 0; sub_exts[i]; i++) { |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1986 #endif |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1987 if (strcasecmp(sub_exts[i], tmp_fname_ext) == 0) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1988 found = 1; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1989 break; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1990 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1991 } |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1992 |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1993 // we have a (likely) subtitle file |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1994 if (found) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1995 int prio = 0; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1996 if (!prio && tmp_sub_id) |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1997 { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1998 sprintf(tmpresult, "%s %s", f_fname_trim, tmp_sub_id); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1999 mp_msg(MSGT_SUBREADER, MSGL_DBG2, "Potential sub: %s\n", tmp_fname_trim); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2000 if (strcmp(tmp_fname_trim, tmpresult) == 0 && sub_match_fuzziness >= 1) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2001 // matches the movie name + lang extension |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2002 prio = 5; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2003 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2004 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2005 if (!prio && strcmp(tmp_fname_trim, f_fname_trim) == 0) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2006 // matches the movie name |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2007 prio = 4; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2008 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2009 if (!prio && (tmp = strstr(tmp_fname_trim, f_fname_trim)) && (sub_match_fuzziness >= 1)) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2010 // contains the movie name |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2011 tmp += strlen(f_fname_trim); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2012 if (tmp_sub_id && strstr(tmp, tmp_sub_id)) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2013 // with sub_id specified prefer localized subtitles |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2014 prio = 3; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2015 } else if ((tmp_sub_id == NULL) && whiteonly(tmp)) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2016 // without sub_id prefer "plain" name |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2017 prio = 3; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2018 } else { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2019 // with no localized subs found, try any else instead |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2020 prio = 2; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2021 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2022 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2023 if (!prio) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2024 // doesn't contain the movie name |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2025 if (!limit_fuzziness && sub_match_fuzziness >= 2) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2026 prio = 1; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2027 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2028 } |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2029 |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2030 if (prio) { |
32752 | 2031 char *subpath; |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2032 prio += prio; |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2033 #ifdef CONFIG_ICONV |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2034 if (i < 3){ // prefer UTF-8 coded |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2035 prio++; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2036 } |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2037 #endif |
32752 | 2038 subpath = mp_dir_join(path, de->d_name); |
2039 // fprintf(stderr, "%s priority %d\n", subpath, prio); | |
2040 if ((f = fopen(subpath, "rt"))) { | |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2041 struct subfn *sub = &slist->subs[slist->sid++]; |
32684 | 2042 |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2043 fclose(f); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2044 sub->priority = prio; |
32752 | 2045 sub->fname = subpath; |
2046 } else | |
2047 free(subpath); | |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2048 } |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2049 |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2050 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2051 if (slist->sid >= MAX_SUBTITLE_FILES) |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2052 break; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2053 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2054 closedir(d); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2055 } |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2056 |
32511
b39155e98ac3
Remove some useless NULL pointer checks before invoking free() on the pointer.
diego
parents:
32467
diff
changeset
|
2057 free(tmp_sub_id); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2058 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2059 free(f_fname); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2060 free(f_fname_noext); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2061 free(f_fname_trim); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2062 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2063 free(tmp_fname_noext); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2064 free(tmp_fname_trim); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2065 free(tmp_fname_ext); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2066 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2067 free(tmpresult); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2068 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2069 |
32642
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2070 /** |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2071 * @brief Load all subtitles matching the subtitle filename |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2072 * |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2073 * @param fname Path to subtitle filename |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2074 * @param fps FPS parameter for the add subtitle function |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2075 * @param add_f Add subtitle function to call for each sub |
32684 | 2076 * @note Subtitles are tracked and scored in various places according to the |
2077 * user options, sorted, and then added by calling the add_f function. | |
32642
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2078 */ |
32771
0b4acbbe9652
100l: fps are not in int but float, fix prototype.
cboesch
parents:
32752
diff
changeset
|
2079 void load_subtitles(const char *fname, float fps, open_sub_func add_f) |
32642
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2080 { |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2081 int i; |
32684 | 2082 char *mp_subdir, *path = NULL; |
2083 struct sub_list slist; | |
2084 | |
2085 // Load subtitles specified by sub option first | |
32642
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2086 if (sub_name) |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2087 for (i = 0; sub_name[i]; i++) |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2088 add_f(sub_name[i], fps, 0); |
32684 | 2089 |
2090 // Stop here if automatic detection disabled | |
2091 if (!sub_auto || !fname) | |
2092 return; | |
2093 | |
2094 slist.sid = 0; | |
2095 slist.subs = calloc(MAX_SUBTITLE_FILES, sizeof(*slist.subs)); | |
2096 if (!slist.subs) | |
2097 return; | |
2098 | |
2099 // Load subtitles from current media directory | |
2100 if (!(path = mp_dirname(fname))) { | |
2101 free(slist.subs); | |
2102 return; | |
32642
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2103 } |
32684 | 2104 append_dir_subtitles(&slist, path, fname, 0); |
2105 free(path); | |
2106 | |
32773 | 2107 // Load subtitles in dirs specified by sub-paths option |
2108 if (sub_paths) { | |
2109 for (i = 0; sub_paths[i]; i++) { | |
2110 path = mp_path_join(fname, sub_paths[i]); | |
2111 if (!path) { | |
2112 free(slist.subs); | |
2113 return; | |
2114 } | |
2115 append_dir_subtitles(&slist, path, fname, 0); | |
2116 free(path); | |
2117 } | |
2118 } | |
2119 | |
32684 | 2120 // Load subtitles in ~/.mplayer/sub limiting sub fuzziness |
2121 mp_subdir = get_path("sub/"); | |
2122 if (mp_subdir) | |
2123 append_dir_subtitles(&slist, mp_subdir, fname, 1); | |
2124 free(mp_subdir); | |
2125 | |
2126 // Sort subs by priority and append them | |
2127 qsort(slist.subs, slist.sid, sizeof(*slist.subs), compare_sub_priority); | |
2128 for (i = 0; i < slist.sid; i++) { | |
2129 struct subfn *sub = &slist.subs[i]; | |
2130 add_f(sub->fname, fps, 1); | |
2131 free(sub->fname); | |
2132 } | |
2133 free(slist.subs); | |
32642
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2134 } |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2135 |
32724
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2136 /** |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2137 * @brief Load VOB subtitle matching the subtitle filename. |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2138 * |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2139 * @param fname Path to subtitle filename. |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2140 * @param ifo Path to .ifo file. |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2141 * @spu SPU decoder instance. |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2142 * @add_f Function called when adding a vobsub. |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2143 */ |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2144 void load_vob_subtitle(const char *fname, const char * const ifo, void **spu, |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2145 open_vob_func add_f) |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2146 { |
32773 | 2147 char *name = NULL, *mp_subdir = NULL; |
32724
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2148 |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2149 // Load subtitles specified by vobsub option |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2150 if (vobsub_name) { |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2151 add_f(vobsub_name, ifo, 1, spu); |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2152 return; |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2153 } |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2154 |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2155 // Stop here if automatic detection disabled |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2156 if (!sub_auto || !fname) |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2157 return; |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2158 |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2159 // Get only the name of the subtitle file and try to open it |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2160 name = malloc(strlen(fname) + 1); |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2161 if (!name) |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2162 return; |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2163 strcpy_strip_ext(name, fname); |
32782 | 2164 if (add_f(name, ifo, 0, spu)) |
2165 goto out; | |
32724
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2166 |
32773 | 2167 // Try looking at the dirs specified by sub-paths option |
2168 if (sub_paths) { | |
2169 int i; | |
2170 | |
2171 for (i = 0; sub_paths[i]; i++) { | |
2172 char *path, *psub; | |
32782 | 2173 int sub_found; |
32773 | 2174 |
2175 path = mp_path_join(fname, sub_paths[i]); | |
2176 if (!path) | |
2177 goto out; | |
2178 | |
2179 psub = mp_dir_join(path, mp_basename(name)); | |
2180 free(path); | |
2181 if (!psub) | |
2182 goto out; | |
2183 | |
32782 | 2184 sub_found = add_f(psub, ifo, 0, spu); |
2185 free(psub); | |
2186 if (sub_found) | |
32773 | 2187 goto out; |
2188 } | |
2189 } | |
2190 | |
32724
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2191 // If still no VOB found, try loading it from ~/.mplayer/sub |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2192 mp_subdir = get_path("sub/"); |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2193 if (mp_subdir) { |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2194 char *psub = mp_path_join(mp_subdir, mp_basename(name)); |
32781
93629a05a380
Handle mp_path_join failure in load_vob_subtitle.
cboesch
parents:
32774
diff
changeset
|
2195 if (!psub) |
93629a05a380
Handle mp_path_join failure in load_vob_subtitle.
cboesch
parents:
32774
diff
changeset
|
2196 goto out; |
32724
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2197 add_f(psub, ifo, 0, spu); |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2198 free(psub); |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2199 } |
32773 | 2200 |
2201 out: | |
32724
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2202 free(mp_subdir); |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2203 free(name); |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2204 } |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2205 |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2206 void list_sub_file(sub_data* subd){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2207 int i,j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2208 subtitle *subs = subd->subtitles; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2209 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2210 for(j=0; j < subd->sub_num; j++){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2211 subtitle* egysub=&subs[j]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2212 mp_msg(MSGT_SUBREADER,MSGL_INFO,"%i line%c (%li-%li)\n", |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2213 egysub->lines, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2214 (1==egysub->lines)?' ':'s', |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2215 egysub->start, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2216 egysub->end); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2217 for (i=0; i<egysub->lines; i++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2218 mp_msg(MSGT_SUBREADER,MSGL_INFO,"\t\t%d: %s%s", i,egysub->text[i], i==egysub->lines-1?"":" \n "); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2219 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2220 mp_msg(MSGT_SUBREADER,MSGL_INFO,"\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2221 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2222 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2223 mp_msg(MSGT_SUBREADER,MSGL_INFO,"Subtitle format %s time.\n", |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2224 subd->sub_uses_time ? "uses":"doesn't use"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2225 mp_msg(MSGT_SUBREADER,MSGL_INFO,"Read %i subtitles, %i errors.\n", subd->sub_num, subd->sub_errs); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2226 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2227 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2228 void dump_srt(sub_data* subd, float fps){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2229 int i,j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2230 int h,m,s,ms; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2231 FILE * fd; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2232 subtitle * onesub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2233 unsigned long temp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2234 subtitle *subs = subd->subtitles; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2235 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2236 if (!subd->sub_uses_time && sub_fps == 0) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2237 sub_fps = fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2238 fd=fopen("dumpsub.srt","w"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2239 if(!fd) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2240 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2241 perror("dump_srt: fopen"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2242 return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2243 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2244 for(i=0; i < subd->sub_num; i++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2245 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2246 onesub=subs+i; //=&subs[i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2247 fprintf(fd,"%d\n",i+1);//line number |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2248 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2249 temp=onesub->start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2250 if (!subd->sub_uses_time) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2251 temp = temp * 100 / sub_fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2252 temp -= sub_delay * 100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2253 h=temp/360000;temp%=360000; //h =1*100*60*60 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2254 m=temp/6000; temp%=6000; //m =1*100*60 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2255 s=temp/100; temp%=100; //s =1*100 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2256 ms=temp*10; //ms=1*10 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2257 fprintf(fd,"%02d:%02d:%02d,%03d --> ",h,m,s,ms); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2258 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2259 temp=onesub->end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2260 if (!subd->sub_uses_time) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2261 temp = temp * 100 / sub_fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2262 temp -= sub_delay * 100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2263 h=temp/360000;temp%=360000; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2264 m=temp/6000; temp%=6000; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2265 s=temp/100; temp%=100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2266 ms=temp*10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2267 fprintf(fd,"%02d:%02d:%02d,%03d\n",h,m,s,ms); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2268 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2269 for(j=0;j<onesub->lines;j++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2270 fprintf(fd,"%s\n",onesub->text[j]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2271 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2272 fprintf(fd,"\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2273 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2274 fclose(fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2275 mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dumpsub.srt\'.\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2276 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2277 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2278 void dump_mpsub(sub_data* subd, float fps){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2279 int i,j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2280 FILE *fd; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2281 float a,b; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2282 subtitle *subs = subd->subtitles; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2283 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2284 mpsub_position = subd->sub_uses_time? (sub_delay*100) : (sub_delay*fps); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2285 if (sub_fps==0) sub_fps=fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2286 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2287 fd=fopen ("dump.mpsub", "w"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2288 if (!fd) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2289 perror ("dump_mpsub: fopen"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2290 return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2291 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2292 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2293 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2294 if (subd->sub_uses_time) fprintf (fd,"FORMAT=TIME\n\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2295 else fprintf (fd, "FORMAT=%5.2f\n\n", fps); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2296 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2297 for(j=0; j < subd->sub_num; j++){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2298 subtitle* egysub=&subs[j]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2299 if (subd->sub_uses_time) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2300 a=((egysub->start-mpsub_position)/100.0); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2301 b=((egysub->end-egysub->start)/100.0); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2302 if ( (float)((int)a) == a) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2303 fprintf (fd, "%.0f",a); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2304 else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2305 fprintf (fd, "%.2f",a); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2306 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2307 if ( (float)((int)b) == b) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2308 fprintf (fd, " %.0f\n",b); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2309 else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2310 fprintf (fd, " %.2f\n",b); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2311 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2312 fprintf (fd, "%ld %ld\n", (long)((egysub->start*(fps/sub_fps))-((mpsub_position*(fps/sub_fps)))), |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2313 (long)(((egysub->end)-(egysub->start))*(fps/sub_fps))); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2314 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2315 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2316 mpsub_position = egysub->end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2317 for (i=0; i<egysub->lines; i++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2318 fprintf (fd, "%s\n",egysub->text[i]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2319 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2320 fprintf (fd, "\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2321 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2322 fclose (fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2323 mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dump.mpsub\'.\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2324 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2325 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2326 void dump_microdvd(sub_data* subd, float fps) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2327 int i, delay; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2328 FILE *fd; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2329 subtitle *subs = subd->subtitles; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2330 if (sub_fps == 0) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2331 sub_fps = fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2332 fd = fopen("dumpsub.sub", "w"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2333 if (!fd) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2334 perror("dumpsub.sub: fopen"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2335 return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2336 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2337 delay = sub_delay * sub_fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2338 for (i = 0; i < subd->sub_num; ++i) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2339 int j, start, end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2340 start = subs[i].start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2341 end = subs[i].end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2342 if (subd->sub_uses_time) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2343 start = start * sub_fps / 100 ; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2344 end = end * sub_fps / 100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2345 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2346 else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2347 start = start * sub_fps / fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2348 end = end * sub_fps / fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2349 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2350 start -= delay; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2351 end -= delay; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2352 fprintf(fd, "{%d}{%d}", start, end); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2353 for (j = 0; j < subs[i].lines; ++j) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2354 fprintf(fd, "%s%s", j ? "|" : "", subs[i].text[j]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2355 fprintf(fd, "\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2356 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2357 fclose(fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2358 mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dumpsub.sub\'.\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2359 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2360 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2361 void dump_jacosub(sub_data* subd, float fps) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2362 int i,j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2363 int h,m,s,cs; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2364 FILE * fd; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2365 subtitle * onesub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2366 unsigned long temp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2367 subtitle *subs = subd->subtitles; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2368 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2369 if (!subd->sub_uses_time && sub_fps == 0) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2370 sub_fps = fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2371 fd=fopen("dumpsub.jss","w"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2372 if(!fd) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2373 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2374 perror("dump_jacosub: fopen"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2375 return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2376 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2377 fprintf(fd, "#TIMERES %d\n", (subd->sub_uses_time) ? 100 : (int)sub_fps); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2378 for(i=0; i < subd->sub_num; i++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2379 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2380 onesub=subs+i; //=&subs[i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2381 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2382 temp=onesub->start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2383 if (!subd->sub_uses_time) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2384 temp = temp * 100 / sub_fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2385 temp -= sub_delay * 100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2386 h=temp/360000;temp%=360000; //h =1*100*60*60 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2387 m=temp/6000; temp%=6000; //m =1*100*60 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2388 s=temp/100; temp%=100; //s =1*100 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2389 cs=temp; //cs=1*10 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2390 fprintf(fd,"%02d:%02d:%02d.%02d ",h,m,s,cs); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2391 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2392 temp=onesub->end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2393 if (!subd->sub_uses_time) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2394 temp = temp * 100 / sub_fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2395 temp -= sub_delay * 100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2396 h=temp/360000;temp%=360000; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2397 m=temp/6000; temp%=6000; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2398 s=temp/100; temp%=100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2399 cs=temp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2400 fprintf(fd,"%02d:%02d:%02d.%02d {~} ",h,m,s,cs); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2401 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2402 for(j=0;j<onesub->lines;j++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2403 fprintf(fd,"%s%s",j ? "\\n" : "", onesub->text[j]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2404 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2405 fprintf(fd,"\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2406 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2407 fclose(fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2408 mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dumpsub.js\'.\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2409 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2410 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2411 void dump_sami(sub_data* subd, float fps) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2412 int i,j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2413 FILE * fd; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2414 subtitle * onesub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2415 unsigned long temp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2416 subtitle *subs = subd->subtitles; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2417 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2418 if (!subd->sub_uses_time && sub_fps == 0) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2419 sub_fps = fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2420 fd=fopen("dumpsub.smi","w"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2421 if(!fd) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2422 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2423 perror("dump_jacosub: fopen"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2424 return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2425 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2426 fprintf(fd, "<SAMI>\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2427 "<HEAD>\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2428 " <STYLE TYPE=\"Text/css\">\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2429 " <!--\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2430 " 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" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2431 " .SUBTTL {Name: 'Subtitles'; Lang: en-US; SAMIType: CC;}\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2432 " -->\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2433 " </STYLE>\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2434 "</HEAD>\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2435 "<BODY>\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2436 for(i=0; i < subd->sub_num; i++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2437 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2438 onesub=subs+i; //=&subs[i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2439 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2440 temp=onesub->start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2441 if (!subd->sub_uses_time) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2442 temp = temp * 100 / sub_fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2443 temp -= sub_delay * 100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2444 fprintf(fd,"\t<SYNC Start=%lu>\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2445 "\t <P>", temp * 10); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2446 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2447 for(j=0;j<onesub->lines;j++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2448 fprintf(fd,"%s%s",j ? "<br>" : "", onesub->text[j]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2449 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2450 fprintf(fd,"\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2451 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2452 temp=onesub->end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2453 if (!subd->sub_uses_time) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2454 temp = temp * 100 / sub_fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2455 temp -= sub_delay * 100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2456 fprintf(fd,"\t<SYNC Start=%lu>\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2457 "\t <P> \n", temp * 10); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2458 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2459 fprintf(fd, "</BODY>\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2460 "</SAMI>\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2461 fclose(fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2462 mp_msg(MSGT_SUBREADER,MSGL_INFO,"SUB: Subtitles dumped in \'dumpsub.smi\'.\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2463 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2464 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2465 void sub_free( sub_data * subd ) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2466 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2467 int i, j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2468 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2469 if ( !subd ) return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2470 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2471 for (i = 0; i < subd->sub_num; i++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2472 for (j = 0; j < subd->subtitles[i].lines; j++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2473 free( subd->subtitles[i].text[j] ); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2474 free( subd->subtitles ); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2475 free( subd->filename ); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2476 free( subd ); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2477 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2478 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2479 #define MAX_SUBLINE 512 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2480 /** |
32646 | 2481 * @brief parse text and append it to subtitle in sub |
2482 * @param sub subtitle struct to add text to | |
2483 * @param txt text to parse | |
2484 * @param len length of text in txt | |
2485 * @param endpts pts at which this subtitle text should be removed again | |
2486 * @param strip_markup if strip markup is set (!= 0), markup tags like <b></b> are ignored | |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2487 * |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2488 * <> and {} are interpreted as comment delimiters, "\n", "\N", '\n', '\r' |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2489 * and '\0' are interpreted as newlines, duplicate, leading and trailing |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2490 * newlines are ignored. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2491 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2492 void sub_add_text(subtitle *sub, const char *txt, int len, double endpts, int strip_markup) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2493 int comment = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2494 int double_newline = 1; // ignore newlines at the beginning |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2495 int i, pos; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2496 char *buf; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2497 #ifdef CONFIG_FRIBIDI |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2498 int orig_lines = sub->lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2499 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2500 if (sub->lines >= SUB_MAX_TEXT) return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2501 pos = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2502 buf = malloc(MAX_SUBLINE + 1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2503 sub->text[sub->lines] = buf; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2504 sub->endpts[sub->lines] = endpts; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2505 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2506 #ifndef CONFIG_ASS |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2507 if (!strip_markup) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2508 mp_msg(MSGT_SUBREADER, MSGL_ERR, "strip_markup must be set when ASS support is disabled!\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2509 strip_markup = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2510 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2511 if (!strip_markup) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2512 subassconvert_subrip(txt, buf, MAX_SUBLINE + 1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2513 sub->text[sub->lines] = buf; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2514 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2515 for (i = 0; i < len && pos < MAX_SUBLINE; i++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2516 char c = txt[i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2517 if (c == '<') comment |= 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2518 if (c == '{') comment |= 2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2519 if (comment) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2520 if (c == '}') comment &= ~2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2521 if (c == '>') comment &= ~1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2522 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2523 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2524 if (pos == MAX_SUBLINE - 1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2525 i--; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2526 c = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2527 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2528 if (c == '\\' && i + 1 < len) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2529 c = txt[++i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2530 if (c == 'n' || c == 'N') c = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2531 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2532 if (c == '\n' || c == '\r') c = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2533 if (c) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2534 double_newline = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2535 buf[pos++] = c; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2536 } else if (!double_newline) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2537 if (sub->lines >= SUB_MAX_TEXT - 1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2538 mp_msg(MSGT_VO, MSGL_WARN, "Too many subtitle lines\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2539 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2540 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2541 double_newline = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2542 buf[pos] = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2543 sub->lines++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2544 pos = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2545 buf = malloc(MAX_SUBLINE + 1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2546 sub->text[sub->lines] = buf; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2547 sub->endpts[sub->lines] = endpts; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2548 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2549 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2550 buf[pos] = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2551 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2552 if (sub->lines < SUB_MAX_TEXT && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2553 strlen(sub->text[sub->lines])) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2554 sub->lines++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2555 #ifdef CONFIG_FRIBIDI |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2556 sub = sub_fribidi(sub, sub_utf8, orig_lines); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2557 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2558 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2559 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2560 #define MP_NOPTS_VALUE (-1LL<<63) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2561 /** |
32646 | 2562 * @brief remove outdated subtitle lines. |
2563 * @param sub subtitle struct to modify | |
2564 * @param pts current pts. All lines with endpts <= this will be removed. | |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2565 * Use MP_NOPTS_VALUE to remove all lines |
32646 | 2566 * @return 1 if sub was modified, 0 otherwise. |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2567 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2568 int sub_clear_text(subtitle *sub, double pts) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2569 int i = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2570 int changed = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2571 while (i < sub->lines) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2572 double endpts = sub->endpts[i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2573 if (pts == MP_NOPTS_VALUE || (endpts != MP_NOPTS_VALUE && pts >= endpts)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2574 int j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2575 free(sub->text[i]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2576 for (j = i + 1; j < sub->lines; j++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2577 sub->text[j - 1] = sub->text[j]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2578 sub->endpts[j - 1] = sub->endpts[j]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2579 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2580 sub->lines--; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2581 changed = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2582 } else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2583 i++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2584 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2585 return changed; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2586 } |