Mercurial > libavcodec.hg
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) |