2016-11-03 13 views
5

Tôi có mã đơn giản giải mã khung opus thành các mẫu âm thanh. Nó hoạt động trên Android nhưng nó bị treo trong dự án Unity3D iOS và không bị lỗi trong dự án iOS thông thường.Bộ giải mã Opus trên iOS bị lỗi mà không có lý do rõ ràng nào.

EXC_BAD_ACCESS (code=1, address=0x2f) 

Cả hai dự án đều chia sẻ cùng một tệp thư viện tĩnh và tệp tiêu đề.

#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 

tôi so xây dựng các thiết lập và làm cho họ gần như giống nhau.

Lỗi giống như âm thanh - đã xảy ra sự cố với phân bổ.

opus_decoder_create có khả năng phân bổ OpusDecoder nhưng lỗi là ở opus_decode

Trả lời

1

này xảy ra do mâu thuẫn biểu tượng. Thư viện Unity 3D định nghĩa một số ký hiệu, bao gồm compute_allocation(), cũng được định nghĩa và sử dụng bởi libopus. Nếu thư viện Unity 3D trước libopus trên dòng lệnh linker thì nó có thể kéo trong phiên bản đó, nó sẽ không hoạt động với libopus. Nếu bạn cần cả hai bộ thì bạn có thể cần phải đổi tên các biểu tượng xung đột.

+0

Tôi rất vui vì bạn đã trả lời ở đây! Cảm ơn một lần nữa. – Tema

+0

Có bất kỳ giải pháp thay thế nào cho điều này (ví dụ: cấu hình trình biên dịch để xóa tất cả trừ một số tên nhất định)? Giải pháp này có thể phá vỡ bất cứ lúc nào Unity giới thiệu một tên hàm nội bộ mới. – Martin

Các vấn đề liên quan