AOMediaCodec / libavif

libavif - Library for encoding and decoding .avif files
Other
1.58k stars 208 forks source link

Android App Crash #2509

Open 6a209 opened 1 week ago

6a209 commented 1 week ago

My Android App has crashed in libandroid_avif.so. Where can I download the symbol table for this so file

wantehchang commented 1 week ago

@jzern @vigneshvg James, Vignesh: Do you know the answer to this question?

jzern commented 1 week ago

It doesn't look like a debug version is published to Maven Central. In the meantime you'll need to build the jni locally to be able to debug it.

Do you have a particular image that's causing a crash?

6a209 commented 6 days ago

It's only crash on some particular phone but we can't reproduce locally。

crash device: vivo V2243A OS: 14.0

We use version is "org.aomedia.avif.android:avif:1.1.1.14d8e3c4“

The native crash stack : Signal 11(SIGSEGV), Code 2(SEGV_ACCERR) 

00 pc 00000000000cdf60 /data/app/~~5QSIHr7I1ndMY9rXZvS8dg==/com.test.test-qix_6K2usvKwvUAoKq0GMA==/lib/arm64/libavif_android.so 

01 pc 00000000000c6678 /data/app/~~5QSIHr7I1ndMY9rXZvS8dg==/com.test.test-qix_6K2usvKwvUAoKq0GMA==/lib/arm64/libavif_android.so 

02 pc 000000000003f270 /data/app/~~5QSIHr7I1ndMY9rXZvS8dg==/com.test.test-qix_6K2usvKwvUAoKq0GMA==/lib/arm64/libavif_android.so 

03 pc 0000000000033aa0 /data/app/~~5QSIHr7I1ndMY9rXZvS8dg==/com.test.test-qix_6K2usvKwvUAoKq0GMA==/lib/arm64/libavif_android.so 

04 pc 0000000000033304 /data/app/~~5QSIHr7I1ndMY9rXZvS8dg==/com.test.test-qix_6K2usvKwvUAoKq0GMA==/lib/arm64/libavif_android.so (Java_org_aomedia_avif_android_AvifDecoder_decode+100) 

05 pc 00000000004251c8 /data/app/~~5QSIHr7I1ndMY9rXZvS8dg==/com.test.test-qix_6K2usvKwvUAoKq0GMA==/oat/arm64/base.odex (art_jni_trampoline+152)

Do you provider the contain symbol table version or help me use ndk-stack to convert crash stack

I cannot provide this image because it involves user privacy. Here is the image header info

Box: ftyp ----- size: 32 (header size: 8) major brand: avif minor version: 0 compatible brands: avif,mif1,miaf,MA1B

Box: meta ----- size: 242 (header size: 12) Box: hdlr ----- size: 40 (header size: 12) pre_defined: 0 handler_type: pict name: libavif
Box: pitm -----
size: 14 (header size: 12)
item_ID: 1
Box: iloc -----
size: 30 (header size: 12)
item ID: 1
construction method: 0
data_reference_index: 0
base_offset: 0
extents: 282,29738
Box: iinf -----
size: 40 (header size: 12)
Box: infe -----
size: 26 (header size: 12)
item_ID: 1
item_protection_index: 0
item_type: av01
item_name: Color
hidden item: false
Box: iprp -----
size: 106 (header size: 8)
Box: ipco -----
size: 75 (header size: 8)
Box: ispe -----
size: 20 (header size: 12)
image width: 894
image height: 1192
Box: pixi -----
size: 16 (header size: 12)
bits_per_channel: 8,8,8
Box: av1C -----
size: 12 (header size: 8)
version: 1
seq_profile: 0
seq_level_idx_0: 8
high_bitdepth: 0
twelve_bit: 0
chroma_subsampling_x: 1
chroma_subsampling_y: 1
chroma_sample_position: 0
initial_presentation_delay: not present
config OBUs:
Box: colr -----
size: 19 (header size: 8)
colour_type: nclx
colour_primaries: 2
transfer_characteristics: 2
matrix_coefficients: 2
full_range_flag: 0
Box: ipma -----
size: 23 (header size: 12)
associations for item ID: 1
property index: 1 (essential: false)
property index: 2 (essential: false)
property index: 3 (essential: true)
property index: 4 (essential: false)

Box: mdat ----- size: 29746 (header size: 8) MIME type: image/avif main brand: avif compatible brands: avif, mif1, miaf, MA1B

jzern commented 6 days ago

I tried recreating the build with some symbols, but ndk-stack didn't produce any output. With addr2line I see:

scale_neon64.cc:?
??:0
scale.cc:?
??:0
scale.c:?
??:0
libavif_jni.cc:?
??:0
??:?
??:0
??:0
??:0

I'm not overly confident about that stacktrace though. If it's to be believed it may be an issue in libyuv during the yuv to rgb color conversion. Without an image or device to reproduce this it may be difficult to debug in this way. I suggest trying to rebuild the jni locally with symbols if the only option you have is to collect remote stacktraces.