| 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 |