IOS Opus Decoder Crashing for No Apparent Reason

I have a simple code that decodes the opus frame into sound samples. It runs on Android, but it crashed into a Unity3D iOS project and didn't crash in a regular iOS project.

EXC_BAD_ACCESS (code=1, address=0x2f) 

Both projects use the same opus static library and header files.

 #include "opus.h" int test1(){ unsigned char opus_chunk[] = {0x68, 0x97, 0x50, 0x0d, 0xba, 0xa4, 0x80, 0x0d, 0x31, 0x21, 0x9c, 0xcf, 0x74, 0x98, 0xda, 0xc6, 0xd5, 0x27, 0xcb, 0xd9, 0x51, 0xd7, 0xce, 0x90, 0xc5, 0x58, 0x94, 0x53, 0xb0, 0xe9, 0xb4, 0xe4, 0xf4, 0x42, 0x4d, 0xc7, 0xa4, 0x61, 0xfa, 0xfe}; int len = sizeof(opus_chunk); short samples[5760]; int err1; OpusDecoder *decoder; decoder = opus_decoder_create(48000, 1, &err1); int n = opus_decode(decoder, opus_chunk, len, samples, 5760, 0); opus_decoder_destroy(decoder); } 

xcode opus crash in celt

Stack trace:

 #0 0x00b944ec in compute_allocation () #1 0x00c03698 in celt_decode_with_ec at ./opus_ios/build/src/opus-1.1.2/celt/celt_decoder.c:956 #2 0x00c2400c in opus_decode_frame at ./opus_ios/build/src/opus-1.1.2/src/opus_decoder.c:490 #3 0x00c24ea2 in opus_decode_native [inlined] at ./opus_ios/build/src/opus-1.1.2/src/opus_decoder.c:692 #4 0x00c24e80 in opus_decode at ./opus_ios/build/src/opus-1.1.2/src/opus_decoder.c:782 

I compared the build settings and made them almost the same.

An error sounds: something is wrong with the distribution.

opus_decoder_create may allocate OpusDecoder, but the error is in opus_decode

+5
source share
1 answer

This is due to a character conflict. The Unity 3D library defines several characters, including compute_allocation() , which are also defined and used by libopus. If the Unity 3D library is in front of libopus on the linker command line, then it can pull out the version that will not work with libopus. If you need both sets, you may need to rename conflicting characters.

+2
source

Source: https://habr.com/ru/post/1259222/


All Articles