(对于fadden)这是同一个Android MediaCodec崩溃吗?
这个问题是专门针对法登提出的,然后再针对尼基列特提出,尼基列特发布了这个问题。我在前面提到的帖子中没有看到任何后续内容,所以我在这里问这个问题 现在,我再次将这个问题转向法登,或者任何对Android的MediaCodec有深入了解的人: 我有一个应用程序,它使用Android MediaCodec,但不是Surface,在一些手机上崩溃,而在大多数其他手机上运行正常。这是我如何将MediaCodec配置为解码器的:(对于fadden)这是同一个Android MediaCodec崩溃吗?,android,h.264,android-mediacodec,Android,H.264,Android Mediacodec,这个问题是专门针对法登提出的,然后再针对尼基列特提出,尼基列特发布了这个问题。我在前面提到的帖子中没有看到任何后续内容,所以我在这里问这个问题 现在,我再次将这个问题转向法登,或者任何对Android的MediaCodec有深入了解的人: 我有一个应用程序,它使用Android MediaCodec,但不是Surface,在一些手机上崩溃,而在大多数其他手机上运行正常。这是我如何将MediaCodec配置为解码器的: vidDecoder.configure(mVideoDecoderForma
vidDecoder.configure(mVideoDecoderFormat, null, null, 0);
看着日志,我意识到回溯与Nikhillite发布的内容完全相同。这让我相信,我看到的是完全相同的崩溃,也就是说,它可能是由于没有输出曲面造成的
下面是我的简略日志
D/VideoTranscodingLib( 8389): input frame (throughput): 0
D/VideoTranscodingLib( 8389): inIndex = 0
D/VideoTranscodingLib( 8389): input frame (throughput): 1
D/VideoTranscodingLib( 8389): inIndex = 2
D/VideoTranscodingLib( 8389): input frame (throughput): 2
D/VideoTranscodingLib( 8389): inIndex = 3
D/VideoTranscodingLib( 8389): input frame (throughput): 3
D/VideoTranscodingLib( 8389): inIndex = 1
E/OMX-VDEC-1080P( 268): Streamon on OUTPUT Plane was successful
E/OMX-VDEC-1080P( 268):
E/OMX-VDEC-1080P( 268): VIDC Some Event recieved
D/VideoTranscodingLib( 8389): input frame (throughput): 4
D/VideoTranscodingLib( 8389): inIndex = 0
I/ACodec ( 8389): Sending format change with buffer 0x44809b48
I/ACodec ( 8389): Update Resolution Change for buffer 0x44809b48
E/OMX-VDEC-1080P( 268):
E/OMX-VDEC-1080P( 268): No color conversion required
E/OMX-VDEC-1080P( 268): update_portdef Width = 1280 Height = 736 Stride = 1280 SliceHeight = 736
I/ACodec ( 8389): Calling native window update buffer geometry [1280 x 736]
F/libc ( 8389): Fatal signal 11 (SIGSEGV) at 0x00000058 (code=1), thread 8492 (MediaCodec_loop)
I/DEBUG ( 263): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 263): Build fingerprint: 'lge/g2_open_cn/g2:4.2.2/JDQ39B/D80210d.1379696461:user/release-keys'
I/DEBUG ( 263): Revision: '10'
I/DEBUG ( 263): pid: 8389, tid: 8492, name: MediaCodec_loop >>> com.bdti.certimo.transcoding <<<
I/DEBUG ( 263): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000058
I/DEBUG ( 263): r0 00000000 r1 00000012 r2 00000500 r3 000002e0
I/DEBUG ( 263): r4 69c20d18 r5 5ca76343 r6 00000000 r7 00000001
I/DEBUG ( 263): r8 69c20d18 r9 6144ee78 sl 00000000 fp 00000000
I/DEBUG ( 263): ip 4016fe50 sp 6144ec10 lr 5c9e5af5 pc 5c9e5b00 cpsr 20000030
I/DEBUG ( 263): d0 20676e696c6c6143 d1 772065766974616e
I/DEBUG ( 263): d2 707520776f646e69 d3 6675622065746164
I/DEBUG ( 263): d4 0000000000000000 d5 0000000000000000
I/DEBUG ( 263): d6 0193000000020000 d7 000000414ecf951d
I/DEBUG ( 263): d8 4487000000000438 d9 000000004409c000
I/DEBUG ( 263): d10 0000000000000000 d11 0000000000000000
I/DEBUG ( 263): d12 0000000000000000 d13 0000000000000000
I/DEBUG ( 263): d14 0000000000000000 d15 0000000000000000
I/DEBUG ( 263): d16 8f70b9cae566ee6f d17 00000000164aa694
I/DEBUG ( 263): d18 0000001200000012 d19 000000010015a000
I/DEBUG ( 263): d20 0000000100000001 d21 00000001c0000000
I/DEBUG ( 263): d22 000002e000000500 d23 000002e000000500
I/DEBUG ( 263): d24 003e003d003c003b d25 0040003f003e003c
I/DEBUG ( 263): d26 0000000000000000 d27 0000000000000000
I/DEBUG ( 263): d28 001e001d001c001b d29 0020001f001e001c
I/DEBUG ( 263): d30 0040004000400040 d31 0000000000000000
I/DEBUG ( 263): scr 2800001f
I/DEBUG ( 263):
I/DEBUG ( 263): backtrace:
I/DEBUG ( 263): #00 pc 00058b00 /system/lib/libstagefright.so (android::ACodec::sendFormatChange()+1003)
I/DEBUG ( 263): #01 pc 00059bb3 /system/lib/libstagefright.so (android::ACodec::BaseState::onOutputBufferDrained(android::sp<android::AMessage> const&)+186)
I/DEBUG ( 263): #02 pc 0005a4af /system/lib/libstagefright.so (android::ACodec::BaseState::onMessageReceived(android::sp<android::AMessage> const&)+46)
I/DEBUG ( 263): #03 pc 0005a851 /system/lib/libstagefright.so (android::ACodec::ExecutingState::onMessageReceived(android::sp<android::AMessage> const&)+364)
I/DEBUG ( 263): #04 pc 000066a5 /system/lib/libstagefright_foundation.so (android::AHierarchicalStateMachine::onMessageReceived(android::sp<android::AMessage> const&)+80)
I/DEBUG ( 263): #05 pc 00007439 /system/lib/libstagefright_foundation.so (android::ALooperRoster::deliverMessage(android::sp<android::AMessage> const&)+188)
I/DEBUG ( 263): #06 pc 00006ced /system/lib/libstagefright_foundation.so (android::ALooper::loop()+204)
I/DEBUG ( 263): #07 pc 00011253 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+94)
I/DEBUG ( 263): #08 pc 00010dcd /system/lib/libutils.so
I/DEBUG ( 263): #09 pc 0000e538 /system/lib/libc.so (__thread_entry+72)
I/DEBUG ( 263): #10 pc 0000dc24 /system/lib/libc.so (pthread_create+160)
对getOutputBuffers的调用以某种方式触发了对本机窗口缓冲区几何体的更新,该几何体是输出曲面的一部分,而在我的例子中,该几何体没有定义。就这样坠机了
我没有高通MSM8974和安卓4.2.2的设备来重蹈覆辙,因此只能做出有根据的猜测。我查看了AOSP源代码libstagefright/ACodec.cpp,但找不到生成logcat输出的指令
I/ACodec ( 8389): Calling native window update buffer geometry [1280 x 736]
也许我看错地方了,或者ACodec.cpp已经更新了。一些AOSP/MediaCodec的实现者能帮我解释一下吗?谢谢
编辑1:我的问题最初是针对法登的,他澄清了尼基莱特是上述问题的真实写照。我的问题经过编辑以反映这一点
编辑2:在与Nikhillite交换信息后,我自己做了一些研究。我用一个有根据的猜测更新了我的问题。如果法登或其他有知识的人能够证实或纠正我,并提供解决方案,那就太好了。我并没有发布那个问题。原来的问题是,张贴的。我只是编辑它来改进格式。它被否决了,并且没有收到任何答案,所以它被社区自动删除♦ 一个月后。出于某种原因,unknownerror.org在抓取内容时使用了错误的用户名。我不能告诉你关于其他问题的任何事情,所以你可能应该编辑你的问题以获得更多的细节,看看我们是否能解决它。@fadden:谢谢你及时的澄清。原来的问题似乎是正确的。我想知道为什么它被否决和删除。我怀疑崩溃可能是由底层视频库引起的,很难排除故障。让我问真正的原始海报,看看他的崩溃发生了什么。@Nikhillite:你还在吗?@fadden:在my和Nikhillite的崩溃中,提交给MediaCodec的缓冲区都是64位对齐的。我想知道是否有办法将缓冲区对齐更改为128位?我的理解是,该应用程序无法配置MediaCodec的缓冲区队列。有解决办法吗?谢谢@hubier在你的例子中,在我的例子中,崩溃发生在使用'false'ie调用releaseOutputbuffer时。不要渲染到曲面,而是访问bytebuffer。在我的例子中,我直接将它渲染到一个曲面上,但我只是惊讶于它会崩溃并且无法访问bytebuffer。我认为有一种方法可以从egl缓冲区创建一个曲面,它可以直接让您访问解码数据rgba/argb。除此之外,由于h/w限制,我没有AOSP设置,因此无法进一步跟踪它,如果您有一个工作AOSP,只需对其进行黑客攻击并查看。。。
I/ACodec ( 8389): Calling native window update buffer geometry [1280 x 736]