changeset 4150:01d0a5fabf65

runtime cpudetect support #2 - still not working (i can't identify the problems ground, also it produces no sound (no noises), but the init seems to be ok (also i didn't changed anything)...very annoying :( snipp
author alex
date Mon, 14 Jan 2002 16:18:43 +0000
parents 9dde9f96f860
children 6ad5da34c463
files mp3lib/sr1.c
diffstat 1 files changed, 137 insertions(+), 90 deletions(-) [+]
line wrap: on
line diff
--- a/mp3lib/sr1.c	Mon Jan 14 16:15:59 2002 +0000
+++ b/mp3lib/sr1.c	Mon Jan 14 16:18:43 2002 +0000
@@ -42,12 +42,12 @@
 int MP3_channels=0;
 int MP3_bps=2;
 
-static long outscale  = 32768;
+static long outscale = 32768;
 #include "tabinit.c"
 
+#if 1
 extern int mplayer_audio_read(char *buf,int size);
 
-#if 1
 LOCAL int mp3_read(char *buf,int size){
 //  int len=fread(buf,1,size,mp3_file);
   int len=mplayer_audio_read(buf,size);
@@ -79,8 +79,8 @@
 static unsigned char *wordpointer;
 static int bitsleft;
 
-unsigned char *pcm_sample;   /* az outbuffer CIME */
-int pcm_point = 0;           /* ez az outbuffer pozicioja */
+unsigned char *pcm_sample;   /* outbuffer address */
+int pcm_point = 0;           /* outbuffer offset */
 
 static struct frame fr;
 
@@ -123,7 +123,7 @@
 //  if(MP3_frames>=7741) printf("getbits_fast: bits=%d  bitsleft=%d  wordptr=%x\n",number_of_bits,bitsleft,wordpointer);
   if((bitsleft-=number_of_bits)<0) return 0;
   if(!number_of_bits) return 0;
-#if	ARCH_X86
+#if (defined(RUNTIME_CPUDETECT) && defined(CAN_COMPILE_X86_ASM)) || defined(ARCH_X86)
   rval = bswap_16(*((unsigned short *)wordpointer));
 #else
   /*
@@ -166,7 +166,7 @@
 
 LOCAL int stream_head_read(unsigned char *hbuf,unsigned long *newhead){
   if(mp3_read(hbuf,4) != 4) return FALSE;
-#if ARCH_X86
+#if (defined(RUNTIME_CPUDETECT) && defined(CAN_COMPILE_X86_ASM)) || defined(ARCH_X86)
   *newhead = bswap_32(*((unsigned long *)hbuf));
 #else
   /*
@@ -378,7 +378,131 @@
 #else
 void MP3_Init(){
 #endif
-#if 1
+
+#if 0
+#ifdef RUNTIME_CPUDETECT
+#ifdef CAN_COMPILE_X86_ASM
+    if (gCpuCaps.hasMMX)
+    {
+	make_decode_tables_MMX(outscale);
+	printf("mp3lib: made decode tables with MMX optimization\n");
+    }
+    else
+	make_decode_tables(outscale);
+#else
+    make_decode_tables(outscale);
+#endif
+#else /* RUNTIME_CPUDETECT */
+#ifdef HAVE_MMX
+    make_decode_tables_MMX(outscale);
+    printf("mp3lib: made decode tables with MMX optimization\n");
+#else
+    make_decode_tables(outscale);
+#endif
+#endif /* RUNTIME_CPUDTECT */
+
+#ifdef USE_FAKE_MONO
+    if (fakemono == 1)
+        fr.synth = synth_1to1_l;
+    else if (fakemono == 2)
+        fr.synth = synth_1to1_r;
+    else
+        fr.synth = synth_1to1;
+#else
+    fr.synth = synth_1to1;
+#endif
+    fr.synth_mono = synth_1to1_mono2stereo;
+    fr.down_sample = 0;
+    fr.down_sample_sblimit = SBLIMIT>>(fr.down_sample);
+    init_layer2();
+    init_layer3(fr.down_sample_sblimit);
+    tables_done_flag = 1;
+
+    dct36_func = dct36;
+    printf("init layer2&3 finished, tables done\n");
+
+#ifdef RUNTIME_CPUDETECT
+#ifdef CAN_COMPILE_X86_ASM
+#if 0
+    if(gCpuCaps.hasSSE)
+    {
+	/* SSE version is buggy */
+	synth_func = synth_1to1_MMX;
+	dct64_MMX_func = dct64_MMX_sse;
+	printf("mp3lib: using SSE optimized decore!\n");
+    }
+    else
+#endif
+    if (gCpuCaps.has3DNowExt)
+    {
+	synth_func = synth_1to1_MMX;
+	dct36_func = dct36_3dnowex;
+	dct64_MMX_func = dct64_MMX_3dnowex;
+	printf("mp3lib: using 3DNow!Ex optimized decore!\n");
+    }
+    else
+    if (gCpuCaps.has3DNow)
+    {
+	synth_func = synth_1to1_MMX;
+	dct36_func = dct36_3dnow;
+	dct64_MMX_func = dct64_MMX_3dnow;
+	printf("mp3lib: using 3DNow! optimized decore!\n");
+     }
+     else
+     if (gCpuCaps.hasMMX)
+     {
+        synth_func = synth_1to1_MMX;
+	dct64_MMX_func = dct64_MMX;
+	printf("mp3lib: using MMX optimized decore!\n");
+    }
+    else
+    if (gCpuCaps.cpuType >= CPUTYPE_I586)
+    {
+	synth_func = synth_1to1_pent;
+	printf("mp3lib: using Pentium optimized decore!\n");
+    }
+    else
+    {
+	synth_func = NULL; /* use default c version */
+	printf("mp3lib: using generic decore!\n");
+    }
+#else /* CAN_COMPILE_X86_ASM */
+    synth_func = NULL;
+    printf("mp3lib: using generic decore!\n");
+#endif
+#else /* RUNTIME_CPUDETECT */
+
+#if 0
+    /* SSE version is buggy */
+    synth_func = synth_1to1_MMX;
+    dct64_MMX_func = dct64_MMX_sse;
+    printf("mp3lib: using SSE optimized decore!\n");
+#endif
+
+#ifdef HAVE_3DNOWEX
+    synth_func = synth_1to1_MMX;
+    dct36_func = dct36_3dnowex;
+    dct64_MMX_func = dct64_MMX_3dnowex;
+    printf("mp3lib: using 3DNow!Ex optimized decore!\n");
+#elif defined(HAVE_3DNOW)
+    synth_func = synth_1to1_MMX;
+    dct36_func = dct36_3dnow;
+    dct64_MMX_func = dct64_MMX_3dnow;
+    printf("mp3lib: using 3DNow! optimized decore!\n");
+#elif defined(HAVE_MMX)
+    synth_func = synth_1to1_MMX;
+    dct64_MMX_func = dct64_MMX;
+    printf("mp3lib: using MMX optimized decore!\n");
+#elif defined(__CPU__ > 586)
+    synth_func = synth_1to1_pent;
+    printf("mp3lib: using Pentium optimized decore!\n");
+#else
+    synth_func = NULL; /* use default c version */
+    printf("mp3lib: using generic decore!\n");
+#endif
+#endif /* RUNTIME_CPUDETECT */
+
+#else
 #ifdef ARCH_X86
     _CpuID=CpuDetect();
     _i586=ipentium();
@@ -421,7 +545,10 @@
 #ifdef HAVE_MMX
 /* Use it for any MMX cpu */
    if(_has_mmx)
+   {
 	make_decode_tables_MMX(outscale);
+	printf("mp3lib: made decode tables with MMX optimization\n");
+   }
    else
 #endif
 	make_decode_tables(outscale);
@@ -487,85 +614,6 @@
   {
     synth_func = NULL;
   }
-#else
-
-#ifdef HAVE_MMX
-/* Use it for any MMX cpu */
-   if(gCpuCaps.hasMMX)
-   {
-	make_decode_tables_MMX(outscale);
-	printf("mp3lib: made decode tables with mmx optimization\n");
-   }
-   else
-#endif
-	make_decode_tables(outscale);
-
-#ifdef USE_FAKE_MONO
-    if (fakemono == 1)
-        fr.synth=synth_1to1_l;
-    else if (fakemono == 2)
-        fr.synth=synth_1to1_r;
-    else
-        fr.synth=synth_1to1;
-#else
-    fr.synth=synth_1to1;
-#endif
-    fr.synth_mono=synth_1to1_mono2stereo;
-    fr.down_sample=0;
-    fr.down_sample_sblimit = SBLIMIT>>(fr.down_sample);
-    init_layer2();
-    init_layer3(fr.down_sample_sblimit);
-    tables_done_flag=1;
-
-    dct36_func=dct36;
-/*#ifdef HAVE_SSE
-  if(gCpuCaps.hasSSE)
-  {
-    synth_func=synth_1to1_MMX;
-    dct64_MMX_func=dct64_MMX_sse;
-    printf("mp3lib: using SSE optimized decore!\n");
-  }    
-  else
-#endif*/
-#ifdef HAVE_3DNOWEX
-  if (gCpuCaps.has3DNowExt)
-  {
-    synth_func=synth_1to1_MMX;
-    dct36_func=dct36_3dnowex;
-    dct64_MMX_func=dct64_MMX_3dnowex;
-    printf("mp3lib: using 3DNow!Ex optimized decore!\n");
-  }
-  else
-#endif
-#ifdef HAVE_3DNOW
-  if (gCpuCaps.has3DNow)
-  {
-    synth_func=synth_1to1_MMX;
-    dct36_func=dct36_3dnow;
-    dct64_MMX_func=dct64_MMX_3dnow;
-    printf("mp3lib: using 3DNow! optimized decore!\n");
-  }
-  else
-#endif
-#ifdef HAVE_MMX
-  if (gCpuCaps.hasMMX)
-  {
-    synth_func=synth_1to1_MMX;
-    dct64_MMX_func=dct64_MMX;
-    printf("mp3lib: using MMX optimized decore!\n");
-  }    
-  else
-#endif
-#ifdef ARCH_X86
-  if (gCpuCaps.cpuType == CPUTYPE_I586)
-  {
-    synth_func=synth_1to1_pent;
-  }    
-  else
-#endif
-  {
-    synth_func = NULL; /* use default c version */
-  }
 #endif
 }
 
@@ -617,24 +665,23 @@
    return(pcm_point?pcm_point:2);
 }
 
-#if 0
-
 // Prints last frame header in ascii.
 void MP3_PrintHeader(){
         static char *modes[4] = { "Stereo", "Joint-Stereo", "Dual-Channel", "Single-Channel" };
         static char *layers[4] = { "???" , "I", "II", "III" };
 
-        printf("\rMPEG %s, Layer %s, %ld Hz %d kbit %s, BPF : %ld\n",
+        printf("\rMPEG %s, Layer %s, %ld Hz %d kbit %s, BPF: %ld\n",
                 fr.mpeg25 ? "2.5" : (fr.lsf ? "2.0" : "1.0"),
                 layers[fr.lay],freqs[fr.sampling_frequency],
     tabsel_123[fr.lsf][fr.lay-1][fr.bitrate_index],
                 modes[fr.mode],fr.framesize+4);
-        printf("Channels: %d, copyright: %s, original: %s, CRC: %s, emphasis: %d.\n\n",
+        printf("Channels: %d, copyright: %s, original: %s, CRC: %s, emphasis: %d\n",
                 fr.stereo,fr.copyright?"Yes":"No",
                 fr.original?"Yes":"No",fr.error_protection?"Yes":"No",
                 fr.emphasis);
 }
 
+#if 0
 #include "genre.h"
 
 // Read & print ID3 TAG. Do not call when playing!!!  returns filesize.