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) |
