# HG changeset patch # User rbultje # Date 1236602792 0 # Node ID 0ff86cd08b4a9b5f463c3603877448c025866de5 # Parent 83eb34995cfde4ea4e8b17dce978f47985a12b76 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. diff -r 83eb34995cfd -r 0ff86cd08b4a rmdec.c --- a/rmdec.c Mon Mar 09 12:42:53 2009 +0000 +++ b/rmdec.c Mon Mar 09 12:46:32 2009 +0000 @@ -691,9 +691,8 @@ 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 @@ 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; + RMStream *ast = s->streams[0]->priv_data; + int res, y, h = ast->audio_framesize ? ast->sub_packet_h : 1; - 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; + 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)