OLD | NEW |
1 /* | 1 /* |
2 * R3D REDCODE demuxer | 2 * R3D REDCODE demuxer |
3 * Copyright (c) 2008 Baptiste Coudurier <baptiste dot coudurier at gmail dot co
m> | 3 * Copyright (c) 2008 Baptiste Coudurier <baptiste dot coudurier at gmail dot co
m> |
4 * | 4 * |
5 * This file is part of FFmpeg. | 5 * This file is part of FFmpeg. |
6 * | 6 * |
7 * FFmpeg is free software; you can redistribute it and/or | 7 * FFmpeg is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Lesser General Public | 8 * modify it under the terms of the GNU Lesser General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2.1 of the License, or (at your option) any later version. | 10 * version 2.1 of the License, or (at your option) any later version. |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 url_fseek(s->pb, s->data_offset, SEEK_SET); | 205 url_fseek(s->pb, s->data_offset, SEEK_SET); |
206 return 0; | 206 return 0; |
207 } | 207 } |
208 | 208 |
209 static int r3d_read_redv(AVFormatContext *s, AVPacket *pkt, Atom *atom) | 209 static int r3d_read_redv(AVFormatContext *s, AVPacket *pkt, Atom *atom) |
210 { | 210 { |
211 AVStream *st = s->streams[0]; | 211 AVStream *st = s->streams[0]; |
212 int tmp, tmp2; | 212 int tmp, tmp2; |
213 uint64_t pos = url_ftell(s->pb); | 213 uint64_t pos = url_ftell(s->pb); |
214 unsigned dts; | 214 unsigned dts; |
| 215 int ret; |
215 | 216 |
216 dts = get_be32(s->pb); | 217 dts = get_be32(s->pb); |
217 | 218 |
218 tmp = get_be32(s->pb); | 219 tmp = get_be32(s->pb); |
219 dprintf(s, "frame num %d\n", tmp); | 220 dprintf(s, "frame num %d\n", tmp); |
220 | 221 |
221 tmp = get_byte(s->pb); // major version | 222 tmp = get_byte(s->pb); // major version |
222 tmp2 = get_byte(s->pb); // minor version | 223 tmp2 = get_byte(s->pb); // minor version |
223 dprintf(s, "version %d.%d\n", tmp, tmp2); | 224 dprintf(s, "version %d.%d\n", tmp, tmp2); |
224 | 225 |
(...skipping 11 matching lines...) Expand all Loading... |
236 dprintf(s, "width %d\n", tmp); | 237 dprintf(s, "width %d\n", tmp); |
237 tmp = get_be32(s->pb); | 238 tmp = get_be32(s->pb); |
238 dprintf(s, "height %d\n", tmp); | 239 dprintf(s, "height %d\n", tmp); |
239 | 240 |
240 tmp = get_be32(s->pb); | 241 tmp = get_be32(s->pb); |
241 dprintf(s, "metadata len %d\n", tmp); | 242 dprintf(s, "metadata len %d\n", tmp); |
242 } | 243 } |
243 tmp = atom->size - 8 - (url_ftell(s->pb) - pos); | 244 tmp = atom->size - 8 - (url_ftell(s->pb) - pos); |
244 if (tmp < 0) | 245 if (tmp < 0) |
245 return -1; | 246 return -1; |
246 | 247 ret = av_get_packet(s->pb, pkt, tmp); |
247 if (av_get_packet(s->pb, pkt, tmp) != tmp) { | 248 if (ret < 0) { |
248 av_log(s, AV_LOG_ERROR, "error reading video packet\n"); | 249 av_log(s, AV_LOG_ERROR, "error reading video packet\n"); |
249 return -1; | 250 return -1; |
250 } | 251 } |
251 | 252 |
252 pkt->stream_index = 0; | 253 pkt->stream_index = 0; |
253 pkt->dts = dts; | 254 pkt->dts = dts; |
254 if (st->codec->time_base.den) | 255 if (st->codec->time_base.den) |
255 pkt->duration = (uint64_t)st->time_base.den* | 256 pkt->duration = (uint64_t)st->time_base.den* |
256 st->codec->time_base.num/st->codec->time_base.den; | 257 st->codec->time_base.num/st->codec->time_base.den; |
257 dprintf(s, "pkt dts %lld duration %d\n", pkt->dts, pkt->duration); | 258 dprintf(s, "pkt dts %lld duration %d\n", pkt->dts, pkt->duration); |
258 | 259 |
259 return 0; | 260 return 0; |
260 } | 261 } |
261 | 262 |
262 static int r3d_read_reda(AVFormatContext *s, AVPacket *pkt, Atom *atom) | 263 static int r3d_read_reda(AVFormatContext *s, AVPacket *pkt, Atom *atom) |
263 { | 264 { |
264 AVStream *st = s->streams[1]; | 265 AVStream *st = s->streams[1]; |
265 int tmp, tmp2, samples, size; | 266 int tmp, tmp2, samples, size; |
266 uint64_t pos = url_ftell(s->pb); | 267 uint64_t pos = url_ftell(s->pb); |
267 unsigned dts; | 268 unsigned dts; |
| 269 int ret; |
268 | 270 |
269 dts = get_be32(s->pb); | 271 dts = get_be32(s->pb); |
270 | 272 |
271 st->codec->sample_rate = get_be32(s->pb); | 273 st->codec->sample_rate = get_be32(s->pb); |
272 | 274 |
273 samples = get_be32(s->pb); | 275 samples = get_be32(s->pb); |
274 | 276 |
275 tmp = get_be32(s->pb); | 277 tmp = get_be32(s->pb); |
276 dprintf(s, "packet num %d\n", tmp); | 278 dprintf(s, "packet num %d\n", tmp); |
277 | 279 |
278 tmp = get_be16(s->pb); // unkown | 280 tmp = get_be16(s->pb); // unkown |
279 dprintf(s, "unknown %d\n", tmp); | 281 dprintf(s, "unknown %d\n", tmp); |
280 | 282 |
281 tmp = get_byte(s->pb); // major version | 283 tmp = get_byte(s->pb); // major version |
282 tmp2 = get_byte(s->pb); // minor version | 284 tmp2 = get_byte(s->pb); // minor version |
283 dprintf(s, "version %d.%d\n", tmp, tmp2); | 285 dprintf(s, "version %d.%d\n", tmp, tmp2); |
284 | 286 |
285 tmp = get_be32(s->pb); // unknown | 287 tmp = get_be32(s->pb); // unknown |
286 dprintf(s, "unknown %d\n", tmp); | 288 dprintf(s, "unknown %d\n", tmp); |
287 | 289 |
288 size = atom->size - 8 - (url_ftell(s->pb) - pos); | 290 size = atom->size - 8 - (url_ftell(s->pb) - pos); |
289 if (size < 0) | 291 if (size < 0) |
290 return -1; | 292 return -1; |
291 if (av_get_packet(s->pb, pkt, size) != size) { | 293 ret = av_get_packet(s->pb, pkt, size); |
292 av_log(s, AV_LOG_ERROR, "error reading video packet\n"); | 294 if (ret < 0) { |
293 return -1; | 295 av_log(s, AV_LOG_ERROR, "error reading audio packet\n"); |
| 296 return ret; |
294 } | 297 } |
295 | 298 |
296 pkt->stream_index = 1; | 299 pkt->stream_index = 1; |
297 pkt->dts = dts; | 300 pkt->dts = dts; |
298 pkt->duration = av_rescale(samples, st->time_base.den, st->codec->sample_rat
e); | 301 pkt->duration = av_rescale(samples, st->time_base.den, st->codec->sample_rat
e); |
299 dprintf(s, "pkt dts %lld duration %d samples %d sample rate %d\n", | 302 dprintf(s, "pkt dts %lld duration %d samples %d sample rate %d\n", |
300 pkt->dts, pkt->duration, samples, st->codec->sample_rate); | 303 pkt->dts, pkt->duration, samples, st->codec->sample_rate); |
301 | 304 |
302 return 0; | 305 return 0; |
303 } | 306 } |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 AVInputFormat r3d_demuxer = { | 380 AVInputFormat r3d_demuxer = { |
378 "r3d", | 381 "r3d", |
379 NULL_IF_CONFIG_SMALL("REDCODE R3D format"), | 382 NULL_IF_CONFIG_SMALL("REDCODE R3D format"), |
380 sizeof(R3DContext), | 383 sizeof(R3DContext), |
381 r3d_probe, | 384 r3d_probe, |
382 r3d_read_header, | 385 r3d_read_header, |
383 r3d_read_packet, | 386 r3d_read_packet, |
384 r3d_close, | 387 r3d_close, |
385 r3d_seek, | 388 r3d_seek, |
386 }; | 389 }; |
OLD | NEW |