1 /*
2 * R3D REDCODE demuxer
3 * Copyright (c) 2008 Baptiste Coudurier <baptiste dot coudurier at gmail dot com>
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 //#define DEBUG
23
29
35
41
43 {
47 return -1;
49 av_dlog(s,
"atom %u %.4s offset %#"PRIx64
"\n",
52 }
53
55 {
57 char filename[258];
58 int tmp;
61
62 if (!st)
66
69 av_dlog(s,
"version %d.%d\n", tmp, tmp2);
70
72 av_dlog(s,
"unknown1 %d\n", tmp);
73
76
78 av_dlog(s,
"filenum %d\n", tmp);
79
81
84
86 av_dlog(s,
"unknown2 %d\n", tmp);
87
90 if (framerate.
num && framerate.
den) {
91 #if FF_API_R_FRAME_RATE
92 st->r_frame_rate =
93 #endif
95 }
96
98 av_dlog(s,
"audio channels %d\n", tmp);
99 if (tmp > 0) {
101 if (!ast)
107 }
108
110 filename[sizeof(filename)-1] = 0;
112
113 av_dlog(s,
"filename %s\n", filename);
116 av_dlog(s,
"frame rate %d/%d\n",
117 framerate.
num, framerate.
den);
118
119 return 0;
120 }
121
123 {
126 int i;
127
132
137 break;
138 }
140 }
141
147
148 return 0;
149 }
150
152 {
155
160
162 av_dlog(s,
"num video chunks %d\n", tmp);
163
165 av_dlog(s,
"num audio chunks %d\n", tmp);
166
168 }
169
171 {
174 int ret;
175
178 return -1;
179 }
180 if (atom.
tag ==
MKTAG(
'R',
'E',
'D',
'1')) {
183 return ret;
184 }
185 } else {
187 return -1;
188 }
189
193 return 0;
194 // find REOB/REOF/REOS to load index
198
199 if (atom.
tag !=
MKTAG(
'R',
'E',
'O',
'B') &&
200 atom.
tag !=
MKTAG(
'R',
'E',
'O',
'F') &&
203
205
210 if (atom.
tag ==
MKTAG(
'R',
'D',
'V',
'O')) {
213 }
214 }
215
218 return 0;
219 }
220
222 {
224 int tmp;
227 unsigned dts;
228 int ret;
229
231
233 av_dlog(s,
"frame num %d\n", tmp);
234
237 av_dlog(s,
"version %d.%d\n", tmp, tmp2);
238
240 av_dlog(s,
"unknown %d\n", tmp);
241
242 if (tmp > 4) {
244 av_dlog(s,
"unknown %d\n", tmp);
245
247 av_dlog(s,
"unknown %d\n", tmp);
248
252 av_dlog(s,
"height %d\n", tmp);
253
255 av_dlog(s,
"metadata len %d\n", tmp);
256 }
258 if (tmp < 0)
259 return -1;
261 if (ret < 0) {
263 return -1;
264 }
265
272
273 return 0;
274 }
275
277 {
282 unsigned dts;
283 int ret;
284
286
291 }
292
294
296 av_dlog(s,
"packet num %d\n", tmp);
297
299 av_dlog(s,
"unknown %d\n", tmp);
300
303 av_dlog(s,
"version %d.%d\n", tmp, tmp2);
304
306 av_dlog(s,
"unknown %d\n", tmp);
307
309 if (size < 0)
310 return -1;
312 if (ret < 0) {
314 return ret;
315 }
316
321 av_dlog(s,
"pkt dts %"PRId64
" duration %d samples %d sample rate %d\n",
323
324 return 0;
325 }
326
328 {
330 int err = 0;
331
332 while (!err) {
334 err = -1;
335 break;
336 }
338 case MKTAG(
'R',
'E',
'D',
'V'):
340 goto skip;
342 return 0;
343 break;
344 case MKTAG(
'R',
'E',
'D',
'A'):
346 return -1;
348 goto skip;
350 return 0;
351 break;
352 default:
353 skip:
355 }
356 }
357 return err;
358 }
359
361 {
364 return 0;
365 }
366
368 {
371 int frame_num;
372
374 return -1;
375
378 av_dlog(s,
"seek frame num %d timestamp %"PRId64
"\n",
379 frame_num, sample_time);
380
381 if (frame_num < r3d->video_offsets_count) {
383 return -1;
384 } else {
386 return -1;
387 }
388
389 return 0;
390 }
391
393 {
395
397
398 return 0;
399 }
400
410 };