2016-11-03 5 views
5

Ich habe einfachen Code, der Opus-Frame in Audio-Samples dekodiert. Es funktioniert auf Android, aber es stürzt in Unity3D iOS-Projekt ab und stürzt nicht in regulären iOS-Projekt ab.Opus-Decoder auf iOS stürzt ohne ersichtlichen Grund

EXC_BAD_ACCESS (code=1, address=0x2f) 

Beide Projekte teilen sich die gleichen opus statischen Bibliotheken und Header-Dateien.

#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

Stapelüberwachung:

#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 

Ich verglich Einstellungen bauen und machte sie fast gleich.

Fehler klingt wie - etwas stimmt nicht mit der Zuordnung.

opus_decoder_create ist in der Lage OpusDecoder zuzuteilen aber Fehler ist in opus_decode

Antwort

1

Dies geschieht durch ein Symbol Konflikt. Die Unity 3D-Bibliothek definiert einige Symbole, einschließlich compute_allocation(), die ebenfalls von libopus definiert und verwendet werden. Wenn sich die Unity 3D-Bibliothek vor libopus in der Linker-Befehlszeile befindet, kann diese Version verwendet werden, die nicht mit libopus funktioniert. Wenn Sie beide Sätze benötigen, müssen Sie möglicherweise die widersprüchlichen Symbole umbenennen.

+0

Ich bin froh, dass Sie hier geantwortet haben! Nochmals vielen Dank. – Tema

+0

Gibt es alternative Lösungen hierfür (z. B. Konfigurieren des Compilers, um alle außer bestimmten Namen zu entfernen)? Diese Lösung könnte jederzeit unterbrochen werden. Unity führt einen neuen internen Funktionsnamen ein. – Martin

Verwandte Themen