summaryrefslogtreecommitdiffstats
path: root/liba52
diff options
context:
space:
mode:
authormichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-12-30 21:53:56 +0000
committermichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-12-30 21:53:56 +0000
commitd5ea3b4e444fc72dd5e9ba9004ab486dd3716262 (patch)
tree72db9bbd10da2d211404a539794076bb58d3e702 /liba52
parent1d213cc5e4857318d0331b9d85a2eb7a9afef0d4 (diff)
downloadmpv-d5ea3b4e444fc72dd5e9ba9004ab486dd3716262.tar.bz2
mpv-d5ea3b4e444fc72dd5e9ba9004ab486dd3716262.tar.xz
runtime cpudetect the liba52 way part 2 (downmix.c)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@3911 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'liba52')
-rw-r--r--liba52/a52_internal.h1
-rw-r--r--liba52/downmix.c23
-rw-r--r--liba52/parse.c1
3 files changed, 14 insertions, 11 deletions
diff --git a/liba52/a52_internal.h b/liba52/a52_internal.h
index edd6642d5c..847c66e169 100644
--- a/liba52/a52_internal.h
+++ b/liba52/a52_internal.h
@@ -43,6 +43,7 @@ void bit_allocate (a52_state_t * state, a52_ba_t * ba, int bndstart,
int downmix_init (int input, int flags, sample_t * level,
sample_t clev, sample_t slev);
+void downmix_accel_init(uint32_t mm_accel);
int downmix_coeff (sample_t * coeff, int acmod, int output, sample_t level,
sample_t clev, sample_t slev);
extern void (*downmix) (sample_t * samples, int acmod, int output, sample_t bias,
diff --git a/liba52/downmix.c b/liba52/downmix.c
index deb192a204..75c823f244 100644
--- a/liba52/downmix.c
+++ b/liba52/downmix.c
@@ -24,18 +24,16 @@
*/
#include "config.h"
-#include "../cpudetect.h"
#include <string.h>
#include <inttypes.h>
#include "a52.h"
#include "a52_internal.h"
+#include "mm_accel.h"
#define CONVERT(acmod,output) (((output) << 3) + (acmod))
-//#undef HAVE_SSE
-//#undef HAVE_MMX
void (*downmix)(sample_t * samples, int acmod, int output, sample_t bias,
sample_t clev, sample_t slev)= NULL;
@@ -47,7 +45,17 @@ static void downmix_C (sample_t * samples, int acmod, int output, sample_t bias,
sample_t clev, sample_t slev);
static void upmix_MMX (sample_t * samples, int acmod, int output);
static void upmix_C (sample_t * samples, int acmod, int output);
-
+
+void downmix_accel_init(uint32_t mm_accel)
+{
+ upmix= upmix_C;
+ downmix= downmix_C;
+#ifdef ARCH_X86
+ if(mm_accel & MM_ACCEL_X86_MMX) upmix= upmix_MMX;
+ if(mm_accel & MM_ACCEL_X86_SSE) downmix= downmix_SSE;
+#endif
+}
+
int downmix_init (int input, int flags, sample_t * level,
sample_t clev, sample_t slev)
{
@@ -77,13 +85,6 @@ int downmix_init (int input, int flags, sample_t * level,
};
int output;
- upmix= upmix_C;
- downmix= downmix_C;
-#ifdef ARCH_X86
- if(gCpuCaps.hasMMX) upmix= upmix_MMX;
- if(gCpuCaps.hasSSE) downmix= downmix_SSE;
-#endif
-
output = flags & A52_CHANNEL_MASK;
if (output > A52_DOLBY)
return -1;
diff --git a/liba52/parse.c b/liba52/parse.c
index 05f58b1415..60858a9f31 100644
--- a/liba52/parse.c
+++ b/liba52/parse.c
@@ -57,6 +57,7 @@ sample_t * a52_init (uint32_t mm_accel)
int i;
imdct_init (mm_accel);
+ downmix_accel_init(mm_accel);
samples = memalign (16, 256 * 12 * sizeof (sample_t));
if (samples == NULL)