Skip to content
Snippets Groups Projects
Commit ceb9f8d9 authored by Michael Niedermayer's avatar Michael Niedermayer
Browse files

audioconvert: support simd code with specific alignment requirements.

parent a286b04d
No related branches found
No related tags found
No related merge requests found
...@@ -170,12 +170,28 @@ int swri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, int len ...@@ -170,12 +170,28 @@ int swri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, int len
int ch; int ch;
int off=0; int off=0;
const int os= (out->planar ? 1 :out->ch_count) *out->bps; const int os= (out->planar ? 1 :out->ch_count) *out->bps;
unsigned misaligned = 0;
av_assert0(ctx->channels == out->ch_count); 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 //FIXME optimize common cases
if(ctx->simd_f && !ctx->ch_map){ if(ctx->simd_f && !ctx->ch_map && !misaligned){
off = len&~15; off = len&~15;
av_assert1(off>=0); av_assert1(off>=0);
av_assert1(off<=len); av_assert1(off<=len);
......
...@@ -38,6 +38,8 @@ typedef void (simd_func_type)(uint8_t **dst, const uint8_t **src, int len); ...@@ -38,6 +38,8 @@ typedef void (simd_func_type)(uint8_t **dst, const uint8_t **src, int len);
typedef struct AudioConvert { typedef struct AudioConvert {
int channels; int channels;
int in_simd_align_mask;
int out_simd_align_mask;
conv_func_type *conv_f; conv_func_type *conv_f;
simd_func_type *simd_f; simd_func_type *simd_f;
const int *ch_map; const int *ch_map;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment