mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-06 13:29:56 -05:00
remap: Split remapping functions into s16 and float implementation
The sample format is known when the remap structure is initialized, no runtime decision needed. Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
This commit is contained in:
parent
9362bdc8a1
commit
c0e0e7ea8c
3 changed files with 160 additions and 158 deletions
|
|
@ -101,33 +101,26 @@
|
|||
"4: \n\t"
|
||||
|
||||
#if defined (__i386__) || defined (__amd64__)
|
||||
static void remap_mono_to_stereo_sse2(pa_remap_t *m, void *dst, const void *src, unsigned n) {
|
||||
static void remap_mono_to_stereo_s16ne_sse2(pa_remap_t *m, void *dst, const void *src, unsigned n) {
|
||||
pa_reg_x86 temp, temp2;
|
||||
|
||||
switch (m->format) {
|
||||
case PA_SAMPLE_FLOAT32NE:
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
MONO_TO_STEREO(dq, 4, 15) /* do doubles to quads */
|
||||
: "+r" (dst), "+r" (src), "=&r" (temp), "=&r" (temp2)
|
||||
: "r" ((pa_reg_x86)n)
|
||||
: "cc"
|
||||
);
|
||||
break;
|
||||
}
|
||||
case PA_SAMPLE_S16NE:
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
MONO_TO_STEREO(wd, 5, 31) /* do words to doubles */
|
||||
: "+r" (dst), "+r" (src), "=&r" (temp), "=&r" (temp2)
|
||||
: "r" ((pa_reg_x86)n)
|
||||
: "cc"
|
||||
);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
pa_assert_not_reached();
|
||||
}
|
||||
__asm__ __volatile__ (
|
||||
MONO_TO_STEREO(wd, 5, 31) /* do words to doubles */
|
||||
: "+r" (dst), "+r" (src), "=&r" (temp), "=&r" (temp2)
|
||||
: "r" ((pa_reg_x86)n)
|
||||
: "cc"
|
||||
);
|
||||
}
|
||||
|
||||
static void remap_mono_to_stereo_float32ne_sse2(pa_remap_t *m, void *dst, const void *src, unsigned n) {
|
||||
pa_reg_x86 temp, temp2;
|
||||
|
||||
__asm__ __volatile__ (
|
||||
MONO_TO_STEREO(dq, 4, 15) /* do doubles to quads */
|
||||
: "+r" (dst), "+r" (src), "=&r" (temp), "=&r" (temp2)
|
||||
: "r" ((pa_reg_x86)n)
|
||||
: "cc"
|
||||
);
|
||||
}
|
||||
|
||||
/* set the function that will execute the remapping based on the matrices */
|
||||
|
|
@ -140,8 +133,18 @@ static void init_remap_sse2(pa_remap_t *m) {
|
|||
/* find some common channel remappings, fall back to full matrix operation. */
|
||||
if (n_ic == 1 && n_oc == 2 &&
|
||||
m->map_table_i[0][0] == 0x10000 && m->map_table_i[1][0] == 0x10000) {
|
||||
m->do_remap = (pa_do_remap_func_t) remap_mono_to_stereo_sse2;
|
||||
|
||||
pa_log_info("Using SSE2 mono to stereo remapping");
|
||||
switch (m->format) {
|
||||
case PA_SAMPLE_S16NE:
|
||||
m->do_remap = (pa_do_remap_func_t) remap_mono_to_stereo_s16ne_sse2;
|
||||
break;
|
||||
case PA_SAMPLE_FLOAT32NE:
|
||||
m->do_remap = (pa_do_remap_func_t) remap_mono_to_stereo_float32ne_sse2;
|
||||
break;
|
||||
default:
|
||||
pa_assert_not_reached();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* defined (__i386__) || defined (__amd64__) */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue