mirror of https://git.ffmpeg.org/ffmpeg.git
audioconvert: support simd code with specific alignment requirements.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
a286b04daf
commit
ceb9f8d927
|
@ -170,12 +170,28 @@ int swri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, int len
|
|||
int ch;
|
||||
int off=0;
|
||||
const int os= (out->planar ? 1 :out->ch_count) *out->bps;
|
||||
unsigned misaligned = 0;
|
||||
|
||||
av_assert0(ctx->channels == out->ch_count);
|
||||
|
||||
if (ctx->in_simd_align_mask) {
|
||||
int planes = in->planar ? in->ch_count : 1;
|
||||
unsigned m = 0;
|
||||
for (ch = 0; ch < planes; ch++)
|
||||
m |= (intptr_t)in->ch[ch];
|
||||
misaligned |= m & ctx->in_simd_align_mask;
|
||||
}
|
||||
if (ctx->out_simd_align_mask) {
|
||||
int planes = out->planar ? out->ch_count : 1;
|
||||
unsigned m = 0;
|
||||
for (ch = 0; ch < planes; ch++)
|
||||
m |= (intptr_t)out->ch[ch];
|
||||
misaligned |= m & ctx->out_simd_align_mask;
|
||||
}
|
||||
|
||||
//FIXME optimize common cases
|
||||
|
||||
if(ctx->simd_f && !ctx->ch_map){
|
||||
if(ctx->simd_f && !ctx->ch_map && !misaligned){
|
||||
off = len&~15;
|
||||
av_assert1(off>=0);
|
||||
av_assert1(off<=len);
|
||||
|
|
|
@ -38,6 +38,8 @@ typedef void (simd_func_type)(uint8_t **dst, const uint8_t **src, int len);
|
|||
|
||||
typedef struct AudioConvert {
|
||||
int channels;
|
||||
int in_simd_align_mask;
|
||||
int out_simd_align_mask;
|
||||
conv_func_type *conv_f;
|
||||
simd_func_type *simd_f;
|
||||
const int *ch_map;
|
||||
|
|
Loading…
Reference in New Issue