mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
factorize (untested)
Originally committed as revision 6633 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
effdc8ef2a
commit
b1bf48aa91
@ -134,78 +134,49 @@ static int amr_read_packet(AVFormatContext *s,
|
||||
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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user