Signed-off-by: Michael Niedermayer <michaelni@gmx.at>tags/n1.0
@@ -291,6 +291,8 @@ int swri_rematrix_init(SwrContext *s){ | |||||
int nb_in = av_get_channel_layout_nb_channels(s->in_ch_layout); | int nb_in = av_get_channel_layout_nb_channels(s->in_ch_layout); | ||||
int nb_out = av_get_channel_layout_nb_channels(s->out_ch_layout); | int nb_out = av_get_channel_layout_nb_channels(s->out_ch_layout); | ||||
s->mix_any_f = NULL; | |||||
if (!s->rematrix_custom) { | if (!s->rematrix_custom) { | ||||
int r = auto_matrix(s); | int r = auto_matrix(s); | ||||
if (r) | if (r) | ||||
@@ -346,6 +348,11 @@ void swri_rematrix_free(SwrContext *s){ | |||||
int swri_rematrix(SwrContext *s, AudioData *out, AudioData *in, int len, int mustcopy){ | int swri_rematrix(SwrContext *s, AudioData *out, AudioData *in, int len, int mustcopy){ | ||||
int out_i, in_i, i, j; | int out_i, in_i, i, j; | ||||
if(s->mix_any_f) { | |||||
s->mix_any_f(out->ch, in->ch, s->native_matrix, len); | |||||
return 0; | |||||
} | |||||
av_assert0(out->ch_count == av_get_channel_layout_nb_channels(s->out_ch_layout)); | av_assert0(out->ch_count == av_get_channel_layout_nb_channels(s->out_ch_layout)); | ||||
av_assert0(in ->ch_count == av_get_channel_layout_nb_channels(s-> in_ch_layout)); | av_assert0(in ->ch_count == av_get_channel_layout_nb_channels(s-> in_ch_layout)); | ||||
@@ -26,6 +26,8 @@ | |||||
typedef void (mix_1_1_func_type)(void *out, const void *in, void *coeffp, int index, int len); | typedef void (mix_1_1_func_type)(void *out, const void *in, void *coeffp, int index, int len); | ||||
typedef void (mix_2_1_func_type)(void *out, const void *in1, const void *in2, void *coeffp, int index1, int index2, int len); | typedef void (mix_2_1_func_type)(void *out, const void *in1, const void *in2, void *coeffp, int index1, int index2, int len); | ||||
typedef void (mix_any_func_type)(void **out, const void **in1, void *coeffp, int len); | |||||
typedef struct AudioData{ | typedef struct AudioData{ | ||||
uint8_t *ch[SWR_CH_MAX]; ///< samples buffer per channel | uint8_t *ch[SWR_CH_MAX]; ///< samples buffer per channel | ||||
uint8_t *data; ///< samples buffer | uint8_t *data; ///< samples buffer | ||||
@@ -98,6 +100,8 @@ struct SwrContext { | |||||
mix_1_1_func_type *mix_1_1_f; | mix_1_1_func_type *mix_1_1_f; | ||||
mix_2_1_func_type *mix_2_1_f; | mix_2_1_func_type *mix_2_1_f; | ||||
mix_any_func_type *mix_any_f; | |||||
/* TODO: callbacks for ASM optimizations */ | /* TODO: callbacks for ASM optimizations */ | ||||
}; | }; | ||||