Mercurial > libavcodec.hg
comparison vorbis_dec.c @ 9676:f39076e0d605 libavcodec
Use iMDCT output scaling to simplify ffvorbis and make it slightly faster.
author | serge |
---|---|
date | Wed, 20 May 2009 07:26:09 +0000 |
parents | 2e84b386a8b6 |
children | 6fd0b776f838 |
comparison
equal
deleted
inserted
replaced
9675:2e84b386a8b6 | 9676:f39076e0d605 |
---|---|
208 av_free(vc->mappings[i].magnitude); | 208 av_free(vc->mappings[i].magnitude); |
209 av_free(vc->mappings[i].angle); | 209 av_free(vc->mappings[i].angle); |
210 av_free(vc->mappings[i].mux); | 210 av_free(vc->mappings[i].mux); |
211 } | 211 } |
212 av_freep(&vc->mappings); | 212 av_freep(&vc->mappings); |
213 | |
214 if(vc->exp_bias){ | |
215 av_freep(&vc->win[0]); | |
216 av_freep(&vc->win[1]); | |
217 } | |
218 } | 213 } |
219 | 214 |
220 // Parse setup header ------------------------------------------------- | 215 // Parse setup header ------------------------------------------------- |
221 | 216 |
222 // Process codebooks part | 217 // Process codebooks part |
874 return 4; | 869 return 4; |
875 } | 870 } |
876 vc->win[0]=ff_vorbis_vwin[bl0-6]; | 871 vc->win[0]=ff_vorbis_vwin[bl0-6]; |
877 vc->win[1]=ff_vorbis_vwin[bl1-6]; | 872 vc->win[1]=ff_vorbis_vwin[bl1-6]; |
878 | 873 |
879 if(vc->exp_bias){ | |
880 int i, j; | |
881 for(j=0; j<2; j++){ | |
882 float *win = av_malloc(vc->blocksize[j]/2 * sizeof(float)); | |
883 for(i=0; i<vc->blocksize[j]/2; i++) | |
884 win[i] = vc->win[j][i] * (1<<15); | |
885 vc->win[j] = win; | |
886 } | |
887 } | |
888 | |
889 if ((get_bits1(gb)) == 0) { | 874 if ((get_bits1(gb)) == 0) { |
890 av_log(vc->avccontext, AV_LOG_ERROR, " Vorbis id header packet corrupt (framing flag not set). \n"); | 875 av_log(vc->avccontext, AV_LOG_ERROR, " Vorbis id header packet corrupt (framing flag not set). \n"); |
891 return 2; | 876 return 2; |
892 } | 877 } |
893 | 878 |
894 vc->channel_residues= av_malloc((vc->blocksize[1]/2)*vc->audio_channels * sizeof(float)); | 879 vc->channel_residues= av_malloc((vc->blocksize[1]/2)*vc->audio_channels * sizeof(float)); |
895 vc->channel_floors = av_malloc((vc->blocksize[1]/2)*vc->audio_channels * sizeof(float)); | 880 vc->channel_floors = av_malloc((vc->blocksize[1]/2)*vc->audio_channels * sizeof(float)); |
896 vc->saved = av_mallocz((vc->blocksize[1]/4)*vc->audio_channels * sizeof(float)); | 881 vc->saved = av_mallocz((vc->blocksize[1]/4)*vc->audio_channels * sizeof(float)); |
897 vc->previous_window=0; | 882 vc->previous_window=0; |
898 | 883 |
899 ff_mdct_init(&vc->mdct[0], bl0, 1, -1.0); | 884 ff_mdct_init(&vc->mdct[0], bl0, 1, vc->exp_bias ? -(1<<15) : -1.0); |
900 ff_mdct_init(&vc->mdct[1], bl1, 1, -1.0); | 885 ff_mdct_init(&vc->mdct[1], bl1, 1, vc->exp_bias ? -(1<<15) : -1.0); |
901 | 886 |
902 AV_DEBUG(" vorbis version %d \n audio_channels %d \n audio_samplerate %d \n bitrate_max %d \n bitrate_nom %d \n bitrate_min %d \n blk_0 %d blk_1 %d \n ", | 887 AV_DEBUG(" vorbis version %d \n audio_channels %d \n audio_samplerate %d \n bitrate_max %d \n bitrate_nom %d \n bitrate_min %d \n blk_0 %d blk_1 %d \n ", |
903 vc->version, vc->audio_channels, vc->audio_samplerate, vc->bitrate_maximum, vc->bitrate_nominal, vc->bitrate_minimum, vc->blocksize[0], vc->blocksize[1]); | 888 vc->version, vc->audio_channels, vc->audio_samplerate, vc->bitrate_maximum, vc->bitrate_nominal, vc->bitrate_minimum, vc->blocksize[0], vc->blocksize[1]); |
904 | 889 |
905 /* | 890 /* |
1408 | 1393 |
1409 static void copy_normalize(float *dst, float *src, int len, int exp_bias, float add_bias) | 1394 static void copy_normalize(float *dst, float *src, int len, int exp_bias, float add_bias) |
1410 { | 1395 { |
1411 int i; | 1396 int i; |
1412 if(exp_bias) { | 1397 if(exp_bias) { |
1413 for(i=0; i<len; i++) | 1398 memcpy(dst, src, len * sizeof(float)); |
1414 ((uint32_t*)dst)[i] = ((uint32_t*)src)[i] + exp_bias; // dst[k]=src[i]*(1<<bias) | |
1415 } else { | 1399 } else { |
1416 for(i=0; i<len; i++) | 1400 for(i=0; i<len; i++) |
1417 dst[i] = src[i] + add_bias; | 1401 dst[i] = src[i] + add_bias; |
1418 } | 1402 } |
1419 } | 1403 } |