1 /*
2 * Tiertex Limited SEQ File Demuxer
3 * Copyright (c) 2006 Gregory Montoir (cyx@users.sourceforge.net)
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 /**
23 * @file
24 * Tiertex Limited SEQ file demuxer
25 */
26
30
31 #define SEQ_FRAME_SIZE 6144
32 #define SEQ_FRAME_W 256
33 #define SEQ_FRAME_H 128
34 #define SEQ_NUM_FRAME_BUFFERS 30
35 #define SEQ_AUDIO_BUFFER_SIZE 882
36 #define SEQ_SAMPLE_RATE 22050
37 #define SEQ_FRAME_RATE 25
38
39
45
61
62
64 {
65 int i;
66
68 return 0;
69
70 /* there's no real header in a .seq file, the only thing they have in common */
71 /* is the first 256 bytes of the file which are always filled with 0 */
72 for (i = 0; i < 256; i++)
74 return 0;
75
76 if(p->
buf[256]==0 && p->
buf[257]==0)
77 return 0;
78
79 /* only one fourth of the score since the previous check is too naive */
81 }
82
84 {
85 int i, sz;
87
89
92 if (sz == 0)
93 break;
94 else {
99 if (!seq_buffer->
data)
101 }
102 }
104 return 0;
105 }
106
108 {
110
113
117
121
123 return 0;
124 }
125
127 {
130 int i, e, err;
131
134
135 /* sound data */
139 } else {
141 }
142
143 /* palette data */
147 } else {
149 }
150
151 /* video data */
152 for (i = 0; i < 4; i++)
154
155 for (i = 0; i < 4; i++)
157
158 for (i = 0; i < 3; i++) {
159 if (offset_table[i]) {
160 for (e = i + 1; e < 3 && offset_table[e] == 0; e++);
162 offset_table[i],
163 offset_table[e] - offset_table[i]);
164 if (err)
165 return err;
166 }
167 }
168
169 if (buffer_num[0] != 255) {
172
177 } else {
180 }
181
182 return 0;
183 }
184
186 {
187 int i, rc;
191
192 /* init internal buffers */
194 if (rc)
195 return rc;
196
198
199 /* preload (no audio data, just buffer operations related data) */
200 for (i = 1; i <= 100; i++) {
202 if (rc)
203 return rc;
204 }
205
207
209
210 /* initialize the video decoder stream */
212 if (!st)
214
222
223 /* initialize the audio decoder stream */
225 if (!st)
227
240
241 return 0;
242 }
243
245 {
246 int rc;
249
252 if (rc)
253 return rc;
254
255 /* video packet */
259
266 }
272 }
275
276 /* sound buffer will be processed on next read_packet() call */
278 return 0;
279 }
280 }
281
282 /* audio packet */
285
288 if (rc < 0)
289 return rc;
290
293
295 return 0;
296 }
297
299 {
300 int i;
302
305
306 return 0;
307 }
308
310 .
name =
"tiertexseq",
317 };