Mercurial > libavformat.hg
changeset 2724:1f752c3afdc8 libavformat
Isolate caching of audio frames in its own function.
Patch by Ronald S. Bultje: rsbultje gmail com
Original thread: Re: [FFmpeg-devel] [PATCH 3/6] rmdec.c: ff_rm_retrieve_cache()
Date: 11/05/2007 09:25 PM
author | benoit |
---|---|
date | Thu, 08 Nov 2007 15:14:37 +0000 |
parents | 80fc8554cde6 |
children | 0fb209cef761 |
files | rmdec.c |
diffstat | 1 files changed, 22 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/rmdec.c Thu Nov 08 15:09:37 2007 +0000 +++ b/rmdec.c Thu Nov 08 15:14:37 2007 +0000 @@ -632,6 +632,27 @@ return 0; } +static void +ff_rm_retrieve_cache (AVFormatContext *s, AVStream *st, AVPacket *pkt) +{ + ByteIOContext *pb = &s->pb; + RMContext *rm = s->priv_data; + + assert (rm->audio_pkt_cnt > 0); + + if (st->codec->codec_id == CODEC_ID_AAC) + av_get_packet(pb, pkt, rm->sub_packet_lengths[rm->sub_packet_cnt - rm->audio_pkt_cnt]); + else { + av_new_packet(pkt, st->codec->block_align); + memcpy(pkt->data, rm->audiobuf + st->codec->block_align * + (rm->sub_packet_h * rm->audio_framesize / st->codec->block_align - rm->audio_pkt_cnt), + st->codec->block_align); + } + rm->audio_pkt_cnt--; + pkt->flags = 0; + pkt->stream_index = st->index; +} + static int rm_read_packet(AVFormatContext *s, AVPacket *pkt) { RMContext *rm = s->priv_data; @@ -645,17 +666,7 @@ if (rm->audio_pkt_cnt) { // If there are queued audio packet return them first st = s->streams[rm->audio_stream_num]; - if (st->codec->codec_id == CODEC_ID_AAC) - av_get_packet(pb, pkt, rm->sub_packet_lengths[rm->sub_packet_cnt - rm->audio_pkt_cnt]); - else { - av_new_packet(pkt, st->codec->block_align); - memcpy(pkt->data, rm->audiobuf + st->codec->block_align * - (rm->sub_packet_h * rm->audio_framesize / st->codec->block_align - rm->audio_pkt_cnt), - st->codec->block_align); - } - rm->audio_pkt_cnt--; - pkt->flags = 0; - pkt->stream_index = st->index; + ff_rm_retrieve_cache(s, st, pkt); } else if (rm->old_format) { st = s->streams[0]; if (st->codec->codec_id == CODEC_ID_RA_288) {