Go to the documentation of this file.
29 int firorder,
int iirorder,
31 int blocksize,
int32_t *sample_buffer);
34 const uint8_t *bypassed_lsbs,
35 const int8_t *noise_buffer,
40 int matrix_noise_shift,
41 int access_unit_size_pow2,
44 #define DECLARE_PACK(order,channels,shift) \
45 int32_t ff_mlp_pack_output_##order##order_##channels##ch_##shift##shift_armv6(int32_t, uint16_t, int32_t (*)[], void *, uint8_t*, int8_t *, uint8_t, int);
46 #define ENUMERATE_PACK(order,channels,shift) \
47 ff_mlp_pack_output_##order##order_##channels##ch_##shift##shift_armv6,
48 #define PACK_CHANNELS(macro,order,channels) \
49 macro(order,channels,0) \
50 macro(order,channels,1) \
51 macro(order,channels,2) \
52 macro(order,channels,3) \
53 macro(order,channels,4) \
54 macro(order,channels,5) \
55 macro(order,channels,mixed)
56 #define PACK_ORDER(macro,order) \
57 PACK_CHANNELS(macro,order,2) \
58 PACK_CHANNELS(macro,order,6) \
59 PACK_CHANNELS(macro,order,8)
60 #define PACK_ALL(macro) \
61 PACK_ORDER(macro,outof) \
65 #define ff_mlp_pack_output_outoforder_2ch_mixedshift_armv6 0
66 #define ff_mlp_pack_output_outoforder_6ch_mixedshift_armv6 0
67 #define ff_mlp_pack_output_outoforder_8ch_mixedshift_armv6 0
69 #define ff_mlp_pack_output_outoforder_2ch_0shift_armv6 0
70 #define ff_mlp_pack_output_outoforder_2ch_1shift_armv6 0
71 #define ff_mlp_pack_output_outoforder_2ch_2shift_armv6 0
72 #define ff_mlp_pack_output_outoforder_2ch_3shift_armv6 0
73 #define ff_mlp_pack_output_outoforder_2ch_4shift_armv6 0
74 #define ff_mlp_pack_output_outoforder_2ch_5shift_armv6 0
75 #define ff_mlp_pack_output_outoforder_6ch_0shift_armv6 0
76 #define ff_mlp_pack_output_outoforder_6ch_1shift_armv6 0
77 #define ff_mlp_pack_output_outoforder_6ch_2shift_armv6 0
78 #define ff_mlp_pack_output_outoforder_6ch_3shift_armv6 0
79 #define ff_mlp_pack_output_outoforder_6ch_4shift_armv6 0
80 #define ff_mlp_pack_output_outoforder_6ch_5shift_armv6 0
81 #define ff_mlp_pack_output_outoforder_8ch_0shift_armv6 0
82 #define ff_mlp_pack_output_outoforder_8ch_1shift_armv6 0
83 #define ff_mlp_pack_output_outoforder_8ch_2shift_armv6 0
84 #define ff_mlp_pack_output_outoforder_8ch_3shift_armv6 0
85 #define ff_mlp_pack_output_outoforder_8ch_4shift_armv6 0
86 #define ff_mlp_pack_output_outoforder_8ch_5shift_armv6 0
91 uint8_t max_matrix_channel,
92 int is32))(
int32_t, uint16_t,
int32_t (*)[],
void *, uint8_t*, int8_t *, uint8_t,
int)
95 int shift = output_shift[0] < 0 || output_shift[0] > 5 ? 6 : output_shift[0];
97 static int32_t (*
const routine[2*3*7])(
int32_t, uint16_t,
int32_t (*)[],
void *, uint8_t*, int8_t *, uint8_t,
int) = {
105 switch (max_matrix_channel) {
119 for (
i = 0;
i <= max_matrix_channel;
i++) {
122 if (ch_assign[
i] !=
i)
129 if (
shift == 6 && !inorder)
133 return routine[(inorder*3+ch_index)*7+
shift];
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
static atomic_int cpu_flags
int32_t ff_mlp_pack_output(int32_t lossless_check_data, uint16_t blockpos, int32_t(*sample_buffer)[MAX_CHANNELS], void *data, uint8_t *ch_assign, int8_t *output_shift, uint8_t max_matrix_channel, int is32)
static const uint16_t mask[17]
static int32_t(*)(int32_t, uint16_t, int32_t(*)[], void *, uint8_t *, int8_t *, uint8_t, int) mlp_select_pack_output_armv6(uint8_t *ch_assign, int8_t *output_shift, uint8_t max_matrix_channel, int is32)
void ff_mlp_rematrix_channel_arm(int32_t *samples, const int32_t *coeffs, const uint8_t *bypassed_lsbs, const int8_t *noise_buffer, int index, unsigned int dest_ch, uint16_t blockpos, unsigned int maxchan, int matrix_noise_shift, int access_unit_size_pow2, int32_t mask)
#define ENUMERATE_PACK(order, channels, shift)
#define have_armv5te(flags)
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
#define i(width, name, range_min, range_max)
#define DECLARE_PACK(order, channels, shift)
Filter the word “frame” indicates either a video frame or a group of audio samples
static int shift(int a, int b)
av_cold void ff_mlpdsp_init_arm(MLPDSPContext *c)
#define have_armv6(flags)
static const double coeff[2][5]
void ff_mlp_filter_channel_arm(int32_t *state, const int32_t *coeff, int firorder, int iirorder, unsigned int filter_shift, int32_t mask, int blocksize, int32_t *sample_buffer)