Mercurial > libavcodec.hg
comparison flacenc.c @ 5742:f8029206caa2 libavcodec
simplify lpc
author | lorenm |
---|---|
date | Sun, 30 Sep 2007 03:36:13 +0000 |
parents | 832a3152d38e |
children | 8ce32ae71c01 |
comparison
equal
deleted
inserted
replaced
5741:154b02065699 | 5742:f8029206caa2 |
---|---|
874 } | 874 } |
875 } | 875 } |
876 } | 876 } |
877 | 877 |
878 #define LPC1(x) {\ | 878 #define LPC1(x) {\ |
879 int s = smp[i-(x)+1];\ | 879 int c = coefs[(x)-1];\ |
880 p0 += c*s;\ | |
881 s = smp[i-(x)+1];\ | |
880 p1 += c*s;\ | 882 p1 += c*s;\ |
881 c = coefs[(x)-2];\ | |
882 p0 += c*s;\ | |
883 } | 883 } |
884 | 884 |
885 static av_always_inline void encode_residual_lpc_unrolled( | 885 static av_always_inline void encode_residual_lpc_unrolled( |
886 int32_t *res, const int32_t *smp, int n, | 886 int32_t *res, const int32_t *smp, int n, |
887 int order, const int32_t *coefs, int shift, int big) | 887 int order, const int32_t *coefs, int shift, int big) |
888 { | 888 { |
889 int i; | 889 int i; |
890 for(i=order; i<n; i+=2) { | 890 for(i=order; i<n; i+=2) { |
891 int c = coefs[order-1]; | 891 int s = smp[i-order]; |
892 int p0 = c * smp[i-order]; | 892 int p0 = 0, p1 = 0; |
893 int p1 = 0; | |
894 if(big) { | 893 if(big) { |
895 switch(order) { | 894 switch(order) { |
896 case 32: LPC1(32) | 895 case 32: LPC1(32) |
897 case 31: LPC1(31) | 896 case 31: LPC1(31) |
898 case 30: LPC1(30) | 897 case 30: LPC1(30) |
922 LPC1( 6) | 921 LPC1( 6) |
923 LPC1( 5) | 922 LPC1( 5) |
924 LPC1( 4) | 923 LPC1( 4) |
925 LPC1( 3) | 924 LPC1( 3) |
926 LPC1( 2) | 925 LPC1( 2) |
926 LPC1( 1) | |
927 } | 927 } |
928 } else { | 928 } else { |
929 switch(order) { | 929 switch(order) { |
930 case 8: LPC1( 8) | 930 case 8: LPC1( 8) |
931 case 7: LPC1( 7) | 931 case 7: LPC1( 7) |
932 case 6: LPC1( 6) | 932 case 6: LPC1( 6) |
933 case 5: LPC1( 5) | 933 case 5: LPC1( 5) |
934 case 4: LPC1( 4) | 934 case 4: LPC1( 4) |
935 case 3: LPC1( 3) | 935 case 3: LPC1( 3) |
936 case 2: LPC1( 2) | 936 case 2: LPC1( 2) |
937 case 1: LPC1( 1) | |
937 } | 938 } |
938 } | 939 } |
939 p1 += c * smp[i]; | |
940 res[i ] = smp[i ] - (p0 >> shift); | 940 res[i ] = smp[i ] - (p0 >> shift); |
941 res[i+1] = smp[i+1] - (p1 >> shift); | 941 res[i+1] = smp[i+1] - (p1 >> shift); |
942 } | 942 } |
943 } | 943 } |
944 | 944 |
950 res[i] = smp[i]; | 950 res[i] = smp[i]; |
951 } | 951 } |
952 #ifdef CONFIG_SMALL | 952 #ifdef CONFIG_SMALL |
953 for(i=order; i<n; i+=2) { | 953 for(i=order; i<n; i+=2) { |
954 int j; | 954 int j; |
955 int32_t c = coefs[0]; | 955 int s = smp[i]; |
956 int32_t p0 = 0, p1 = c*smp[i]; | 956 int p0 = 0, p1 = 0; |
957 for(j=1; j<order; j++) { | 957 for(j=0; j<order; j++) { |
958 int32_t s = smp[i-j]; | 958 int c = coefs[j]; |
959 p1 += c*s; | |
960 s = smp[i-j-1]; | |
959 p0 += c*s; | 961 p0 += c*s; |
960 c = coefs[j]; | 962 } |
961 p1 += c*s; | 963 res[i ] = smp[i ] - (p0 >> shift); |
962 } | |
963 p0 += c*smp[i-order]; | |
964 res[i+0] = smp[i+0] - (p0 >> shift); | |
965 res[i+1] = smp[i+1] - (p1 >> shift); | 964 res[i+1] = smp[i+1] - (p1 >> shift); |
966 } | 965 } |
967 #else | 966 #else |
968 switch(order) { | 967 switch(order) { |
969 case 1: encode_residual_lpc_unrolled(res, smp, n, 1, coefs, shift, 0); break; | 968 case 1: encode_residual_lpc_unrolled(res, smp, n, 1, coefs, shift, 0); break; |