gpt4 book ai didi

android-ndk - 在 Android 中使用 stagefright 库的 H264 硬件加速解码

转载 作者:行者123 更新时间:2023-12-04 23:29:46 30 4
gpt4 key购买 nike

我正在尝试使用带有 Stagefright 库的硬件来解码 h264 视频。

我在 here 中使用了一个示例.我在 MedaBuffer 中获取解码数据.用于渲染 MediaBuffer->data()我试过AwesomeLocalRenderer在 AwesomePlayer.cpp 中。

但屏幕画面失真

这里是 Link原始和崩溃的图片。

并在示例中尝试过这个

sp<MetaData> metaData = mVideoBuffer->meta_data();
int64_t timeUs = 0;
metaData->findInt64(kKeyTime, &timeUs);
native_window_set_buffers_timestamp(mNativeWindow.get(), timeUs * 1000);
err = mNativeWindow->queueBuffer(mNativeWindow.get(),
mVideoBuffer->graphicBuffer().get(), -1);`

但是我的 native 代码崩溃了。我无法获得真实的图片,它或损坏或黑屏。

提前致谢。

最佳答案

如果您使用的是 HW加速解码器,那么组件输出端口上的分配将基于 Native Window .换句话说,输出缓冲区基本上是 gralloc已被 Stagefright 传递的句柄框架。 (引用: OMXCodec::allocateOutputBuffersFromNativeWindow )。因此,MediaBuffer被退回不应被解释为普通的 YUV缓冲。

如果是 AwesomeLocalRenderer ,框架在 mTarget->render 时执行软件颜色转换被调用,如此处所示。如果你跟踪代码流,你会发现 MediaBuffer内容直接解释为YUV缓冲。

对于 HW加速编解码器,您应该使用 AwesomeNativeWindowRenderer .如果您有特殊的聘用条件AwesomeLocalRenderer ,请务必突出显示相同的内容。我可以适本地改进这个响应。

PS:出于调试目的,您还可以引用 this question它捕获了转储 YUV 数据并对其进行分析的方法。

关于android-ndk - 在 Android 中使用 stagefright 库的 H264 硬件加速解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21913373/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com