[Ffmpeg-cvslog] r6633 - trunk/libavformat/amr.c
michael
subversion
Wed Oct 11 01:45:13 CEST 2006
Author: michael
Date: Wed Oct 11 01:45:12 2006
New Revision: 6633
Modified:
trunk/libavformat/amr.c
Log:
factorize (untested)
Modified: trunk/libavformat/amr.c
==============================================================================
--- trunk/libavformat/amr.c (original)
+++ trunk/libavformat/amr.c Wed Oct 11 01:45:12 2006
@@ -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;
}
More information about the ffmpeg-cvslog
mailing list