Opus decoder on iOS is crashing with no obvious reason
Asked Answered
D

1

6

I have simple code that decodes opus frame into audio samples. It works on Android but it crashes in Unity3D iOS project and does not crash in regular iOS project.

EXC_BAD_ACCESS (code=1, address=0x2f)

Both projects share 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 build settings and made them almost same.

Error sounds like - something is wrong with allocation.

opus_decoder_create is able to allocate OpusDecoder but error is in opus_decode

Duquette answered 3/11, 2016 at 13:8 Comment(0)
B
4

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

Bassist answered 19/11, 2016 at 22:20 Comment(3)
I am glad you responded here! Thank again.Duquette
Are there any alternative solutions to this (e.g configuring the compiler to strip all except certain names)? This solution could break any time Unity introduces a new internal function name.Phylloid
Its actual in 2023! Unity + Dissonanse. opus_decode_floatDamick

© 2022 - 2024 — McMap. All rights reserved.