changeset 12089:1fe597788e3f

prevent crash in case we are unable to get aligned buffer
author faust3
date Thu, 01 Apr 2004 12:35:17 +0000
parents f52e662bf365
children 837485aef2eb
files liba52/parse.c
diffstat 1 files changed, 11 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/liba52/parse.c	Thu Apr 01 10:35:30 2004 +0000
+++ b/liba52/parse.c	Thu Apr 01 12:35:17 2004 +0000
@@ -31,6 +31,7 @@
 #include "a52_internal.h"
 #include "bitstream.h"
 #include "tables.h"
+#include "mm_accel.h"
 
 #ifdef HAVE_MEMALIGN
 /* some systems have memalign() but no declaration for it */
@@ -53,9 +54,6 @@
     sample_t * samples;
     int i;
 
-    imdct_init (mm_accel);
-    downmix_accel_init(mm_accel);
-
     samples = memalign (16, 256 * 12 * sizeof (sample_t));
 #if defined(__MINGW32__) && defined(HAVE_SSE) 
     for(i=0;i<10;i++){
@@ -66,13 +64,18 @@
       }
       else break;
     }
-    if((int)samples%16){
-      printf("unable to get 16 bit aligned memory => expect crashes when using SSE instructions\n");
-    }
 #endif
+    if(((int)samples%16) && (mm_accel&MM_ACCEL_X86_SSE)){
+      mm_accel &=~MM_ACCEL_X86_SSE;
+      printf("liba52: unable to get 16 byte aligned memory disabling usage of SSE instructions\n");
+    }   
+    
     if (samples == NULL)
-	return NULL;
-
+	return NULL;    
+    
+    imdct_init (mm_accel);
+    downmix_accel_init(mm_accel);
+    
     for (i = 0; i < 256 * 12; i++)
 	samples[i] = 0;