使用 libstagefright 解码高清视频导致视频乱码
Decoding hd video with libstagefright results in garbled video
我正在使用 libstagefright 解码 android 上具有高基线和级别 31 的 1020p 视频。
在模拟器上视频解码失败,我认为原因是根据代码 here
softavc 不支持高基线
但我在使用 OMX.MTK.VIDEO.DECODER.AVC 解码器的真实设备上测试了这段代码。并且根据这个link,这个解码器支持31级的高基线解码。
但是视频结果是乱码
有没有人有任何见解,为什么会这样?可能的解决方案是什么?
输出乱码可能有3个原因
解码器使用了一个 stride
,您没有将其纳入计算。 推荐解决方案:请检查OMX
组件的port
参数,寻找stride
并进行适当的修改。
我假设你正在解码 1080
,请考虑 1088
计算 而不是 of 1080
。如果您的输出清晰 luma
,但混乱 chroma
,则可以确认这一点。 720p
适合你吗?
如果以上两个条件都不成立,则解码器可能输出tiled
输出。请检查供应商的规格。如果这是真的,您将需要从 tiled
格式转换为更常见的格式,如 NV12
。
编辑: 我认为 tiling
是你的问题。请查看与您的问题相关且有颜色转换解决方案的this github
commit。
我假设你正在拍摄分辨率为 1920 x 1080 的视频。建议将解码缓冲区的宽度和高度分别对齐到最接近的 128 和 32 的倍数,以避免输出乱码。
ALIGN(decoded_buffer_width, 128)
ALIGN(decoded_buffer_height, 32)
所以您必须使用 1920 x 1088 进行计算
我正在使用 libstagefright 解码 android 上具有高基线和级别 31 的 1020p 视频。
在模拟器上视频解码失败,我认为原因是根据代码 here
softavc 不支持高基线但我在使用 OMX.MTK.VIDEO.DECODER.AVC 解码器的真实设备上测试了这段代码。并且根据这个link,这个解码器支持31级的高基线解码。
但是视频结果是乱码
有没有人有任何见解,为什么会这样?可能的解决方案是什么?
输出乱码可能有3个原因
解码器使用了一个
stride
,您没有将其纳入计算。 推荐解决方案:请检查OMX
组件的port
参数,寻找stride
并进行适当的修改。我假设你正在解码
1080
,请考虑1088
计算 而不是 of1080
。如果您的输出清晰luma
,但混乱chroma
,则可以确认这一点。720p
适合你吗?如果以上两个条件都不成立,则解码器可能输出
tiled
输出。请检查供应商的规格。如果这是真的,您将需要从tiled
格式转换为更常见的格式,如NV12
。
编辑: 我认为 tiling
是你的问题。请查看与您的问题相关且有颜色转换解决方案的this github
commit。
我假设你正在拍摄分辨率为 1920 x 1080 的视频。建议将解码缓冲区的宽度和高度分别对齐到最接近的 128 和 32 的倍数,以避免输出乱码。
ALIGN(decoded_buffer_width, 128)
ALIGN(decoded_buffer_height, 32)
所以您必须使用 1920 x 1088 进行计算