comparison mpegaudiodec.c @ 2496:74d7fd7b49c5 libavcodec

merge a few shifts into the dequantization, faster and more accurate, lets hope it doesnt overflow
author michael
date Thu, 03 Feb 2005 03:28:27 +0000
parents 7a79cb42eddb
children 0334caf0f0ce
comparison
equal deleted inserted replaced
2495:7a79cb42eddb 2496:74d7fd7b49c5
403 double f, fm; 403 double f, fm;
404 int e, m; 404 int e, m;
405 f = pow((double)(i/4), 4.0 / 3.0) * pow(2, (i&3)*0.25); 405 f = pow((double)(i/4), 4.0 / 3.0) * pow(2, (i&3)*0.25);
406 fm = frexp(f, &e); 406 fm = frexp(f, &e);
407 m = FIXHR(fm*0.5); 407 m = FIXHR(fm*0.5);
408 e+= FRAC_BITS - 31; 408 e+= FRAC_BITS - 31 + 5;
409 409
410 /* normalized to FRAC_BITS */ 410 /* normalized to FRAC_BITS */
411 table_4_3_value[i] = m; 411 table_4_3_value[i] = m;
412 // av_log(NULL, AV_LOG_DEBUG, "%d %d %f\n", i, m, pow((double)i, 4.0 / 3.0)); 412 // av_log(NULL, AV_LOG_DEBUG, "%d %d %f\n", i, m, pow((double)i, 4.0 / 3.0));
413 table_4_3_exp[i] = -e; 413 table_4_3_exp[i] = -e;
949 /* 12 points IMDCT. We compute it "by hand" by factorizing obvious 949 /* 12 points IMDCT. We compute it "by hand" by factorizing obvious
950 cases. */ 950 cases. */
951 static void imdct12(int *out, int *in) 951 static void imdct12(int *out, int *in)
952 { 952 {
953 int in0, in1, in2, in3, in4, in5, t1, t2; 953 int in0, in1, in2, in3, in4, in5, t1, t2;
954 in0= in[0*3]<<5; 954
955 in1= (in[1*3] + in[0*3])<<5; 955 in0= in[0*3];
956 in2= (in[2*3] + in[1*3])<<5; 956 in1= in[1*3] + in[0*3];
957 in3= (in[3*3] + in[2*3])<<5; 957 in2= in[2*3] + in[1*3];
958 in4= (in[4*3] + in[3*3])<<5; 958 in3= in[3*3] + in[2*3];
959 in5= (in[5*3] + in[4*3])<<5; 959 in4= in[4*3] + in[3*3];
960 in5= in[5*3] + in[4*3];
960 in5 += in3; 961 in5 += in3;
961 in3 += in1; 962 in3 += in1;
962 963
963 in2= MULH(2*in2, C3); 964 in2= MULH(2*in2, C3);
964 in3= MULH(2*in3, C3); 965 in3= MULH(2*in3, C3);
1080 t2 = tmp[i + 1]; 1081 t2 = tmp[i + 1];
1081 t3 = tmp[i + 3]; 1082 t3 = tmp[i + 3];
1082 s1 = MULL(t3 + t2, icos36[j]); 1083 s1 = MULL(t3 + t2, icos36[j]);
1083 s3 = MULL(t3 - t2, icos36[8 - j]); 1084 s3 = MULL(t3 - t2, icos36[8 - j]);
1084 1085
1085 t0 = (s0 + s1) << 5; 1086 t0 = s0 + s1;
1086 t1 = (s0 - s1) << 5; 1087 t1 = s0 - s1;
1087 out[(9 + j)*SBLIMIT] = MULH(t1, win[9 + j]) + buf[9 + j]; 1088 out[(9 + j)*SBLIMIT] = MULH(t1, win[9 + j]) + buf[9 + j];
1088 out[(8 - j)*SBLIMIT] = MULH(t1, win[8 - j]) + buf[8 - j]; 1089 out[(8 - j)*SBLIMIT] = MULH(t1, win[8 - j]) + buf[8 - j];
1089 buf[9 + j] = MULH(t0, win[18 + 9 + j]); 1090 buf[9 + j] = MULH(t0, win[18 + 9 + j]);
1090 buf[8 - j] = MULH(t0, win[18 + 8 - j]); 1091 buf[8 - j] = MULH(t0, win[18 + 8 - j]);
1091 1092
1092 t0 = (s2 + s3) << 5; 1093 t0 = s2 + s3;
1093 t1 = (s2 - s3) << 5; 1094 t1 = s2 - s3;
1094 out[(9 + 8 - j)*SBLIMIT] = MULH(t1, win[9 + 8 - j]) + buf[9 + 8 - j]; 1095 out[(9 + 8 - j)*SBLIMIT] = MULH(t1, win[9 + 8 - j]) + buf[9 + 8 - j];
1095 out[( j)*SBLIMIT] = MULH(t1, win[ j]) + buf[ j]; 1096 out[( j)*SBLIMIT] = MULH(t1, win[ j]) + buf[ j];
1096 buf[9 + 8 - j] = MULH(t0, win[18 + 9 + 8 - j]); 1097 buf[9 + 8 - j] = MULH(t0, win[18 + 9 + 8 - j]);
1097 buf[ + j] = MULH(t0, win[18 + j]); 1098 buf[ + j] = MULH(t0, win[18 + j]);
1098 i += 4; 1099 i += 4;
1099 } 1100 }
1100 1101
1101 s0 = tmp[16]; 1102 s0 = tmp[16];
1102 s1 = MULL(tmp[17], icos36[4]); 1103 s1 = MULL(tmp[17], icos36[4]);
1103 t0 = (s0 + s1) << 5; 1104 t0 = s0 + s1;
1104 t1 = (s0 - s1) << 5; 1105 t1 = s0 - s1;
1105 out[(9 + 4)*SBLIMIT] = MULH(t1, win[9 + 4]) + buf[9 + 4]; 1106 out[(9 + 4)*SBLIMIT] = MULH(t1, win[9 + 4]) + buf[9 + 4];
1106 out[(8 - 4)*SBLIMIT] = MULH(t1, win[8 - 4]) + buf[8 - 4]; 1107 out[(8 - 4)*SBLIMIT] = MULH(t1, win[8 - 4]) + buf[8 - 4];
1107 buf[9 + 4] = MULH(t0, win[18 + 9 + 4]); 1108 buf[9 + 4] = MULH(t0, win[18 + 9 + 4]);
1108 buf[8 - 4] = MULH(t0, win[18 + 8 - 4]); 1109 buf[8 - 4] = MULH(t0, win[18 + 8 - 4]);
1109 } 1110 }
1918 ptr = g->sb_hybrid + 18; 1919 ptr = g->sb_hybrid + 18;
1919 for(i = n;i > 0;i--) { 1920 for(i = n;i > 0;i--) {
1920 int tmp0, tmp1, tmp2; 1921 int tmp0, tmp1, tmp2;
1921 csa = &csa_table[0][0]; 1922 csa = &csa_table[0][0];
1922 #define INT_AA(j) \ 1923 #define INT_AA(j) \
1923 tmp0 = 4*(ptr[-1-j]);\ 1924 tmp0 = ptr[-1-j];\
1924 tmp1 = 4*(ptr[ j]);\ 1925 tmp1 = ptr[ j];\
1925 tmp2= MULH(tmp0 + tmp1, csa[0+4*j]);\ 1926 tmp2= MULH(tmp0 + tmp1, csa[0+4*j]);\
1926 ptr[-1-j] = tmp2 - MULH(tmp1, csa[2+4*j]);\ 1927 ptr[-1-j] = 4*(tmp2 - MULH(tmp1, csa[2+4*j]));\
1927 ptr[ j] = tmp2 + MULH(tmp0, csa[3+4*j]); 1928 ptr[ j] = 4*(tmp2 + MULH(tmp0, csa[3+4*j]));
1928 1929
1929 INT_AA(0) 1930 INT_AA(0)
1930 INT_AA(1) 1931 INT_AA(1)
1931 INT_AA(2) 1932 INT_AA(2)
1932 INT_AA(3) 1933 INT_AA(3)