Mercurial > libavformat.hg
changeset 1366:31ab2ac4e173 libavformat
factorize (untested)
author | michael |
---|---|
date | Tue, 10 Oct 2006 23:45:12 +0000 |
parents | 54d50e11dc57 |
children | 8e0ee2faf4d5 |
files | amr.c |
diffstat | 1 files changed, 28 insertions(+), 57 deletions(-) [+] |
line wrap: on
line diff
--- a/amr.c Tue Oct 10 23:28:27 2006 +0000 +++ b/amr.c Tue Oct 10 23:45:12 2006 +0000 @@ -134,78 +134,49 @@ AVPacket *pkt) { AVCodecContext *enc = s->streams[0]->codec; + int read, size, toc, mode; + + if (url_feof(&s->pb)) + { + return AVERROR_IO; + } + + toc=get_byte(&s->pb); + mode = (toc >> 3) & 0x0F; if (enc->codec_id == CODEC_ID_AMR_NB) { static const uint8_t packed_size[16] = {12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0}; - uint8_t toc, q, ft; - int read; - int size; - if (url_feof(&s->pb)) - { - return AVERROR_IO; - } - - toc=get_byte(&s->pb); - q = (toc >> 2) & 0x01; - ft = (toc >> 3) & 0x0F; - - size=packed_size[ft]; - - if (av_new_packet(pkt, size+1)) - { - return AVERROR_IO; - } - pkt->stream_index = 0; - pkt->pos= url_ftell(&s->pb); - pkt->data[0]=toc; - - read = get_buffer(&s->pb, pkt->data+1, size); - - if (read != size) - { - av_free_packet(pkt); - return AVERROR_IO; - } + size=packed_size[mode]+1; } else if(enc->codec_id == CODEC_ID_AMR_WB) { static uint8_t packed_size[16] = {18, 24, 33, 37, 41, 47, 51, 59, 61, 6, 6, 0, 0, 0, 1, 1}; - uint8_t toc, mode; - int read; - int size; - if (url_feof(&s->pb)) - { - return AVERROR_IO; - } - - toc=get_byte(&s->pb); - mode = (uint8_t)((toc >> 3) & 0x0F); - size = packed_size[mode]; - - if ( (size==0) || av_new_packet(pkt, size)) - { - return AVERROR_IO; - } - - pkt->stream_index = 0; - pkt->pos= url_ftell(&s->pb); - pkt->data[0]=toc; - - read = get_buffer(&s->pb, pkt->data+1, size-1); - - if (read != (size-1)) - { - av_free_packet(pkt); - return AVERROR_IO; - } + size=packed_size[mode]; } else { assert(0); } + + if ( (size==0) || av_new_packet(pkt, size)) + { + return AVERROR_IO; + } + + pkt->stream_index = 0; + pkt->pos= url_ftell(&s->pb); + pkt->data[0]=toc; + read = get_buffer(&s->pb, pkt->data+1, size-1); + + if (read != size-1) + { + av_free_packet(pkt); + return AVERROR_IO; + } + return 0; }