Mercurial > mplayer.hg
annotate sub/subreader.c @ 34346:3d0c795524b0
Fix bug with wrong focus in file selector.
The focus can only be set to fsFNameList after it's realized and mapped.
This also removes the irritating selection of the fsPathCombo.
author | ib |
---|---|
date | Sun, 11 Dec 2011 16:02:02 +0000 |
parents | 30aade4fd660 |
children | c535e4a0bd75 |
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 */ |
33384
a60ae792b855
SAMI subs: start a new line if there's no space left to append to the
reimar
parents:
33381
diff
changeset
|
176 if (p - text >= LINE_LEN) |
a60ae792b855
SAMI subs: start a new line if there's no space left to append to the
reimar
parents:
33381
diff
changeset
|
177 sami_add_line(current, text, &p); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
178 if (*s == '\0') break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
179 else if (!strncasecmp (s, "<br>", 4)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
180 sami_add_line(current, text, &p); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
181 s += 4; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
182 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
183 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
|
184 else if (*s == '<') { state = 4; } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
185 else if (!strncasecmp (s, " ", 6)) { *p++ = ' '; s += 6; } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
186 else if (*s == '\t') { *p++ = ' '; s++; } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
187 else if (*s == '\r' || *s == '\n') { s++; } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
188 else *p++ = *s++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
189 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
190 /* skip duplicated space */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
191 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
|
192 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
193 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
194 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
195 case 4: /* get current->end or skip <TAG> */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
196 q = stristr (s, "Start="); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
197 if (q) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
198 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
|
199 *p = '\0'; trail_space (text); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
200 if (text[0] != '\0') |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
201 current->text[current->lines++] = strdup (text); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
202 if (current->lines > 0) { state = 99; break; } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
203 state = 0; continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
204 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
205 s = strchr (s, '>'); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
206 if (s) { s++; state = 3; continue; } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
207 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
208 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
|
209 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
|
210 if (stristr(s, "\\a1") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
211 current->alignment = SUB_ALIGNMENT_BOTTOMLEFT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
212 s = s + 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
213 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
214 if (stristr(s, "\\a2") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
215 current->alignment = SUB_ALIGNMENT_BOTTOMCENTER; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
216 s = s + 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
217 } else if (stristr(s, "\\a3") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
218 current->alignment = SUB_ALIGNMENT_BOTTOMRIGHT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
219 s = s + 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
220 } 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
|
221 current->alignment = SUB_ALIGNMENT_TOPLEFT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
222 s = s + 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
223 } else if (stristr(s, "\\a6") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
224 current->alignment = SUB_ALIGNMENT_TOPCENTER; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
225 s = s + 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
226 } else if (stristr(s, "\\a7") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
227 current->alignment = SUB_ALIGNMENT_TOPRIGHT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
228 s = s + 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
229 } else if (stristr(s, "\\a9") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
230 current->alignment = SUB_ALIGNMENT_MIDDLELEFT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
231 s = s + 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
232 } else if (stristr(s, "\\a10") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
233 current->alignment = SUB_ALIGNMENT_MIDDLECENTER; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
234 s = s + 4; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
235 } else if (stristr(s, "\\a11") != NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
236 current->alignment = SUB_ALIGNMENT_MIDDLERIGHT; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
237 s = s + 4; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
238 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
239 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
240 if (*s == '}') state = 3; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
241 ++s; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
242 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
243 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
244 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
245 /* read next line */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
246 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
|
247 if (current->start > 0) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
248 break; // if it is the last subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
249 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
250 return 0; |
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 } |
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 } while (state != 99); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
255 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
256 // For the last subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
257 if (current->end <= 0) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
258 current->end = current->start + sub_slacktime; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
259 sami_add_line(current, text, &p); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
260 } |
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 return current; |
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 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
265 |
33904 | 266 static const char *sub_readtext(const char *source, char **dest) { |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
267 int len=0; |
33904 | 268 const char *p=source; |
32454
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 // printf("src=%p dest=%p \n",source,dest); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
271 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
272 while ( !eol(*p) && *p!= '|' ) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
273 p++,len++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
274 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
275 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
276 *dest= malloc (len+1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
277 if (!dest) {return ERR;} |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
278 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
279 strncpy(*dest, source, len); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
280 (*dest)[len]=0; |
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 while (*p=='\r' || *p=='\n' || *p=='|') p++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
283 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
284 if (*p) return p; // not-last text field |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
285 else return NULL; // last text field |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
286 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
287 |
33904 | 288 static subtitle *set_multiline_text(subtitle *current, const char *text, int start) |
289 { | |
290 int i = start; | |
291 while ((text = sub_readtext(text, current->text + i))) { | |
292 if (current->text[i] == ERR) return ERR; | |
293 i++; | |
294 if (i >= SUB_MAX_TEXT) { | |
295 mp_msg(MSGT_SUBREADER, MSGL_WARN, "Too many lines in a subtitle\n"); | |
296 current->lines = i; | |
297 return current; | |
298 } | |
299 } | |
300 current->lines = i + 1; | |
301 return current; | |
302 } | |
303 | |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
304 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
|
305 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
306 char line2[LINE_LEN+1]; |
33904 | 307 char *p; |
32454
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 do { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
310 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
|
311 } while ((sscanf (line, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
312 "{%ld}{}%[^\r\n]", |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
313 &(current->start), line2) < 2) && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
314 (sscanf (line, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
315 "{%ld}{%ld}%[^\r\n]", |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
316 &(current->start), &(current->end), line2) < 3)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
317 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
318 #ifdef CONFIG_ASS |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
319 if (ass_enabled) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
320 subassconvert_microdvd(line2, line, LINE_LEN + 1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
321 p = line; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
322 } else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
323 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
324 p = line2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
325 |
33904 | 326 return set_multiline_text(current, p, 0); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
327 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
328 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
329 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
|
330 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
331 char line2[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
332 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
333 do { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
334 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
|
335 } while ((sscanf (line, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
336 "[%ld][%ld]%[^\r\n]", |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
337 &(current->start), &(current->end), line2) < 3)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
338 current->start *= 10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
339 current->end *= 10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
340 |
33904 | 341 return set_multiline_text(current, line2, 0); |
32454
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 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
344 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
|
345 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
346 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
|
347 char *p=NULL, *q=NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
348 int len; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
349 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
350 while (1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
351 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
|
352 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
|
353 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
|
354 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
|
355 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
356 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
|
357 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
358 p=q=line; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
359 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
|
360 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
|
361 current->text[current->lines-1]=malloc (len+1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
362 if (!current->text[current->lines-1]) return ERR; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
363 strncpy (current->text[current->lines-1], q, len); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
364 current->text[current->lines-1][len]='\0'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
365 if (!*p || *p=='\r' || *p=='\n') break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
366 if (*p=='|') p++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
367 else while (*p++!=']'); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
368 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
369 break; |
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 return current; |
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 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
374 #ifdef CONFIG_ASS |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
375 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
|
376 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
377 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
|
378 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
379 while (!current->text[0]) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
380 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
|
381 int i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
382 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
383 /* Parse SubRip header */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
384 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
|
385 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
386 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
|
387 &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
|
388 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
389 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
390 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
|
391 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
|
392 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
393 /* Concat lines */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
394 full_line[0] = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
395 for (i = 0; i < SUB_MAX_TEXT; i++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
396 int blank = 1, len = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
397 char *p; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
398 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
399 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
|
400 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
401 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
402 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
|
403 if (*p != ' ' && *p != '\t') |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
404 blank = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
405 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
406 if (blank) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
407 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
408 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
409 *p = 0; |
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 if (len >= sizeof(full_line) - j - 2) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
412 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
413 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
414 if (j != 0) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
415 full_line[j++] = '\n'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
416 strcpy(&full_line[j], line); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
417 j += len; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
418 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
419 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
420 /* 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
|
421 if (full_line[0]) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
422 char converted_line[LINE_LEN + 1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
423 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
|
424 current->text[0] = strdup(converted_line); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
425 current->lines = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
426 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
427 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
428 return current; |
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 #endif |
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 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
|
433 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
434 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
|
435 char *p=NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
436 int i,len; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
437 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
438 #ifdef CONFIG_ASS |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
439 if (ass_enabled) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
440 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
|
441 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
442 while (!current->text[0]) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
443 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
|
444 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
|
445 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
446 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
|
447 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
|
448 for (i=0; i<SUB_MAX_TEXT;) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
449 int blank = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
450 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
|
451 len=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
452 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
|
453 if (*p != ' ' && *p != '\t') |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
454 blank = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
455 if (len && !blank) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
456 int j=0,skip=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
457 char *curptr=current->text[i]=malloc (len+1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
458 if (!current->text[i]) return ERR; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
459 //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
|
460 for(; j<len; j++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
461 /* let's filter html tags ::atmos */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
462 if(line[j]=='>') { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
463 skip=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
464 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
465 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
466 if(line[j]=='<') { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
467 skip=1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
468 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
469 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
470 if(skip) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
471 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
472 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
473 *curptr=line[j]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
474 curptr++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
475 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
476 *curptr='\0'; |
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 i++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
479 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
480 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
481 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
482 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
483 current->lines=i; |
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 return current; |
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 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
488 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
|
489 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
490 int a1,a2,a3,a4; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
491 char *p=NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
492 int i,len; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
493 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
494 while (!current->text[0]) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
495 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
|
496 if (line[0]!='{') |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
497 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
498 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
|
499 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
500 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
|
501 for (i=0; i<SUB_MAX_TEXT;) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
502 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
|
503 if (line[0]=='}') break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
504 len=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
505 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
|
506 if (len) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
507 current->text[i]=malloc (len+1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
508 if (!current->text[i]) return ERR; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
509 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
|
510 ++i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
511 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
512 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
513 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
514 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
515 current->lines=i; |
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 return current; |
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 |
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 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
|
522 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
523 int a1,a2,a3; |
33904 | 524 char *p=NULL, separator; |
525 int len,plen; | |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
526 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
527 while (!current->text[0]) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
528 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
|
529 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
|
530 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
531 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
532 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
|
533 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
534 /* removed by wodzu |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
535 p=line; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
536 // finds the body of the subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
537 for (i=0; i<3; i++){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
538 p=strchr(p,':'); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
539 if (p==NULL) break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
540 ++p; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
541 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
542 if (p==NULL) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
543 printf("SUB: Skipping incorrect subtitle line!\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
544 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
545 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
546 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
547 // 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
|
548 // 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
|
549 // colon! look, what simple it can be: |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
550 p = &line[ plen ]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
551 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
552 if (*p!='|') { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
553 // |
33904 | 554 return set_multiline_text(current, p, 0); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
555 } |
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 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
558 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
559 |
33907
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
560 static subtitle *sub_read_line_google(stream_t *st, subtitle *current, int utf16) |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
561 { |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
562 uint8_t part[LINE_LEN+1]; |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
563 uint8_t *p; |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
564 double start, duration; |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
565 do { |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
566 if (!stream_read_until(st, part, LINE_LEN, '>', utf16)) return NULL; |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
567 } while (sscanf(part, "<text start=\"%lf\" dur=\"%lf\"", &start, &duration) != 2); |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
568 |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
569 current->start = start * 100; |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
570 current->end = current->start + duration * 100; |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
571 |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
572 // find start of end tag |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
573 if (!stream_read_until(st, part, LINE_LEN, '<', utf16)) return NULL; |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
574 |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
575 // discard end tag opening |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
576 p = strchr(part, '<'); |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
577 if (p) *p = 0; |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
578 |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
579 // This is the actual text. |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
580 if (set_multiline_text(current, part, 0) == ERR) |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
581 return ERR; |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
582 |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
583 // discard rest of closing tag |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
584 if (!stream_read_until(st, part, LINE_LEN, '>', utf16)) return NULL; |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
585 return current; |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
586 } |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
587 |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
588 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
|
589 //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
|
590 // 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
|
591 // 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
|
592 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
593 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
|
594 char *p=NULL,*next=NULL; |
33904 | 595 int len,plen; |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
596 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
597 while (!current->text[0]) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
598 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
|
599 //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
|
600 //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
|
601 //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
|
602 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
|
603 if ( |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
604 ((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
|
605 ((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
|
606 ((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
|
607 ((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
|
608 // ((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
|
609 ((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
|
610 ((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
|
611 //now try it without end time |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
612 ((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
|
613 ((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
|
614 ((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
|
615 ((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
|
616 ) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
617 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
618 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
|
619 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
|
620 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
|
621 current->end = current->start+200; |
33904 | 622 p=line; p+=plen; |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
623 // 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
|
624 next = strstr(line,"<clear/>"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
625 if(next && strlen(next)>8){ |
33904 | 626 next+=8; |
627 return set_multiline_text(current, next, 0); | |
32454
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 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
630 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
631 } |
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 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
|
634 /* |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
635 * 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
|
636 * 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
|
637 * 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
|
638 * w/o it |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
639 * |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
640 * 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
|
641 * 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
|
642 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
643 int comma; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
644 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
|
645 /* amount of commas increase with newer SSA versions */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
646 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
647 int hour1, min1, sec1, hunsec1, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
648 hour2, min2, sec2, hunsec2, nothing; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
649 int num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
650 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
651 char line[LINE_LEN+1], |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
652 line3[LINE_LEN+1], |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
653 *line2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
654 char *tmp; |
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 do { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
657 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
|
658 } 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
|
659 "%[^\n\r]", ¬hing, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
660 &hour1, &min1, &sec1, &hunsec1, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
661 &hour2, &min2, &sec2, &hunsec2, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
662 line3) < 9 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
663 && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
664 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
|
665 "%[^\n\r]", ¬hing, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
666 &hour1, &min1, &sec1, &hunsec1, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
667 &hour2, &min2, &sec2, &hunsec2, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
668 line3) < 9 ); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
669 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
670 line2=strchr(line3, ','); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
671 if (!line2) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
672 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
673 for (comma = 4; comma < max_comma; comma ++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
674 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
675 tmp = line2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
676 if(!(tmp=strchr(++tmp, ','))) break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
677 if(*(++tmp) == ' ') break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
678 /* 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
|
679 line2 = tmp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
680 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
681 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
682 if(comma < max_comma)max_comma = comma; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
683 /* eliminate the trailing comma */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
684 if(*line2 == ',') line2++; |
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->lines=0;num=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
687 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
|
688 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
|
689 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
690 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
|
691 current->text[num]=malloc(tmp-line2+1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
692 strncpy (current->text[num], line2, tmp-line2); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
693 current->text[num][tmp-line2]='\0'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
694 line2=tmp+2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
695 num++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
696 current->lines++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
697 if (current->lines >= SUB_MAX_TEXT) return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
698 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
699 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
700 current->text[num]=strdup(line2); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
701 current->lines++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
702 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
703 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
704 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
705 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
706 static void sub_pp_ssa(subtitle *sub) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
707 int l=sub->lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
708 char *so,*de,*start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
709 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
710 while (l){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
711 /* 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
|
712 so=de=sub->text[--l]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
713 while (*so) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
714 if(*so == '{' && so[1]=='\\') { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
715 for (start=so; *so && *so!='}'; so++); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
716 if(*so) so++; else so=start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
717 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
718 if(*so) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
719 *de=*so; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
720 so++; de++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
721 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
722 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
723 *de=*so; |
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 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
726 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
727 /* |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
728 * PJS subtitles reader. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
729 * That's the "Phoenix Japanimation Society" format. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
730 * 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
|
731 * The time is in tenths of second. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
732 * |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
733 * 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
|
734 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
735 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
|
736 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
737 char text[LINE_LEN+1], *s, *d; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
738 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
739 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
|
740 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
741 /* skip spaces */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
742 for (s=line; *s && isspace(*s); s++); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
743 /* 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
|
744 if (*s==0) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
745 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
746 /* get the time */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
747 if (sscanf (s, "%ld,%ld,", &(current->start), |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
748 &(current->end)) <2) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
749 return ERR; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
750 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
751 /* 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
|
752 current->start *= 10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
753 current->end *= 10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
754 /* walk to the beggining of the string */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
755 for (; *s; s++) if (*s==',') break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
756 if (*s) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
757 for (s++; *s; s++) if (*s==',') break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
758 if (*s) s++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
759 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
760 if (*s!='"') { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
761 return ERR; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
762 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
763 /* copy the string to the text buffer */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
764 for (s++, d=text; *s && *s!='"'; s++, d++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
765 *d=*s; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
766 *d=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
767 current->text[0] = strdup(text); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
768 current->lines = 1; |
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 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
771 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
772 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
773 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
|
774 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
775 float a,b; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
776 int num=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
777 char *p, *q; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
778 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
779 do |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
780 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
781 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
|
782 } while (sscanf (line, "%f %f", &a, &b) !=2); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
783 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
784 mpsub_position += a*mpsub_multiplier; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
785 current->start=(int) mpsub_position; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
786 mpsub_position += b*mpsub_multiplier; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
787 current->end=(int) mpsub_position; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
788 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
789 while (num < SUB_MAX_TEXT) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
790 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
|
791 if (num == 0) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
792 else return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
793 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
794 p=line; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
795 while (isspace(*p)) p++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
796 if (eol(*p) && num > 0) return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
797 if (eol(*p)) return NULL; |
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 for (q=p; !eol(*q); q++); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
800 *q='\0'; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
801 if (strlen(p)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
802 current->text[num]=strdup(p); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
803 // printf (">%s<\n",p); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
804 current->lines = ++num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
805 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
806 if (num) return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
807 else return NULL; |
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 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
810 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
|
811 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
812 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
813 #ifndef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
814 //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
|
815 subtitle *previous_aqt_sub = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
816 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
817 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
818 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
|
819 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
820 |
33905 | 821 retry: |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
822 while (1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
823 // try to locate next subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
824 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
|
825 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
826 if (!(sscanf (line, "-->> %ld", &(current->start)) <1)) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
827 break; |
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 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
830 #ifdef CONFIG_SORTSUB |
33905 | 831 if (!previous_sub_end) |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
832 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
|
833 #else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
834 if (previous_aqt_sub != NULL) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
835 previous_aqt_sub->end = current->start-1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
836 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
837 previous_aqt_sub = current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
838 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
839 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
840 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
|
841 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
842 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
843 sub_readtext((char *) &line,¤t->text[0]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
844 current->lines = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
845 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
|
846 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
847 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
|
848 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
849 |
33904 | 850 if (set_multiline_text(current, line, 1) == ERR) |
851 return ERR; | |
32454
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 if (!strlen(current->text[0]) && !strlen(current->text[1])) { |
33905 | 854 #ifndef CONFIG_SORTSUB |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
855 // void subtitle -> end of previous marked and exit |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
856 previous_aqt_sub = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
857 #endif |
33905 | 858 goto retry; |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
859 } |
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 return current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
862 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
863 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
864 #ifndef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
865 subtitle *previous_subrip09_sub = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
866 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
867 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
868 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
|
869 char line[LINE_LEN+1]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
870 int a1,a2,a3; |
33904 | 871 int len; |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
872 |
33905 | 873 retry: |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
874 while (1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
875 // try to locate next subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
876 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
|
877 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
878 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
|
879 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
880 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
881 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
882 current->start = a1*360000+a2*6000+a3*100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
883 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
884 #ifdef CONFIG_SORTSUB |
33905 | 885 if (!previous_sub_end) |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
886 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
|
887 #else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
888 if (previous_subrip09_sub != NULL) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
889 previous_subrip09_sub->end = current->start-1; |
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 previous_subrip09_sub = current; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
892 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
893 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
894 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
|
895 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
896 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
897 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
|
898 |
33904 | 899 if (set_multiline_text(current, line, 0) == ERR) |
900 return ERR; | |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
901 |
33904 | 902 if (!strlen(current->text[0]) && current->lines <= 1) { |
33905 | 903 #ifndef CONFIG_SORTSUB |
32454
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 |
33905 | 907 goto retry; |
32454
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;} |
33907
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
1150 if (strstr (line, "<?xml version=\"1.0\" encoding=\"utf-8\" ?><transcript>")) |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
1151 {*uses_time=1; return SUB_GOOGLE;} |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1152 } |
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 return SUB_INVALID; // too many bad lines |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1155 } |
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 int sub_utf8_prev=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1158 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1159 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1160 static iconv_t icdsc = (iconv_t)(-1); |
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 void subcp_open (stream_t *st) |
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 char *tocp = "UTF-8"; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1165 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1166 if (sub_cp){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1167 const char *cp_tmp = sub_cp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1168 #ifdef CONFIG_ENCA |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1169 char enca_lang[3], enca_fallback[100]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1170 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
|
1171 || 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
|
1172 if (st && st->flags & MP_STREAM_SEEK ) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1173 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
|
1174 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1175 cp_tmp = enca_fallback; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1176 if (st) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1177 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
|
1178 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1179 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1180 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1181 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
|
1182 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
|
1183 sub_utf8 = 2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1184 } else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1185 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
|
1186 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1187 } |
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 void subcp_close (void) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1190 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1191 if (icdsc != (iconv_t)(-1)){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1192 (void) iconv_close (icdsc); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1193 icdsc = (iconv_t)(-1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1194 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
|
1195 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1196 } |
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 subtitle* subcp_recode (subtitle *sub) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1199 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1200 int l=sub->lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1201 size_t ileft, oleft; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1202 char *op, *ip, *ot; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1203 if(icdsc == (iconv_t)(-1)) return sub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1204 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1205 while (l){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1206 ip = sub->text[--l]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1207 ileft = strlen(ip); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1208 oleft = 4 * ileft; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1209 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1210 if (!(ot = malloc(oleft + 1))){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1211 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
|
1212 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1213 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1214 op = ot; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1215 if (iconv(icdsc, &ip, &ileft, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1216 &op, &oleft) == (size_t)(-1)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1217 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
|
1218 free(ot); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1219 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1220 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1221 // 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
|
1222 if (iconv(icdsc, NULL, NULL, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1223 &op, &oleft) == (size_t)(-1)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1224 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
|
1225 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1226 *op='\0' ; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1227 free (sub->text[l]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1228 sub->text[l] = ot; |
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 return sub; |
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 #endif |
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 #ifdef CONFIG_FRIBIDI |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1235 /** |
33353
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1236 * Helper function to share code between subreader and libmenu/menu.c |
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1237 */ |
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1238 int do_fribid_log2vis(int charset, const char *in, FriBidiChar *logical, FriBidiChar *visual, int flip_commas) |
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1239 { |
33381
caaafbf05ecb
Fix condition for using FriBidiParType, its values are usually
reimar
parents:
33354
diff
changeset
|
1240 #if defined(FRIBIDI_PAR_LTR) || FRIBIDI_INTERFACE_VERSION >= 3 |
33353
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1241 FriBidiParType base = flip_commas ? FRIBIDI_PAR_ON : FRIBIDI_PAR_LTR; |
33354
a0c9f0202d8e
Attempt to fix compilation against older fribidi versions.
reimar
parents:
33353
diff
changeset
|
1242 #else |
a0c9f0202d8e
Attempt to fix compilation against older fribidi versions.
reimar
parents:
33353
diff
changeset
|
1243 FriBidiCharType base = flip_commas ? FRIBIDI_TYPE_ON : FRIBIDI_TYPE_L; |
a0c9f0202d8e
Attempt to fix compilation against older fribidi versions.
reimar
parents:
33353
diff
changeset
|
1244 #endif |
33353
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1245 int len = strlen(in); |
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1246 len = fribidi_charset_to_unicode(charset, in, len, logical); |
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1247 if (!fribidi_log2vis(logical, len, &base, visual, NULL, NULL, NULL)) |
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1248 return -1; |
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1249 len = fribidi_remove_bidi_marks(visual, len, NULL, NULL, NULL); |
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1250 return len; |
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1251 } |
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1252 |
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1253 /** |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1254 * 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
|
1255 * @param sub subtitle to convert |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1256 * @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
|
1257 * @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
|
1258 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1259 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
|
1260 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1261 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
|
1262 char *ip = NULL, *op = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1263 size_t len,orig_len; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1264 int l=sub->lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1265 int char_set_num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1266 if (!flip_hebrew) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1267 return sub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1268 fribidi_set_mirroring(1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1269 fribidi_set_reorder_nsm(0); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1270 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1271 if( sub_utf8 == 0 ) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1272 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
|
1273 }else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1274 char_set_num = fribidi_parse_charset ("UTF-8"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1275 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1276 while (l > from) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1277 ip = sub->text[--l]; |
33353
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1278 orig_len = strlen( ip ); // We assume that we don't use full unicode, only UTF-8 or ISO8859-x |
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1279 if(orig_len > LINE_LEN) { |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1280 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
|
1281 l++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1282 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1283 } |
33353
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1284 len = do_fribid_log2vis(char_set_num, ip, logical, visual, fribidi_flip_commas); |
63dbf59fa312
Move some common fribidi code into a shared function.
reimar
parents:
33341
diff
changeset
|
1285 if(len > 0) { |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1286 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
|
1287 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
|
1288 l++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1289 break; |
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 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
|
1292 free (ip); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1293 sub->text[l] = op; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1294 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1295 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1296 if (!from && l){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1297 for (l = sub->lines; l;) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1298 free (sub->text[--l]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1299 return ERR; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1300 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1301 return sub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1302 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1303 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1304 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1305 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1306 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
|
1307 int sub_num, int sub_uses_time) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1308 int n,m; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1309 subtitle* nextsub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1310 int i = sub_num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1311 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
|
1312 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
|
1313 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1314 n=m=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1315 if (i) for (;;){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1316 if (sub->end <= sub->start){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1317 sub->end = sub->start + subfms; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1318 m++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1319 n++; |
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 (!--i) break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1322 nextsub = sub + 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1323 if(block){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1324 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
|
1325 // 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
|
1326 // and would result in very short overlapping subtitle |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1327 // 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
|
1328 // get its hands on them |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1329 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
|
1330 sub->end -= half + 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1331 nextsub->start += delta - half; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1332 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1333 if (sub->end >= nextsub->start){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1334 sub->end = nextsub->start - 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1335 if (sub->end - sub->start > subfms) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1336 sub->end = sub->start + subfms; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1337 if (!m) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1338 n++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1339 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1340 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1341 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1342 /* Theory: |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1343 * Movies are often converted from FILM (24 fps) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1344 * 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
|
1345 * to multiply the original timestmaps by |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1346 * (Movie's FPS / Subtitle's (guessed) FPS) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1347 * 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
|
1348 * 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
|
1349 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1350 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1351 /* timed sub fps correction ::atmos */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1352 /* 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
|
1353 * where find_sub is called */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1354 if(sub_uses_time && sub_fps) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1355 sub->start *= sub_fps/fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1356 sub->end *= sub_fps/fps; |
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 sub = nextsub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1360 m = 0; |
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 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
|
1363 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1364 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1365 struct subreader { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1366 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
|
1367 void (*post)(subtitle *dest); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1368 const char *name; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1369 }; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1370 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1371 #ifdef CONFIG_ENCA |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1372 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
|
1373 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1374 const char **languages; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1375 size_t langcnt; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1376 EncaAnalyser analyser; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1377 EncaEncoding encoding; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1378 const char *detected_sub_cp = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1379 int i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1380 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1381 languages = enca_get_languages(&langcnt); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1382 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
|
1383 for (i = 0; i < langcnt; i++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1384 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
|
1385 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1386 mp_msg(MSGT_SUBREADER, MSGL_V, "\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1387 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1388 for (i = 0; i < langcnt; i++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1389 if (strcasecmp(languages[i], preferred_language) != 0) continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1390 analyser = enca_analyser_alloc(languages[i]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1391 encoding = enca_analyse_const(analyser, buffer, buflen); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1392 enca_analyser_free(analyser); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1393 if (encoding.charset != ENCA_CS_UNKNOWN) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1394 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
|
1395 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1396 } |
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 free(languages); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1400 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1401 if (!detected_sub_cp) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1402 detected_sub_cp = fallback; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1403 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
|
1404 }else{ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1405 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
|
1406 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1407 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1408 return detected_sub_cp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1409 } |
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 #define MAX_GUESS_BUFFER_SIZE (256*1024) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1412 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
|
1413 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1414 size_t buflen; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1415 unsigned char *buffer; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1416 const char *detected_sub_cp = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1417 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1418 buffer = malloc(MAX_GUESS_BUFFER_SIZE); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1419 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
|
1420 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1421 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
|
1422 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1423 free(buffer); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1424 stream_reset(st); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1425 stream_seek(st,0); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1426 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1427 return detected_sub_cp; |
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 #undef MAX_GUESS_BUFFER_SIZE |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1430 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1431 |
33790
ab6d06f5b98b
Add const to some string pointer arguments that will not be modified.
ib
parents:
33384
diff
changeset
|
1432 sub_data* sub_read_file (const char *filename, float fps) { |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1433 int utf16; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1434 stream_t* fd; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1435 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
|
1436 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
|
1437 sub_data *subt_data; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1438 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
|
1439 static const struct subreader sr[]= |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1440 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1441 { sub_read_line_microdvd, NULL, "microdvd" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1442 { sub_read_line_subrip, NULL, "subrip" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1443 { sub_read_line_subviewer, NULL, "subviewer" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1444 { sub_read_line_sami, NULL, "sami" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1445 { sub_read_line_vplayer, NULL, "vplayer" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1446 { sub_read_line_rt, NULL, "rt" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1447 { sub_read_line_ssa, sub_pp_ssa, "ssa" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1448 { sub_read_line_pjs, NULL, "pjs" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1449 { sub_read_line_mpsub, NULL, "mpsub" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1450 { sub_read_line_aqt, NULL, "aqt" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1451 { sub_read_line_subviewer2, NULL, "subviewer 2.0" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1452 { sub_read_line_subrip09, NULL, "subrip 0.9" }, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1453 { sub_read_line_jacosub, NULL, "jacosub" }, |
33907
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
1454 { sub_read_line_mpl2, NULL, "mpl2" }, |
30aade4fd660
Quick-and-dirty support for reading Google/YouTube subtitle format.
reimar
parents:
33905
diff
changeset
|
1455 { sub_read_line_google, NULL, "google" }, |
32454
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 const struct subreader *srp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1458 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1459 if(filename==NULL) return NULL; //qnx segfault |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1460 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
|
1461 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1462 sub_format = SUB_INVALID; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1463 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
|
1464 sub_format=sub_autodetect (fd, &uses_time, utf16); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1465 stream_reset(fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1466 stream_seek(fd,0); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1467 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1468 utf16--; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1469 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1470 mpsub_multiplier = (uses_time ? 100.0 : 1.0); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1471 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
|
1472 srp=sr+sub_format; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1473 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
|
1474 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1475 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1476 sub_utf8_prev=sub_utf8; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1477 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1478 int l,k; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1479 k = -1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1480 if ((l=strlen(filename))>4){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1481 char *exts[] = {".utf", ".utf8", ".utf-8" }; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1482 for (k=3;--k>=0;) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1483 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
|
1484 sub_utf8 = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1485 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1486 } |
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 if (k<0) subcp_open(fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1489 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1490 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1491 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1492 sub_num=0;n_max=32; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1493 first=malloc(n_max*sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1494 if(!first){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1495 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1496 subcp_close(); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1497 sub_utf8=sub_utf8_prev; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1498 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1499 return NULL; |
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 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1502 #ifdef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1503 alloced_sub = |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1504 sub = malloc(sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1505 //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
|
1506 //as the beginning of the following |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1507 previous_sub_end = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1508 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1509 while(1){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1510 if(sub_num>=n_max){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1511 n_max+=16; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1512 first=realloc(first,n_max*sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1513 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1514 #ifndef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1515 sub = &first[sub_num]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1516 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1517 memset(sub, '\0', sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1518 sub=srp->read(fd,sub,utf16); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1519 if(!sub) break; // EOF |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1520 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1521 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
|
1522 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1523 #ifdef CONFIG_FRIBIDI |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1524 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
|
1525 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1526 if ( sub == ERR ) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1527 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1528 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1529 subcp_close(); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1530 #endif |
32511
b39155e98ac3
Remove some useless NULL pointer checks before invoking free() on the pointer.
diego
parents:
32467
diff
changeset
|
1531 free(first); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1532 free(alloced_sub); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1533 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1534 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1535 // Apply any post processing that needs recoding first |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1536 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
|
1537 #ifdef CONFIG_SORTSUB |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1538 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
|
1539 first[sub_num].start = sub->start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1540 first[sub_num].end = sub->end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1541 first[sub_num].lines = sub->lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1542 first[sub_num].alignment = sub->alignment; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1543 for(i = 0; i < sub->lines; ++i){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1544 first[sub_num].text[i] = sub->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 (previous_sub_end){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1547 first[sub_num - 1].end = previous_sub_end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1548 previous_sub_end = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1549 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1550 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1551 for(j = sub_num - 1; j >= 0; --j){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1552 first[j + 1].start = first[j].start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1553 first[j + 1].end = first[j].end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1554 first[j + 1].lines = first[j].lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1555 first[j + 1].alignment = first[j].alignment; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1556 for(i = 0; i < first[j].lines; ++i){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1557 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
|
1558 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1559 if(!j || (first[j - 1].start <= sub->start)){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1560 first[j].start = sub->start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1561 first[j].end = sub->end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1562 first[j].lines = sub->lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1563 first[j].alignment = sub->alignment; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1564 for(i = 0; i < SUB_MAX_TEXT; ++i){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1565 first[j].text[i] = sub->text[i]; |
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 if (previous_sub_end){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1568 first[j].end = first[j - 1].end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1569 first[j - 1].end = previous_sub_end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1570 previous_sub_end = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1571 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1572 break; |
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 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1575 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1576 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1577 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
|
1578 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1579 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1580 free_stream(fd); |
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 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1583 subcp_close(); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1584 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1585 free(alloced_sub); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1586 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1587 // 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
|
1588 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
|
1589 sub_num, sub_errs); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1590 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1591 if(sub_num<=0){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1592 free(first); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1593 return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1594 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1595 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1596 // 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
|
1597 // 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
|
1598 // 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
|
1599 // 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
|
1600 if ((suboverlap_enabled == 2) || |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1601 ((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
|
1602 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
|
1603 // here we manage overlapping subtitles |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1604 sub_orig = sub_num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1605 n_first = sub_num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1606 sub_num = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1607 second = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1608 // 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
|
1609 // bonded subtitles |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1610 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
|
1611 unsigned long global_start = first[sub_first].start, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1612 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
|
1613 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
|
1614 **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
|
1615 char real_block = 1; |
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 // 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
|
1618 // 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
|
1619 // subtitles |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1620 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
|
1621 ++sub_to_add; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1622 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
|
1623 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
|
1624 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
|
1625 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1626 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
|
1627 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
|
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 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1631 // 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
|
1632 // used by the subs, a 'placeholder' |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1633 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
|
1634 // 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
|
1635 placeholder = malloc(sizeof(int *) * counter); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1636 for (i = 0; i < counter; ++i) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1637 placeholder[i] = malloc(sizeof(int) * lines_to_add); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1638 for (j = 0; j < lines_to_add; ++j) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1639 placeholder[i][j] = -1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1640 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1641 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1642 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1643 counter = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1644 local_end = global_start - 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1645 do { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1646 int ls; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1647 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1648 // 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
|
1649 // subtitle in the block |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1650 local_start = local_end + 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1651 local_end = global_end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1652 for (j = 0; j <= sub_to_add; ++j) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1653 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
|
1654 local_end = first[sub_first + j].start - 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1655 } 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
|
1656 local_end = first[sub_first + j].end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1657 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1658 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1659 // 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
|
1660 // display in current local_start-local_end interval. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1661 // 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
|
1662 // 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
|
1663 for (j = 0; j <= sub_to_add; ++j) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1664 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
|
1665 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
|
1666 tmp = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1667 char boolean = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1668 int fragment_position = -1; |
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 // 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
|
1671 // 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
|
1672 // new sub |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1673 if (counter) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1674 for (i = 0; i < lines_to_add; ++i) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1675 if (placeholder[counter - 1][i] == sub_first + j) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1676 placeholder[counter][i] = sub_first + j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1677 boolean = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1678 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1679 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1680 if (boolean) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1681 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1682 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1683 // 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
|
1684 // 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
|
1685 // 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
|
1686 // 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
|
1687 // 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
|
1688 // examinated |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1689 for (i = 0; i < lines_to_add; ++i) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1690 if (placeholder[counter][i] == -1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1691 // 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
|
1692 // of blank lines |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1693 ++tmp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1694 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1695 if (tmp == sub_lines) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1696 // 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
|
1697 // need, so we stop looking |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1698 fragment_position = i - tmp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1699 tmp = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1700 break; |
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) && (tmp > sub_lines) && (tmp < fragment_length)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1703 // 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
|
1704 // 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
|
1705 // for, so we keep on looking |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1706 fragment_length = tmp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1707 fragment_position = i - tmp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1708 tmp = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1709 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1710 // 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
|
1711 tmp = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1712 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1713 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1714 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1715 if (tmp) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1716 // 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
|
1717 if ((tmp >= sub_lines) && (tmp < fragment_length)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1718 fragment_position = i - tmp; |
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 if (fragment_position == -1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1722 // 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
|
1723 // 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
|
1724 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
|
1725 higher_line = SUB_MAX_TEXT + 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1726 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1727 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1728 for (tmp = 0; tmp < sub_lines; ++tmp) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1729 placeholder[counter][fragment_position + tmp] = sub_first + j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1730 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1731 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1732 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1733 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1734 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
|
1735 if (placeholder[counter][j] != -1) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1736 higher_line = j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1737 else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1738 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1739 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1740 if (higher_line >= SUB_MAX_TEXT) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1741 // 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
|
1742 // subtitles |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1743 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
|
1744 for (j = 0; j <= sub_to_add; ++j) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1745 int ls; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1746 memset(&second[sub_num + j], '\0', sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1747 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
|
1748 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
|
1749 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
|
1750 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
|
1751 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
|
1752 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
|
1753 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1754 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1755 sub_num += sub_to_add + 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1756 sub_first += sub_to_add; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1757 real_block = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1758 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1759 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1760 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1761 // 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
|
1762 // subs. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1763 second = realloc(second, (sub_num + 1) * sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1764 memset(&second[sub_num], '\0', sizeof(subtitle)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1765 second[sub_num].start = local_start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1766 second[sub_num].end = local_end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1767 second[sub_num].alignment = first[sub_first].alignment; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1768 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
|
1769 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
|
1770 if (placeholder[counter][j] != -1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1771 int lines = first[placeholder[counter][j]].lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1772 for (ls = 0; ls < lines; ++ls) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1773 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
|
1774 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1775 j += lines - 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1776 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1777 second[sub_num].text[i++] = strdup(" "); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1778 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1779 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1780 ++sub_num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1781 ++counter; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1782 } while (local_end < global_end); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1783 if (real_block) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1784 for (i = 0; i < counter; ++i) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1785 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
|
1786 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1787 counter = 2 * sub_to_add + 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1788 for (i = 0; i < counter; ++i) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1789 free(placeholder[i]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1790 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1791 free(placeholder); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1792 sub_first += sub_to_add; |
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 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1795 for (j = sub_orig - 1; j >= 0; --j) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1796 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
|
1797 free(first[j].text[i]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1798 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1799 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1800 free(first); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1801 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1802 return_sub = second; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1803 } else { //if(suboverlap_enabled) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1804 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
|
1805 return_sub = first; |
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 if (return_sub == NULL) return NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1808 subt_data = malloc(sizeof(sub_data)); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1809 subt_data->filename = strdup(filename); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1810 subt_data->sub_uses_time = uses_time; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1811 subt_data->sub_num = sub_num; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1812 subt_data->sub_errs = sub_errs; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1813 subt_data->subtitles = return_sub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1814 return subt_data; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1815 } |
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 #if 0 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1818 char * strreplace( char * in,char * what,char * whereof ) |
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 int i; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1821 char * tmp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1822 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1823 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
|
1824 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
|
1825 if ( strlen( what ) > strlen( whereof ) ) tmp[i]=0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1826 return in; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1827 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1828 #endif |
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 |
32691
98ddd06f0e9b
Mark source strings const in some subtitles string processing functions.
cboesch
parents:
32684
diff
changeset
|
1831 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
|
1832 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1833 // skip leading whitespace |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1834 while (*s && isspace(*s)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1835 s++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1836 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1837 for (;;) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1838 // copy word |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1839 while (*s && !isspace(*s)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1840 *d = tolower(*s); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1841 s++; d++; |
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 if (*s == 0) break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1844 // trim excess whitespace |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1845 while (*s && isspace(*s)) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1846 s++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1847 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1848 if (*s == 0) break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1849 *d++ = ' '; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1850 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1851 *d = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1852 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1853 |
32691
98ddd06f0e9b
Mark source strings const in some subtitles string processing functions.
cboesch
parents:
32684
diff
changeset
|
1854 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
|
1855 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1856 char *tmp = strrchr(s,'.'); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1857 if (!tmp) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1858 strcpy(d, s); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1859 return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1860 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1861 strncpy(d, s, tmp-s); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1862 d[tmp-s] = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1863 } |
32706
7a79424a81ac
Rename strcpy_strip_ext to strcpy_strip_ext_lower.
cboesch
parents:
32691
diff
changeset
|
1864 } |
7a79424a81ac
Rename strcpy_strip_ext to strcpy_strip_ext_lower.
cboesch
parents:
32691
diff
changeset
|
1865 |
7a79424a81ac
Rename strcpy_strip_ext to strcpy_strip_ext_lower.
cboesch
parents:
32691
diff
changeset
|
1866 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
|
1867 { |
7a79424a81ac
Rename strcpy_strip_ext to strcpy_strip_ext_lower.
cboesch
parents:
32691
diff
changeset
|
1868 strcpy_strip_ext(d, s); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1869 while (*d) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1870 *d = tolower(*d); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1871 d++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1872 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1873 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1874 |
32691
98ddd06f0e9b
Mark source strings const in some subtitles string processing functions.
cboesch
parents:
32684
diff
changeset
|
1875 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
|
1876 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1877 char *tmp = strrchr(s,'.'); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1878 if (!tmp) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1879 strcpy(d, ""); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1880 return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1881 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1882 strcpy(d, tmp+1); |
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 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1885 |
32691
98ddd06f0e9b
Mark source strings const in some subtitles string processing functions.
cboesch
parents:
32684
diff
changeset
|
1886 static int whiteonly(const char *s) |
32454
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 while (*s) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1889 if (!isspace(*s)) return 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1890 s++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1891 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1892 return 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1893 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1894 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1895 typedef struct subfn |
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 int priority; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1898 char *fname; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1899 } subfn; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1900 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1901 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
|
1902 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1903 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
|
1904 return -1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1905 } 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
|
1906 return 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1907 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1908 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
|
1909 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1910 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1911 |
32684 | 1912 struct sub_list { |
1913 struct subfn *subs; | |
1914 int sid; | |
1915 }; | |
1916 | |
1917 /** | |
1918 * @brief Append all the subtitles in the given path matching fname | |
1919 * | |
1920 * @param path Look for subtitles in this directory | |
1921 * @param fname Subtitle filename (pattern) | |
1922 * @param limit_fuzziness Ignore flag when sub_fuziness == 2 | |
1923 */ | |
1924 static void append_dir_subtitles(struct sub_list *slist, const char *path, | |
1925 const char *fname, int limit_fuzziness) | |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1926 { |
32684 | 1927 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
|
1928 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
|
1929 |
32684 | 1930 int len, found, i; |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1931 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
|
1932 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1933 FILE *f; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1934 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1935 DIR *d; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1936 struct dirent *de; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1937 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1938 len = (strlen(fname) > 256 ? strlen(fname) : 256) |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1939 + (strlen(path) > 256 ? strlen(path) : 256) + 2; |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1940 |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1941 f_fname = strdup(mp_basename(fname)); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1942 f_fname_noext = malloc(len); |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1943 f_fname_trim = malloc(len); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1944 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1945 tmp_fname_noext = malloc(len); |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1946 tmp_fname_trim = malloc(len); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1947 tmp_fname_ext = malloc(len); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1948 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1949 tmpresult = malloc(len); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1950 |
32706
7a79424a81ac
Rename strcpy_strip_ext to strcpy_strip_ext_lower.
cboesch
parents:
32691
diff
changeset
|
1951 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
|
1952 strcpy_trim(f_fname_trim, f_fname_noext); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1953 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1954 tmp_sub_id = NULL; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1955 if (dvdsub_lang && !whiteonly(dvdsub_lang)) { |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1956 tmp_sub_id = malloc(strlen(dvdsub_lang) + 1); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1957 strcpy_trim(tmp_sub_id, dvdsub_lang); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1958 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1959 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1960 // 0 = nothing |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1961 // 1 = any subtitle file |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1962 // 2 = any sub file containing movie name |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1963 // 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
|
1964 d = opendir(path); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1965 if (d) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1966 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
|
1967 while ((de = readdir(d))) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1968 // retrieve various parts of the filename |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1969 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
|
1970 strcpy_get_ext(tmp_fname_ext, de->d_name); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1971 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
|
1972 |
32774
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1973 // 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
|
1974 // 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
|
1975 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
|
1976 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
|
1977 |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1978 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
|
1979 idx = mp_dir_join(path, idxname); |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1980 free(idxname); |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1981 f = fopen(idx, "rt"); |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1982 free(idx); |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1983 if (f) { |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1984 fclose(f); |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1985 continue; |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1986 } |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1987 } |
dfeea3d3b2d0
Do not add .sub to text subtitles when they look like vobsub.
cboesch
parents:
32773
diff
changeset
|
1988 |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1989 // does it end with a subtitle extension? |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1990 found = 0; |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1991 #ifdef CONFIG_ICONV |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1992 #ifdef CONFIG_ENCA |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1993 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
|
1994 #else |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1995 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
|
1996 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1997 #else |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
1998 for (i = 0; sub_exts[i]; i++) { |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
1999 #endif |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2000 if (strcasecmp(sub_exts[i], tmp_fname_ext) == 0) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2001 found = 1; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2002 break; |
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 } |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2005 |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2006 // we have a (likely) subtitle file |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2007 if (found) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2008 int prio = 0; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2009 if (!prio && tmp_sub_id) |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2010 { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2011 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
|
2012 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
|
2013 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
|
2014 // matches the movie name + lang extension |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2015 prio = 5; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2016 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2017 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2018 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
|
2019 // matches the movie name |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2020 prio = 4; |
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 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
|
2023 // contains the movie name |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2024 tmp += strlen(f_fname_trim); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2025 if (tmp_sub_id && strstr(tmp, tmp_sub_id)) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2026 // with sub_id specified prefer localized subtitles |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2027 prio = 3; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2028 } else if ((tmp_sub_id == NULL) && whiteonly(tmp)) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2029 // without sub_id prefer "plain" name |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2030 prio = 3; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2031 } else { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2032 // with no localized subs found, try any else instead |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2033 prio = 2; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2034 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2035 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2036 if (!prio) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2037 // doesn't contain the movie name |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2038 if (!limit_fuzziness && sub_match_fuzziness >= 2) { |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2039 prio = 1; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2040 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2041 } |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2042 |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2043 if (prio) { |
32752 | 2044 char *subpath; |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2045 prio += prio; |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2046 #ifdef CONFIG_ICONV |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2047 if (i < 3){ // prefer UTF-8 coded |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2048 prio++; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2049 } |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2050 #endif |
32752 | 2051 subpath = mp_dir_join(path, de->d_name); |
2052 // fprintf(stderr, "%s priority %d\n", subpath, prio); | |
2053 if ((f = fopen(subpath, "rt"))) { | |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2054 struct subfn *sub = &slist->subs[slist->sid++]; |
32684 | 2055 |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2056 fclose(f); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2057 sub->priority = prio; |
32752 | 2058 sub->fname = subpath; |
2059 } else | |
2060 free(subpath); | |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2061 } |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2062 |
32726
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2063 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2064 if (slist->sid >= MAX_SUBTITLE_FILES) |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2065 break; |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2066 } |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2067 closedir(d); |
08adc582d9cc
Reindent and prettify (just a bit) append_dir_subtitles.
cboesch
parents:
32725
diff
changeset
|
2068 } |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2069 |
32511
b39155e98ac3
Remove some useless NULL pointer checks before invoking free() on the pointer.
diego
parents:
32467
diff
changeset
|
2070 free(tmp_sub_id); |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2071 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2072 free(f_fname); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2073 free(f_fname_noext); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2074 free(f_fname_trim); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2075 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2076 free(tmp_fname_noext); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2077 free(tmp_fname_trim); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2078 free(tmp_fname_ext); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2079 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2080 free(tmpresult); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2081 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2082 |
32642
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2083 /** |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2084 * @brief Load all subtitles matching the subtitle filename |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2085 * |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2086 * @param fname Path to subtitle filename |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2087 * @param fps FPS parameter for the add subtitle function |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2088 * @param add_f Add subtitle function to call for each sub |
32684 | 2089 * @note Subtitles are tracked and scored in various places according to the |
2090 * 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
|
2091 */ |
32771
0b4acbbe9652
100l: fps are not in int but float, fix prototype.
cboesch
parents:
32752
diff
changeset
|
2092 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
|
2093 { |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2094 int i; |
32684 | 2095 char *mp_subdir, *path = NULL; |
2096 struct sub_list slist; | |
2097 | |
2098 // Load subtitles specified by sub option first | |
32642
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2099 if (sub_name) |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2100 for (i = 0; sub_name[i]; i++) |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2101 add_f(sub_name[i], fps, 0); |
32684 | 2102 |
2103 // Stop here if automatic detection disabled | |
2104 if (!sub_auto || !fname) | |
2105 return; | |
2106 | |
2107 slist.sid = 0; | |
2108 slist.subs = calloc(MAX_SUBTITLE_FILES, sizeof(*slist.subs)); | |
2109 if (!slist.subs) | |
2110 return; | |
2111 | |
2112 // Load subtitles from current media directory | |
2113 if (!(path = mp_dirname(fname))) { | |
2114 free(slist.subs); | |
2115 return; | |
32642
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2116 } |
32684 | 2117 append_dir_subtitles(&slist, path, fname, 0); |
2118 free(path); | |
2119 | |
32773 | 2120 // Load subtitles in dirs specified by sub-paths option |
2121 if (sub_paths) { | |
2122 for (i = 0; sub_paths[i]; i++) { | |
2123 path = mp_path_join(fname, sub_paths[i]); | |
2124 if (!path) { | |
2125 free(slist.subs); | |
2126 return; | |
2127 } | |
2128 append_dir_subtitles(&slist, path, fname, 0); | |
2129 free(path); | |
2130 } | |
2131 } | |
2132 | |
32684 | 2133 // Load subtitles in ~/.mplayer/sub limiting sub fuzziness |
2134 mp_subdir = get_path("sub/"); | |
2135 if (mp_subdir) | |
2136 append_dir_subtitles(&slist, mp_subdir, fname, 1); | |
2137 free(mp_subdir); | |
2138 | |
2139 // Sort subs by priority and append them | |
2140 qsort(slist.subs, slist.sid, sizeof(*slist.subs), compare_sub_priority); | |
2141 for (i = 0; i < slist.sid; i++) { | |
2142 struct subfn *sub = &slist.subs[i]; | |
2143 add_f(sub->fname, fps, 1); | |
2144 free(sub->fname); | |
2145 } | |
2146 free(slist.subs); | |
32642
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2147 } |
7b135236a44a
Factorize subtitles loading between mplayer and mencoder.
cboesch
parents:
32511
diff
changeset
|
2148 |
32724
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2149 /** |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2150 * @brief Load VOB subtitle matching the subtitle filename. |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2151 * |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2152 * @param fname Path to subtitle filename. |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2153 * @param ifo Path to .ifo file. |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2154 * @spu SPU decoder instance. |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2155 * @add_f Function called when adding a vobsub. |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2156 */ |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2157 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
|
2158 open_vob_func add_f) |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2159 { |
32773 | 2160 char *name = NULL, *mp_subdir = NULL; |
32724
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2161 |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2162 // Load subtitles specified by vobsub option |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2163 if (vobsub_name) { |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2164 add_f(vobsub_name, ifo, 1, spu); |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2165 return; |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2166 } |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2167 |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2168 // Stop here if automatic detection disabled |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2169 if (!sub_auto || !fname) |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2170 return; |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2171 |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2172 // 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
|
2173 name = malloc(strlen(fname) + 1); |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2174 if (!name) |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2175 return; |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2176 strcpy_strip_ext(name, fname); |
32782 | 2177 if (add_f(name, ifo, 0, spu)) |
2178 goto out; | |
32724
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2179 |
32773 | 2180 // Try looking at the dirs specified by sub-paths option |
2181 if (sub_paths) { | |
2182 int i; | |
2183 | |
2184 for (i = 0; sub_paths[i]; i++) { | |
2185 char *path, *psub; | |
32782 | 2186 int sub_found; |
32773 | 2187 |
2188 path = mp_path_join(fname, sub_paths[i]); | |
2189 if (!path) | |
2190 goto out; | |
2191 | |
2192 psub = mp_dir_join(path, mp_basename(name)); | |
2193 free(path); | |
2194 if (!psub) | |
2195 goto out; | |
2196 | |
32782 | 2197 sub_found = add_f(psub, ifo, 0, spu); |
2198 free(psub); | |
2199 if (sub_found) | |
32773 | 2200 goto out; |
2201 } | |
2202 } | |
2203 | |
32724
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2204 // 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
|
2205 mp_subdir = get_path("sub/"); |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2206 if (mp_subdir) { |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2207 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
|
2208 if (!psub) |
93629a05a380
Handle mp_path_join failure in load_vob_subtitle.
cboesch
parents:
32774
diff
changeset
|
2209 goto out; |
32724
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2210 add_f(psub, ifo, 0, spu); |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2211 free(psub); |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2212 } |
32773 | 2213 |
2214 out: | |
32724
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2215 free(mp_subdir); |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2216 free(name); |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2217 } |
732cd2afae10
Replace hacky vobsub loading with a new clean one.
cboesch
parents:
32706
diff
changeset
|
2218 |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2219 void list_sub_file(sub_data* subd){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2220 int i,j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2221 subtitle *subs = subd->subtitles; |
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 for(j=0; j < subd->sub_num; j++){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2224 subtitle* egysub=&subs[j]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2225 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
|
2226 egysub->lines, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2227 (1==egysub->lines)?' ':'s', |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2228 egysub->start, |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2229 egysub->end); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2230 for (i=0; i<egysub->lines; i++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2231 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
|
2232 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2233 mp_msg(MSGT_SUBREADER,MSGL_INFO,"\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2234 } |
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 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
|
2237 subd->sub_uses_time ? "uses":"doesn't use"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2238 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
|
2239 } |
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 void dump_srt(sub_data* subd, float fps){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2242 int i,j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2243 int h,m,s,ms; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2244 FILE * fd; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2245 subtitle * onesub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2246 unsigned long temp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2247 subtitle *subs = subd->subtitles; |
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 if (!subd->sub_uses_time && sub_fps == 0) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2250 sub_fps = fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2251 fd=fopen("dumpsub.srt","w"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2252 if(!fd) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2253 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2254 perror("dump_srt: fopen"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2255 return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2256 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2257 for(i=0; i < subd->sub_num; i++) |
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 onesub=subs+i; //=&subs[i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2260 fprintf(fd,"%d\n",i+1);//line number |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2261 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2262 temp=onesub->start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2263 if (!subd->sub_uses_time) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2264 temp = temp * 100 / sub_fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2265 temp -= sub_delay * 100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2266 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
|
2267 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
|
2268 s=temp/100; temp%=100; //s =1*100 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2269 ms=temp*10; //ms=1*10 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2270 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
|
2271 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2272 temp=onesub->end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2273 if (!subd->sub_uses_time) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2274 temp = temp * 100 / sub_fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2275 temp -= sub_delay * 100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2276 h=temp/360000;temp%=360000; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2277 m=temp/6000; temp%=6000; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2278 s=temp/100; temp%=100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2279 ms=temp*10; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2280 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
|
2281 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2282 for(j=0;j<onesub->lines;j++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2283 fprintf(fd,"%s\n",onesub->text[j]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2284 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2285 fprintf(fd,"\n"); |
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 fclose(fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2288 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
|
2289 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2290 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2291 void dump_mpsub(sub_data* subd, float fps){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2292 int i,j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2293 FILE *fd; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2294 float a,b; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2295 subtitle *subs = subd->subtitles; |
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 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
|
2298 if (sub_fps==0) sub_fps=fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2299 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2300 fd=fopen ("dump.mpsub", "w"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2301 if (!fd) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2302 perror ("dump_mpsub: fopen"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2303 return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2304 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2305 |
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 (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
|
2308 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
|
2309 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2310 for(j=0; j < subd->sub_num; j++){ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2311 subtitle* egysub=&subs[j]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2312 if (subd->sub_uses_time) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2313 a=((egysub->start-mpsub_position)/100.0); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2314 b=((egysub->end-egysub->start)/100.0); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2315 if ( (float)((int)a) == a) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2316 fprintf (fd, "%.0f",a); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2317 else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2318 fprintf (fd, "%.2f",a); |
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 if ( (float)((int)b) == b) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2321 fprintf (fd, " %.0f\n",b); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2322 else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2323 fprintf (fd, " %.2f\n",b); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2324 } else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2325 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
|
2326 (long)(((egysub->end)-(egysub->start))*(fps/sub_fps))); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2327 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2328 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2329 mpsub_position = egysub->end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2330 for (i=0; i<egysub->lines; i++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2331 fprintf (fd, "%s\n",egysub->text[i]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2332 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2333 fprintf (fd, "\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2334 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2335 fclose (fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2336 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
|
2337 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2338 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2339 void dump_microdvd(sub_data* subd, float fps) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2340 int i, delay; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2341 FILE *fd; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2342 subtitle *subs = subd->subtitles; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2343 if (sub_fps == 0) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2344 sub_fps = fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2345 fd = fopen("dumpsub.sub", "w"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2346 if (!fd) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2347 perror("dumpsub.sub: fopen"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2348 return; |
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 delay = sub_delay * sub_fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2351 for (i = 0; i < subd->sub_num; ++i) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2352 int j, start, end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2353 start = subs[i].start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2354 end = subs[i].end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2355 if (subd->sub_uses_time) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2356 start = start * sub_fps / 100 ; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2357 end = end * sub_fps / 100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2358 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2359 else { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2360 start = start * sub_fps / fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2361 end = end * sub_fps / fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2362 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2363 start -= delay; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2364 end -= delay; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2365 fprintf(fd, "{%d}{%d}", start, end); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2366 for (j = 0; j < subs[i].lines; ++j) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2367 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
|
2368 fprintf(fd, "\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2369 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2370 fclose(fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2371 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
|
2372 } |
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 void dump_jacosub(sub_data* subd, float fps) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2375 int i,j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2376 int h,m,s,cs; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2377 FILE * fd; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2378 subtitle * onesub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2379 unsigned long temp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2380 subtitle *subs = subd->subtitles; |
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 if (!subd->sub_uses_time && sub_fps == 0) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2383 sub_fps = fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2384 fd=fopen("dumpsub.jss","w"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2385 if(!fd) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2386 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2387 perror("dump_jacosub: fopen"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2388 return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2389 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2390 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
|
2391 for(i=0; i < subd->sub_num; i++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2392 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2393 onesub=subs+i; //=&subs[i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2394 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2395 temp=onesub->start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2396 if (!subd->sub_uses_time) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2397 temp = temp * 100 / sub_fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2398 temp -= sub_delay * 100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2399 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
|
2400 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
|
2401 s=temp/100; temp%=100; //s =1*100 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2402 cs=temp; //cs=1*10 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2403 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
|
2404 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2405 temp=onesub->end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2406 if (!subd->sub_uses_time) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2407 temp = temp * 100 / sub_fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2408 temp -= sub_delay * 100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2409 h=temp/360000;temp%=360000; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2410 m=temp/6000; temp%=6000; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2411 s=temp/100; temp%=100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2412 cs=temp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2413 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
|
2414 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2415 for(j=0;j<onesub->lines;j++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2416 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
|
2417 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2418 fprintf(fd,"\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2419 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2420 fclose(fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2421 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
|
2422 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2423 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2424 void dump_sami(sub_data* subd, float fps) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2425 int i,j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2426 FILE * fd; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2427 subtitle * onesub; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2428 unsigned long temp; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2429 subtitle *subs = subd->subtitles; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2430 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2431 if (!subd->sub_uses_time && sub_fps == 0) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2432 sub_fps = fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2433 fd=fopen("dumpsub.smi","w"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2434 if(!fd) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2435 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2436 perror("dump_jacosub: fopen"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2437 return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2438 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2439 fprintf(fd, "<SAMI>\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2440 "<HEAD>\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2441 " <STYLE TYPE=\"Text/css\">\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2442 " <!--\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2443 " 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
|
2444 " .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
|
2445 " -->\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2446 " </STYLE>\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2447 "</HEAD>\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2448 "<BODY>\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2449 for(i=0; i < subd->sub_num; i++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2450 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2451 onesub=subs+i; //=&subs[i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2452 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2453 temp=onesub->start; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2454 if (!subd->sub_uses_time) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2455 temp = temp * 100 / sub_fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2456 temp -= sub_delay * 100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2457 fprintf(fd,"\t<SYNC Start=%lu>\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2458 "\t <P>", temp * 10); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2459 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2460 for(j=0;j<onesub->lines;j++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2461 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
|
2462 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2463 fprintf(fd,"\n"); |
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 temp=onesub->end; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2466 if (!subd->sub_uses_time) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2467 temp = temp * 100 / sub_fps; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2468 temp -= sub_delay * 100; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2469 fprintf(fd,"\t<SYNC Start=%lu>\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2470 "\t <P> \n", temp * 10); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2471 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2472 fprintf(fd, "</BODY>\n" |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2473 "</SAMI>\n"); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2474 fclose(fd); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2475 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
|
2476 } |
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 void sub_free( sub_data * subd ) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2479 { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2480 int i, j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2481 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2482 if ( !subd ) return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2483 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2484 for (i = 0; i < subd->sub_num; i++) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2485 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
|
2486 free( subd->subtitles[i].text[j] ); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2487 free( subd->subtitles ); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2488 free( subd->filename ); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2489 free( subd ); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2490 } |
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 #define MAX_SUBLINE 512 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2493 /** |
32646 | 2494 * @brief parse text and append it to subtitle in sub |
2495 * @param sub subtitle struct to add text to | |
2496 * @param txt text to parse | |
2497 * @param len length of text in txt | |
2498 * @param endpts pts at which this subtitle text should be removed again | |
2499 * @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
|
2500 * |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2501 * <> 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
|
2502 * 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
|
2503 * newlines are ignored. |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2504 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2505 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
|
2506 int comment = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2507 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
|
2508 int i, pos; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2509 char *buf; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2510 #ifdef CONFIG_FRIBIDI |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2511 int orig_lines = sub->lines; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2512 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2513 if (sub->lines >= SUB_MAX_TEXT) return; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2514 pos = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2515 buf = malloc(MAX_SUBLINE + 1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2516 sub->text[sub->lines] = buf; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2517 sub->endpts[sub->lines] = endpts; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2518 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2519 if (!strip_markup) { |
33852
3b2c18ccfda2
Change code so that it compiles more reliably without libass
reimar
parents:
33790
diff
changeset
|
2520 #ifdef CONFIG_ASS |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2521 subassconvert_subrip(txt, buf, MAX_SUBLINE + 1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2522 sub->text[sub->lines] = buf; |
33852
3b2c18ccfda2
Change code so that it compiles more reliably without libass
reimar
parents:
33790
diff
changeset
|
2523 #else |
3b2c18ccfda2
Change code so that it compiles more reliably without libass
reimar
parents:
33790
diff
changeset
|
2524 mp_msg(MSGT_SUBREADER, MSGL_ERR, "strip_markup must be set when ASS support is disabled!\n"); |
3b2c18ccfda2
Change code so that it compiles more reliably without libass
reimar
parents:
33790
diff
changeset
|
2525 strip_markup = 1; |
3b2c18ccfda2
Change code so that it compiles more reliably without libass
reimar
parents:
33790
diff
changeset
|
2526 #endif |
3b2c18ccfda2
Change code so that it compiles more reliably without libass
reimar
parents:
33790
diff
changeset
|
2527 } |
3b2c18ccfda2
Change code so that it compiles more reliably without libass
reimar
parents:
33790
diff
changeset
|
2528 if (strip_markup) { |
32454
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2529 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
|
2530 char c = txt[i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2531 if (c == '<') comment |= 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2532 if (c == '{') comment |= 2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2533 if (comment) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2534 if (c == '}') comment &= ~2; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2535 if (c == '>') comment &= ~1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2536 continue; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2537 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2538 if (pos == MAX_SUBLINE - 1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2539 i--; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2540 c = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2541 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2542 if (c == '\\' && i + 1 < len) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2543 c = txt[++i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2544 if (c == 'n' || c == 'N') c = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2545 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2546 if (c == '\n' || c == '\r') c = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2547 if (c) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2548 double_newline = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2549 buf[pos++] = c; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2550 } else if (!double_newline) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2551 if (sub->lines >= SUB_MAX_TEXT - 1) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2552 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
|
2553 break; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2554 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2555 double_newline = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2556 buf[pos] = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2557 sub->lines++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2558 pos = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2559 buf = malloc(MAX_SUBLINE + 1); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2560 sub->text[sub->lines] = buf; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2561 sub->endpts[sub->lines] = endpts; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2562 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2563 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2564 buf[pos] = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2565 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2566 if (sub->lines < SUB_MAX_TEXT && |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2567 strlen(sub->text[sub->lines])) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2568 sub->lines++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2569 #ifdef CONFIG_FRIBIDI |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2570 sub = sub_fribidi(sub, sub_utf8, orig_lines); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2571 #endif |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2572 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2573 |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2574 #define MP_NOPTS_VALUE (-1LL<<63) |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2575 /** |
32646 | 2576 * @brief remove outdated subtitle lines. |
2577 * @param sub subtitle struct to modify | |
2578 * @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
|
2579 * Use MP_NOPTS_VALUE to remove all lines |
32646 | 2580 * @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
|
2581 */ |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2582 int sub_clear_text(subtitle *sub, double pts) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2583 int i = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2584 int changed = 0; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2585 while (i < sub->lines) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2586 double endpts = sub->endpts[i]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2587 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
|
2588 int j; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2589 free(sub->text[i]); |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2590 for (j = i + 1; j < sub->lines; j++) { |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2591 sub->text[j - 1] = sub->text[j]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2592 sub->endpts[j - 1] = sub->endpts[j]; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2593 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2594 sub->lines--; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2595 changed = 1; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2596 } else |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2597 i++; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2598 } |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2599 return changed; |
69d3be4d52a2
Create a new directory, "sub", for subtitles and OSD related code.
cigaes
parents:
diff
changeset
|
2600 } |