器件型号: TDA4VP-Q1
您好、
我正在尝试使用 V4L2 API 以 960x540 的分辨率对一些 H.265 视频流进行编码。 不过、从 TDA4 TI SDK 9.2.00.05 版和 6.1.80 版 ti-linux.kernel 开始、我会遇到一些问题。 下面是 对我的问题的更详细说明、包括相关驱动程序代码片段的链接:
仅使用分辨率为 960x540 的 VIDIOC_S_FMT 不起作用、并且我最终得到无效的位流、因为高度维度不可除以 8。 请注意、以 960x544 的分辨率调用 VIDIOC_S_FMT 并使用 VIDIOC_S_SELECTION 手动设置 960x540 的一致性窗口不会产生任何影响 、因为 WAVE5 驱动程序将 VIDIOC_S_SELECTION 实现为存根。
我研究了一点、发现如果通过 VIDIOC_S_FMT 传递了不一致的分辨率、驱动程序本身应该设置一个一致性窗口。 但是、对于 H.265、仅 当流旋转和/或镜像 (不包括水平+垂直翻转和 180°旋转的身份变换)时才执行此操作。 我通过启用 V4L2_CID_HFLIP 确认了这一点、结果产生了分辨率为 960x544 且符合性窗口设置为 960x540 的工作 H.265 流。
虽然我没有尝试更新的内核版本、但 我认为最近的 ti-linux-kernel 分支 (ti-linux-6.18.y) 中似乎仍然存在所谓的错误。
请注意、 VIDIOC_S_SELECTION 的实现 已更新。 然而、如果我正确地遵循了代码、它实际上并不是设置一致性窗口、而是更新先前通过 VIDIOC_S_FMT 传递的分辨率(编码器初始化代码 conf_win.width/conf_win.height与命名相反,实际上用于设置流维度)。
是否有针对这个问题的已知权变措施让我能够以不合规的 960x540 分辨率对 H.265 流进行编码?
谢谢、
Martin