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
27
33
39
41 {
45 return -1;
47 av_dlog(s,
"atom %u %.4s offset %#"PRIx64
"\n",
50 }
51
53 {
55 char filename[258];
56 int tmp;
59
60 if (!st)
64
67 av_dlog(s,
"version %d.%d\n", tmp, tmp2);
68
70 av_dlog(s,
"unknown1 %d\n", tmp);
71
74
76 av_dlog(s,
"filenum %d\n", tmp);
77
79
82
84 av_dlog(s,
"unknown2 %d\n", tmp);
85
88 if (framerate.
num > 0 && framerate.
den > 0) {
89 #if FF_API_R_FRAME_RATE
91 #endif
93 }
94
96 av_dlog(s,
"audio channels %d\n", tmp);
97 if (tmp > 0) {
99 if (!ast)
105 }
106
108 filename[sizeof(filename)-1] = 0;
110
111 av_dlog(s,
"filename %s\n", filename);
114 av_dlog(s,
"frame rate %d/%d\n",
115 framerate.
num, framerate.
den);
116
117 return 0;
118 }
119
121 {
124 int i;
125
130
135 break;
136 }
138 }
139
145
146 return 0;
147 }
148
150 {
153
158
160 av_dlog(s,
"num video chunks %d\n", tmp);
161
163 av_dlog(s,
"num audio chunks %d\n", tmp);
164
166 }
167
169 {
173
176 return -1;
177 }
178 if (atom.
tag ==
MKTAG(
'R',
'E',
'D',
'1')) {
182 }
183 } else {
185 return -1;
186 }
187
191 return 0;
192 // find REOB/REOF/REOS to load index
196
197 if (atom.
tag !=
MKTAG(
'R',
'E',
'O',
'B') &&
198 atom.
tag !=
MKTAG(
'R',
'E',
'O',
'F') &&
201
203
208 if (atom.
tag ==
MKTAG(
'R',
'D',
'V',
'O')) {
211 }
212 }
213
216 return 0;
217 }
218
220 {
222 int tmp;
225 unsigned dts;
227
229
231 av_dlog(s,
"frame num %d\n", tmp);
232
235 av_dlog(s,
"version %d.%d\n", tmp, tmp2);
236
238 av_dlog(s,
"unknown %d\n", tmp);
239
240 if (tmp > 4) {
242 av_dlog(s,
"unknown %d\n", tmp);
243
245 av_dlog(s,
"unknown %d\n", tmp);
246
250 av_dlog(s,
"height %d\n", tmp);
251
253 av_dlog(s,
"metadata len %d\n", tmp);
254 }
256 if (tmp < 0)
257 return -1;
259 if (ret < 0) {
261 return -1;
262 }
263
270
271 return 0;
272 }
273
275 {
280 unsigned dts;
282
284
289 }
290
292
294 av_dlog(s,
"packet num %d\n", tmp);
295
297 av_dlog(s,
"unknown %d\n", tmp);
298
301 av_dlog(s,
"version %d.%d\n", tmp, tmp2);
302
304 av_dlog(s,
"unknown %d\n", tmp);
305
307 if (size < 0)
308 return -1;
310 if (ret < 0) {
313 }
314
319 av_dlog(s,
"pkt dts %"PRId64
" duration %d samples %d sample rate %d\n",
321
322 return 0;
323 }
324
326 {
328 int err = 0;
329
330 while (!err) {
332 err = -1;
333 break;
334 }
336 case MKTAG(
'R',
'E',
'D',
'V'):
338 goto skip;
340 return 0;
341 break;
342 case MKTAG(
'R',
'E',
'D',
'A'):
344 return -1;
346 goto skip;
348 return 0;
349 break;
350 default:
351 skip:
353 }
354 }
355 return err;
356 }
357
359 {
362 return 0;
363 }
364
366 {
369 int frame_num;
370
372 return -1;
373
376 av_dlog(s,
"seek frame num %d timestamp %"PRId64
"\n",
377 frame_num, sample_time);
378
379 if (frame_num < r3d->video_offsets_count) {
381 return -1;
382 } else {
384 return -1;
385 }
386
387 return 0;
388 }
389
391 {
393
395
396 return 0;
397 }
398
408 };