00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <inttypes.h>
00024 #include "avcodec.h"
00025 #include "acelp_vectors.h"
00026
00027 const uint8_t ff_fc_2pulses_9bits_track1[16] =
00028 {
00029 1, 3,
00030 6, 8,
00031 11, 13,
00032 16, 18,
00033 21, 23,
00034 26, 28,
00035 31, 33,
00036 36, 38
00037 };
00038 const uint8_t ff_fc_2pulses_9bits_track1_gray[16] =
00039 {
00040 1, 3,
00041 8, 6,
00042 18, 16,
00043 11, 13,
00044 38, 36,
00045 31, 33,
00046 21, 23,
00047 28, 26,
00048 };
00049
00050 const uint8_t ff_fc_2pulses_9bits_track2_gray[32] =
00051 {
00052 0, 2,
00053 5, 4,
00054 12, 10,
00055 7, 9,
00056 25, 24,
00057 20, 22,
00058 14, 15,
00059 19, 17,
00060 36, 31,
00061 21, 26,
00062 1, 6,
00063 16, 11,
00064 27, 29,
00065 32, 30,
00066 39, 37,
00067 34, 35,
00068 };
00069
00070 const uint8_t ff_fc_4pulses_8bits_tracks_13[16] =
00071 {
00072 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75,
00073 };
00074
00075 const uint8_t ff_fc_4pulses_8bits_track_4[32] =
00076 {
00077 3, 4,
00078 8, 9,
00079 13, 14,
00080 18, 19,
00081 23, 24,
00082 28, 29,
00083 33, 34,
00084 38, 39,
00085 43, 44,
00086 48, 49,
00087 53, 54,
00088 58, 59,
00089 63, 64,
00090 68, 69,
00091 73, 74,
00092 78, 79,
00093 };
00094
00095 #if 0
00096 static uint8_t gray_decode[32] =
00097 {
00098 0, 1, 3, 2, 7, 6, 4, 5,
00099 15, 14, 12, 13, 8, 9, 11, 10,
00100 31, 30, 28, 29, 24, 25, 27, 26,
00101 16, 17, 19, 18, 23, 22, 20, 21
00102 };
00103 #endif
00104
00105 void ff_acelp_fc_pulse_per_track(
00106 int16_t* fc_v,
00107 const uint8_t *tab1,
00108 const uint8_t *tab2,
00109 int pulse_indexes,
00110 int pulse_signs,
00111 int pulse_count,
00112 int bits)
00113 {
00114 int mask = (1 << bits) - 1;
00115 int i;
00116
00117 for(i=0; i<pulse_count; i++)
00118 {
00119 fc_v[i + tab1[pulse_indexes & mask]] +=
00120 (pulse_signs & 1) ? 8191 : -8192;
00121
00122 pulse_indexes >>= bits;
00123 pulse_signs >>= 1;
00124 }
00125
00126 fc_v[tab2[pulse_indexes]] += (pulse_signs & 1) ? 8191 : -8192;
00127 }
00128
00129 void ff_acelp_weighted_vector_sum(
00130 int16_t* out,
00131 const int16_t *in_a,
00132 const int16_t *in_b,
00133 int16_t weight_coeff_a,
00134 int16_t weight_coeff_b,
00135 int16_t rounder,
00136 int shift,
00137 int length)
00138 {
00139 int i;
00140
00141
00142 for(i=0; i<length; i++)
00143 out[i] = av_clip_int16((
00144 in_a[i] * weight_coeff_a +
00145 in_b[i] * weight_coeff_b +
00146 rounder) >> shift);
00147 }