comparison mpegaudiodec.c @ 3599:9a069376b7e3 libavcodec

replace a few MULL by MULH
author michael
date Mon, 21 Aug 2006 12:12:43 +0000
parents 181b0e8f6d81
children 949219039897
comparison
equal deleted inserted replaced
3598:181b0e8f6d81 3599:9a069376b7e3
941 FIXR(1.18310079157624925896), 941 FIXR(1.18310079157624925896),
942 FIXR(1.93185165257813657349), //2 942 FIXR(1.93185165257813657349), //2
943 FIXR(5.73685662283492756461), 943 FIXR(5.73685662283492756461),
944 }; 944 };
945 945
946 /* 0.5 / cos(pi*(2*i+1)/36) */
947 static const int icos36h[9] = {
948 FIXHR(0.50190991877167369479/2),
949 FIXHR(0.51763809020504152469/2), //0
950 FIXHR(0.55168895948124587824/2),
951 FIXHR(0.61038729438072803416/2),
952 FIXHR(0.70710678118654752439/2), //1
953 FIXHR(0.87172339781054900991/2),
954 FIXHR(1.18310079157624925896/4),
955 FIXHR(1.93185165257813657349/4), //2
956 // FIXHR(5.73685662283492756461),
957 };
958
946 /* 12 points IMDCT. We compute it "by hand" by factorizing obvious 959 /* 12 points IMDCT. We compute it "by hand" by factorizing obvious
947 cases. */ 960 cases. */
948 static void imdct12(int *out, int *in) 961 static void imdct12(int *out, int *in)
949 { 962 {
950 int in0, in1, in2, in3, in4, in5, t1, t2; 963 int in0, in1, in2, in3, in4, in5, t1, t2;
957 in5= in[5*3] + in[4*3]; 970 in5= in[5*3] + in[4*3];
958 in5 += in3; 971 in5 += in3;
959 in3 += in1; 972 in3 += in1;
960 973
961 in2= MULH(2*in2, C3); 974 in2= MULH(2*in2, C3);
962 in3= MULH(2*in3, C3); 975 in3= MULH(4*in3, C3);
963 976
964 t1 = in0 - in4; 977 t1 = in0 - in4;
965 t2 = MULL(in1 - in5, icos36[4]); 978 t2 = MULH(2*(in1 - in5), icos36h[4]);
966 979
967 out[ 7]= 980 out[ 7]=
968 out[10]= t1 + t2; 981 out[10]= t1 + t2;
969 out[ 1]= 982 out[ 1]=
970 out[ 4]= t1 - t2; 983 out[ 4]= t1 - t2;
971 984
972 in0 += in4>>1; 985 in0 += in4>>1;
973 in4 = in0 + in2; 986 in4 = in0 + in2;
974 in1 += in5>>1; 987 in5 += 2*in1;
975 in5 = MULL(in1 + in3, icos36[1]); 988 in1 = MULH(in5 + in3, icos36h[1]);
976 out[ 8]= 989 out[ 8]=
977 out[ 9]= in4 + in5; 990 out[ 9]= in4 + in1;
978 out[ 2]= 991 out[ 2]=
979 out[ 3]= in4 - in5; 992 out[ 3]= in4 - in1;
980 993
981 in0 -= in2; 994 in0 -= in2;
982 in1 = MULL(in1 - in3, icos36[7]); 995 in5 = MULH(2*(in5 - in3), icos36h[7]);
983 out[ 0]= 996 out[ 0]=
984 out[ 5]= in0 - in1; 997 out[ 5]= in0 - in5;
985 out[ 6]= 998 out[ 6]=
986 out[11]= in0 + in1; 999 out[11]= in0 + in5;
987 } 1000 }
988 1001
989 /* cos(pi*i/18) */ 1002 /* cos(pi*i/18) */
990 #define C1 FIXHR(0.98480775301220805936/2) 1003 #define C1 FIXHR(0.98480775301220805936/2)
991 #define C2 FIXHR(0.93969262078590838405/2) 1004 #define C2 FIXHR(0.93969262078590838405/2)
1075 s0 = t1 + t0; 1088 s0 = t1 + t0;
1076 s2 = t1 - t0; 1089 s2 = t1 - t0;
1077 1090
1078 t2 = tmp[i + 1]; 1091 t2 = tmp[i + 1];
1079 t3 = tmp[i + 3]; 1092 t3 = tmp[i + 3];
1080 s1 = MULL(t3 + t2, icos36[j]); 1093 s1 = MULH(2*(t3 + t2), icos36h[j]);
1081 s3 = MULL(t3 - t2, icos36[8 - j]); 1094 s3 = MULL(t3 - t2, icos36[8 - j]);
1082 1095
1083 t0 = s0 + s1; 1096 t0 = s0 + s1;
1084 t1 = s0 - s1; 1097 t1 = s0 - s1;
1085 out[(9 + j)*SBLIMIT] = MULH(t1, win[9 + j]) + buf[9 + j]; 1098 out[(9 + j)*SBLIMIT] = MULH(t1, win[9 + j]) + buf[9 + j];
1095 buf[ + j] = MULH(t0, win[18 + j]); 1108 buf[ + j] = MULH(t0, win[18 + j]);
1096 i += 4; 1109 i += 4;
1097 } 1110 }
1098 1111
1099 s0 = tmp[16]; 1112 s0 = tmp[16];
1100 s1 = MULL(tmp[17], icos36[4]); 1113 s1 = MULH(2*tmp[17], icos36h[4]);
1101 t0 = s0 + s1; 1114 t0 = s0 + s1;
1102 t1 = s0 - s1; 1115 t1 = s0 - s1;
1103 out[(9 + 4)*SBLIMIT] = MULH(t1, win[9 + 4]) + buf[9 + 4]; 1116 out[(9 + 4)*SBLIMIT] = MULH(t1, win[9 + 4]) + buf[9 + 4];
1104 out[(8 - 4)*SBLIMIT] = MULH(t1, win[8 - 4]) + buf[8 - 4]; 1117 out[(8 - 4)*SBLIMIT] = MULH(t1, win[8 - 4]) + buf[8 - 4];
1105 buf[9 + 4] = MULH(t0, win[18 + 9 + 4]); 1118 buf[9 + 4] = MULH(t0, win[18 + 9 + 4]);