Commit de312e51 authored by Michael Niedermayer's avatar Michael Niedermayer

optimizations

Originally committed as revision 4320 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent f56f96d8
...@@ -1188,7 +1188,7 @@ static int vorbis_residue_decode(vorbis_context *vc, vorbis_residue *vr, uint_fa ...@@ -1188,7 +1188,7 @@ static int vorbis_residue_decode(vorbis_context *vc, vorbis_residue *vr, uint_fa
} }
// Decode the audio packet using the functions above // Decode the audio packet using the functions above
#define BIAS 384 #define BIAS 385
static int vorbis_parse_audio_packet(vorbis_context *vc) { static int vorbis_parse_audio_packet(vorbis_context *vc) {
GetBitContext *gb=&vc->gb; GetBitContext *gb=&vc->gb;
...@@ -1342,27 +1342,34 @@ static int vorbis_parse_audio_packet(vorbis_context *vc) { ...@@ -1342,27 +1342,34 @@ static int vorbis_parse_audio_packet(vorbis_context *vc) {
} }
retlen=vc->blocksize_1/2; retlen=vc->blocksize_1/2;
} else { } else {
buf += (vc->blocksize_1-vc->blocksize_0)/4;
for(k=j, i=0;i<vc->blocksize_0/2;++i, k+=step) { for(k=j, i=0;i<vc->blocksize_0/2;++i, k+=step) {
ret[k]=saved[i]+buf[(vc->blocksize_1-vc->blocksize_0)/4+i]*swin[i]+BIAS; ret[k]=saved[i]+buf[i]*swin[i]+BIAS;
} }
buf += vc->blocksize_0/2;
for(i=0;i<(vc->blocksize_1-vc->blocksize_0)/4;++i, k+=step) { for(i=0;i<(vc->blocksize_1-vc->blocksize_0)/4;++i, k+=step) {
ret[k]=buf[vc->blocksize_0/2+(vc->blocksize_1-vc->blocksize_0)/4+i]+BIAS; ret[k]=buf[i]+BIAS;
} }
buf=vc->buf;
retlen=vc->blocksize_0/2+(vc->blocksize_1-vc->blocksize_0)/4; retlen=vc->blocksize_0/2+(vc->blocksize_1-vc->blocksize_0)/4;
} }
// -- save // -- save
if (next_window) { if (next_window) {
buf += vc->blocksize_1/2;
lwin += vc->blocksize_1/2-1;
for(i=0;i<vc->blocksize_1/2;++i) { for(i=0;i<vc->blocksize_1/2;++i) {
saved[i]=buf[vc->blocksize_1/2+i]*lwin[vc->blocksize_1/2-1-i]; saved[i]=buf[i]*lwin[-i];
} }
saved_start=0; saved_start=0;
} else { } else {
saved_start=(vc->blocksize_1-vc->blocksize_0)/4; saved_start=(vc->blocksize_1-vc->blocksize_0)/4;
buf += vc->blocksize_1/2;
for(i=0;i<saved_start;++i) { for(i=0;i<saved_start;++i) {
saved[i]=buf[vc->blocksize_1/2+i]; saved[i]=buf[i];
} }
swin += vc->blocksize_0/2-1;
for(i=0;i<vc->blocksize_0/2;++i) { for(i=0;i<vc->blocksize_0/2;++i) {
saved[saved_start+i]=buf[vc->blocksize_1/2+saved_start+i]*swin[vc->blocksize_0/2-1-i]; saved[saved_start+i]=buf[saved_start+i]*swin[-i];
} }
} }
} else { } else {
...@@ -1375,8 +1382,10 @@ static int vorbis_parse_audio_packet(vorbis_context *vc) { ...@@ -1375,8 +1382,10 @@ static int vorbis_parse_audio_packet(vorbis_context *vc) {
} }
retlen=saved_start+vc->blocksize_0/2; retlen=saved_start+vc->blocksize_0/2;
// -- save // -- save
buf += vc->blocksize_0/2;
swin += vc->blocksize_0/2-1;
for(i=0;i<vc->blocksize_0/2;++i) { for(i=0;i<vc->blocksize_0/2;++i) {
saved[i]=buf[vc->blocksize_0/2+i]*swin[vc->blocksize_0/2-1-i]; saved[i]=buf[i]*swin[-i];
} }
saved_start=0; saved_start=0;
} }
...@@ -1422,11 +1431,12 @@ static int vorbis_decode_frame(AVCodecContext *avccontext, ...@@ -1422,11 +1431,12 @@ static int vorbis_decode_frame(AVCodecContext *avccontext,
for(i=0;i<len;++i) { for(i=0;i<len;++i) {
int_fast32_t tmp= ((int32_t*)vc->ret)[i]; int_fast32_t tmp= ((int32_t*)vc->ret)[i];
if(tmp > 0x43c07fff) if(tmp & 0xf0000){
tmp= 32767; // tmp= (0x43c0ffff - tmp)>>31; //ask gcc devs why this is slower
else if(tmp < 0x43bf8000) if(tmp > 0x43c0ffff) tmp= 0xFFFF;
tmp= -32768; else tmp= 0;
((int16_t*)data)[i]=tmp; }
((int16_t*)data)[i]=tmp - 0x8000;
} }
*data_size=len*2; *data_size=len*2;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment