This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] [TDA4VM] V4L2支持的输入格式

Guru**** 2032800 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1125837/tda4vm-supported-input-format-on-v4l2

大家好、TI 成员

我尝试使用 V4L2从 NV12映像录制 h264视频。 我正在处理 PSDK8.2

当我在 Linux 中检查 v4l2驱动程序时、有两个器件。 一个是十进制、另一个是类似这样的编码。

Fullscreen
1
2
3
4
5
6
root@j7-evm:~# v4l2-ctl --list-devices
vxd-dec (platform:vxd-dec):
/dev/video0
vxe-enc (platform:vxe-enc):
/dev/video1
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

出于我的目的(YUV420 NV12 ->H264)、我认为我必须使用/dev/video1。 我是对的吗?

我使用 query_device 检查了一些类似的内容。

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mfc_fd = open(/dev/video1, O_RDWR | O_NONBLOCK, 0);
v4l2_capability cap = { 0 };
int ret = ioctl(mfc_fd, VIDIOC_QUERYCAP, &cap);
fprintf(stderr, "Querycaps: fd=%#x driver=%s card=%s bus_info=%s\n", mfc_fd, cap.driver, cap.card, cap.bus_info);
fprintf(stderr, "Querycaps: device_caps=%#08x capabilities=%#08x\n", cap.device_caps, cap.capabilities);
{
struct v4l2_fmtdesc desc = {0};
struct v4l2_frmsizeenum frmsize = {0};
desc.index = 0;
desc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
fprintf(stderr, "Calling VIDIOC_ENUM_FMT on CAPTURE:\n");
while ((ret = ioctl(mfc_fd, VIDIOC_ENUM_FMT, &desc)) == 0)
{
fprintf(stderr, "\tdesc.index = %d, pixelformat=0x%x, description = %s\n", desc.index, desc.pixelformat, desc.description);
desc.index++;
}
desc.index = 0;
desc.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
fprintf(stderr, "Calling VIDIOC_ENUM_FMT on OUTPUT:\n");
while((ret = ioctl(mfc_fd, VIDIOC_ENUM_FMT, &desc))==0)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

日志也位于下面。

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
Querycaps: fd=0x7f driver=vxe-enc card=vxe-enc bus_info=platform:vxe-enc
Querycaps: device_caps=0x4204000 capabilities=0x84204000
Calling VIDIOC_ENUM_FMT on CAPTURE:
desc.index = 0, pixelformat=0x34363248, description = H.264
Calling VIDIOC_ENUM_FMT on OUTPUT:
desc.index = 0, pixelformat=0x3231564e, description = Y/CbCr 4:2:0
desc.index = 1, pixelformat=0x34424752, description = 32-bit A/XRGB 8-8-8-8
Calling VIDIOC_ENUM_FRAMESIZES:
VIDIOC_ENUM_FRAMESIZES types got 2
frmsizes[0] width=1 height=1920
VIDIOC_ENUM_FRAMEINTERVALS got DISCRETE
fival[0] numerator=1 denominator=15 framerate=15
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

当输入类型为 NV12时、我认为 VIDEO 编码器不支持。

此外、它看起来是唯一可以支持 的输出帧(非输入图像)大小 is1x1920。

是否可以从 NV12进行编码?

此致

永西格

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    解决了这个问题