comparison dsputil.c @ 7261:032a49f033e8 libavcodec

simplify vorbis windowing
author lorenm
date Sun, 13 Jul 2008 14:56:01 +0000
parents 7f3d6509628b
children fc843d00867c
comparison
equal deleted inserted replaced
7260:3ec34b551aae 7261:032a49f033e8
3928 int i; 3928 int i;
3929 for(i=0; i<len; i++) 3929 for(i=0; i<len; i++)
3930 dst[i*step] = src0[i] * src1[i] + src2[i] + src3; 3930 dst[i*step] = src0[i] * src1[i] + src2[i] + src3;
3931 } 3931 }
3932 3932
3933 void ff_vector_fmul_window_c(float *dst, const float *src0, const float *src1, const float *win, float add_bias, int len){
3934 int i;
3935 for(i=0; i<len; i++)
3936 dst[i] = src0[i]*win[len-i-1] + src1[i]*win[i] + add_bias;
3937 }
3938
3939 static av_always_inline int float_to_int16_one(const float *src){
3940 int_fast32_t tmp = *(const int32_t*)src;
3941 if(tmp & 0xf0000){
3942 tmp = (0x43c0ffff - tmp)>>31;
3943 // is this faster on some gcc/cpu combinations?
3944 // if(tmp > 0x43c0ffff) tmp = 0xFFFF;
3945 // else tmp = 0;
3946 }
3947 return tmp - 0x8000;
3948 }
3949
3933 void ff_float_to_int16_c(int16_t *dst, const float *src, long len){ 3950 void ff_float_to_int16_c(int16_t *dst, const float *src, long len){
3934 int i; 3951 int i;
3935 for(i=0; i<len; i++) { 3952 for(i=0; i<len; i++)
3936 int_fast32_t tmp = ((const int32_t*)src)[i]; 3953 dst[i] = float_to_int16_one(src+i);
3937 if(tmp & 0xf0000){ 3954 }
3938 tmp = (0x43c0ffff - tmp)>>31; 3955
3939 // is this faster on some gcc/cpu combinations? 3956 void ff_float_to_int16_interleave_c(int16_t *dst, const float *src, long len, int channels){
3940 // if(tmp > 0x43c0ffff) tmp = 0xFFFF; 3957 int i,j,c;
3941 // else tmp = 0; 3958 if(channels==2){
3959 for(i=0; i<len; i++){
3960 dst[2*i] = float_to_int16_one(src+i);
3961 dst[2*i+1] = float_to_int16_one(src+i+len);
3942 } 3962 }
3943 dst[i] = tmp - 0x8000; 3963 }else{
3964 for(c=0; c<channels; c++, src+=len)
3965 for(i=0, j=c; i<len; i++, j+=channels)
3966 dst[j] = float_to_int16_one(src+i);
3944 } 3967 }
3945 } 3968 }
3946 3969
3947 static void add_int16_c(int16_t * v1, int16_t * v2, int order) 3970 static void add_int16_c(int16_t * v1, int16_t * v2, int order)
3948 { 3971 {
4448 c->flac_compute_autocorr = ff_flac_compute_autocorr; 4471 c->flac_compute_autocorr = ff_flac_compute_autocorr;
4449 #endif 4472 #endif
4450 c->vector_fmul = vector_fmul_c; 4473 c->vector_fmul = vector_fmul_c;
4451 c->vector_fmul_reverse = vector_fmul_reverse_c; 4474 c->vector_fmul_reverse = vector_fmul_reverse_c;
4452 c->vector_fmul_add_add = ff_vector_fmul_add_add_c; 4475 c->vector_fmul_add_add = ff_vector_fmul_add_add_c;
4476 c->vector_fmul_window = ff_vector_fmul_window_c;
4453 c->float_to_int16 = ff_float_to_int16_c; 4477 c->float_to_int16 = ff_float_to_int16_c;
4478 c->float_to_int16_interleave = ff_float_to_int16_interleave_c;
4454 c->add_int16 = add_int16_c; 4479 c->add_int16 = add_int16_c;
4455 c->sub_int16 = sub_int16_c; 4480 c->sub_int16 = sub_int16_c;
4456 c->scalarproduct_int16 = scalarproduct_int16_c; 4481 c->scalarproduct_int16 = scalarproduct_int16_c;
4457 4482
4458 c->shrink[0]= ff_img_copy_plane; 4483 c->shrink[0]= ff_img_copy_plane;