繁体   English   中英

使用Stagefright库在Android中进行H264 HW加速解码

[英]H264 HW accelerated decoding in Android using stagefright library

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

我在这里用了一个例子。 我在MedaBuffer获取解码数据。 用于渲染MediaBuffer->data()我试图AwesomeLocalRenderer在AwesomePlayer.cpp。

但是屏幕上的图像失真

这是原始图片和崩溃图片的链接

并在示例中也尝试过`

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);`

但是我的本机代码崩溃了。 我无法获得真实的照片或它损坏或黑屏。

提前致谢。

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

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

对于HW加速编解码器,您应该使用AwesomeNativeWindowRenderer 如果您有使用AwesomeLocalRenderer特殊条件,请突出显示相同的内容。 我可以适当地优化此响应。

PS:出于调试目的,您还可以参考此问题该问题捕获了转储YUV数据并进行分析的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM