ref: d17bcbf1b30f1233c093d77665a93841dcd2eff5
parent: 5eeeda96d0fa0ab7d06c7fad8faca133ed95877f
author: Gregory Maxwell <[email protected]>
date: Fri May 4 16:01:56 EDT 2012
Increase alignment of the internal state structures to sizeof(void *) from 4 bytes. OpusCustomMode begins with a pointer and was getting misaligned on 64 bit arches.
--- a/src/opus_private.h
+++ b/src/opus_private.h
@@ -79,11 +79,10 @@
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);