Skip to content

[Help] APP crash on native method sws_getContext #219

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
KnIfER opened this issue Dec 21, 2019 · 3 comments
Closed

[Help] APP crash on native method sws_getContext #219

KnIfER opened this issue Dec 21, 2019 · 3 comments

Comments

@KnIfER
Copy link

KnIfER commented Dec 21, 2019

setDataSource->..->stream_component_open->sws_getContext->ffmpeg side

https://stackoverflow.com/questions/51322811/ffmpeg-video-thumbnail

Sample to generate a thumbnail from

libc: Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 10256 (glide-source-th), pid 10173 (knziha.ODPlayer)
2019-12-21 20:39:17.776 630-3878/? I/GRALLOC: getCallingPid=660, shrFd=32,fmt=0x1,intFmt=0x200000001,btStrd=4864,size=9486336,pid=630 
    	 yuv=2,w=1174,h=1912,Stride u=0 v=0,offset u=0 v=0 
    	 iova_size=9486336,conUsg=0xb00,proUsg=0xb00,	 strd=1216,[afbc]HdrStrd=1216 PyldStrd=77824 Scrmbl=2,ionhnd = 1 
2019-12-21 20:39:17.790 756-895/? W/JankService: processEntry, not beta version or commercial log off
2019-12-21 20:39:17.808 10259-10259/? I/crash_dump64: obtaining output fd from tombstoned, type: kDebuggerdTombstone
2019-12-21 20:39:17.809 757-757/? I//system/bin/tombstoned: received crash request for pid 10256
2019-12-21 20:39:17.810 10259-10259/? I/crash_dump64: performing dump of process 10173 (target tid = 10256)
DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
DEBUG: Build fingerprint: 'HUAWEI/VTR-AL00/HWVTR:9/HUAWEIVTR-AL00/9.1.0.201C00:user/release-keys'
DEBUG: Revision: '0'
DEBUG: ABI: 'arm64'
DEBUG: Happend: 'Sat Dec 21 20:39:17 2019
    '
DEBUG: SYSVMTYPE: Art
    APPVMTYPE: Art
DEBUG: pid: 10173, tid: 10256, name: glide-source-th  >>> com.knziha.ODPlayer <<<
DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
DEBUG:     x0  0000000000000000  x1  0000000000002810  x2  0000000000000006  x3  0000000000000008
DEBUG:     x4  000000766c65fcd0  x5  000000766c65fcd0  x6  000000766c65fcd0  x7  ffffff80ffffffd8
DEBUG:     x8  0000000000000083  x9  e925d9e637334530  x10 0000000000000000  x11 fffffffc7ffffbdf
DEBUG:     x12 0000000000000001  x13 aaaaaaaaaaaaaaab  x14 0000000000000003  x15 000000766ba0d4c8
DEBUG:     x16 000000772d3b12c0  x17 000000772d2efe34  x18 0000000000000001  x19 00000000000027bd
DEBUG:     x20 0000000000002810  x21 000000766c261300  x22 0000000000000000  x23 000000766c261300
DEBUG:     x24 000000766bbf9000  x25 0000000000010000  x26 0000000000000000  x27 000000000000000a
DEBUG:     x28 000000000000001a  x29 000000766c65fcf0
DEBUG:     sp  000000766c65fcb0  lr  000000772d2e4960  pc  000000772d2e4988
DEBUG: backtrace:
DEBUG:     #00 pc 0000000000022988  /system/lib64/libc.so (abort+116)
DEBUG:     #01 pc 000000000033d3e4  /data/app/com.knziha.ODPlayer-qUFpxA0p4ReLOYIQ1v9aBg==/lib/arm64/libijkffmpeg.so (sws_setColorspaceDetails+224)

I'am using you code along with ijkplayer. see ijk-metadata-retriever

lldb infos:

(lldb) bt
* thread #38, name = 'glide-source-th', stop reason = signal SIGABRT
  * frame #0: 0x000000772d2e4988 libc.so`abort + 116
    frame #1: 0x00000076665903e8 libijkffmpeg.so`sws_setColorspaceDetails + 228
    frame #2: 0x0000007666326094 libijkffmpeg.so`sws_init_context + 332
    frame #3: 0x00000076665902dc libijkffmpeg.so`sws_getContext + 48
    frame #4: 0x000000766a551698 libffmpeg_metadata_jni.so`stream_component_open + 356
    frame #5: 0x000000766a5518dc libffmpeg_metadata_jni.so`set_data_source_l + 440
    frame #6: 0x000000766a551a6c libffmpeg_metadata_jni.so`set_data_source_uri + 96
    frame #7: 0x000000766a54fa2c libffmpeg_metadata_jni.so`MediaMetadataRetriever::setDataSource(char const*, char const*) + 52
    frame #8: 0x000000766a551174 libffmpeg_metadata_jni.so`___lldb_unnamed_symbol15$$libffmpeg_metadata_jni.so + 592
    frame #9: 0x00000076abb15fe4 libart.so`art_quick_generic_jni_trampoline + 148
    frame #10: 0x00000076abb0cf8c libart.so`art_quick_invoke_stub + 588
    frame #11: 0x00000076ab672208 libart.so`art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*) + 204
    frame #12: 0x00000076ab821fac libart.so`art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*) + 348
    frame #13: 0x00000076ab81bfb4 libart.so`bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 972
    frame #14: 0x00000076ab84e708 libart.so`bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 584
    frame #15: 0x00000076ab84c7c8 libart.so`void art::interpreter::ExecuteSwitchImplCpp<false, false>(art::interpreter::SwitchImplContext*) + 60468
    frame #16: 0x00000076abb1893c libart.so`ExecuteSwitchImplAsm + 12
    frame #17: 0x00000076ab7f5c58 libart.so`art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool) (.llvm.4019025862) + 396
    frame #18: 0x00000076ab7fb7ac libart.so`art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) + 220
    frame #19: 0x00000076ab81bf98 libart.so`bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 944
    frame #20: 0x00000076ab850758 libart.so`bool art::interpreter::DoInvoke<(art::InvokeType)4, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 1396
    frame #21: 0x00000076ab849f74 libart.so`void art::interpreter::ExecuteSwitchImplCpp<false, false>(art::interpreter::SwitchImplContext*) + 50144
    frame #22: 0x00000076abb1893c libart.so`ExecuteSwitchImplAsm + 12
    frame #23: 0x00000076ab7f5c58 libart.so`art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool) (.llvm.4019025862) + 396
    frame #24: 0x00000076ab7fb7ac libart.so`art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) + 220
    frame #25: 0x00000076ab81bf98 libart.so`bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 944
    frame #26: 0x00000076ab850758 libart.so`bool art::interpreter::DoInvoke<(art::InvokeType)4, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 1396
    frame #27: 0x00000076ab849f74 libart.so`void art::interpreter::ExecuteSwitchImplCpp<false, false>(art::interpreter::SwitchImplContext*) + 50144
    frame #28: 0x00000076abb1893c libart.so`ExecuteSwitchImplAsm + 12
    frame #29: 0x00000076ab7f5c58 libart.so`art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool) (.llvm.4019025862) + 396
    frame #30: 0x00000076ab7fb7ac libart.so`art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) + 220
    frame #31: 0x00000076ab81bf98 libart.so`bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 944
    frame #32: 0x00000076ab84fedc libart.so`bool art::interpreter::DoInvoke<(art::InvokeType)1, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 252
    frame #33: 0x00000076ab84d09c libart.so`void art::interpreter::ExecuteSwitchImplCpp<false, false>(art::interpreter::SwitchImplContext*) + 62728
    frame #34: 0x00000076abb1893c libart.so`ExecuteSwitchImplAsm + 12
    frame #35: 0x00000076ab7f5c58 libart.so`art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool) (.llvm.4019025862) + 396
    frame #36: 0x00000076ab7fb7ac libart.so`art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) + 220
    frame #37: 0x00000076ab81bf98 libart.so`bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 944
    frame #38: 0x00000076ab84fedc libart.so`bool art::interpreter::DoInvoke<(art::InvokeType)1, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 252
    frame #39: 0x00000076ab84d09c libart.so`void art::interpreter::ExecuteSwitchImplCpp<false, false>(art::interpreter::SwitchImplContext*) + 62728
    frame #40: 0x00000076abb1893c libart.so`ExecuteSwitchImplAsm + 12
    frame #41: 0x00000076ab7f5c58 libart.so`art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool) (.llvm.4019025862) + 396
    frame #42: 0x00000076ab7fb7ac libart.so`art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) + 220
    frame #43: 0x00000076ab81bf98 libart.so`bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 944
    frame #44: 0x00000076ab850758 libart.so`bool art::interpreter::DoInvoke<(art::InvokeType)4, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 1396
    frame #45: 0x00000076ab849f74 libart.so`void art::interpreter::ExecuteSwitchImplCpp<false, false>(art::interpreter::SwitchImplContext*) + 50144
    frame #46: 0x00000076abb1893c libart.so`ExecuteSwitchImplAsm + 12
    frame #47: 0x00000076ab7f5c58 libart.so`art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool) (.llvm.4019025862) + 396
    frame #48: 0x00000076ab7fb7ac libart.so`art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) + 220
    frame #49: 0x00000076ab81bf98 libart.so`bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 944
    frame #50: 0x00000076ab84fedc libart.so`bool art::interpreter::DoInvoke<(art::InvokeType)1, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 252
    frame #51: 0x00000076ab84d09c libart.so`void art::interpreter::ExecuteSwitchImplCpp<false, false>(art::interpreter::SwitchImplContext*) + 62728
    frame #52: 0x00000076abb1893c libart.so`ExecuteSwitchImplAsm + 12
    frame #53: 0x00000076ab7f5c58 libart.so`art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool) (.llvm.4019025862) + 396
    frame #54: 0x00000076ab7fb7ac libart.so`art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) + 220
    frame #55: 0x00000076ab81bf98 libart.so`bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 944
    frame #56: 0x00000076ab84e708 libart.so`bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 584
    frame #57: 0x00000076ab84c7c8 libart.so`void art::interpreter::ExecuteSwitchImplCpp<false, false>(art::interpreter::SwitchImplContext*) + 60468
    frame #58: 0x00000076abb1893c libart.so`ExecuteSwitchImplAsm + 12
    frame #59: 0x00000076ab7f5c58 libart.so`art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool) (.llvm.4019025862) + 396
    frame #60: 0x00000076ab7fb7ac libart.so`art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) + 220
    frame #61: 0x00000076ab81bf98 libart.so`bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 944
    frame #62: 0x00000076ab850758 libart.so`bool art::interpreter::DoInvoke<(art::InvokeType)4, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 1396
    frame #63: 0x00000076ab849f74 libart.so`void art::interpreter::ExecuteSwitchImplCpp<false, false>(art::interpreter::SwitchImplContext*) + 50144
    frame #64: 0x00000076abb1893c libart.so`ExecuteSwitchImplAsm + 12
    frame #65: 0x00000076ab7f5c58 libart.so`art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool) (.llvm.4019025862) + 396
    frame #66: 0x00000076ab7fb7ac libart.so`art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*) + 220
    frame #67: 0x00000076ab81bf98 libart.so`bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 944
    frame #68: 0x00000076ab84f174 libart.so`bool art::interpreter::DoInvoke<(art::InvokeType)3, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) + 1424
    frame #69: 0x00000076ab84b1f8 libart.so`void art::interpreter::ExecuteSwitchImplCpp<false, false>(art::interpreter::SwitchImplContext*) + 54884
    frame #70: 0x00000076abb1893c libart.so`ExecuteSwitchImplAsm + 12
    frame #71: 0x00000076ab7f5c58 libart.so`art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool) (.llvm.4019025862) + 396
    frame #72: 0x00000076abac8a8c libart.so`artQuickToInterpreterBridge + 1024
    frame #73: 0x00000076abb16100 libart.so`art_quick_to_interpreter_bridge + 96
    frame #74: 0x00000076abb0cf8c libart.so`art_quick_invoke_stub + 588
    frame #75: 0x00000076ab672208 libart.so`art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*) + 204
    frame #76: 0x00000076aba10fd8 libart.so`art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*) + 108
    frame #77: 0x00000076aba12094 libart.so`art::InvokeVirtualOrInterfaceWithJValues(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, jvalue*) + 428
    frame #78: 0x00000076aba3d688 libart.so`art::Thread::CreateCallback(void*) + 1124
    frame #79: 0x000000772d34558c libc.so`__pthread_start(void*) + 40
    frame #80: 0x000000772d2e61e0 libc.so`__start_thread + 72

java:

mRetriever = new FFmpegMediaMetadataRetriever();
mRetriever.setDataSource(model.path);//crash
Bitmap picture = mRetriever.getFrameAtTime();
@KnIfER
Copy link
Author

KnIfER commented Dec 21, 2019

same or similar issues:
#218
#183

#203

@KnIfER
Copy link
Author

KnIfER commented Dec 21, 2019

Simply add if(s->video_st->codec->pix_fmt!=-1) before sws_getContext in the method "stream_component_open";

-1 is actually PIX_FMT_NONE; but I searched for it in and coundn't find it.

This issue won't occur if use ffmpeg_3.0.1 contained by this repo.

@KnIfER KnIfER closed this as completed Dec 21, 2019
@KnIfER
Copy link
Author

KnIfER commented Dec 22, 2019

if(s->video_st->codec->pix_fmt==-1)
                s->video_st->codec->pix_fmt=0;

Repository owner deleted a comment from RowlandOti Feb 29, 2020
delabiejochen added a commit to delabiejochen/FFmpegMediaMetadataRetriever that referenced this issue Oct 21, 2020

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant