diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2009-03-09 12:46:32 +0000 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2009-03-09 12:46:32 +0000 |
commit | 21b3752932330202e1bfeea5de7e237280a0e7c3 (patch) | |
tree | 9ea393da34086720d9ab8649ee0974b5ccbdfef5 | |
parent | dc3685e12999f106dd8e576e5b7d5543d4f70fa1 (diff) | |
download | ffmpeg-21b3752932330202e1bfeea5de7e237280a0e7c3.tar.gz |
Replace separate packet parsing for "old_format" .ra files by a call to
ff_rm_parse_packet(). See "[PATCH] Make RM demuxer behave better with -an
option" thread, which sort-of turned into an aggregate of unrelated rmdec.c
cleanups.
Originally committed as revision 17909 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavformat/rmdec.c | 43 |
1 files changed, 12 insertions, 31 deletions
diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c index 3bd0f0dd9a..39e91a5a1c 100644 --- a/libavformat/rmdec.c +++ b/libavformat/rmdec.c @@ -691,9 +691,8 @@ ff_rm_retrieve_cache (AVFormatContext *s, ByteIOContext *pb, static int rm_read_packet(AVFormatContext *s, AVPacket *pkt) { RMDemuxContext *rm = s->priv_data; - ByteIOContext *pb = s->pb; AVStream *st; - int i, len; + int i, len, seq = 1; int64_t timestamp, pos; int flags; @@ -702,37 +701,19 @@ static int rm_read_packet(AVFormatContext *s, AVPacket *pkt) st = s->streams[rm->audio_stream_num]; ff_rm_retrieve_cache(s, s->pb, st, st->priv_data, pkt); } else if (rm->old_format) { - RMStream *ast; - - st = s->streams[0]; - ast = st->priv_data; - if (st->codec->codec_id == CODEC_ID_RA_288) { - int x, y; - - for (y = 0; y < ast->sub_packet_h; y++) - for (x = 0; x < ast->sub_packet_h/2; x++) - if (get_buffer(pb, ast->pkt.data+x*2*ast->audio_framesize+y*ast->coded_framesize, ast->coded_framesize) <= 0) - return AVERROR(EIO); - rm->audio_stream_num = 0; - rm->audio_pkt_cnt = ast->sub_packet_h * ast->audio_framesize / st->codec->block_align - 1; - // Release first audio packet - av_new_packet(pkt, st->codec->block_align); - memcpy(pkt->data, ast->pkt.data, st->codec->block_align); //FIXME avoid this - pkt->flags |= PKT_FLAG_KEY; // Mark first packet as keyframe - pkt->stream_index = 0; - } else { - /* just read raw bytes */ - len = RAW_PACKET_SIZE; - len= av_get_packet(pb, pkt, len); - pkt->stream_index = 0; - if (len <= 0) { - return AVERROR(EIO); - } - pkt->size = len; + RMStream *ast = s->streams[0]->priv_data; + int res, y, h = ast->audio_framesize ? ast->sub_packet_h : 1; + + timestamp = AV_NOPTS_VALUE; + len = ast->audio_framesize ? ast->coded_framesize * h / 2 : RAW_PACKET_SIZE; + for (y = 0; y < h; y++) { + flags = !y ? 2 : 0; + res = ff_rm_parse_packet(s, s->pb, s->streams[0], ast, len, pkt, + &seq, &flags, ×tamp); } - rm_ac3_swap_bytes(st, pkt); + if (res < 0) + return res; } else { - int seq=1; resync: len=sync(s, ×tamp, &flags, &i, &pos); if(len<0) |