Increase alignment of the internal state structures to sizeof(void *) from 4 bytes.
authorGregory Maxwell <greg@xiph.org>
Sat, 5 May 2012 00:01:56 +0000 (20:01 -0400)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Thu, 10 May 2012 18:44:56 +0000 (14:44 -0400)
OpusCustomMode begins with a pointer and was getting misaligned on 64 bit arches.

src/opus_private.h

index 675c2c4..7e27b90 100644 (file)
@@ -79,11 +79,10 @@ int encode_size(int size, unsigned char *data);
 int opus_decode_native(OpusDecoder *st, const unsigned char *data, int len,
       opus_val16 *pcm, int frame_size, int decode_fec, int self_delimited, int *packet_offset);
 
-/* Make sure everything's aligned to 4 bytes (this may need to be increased
-   on really weird architectures) */
+/* Make sure everything's aligned to sizeof(void *) bytes */
 static inline int align(int i)
 {
-    return (i+3)&-4;
+    return (i+sizeof(void *)-1)&-sizeof(void *);
 }
 
 int opus_repacketizer_out_range_impl(OpusRepacketizer *rp, int begin, int end, unsigned char *data, int maxlen, int self_delimited);