OSDN Git Service

libhb:
authorsr55 <sr55@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Thu, 4 Dec 2008 20:57:31 +0000 (20:57 +0000)
committersr55 <sr55@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Thu, 4 Dec 2008 20:57:31 +0000 (20:57 +0000)
The malloc() function in cygwin doesn't return 16-byte aligned memory which causes it to randomly crash. Replaced with memalign() for the cygwin platform only.

git-svn-id: svn://localhost/HandBrake/trunk@2006 b64f7644-9d1e-0410-96f1-a4d463321fa5

libhb/decavcodec.c

index e335ef9..7f68100 100644 (file)
@@ -1065,7 +1065,14 @@ static void decodeAudio( hb_work_private_t *pv, uint8_t *data, int size )
             // the buffer is allocated on our stack. Rather than doing
             // complicated, machine dependent alignment here we use the
             // fact that malloc returns an aligned pointer on most architectures.
-            pv->buffer = malloc( AVCODEC_MAX_AUDIO_FRAME_SIZE );
+
+            #ifdef SYS_CYGWIN
+                // Cygwin's malloc doesn't appear to return 16-byte aligned memory so use memalign instead.
+               pv->buffer = memalign(16, AVCODEC_MAX_AUDIO_FRAME_SIZE);
+            #else
+                pv->buffer = malloc( AVCODEC_MAX_AUDIO_FRAME_SIZE );
+            #endif
+
             buffer = pv->buffer;
         }
         int out_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;