gpt4 book ai didi

android - Nexus 7 2013 mediacodec 视频编码器输出乱码

转载 作者:行者123 更新时间:2023-12-02 21:03:33 24 4
gpt4 key购买 nike

我正在开发一个应用程序,它使用 h.264 编码器将电影编码到图库和其他目标。此应用程序支持输出时的可变宽高比(1:1、2:3、3:2、16:9、3:4、4:3)。我使用表面输入进行 4.3 API 的输入/输出。

该应用程序在许多设备上运行正常(在 S3、摩托罗拉 G、Nexus 7 2012、摩托罗拉 X 上测试),但是,我在 Nexus 7 2013 上运行它时遇到了困难。

基本上,有些输出分辨率有效,有些则无效。 3:4 (720x960)、2:3 (720x1080) 和 16:9 (1280x720) 按预期工作,但其余(1:1 (960x960)、3:2 (1080x720) 和 4:3 (960x720))会产生像这样的输出:

http://imageshack.com/a/img811/7984/dtgh.png

我的猜测是,编码器中存在一些硬编码的值,该值将其输入表面视为具有与实际宽度不同的宽度 - 像素线似乎“未正确对齐”。但是,我不知道是什么原因导致这种情况以及如何解决它。

日志中没有错误,视频编码器编解码器在输出媒体格式时在日志中输出正确的表面宽度和高度。

更新:使用 360、720 或 1280 宽度编码时似乎没有问题,高度没有影响。我还没有找到任何其他低于 1280 的宽度。

update2:似乎还有更多可用的宽度:180、240、640、700。找不到它们之间的任何相关性。

最佳答案

我认为这与设备的芯片组有关。我的旧摩托罗拉 XT1058 也遇到同样的问题,它使用高通 Snapdragon S4 Pro,与 Nexus 7 相同的芯片组。

做了一些研究,我通过另一个答案发现,在较旧的高通设备中,YUV 数据需要在 2K 边界对齐,但我不明白如何在使用输入表面而不是 YUV 缓冲区时修复它。

有关高通对齐要求的声明,请参阅下一个接受的答案:

How to get stride and Y plane alignment values for MediaCodec encoder

我的解决方法是,对于较旧的设备,我将使用我知道可行的分辨率,这些分辨率可以通过使用 CamcorderProfile API 查询视频配置文件来获取。

主要问题是如何检测设备是否受到影响,因为 MediaCodec API 只能给出编解码器名称,而不能给出其版本。

关于android - Nexus 7 2013 mediacodec 视频编码器输出乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22579865/

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