Mercurial > libavformat.hg
changeset 4691:eb3f12a921ab libavformat
Revert to r17908.
author | rbultje |
---|---|
date | Mon, 09 Mar 2009 22:02:06 +0000 |
parents | 2249417477c5 |
children | 71f1392ab8d4 |
files | rmdec.c |
diffstat | 1 files changed, 31 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/rmdec.c Mon Mar 09 21:53:00 2009 +0000 +++ b/rmdec.c Mon Mar 09 22:02:06 2009 +0000 @@ -468,7 +468,7 @@ skip: /* skip packet if unknown number */ url_fskip(pb, len); - rm->remaining_len = 0; + rm->remaining_len -= len; continue; } *stream_index= i; @@ -691,8 +691,9 @@ static int rm_read_packet(AVFormatContext *s, AVPacket *pkt) { RMDemuxContext *rm = s->priv_data; + ByteIOContext *pb = s->pb; AVStream *st; - int i, len, seq = 1; + int i, len; int64_t timestamp, pos; int flags; @@ -701,19 +702,37 @@ 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 = s->streams[0]->priv_data; - int res, y, h = ast->audio_framesize ? ast->sub_packet_h : 1; + RMStream *ast; + + st = s->streams[0]; + ast = st->priv_data; + if (st->codec->codec_id == CODEC_ID_RA_288) { + int x, y; - 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); + 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; } - if (res < 0) - return res; + rm_ac3_swap_bytes(st, pkt); } else { + int seq=1; resync: len=sync(s, ×tamp, &flags, &i, &pos); if(len<0)