请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:AM5718 工具/软件:Linux
尊敬的 TI 专家:
我的硬件板是 AM5718 IDK、它在 RT Linux SDK 上运行、以获得最新版本。
我已经使用实现了一个简单的摄像头应用、与双摄像头示例类似。
在我的测试过程中、摄像机通过了以下赞扬:
VIDIOC_QUERYCAP
VIDIOC_ENUM_FMT
VIDIOC_G_FMT
VIDIOC_S_FMT
它还应用了缓冲器:
VIDIOC_REQBUFS
但在 VIDIOC_QBUF 命令期间失败、它抛出无效参数错误。 示例代码的一部分如下所示:
Int Init_Camsart (int Width、int hight)
{
printf ("Nemo Init Camicy\n");
//打开设备
FD =打开(file_video、O_RDWR);
if (-1 == FD)
{
perror ("打开视频设备失败");
printf ("Nemo open video device fail\n");
返回-1;
}
//检查设备是否能够流式传输
if (ioctl (fd、VIDIOC_QUERYCAP、∩)< 0)
{
Perror ("Nemo VIDIOC_QUERYCAP");
返回-1;
}
其他
{
printf ("Nemo VIDIOC_QUERYCAP ok \n");
printf ("驱动程序:\t%s\n"、cap.driver);
printf ("卡:\t%s\n"、cap.card);
printf ("bus_info:\t%s\n"、cap.bus_info);
printf ("版本:\t%d\n"、cap.version);
printf ("功能:\t%x\n"、cap.capabilities);
if ((cap.capabilities & V4L2_CAP_VIDEO 捕捉)== V4L2_CAP_VIDEO 捕捉)
{
printf ("Nemo 设备%s:支持捕获。\n",file_video);
}
if ((cap.capabilities 和 V4L2_CAP_STREGUSDICE_STREGUSDICE_= V4L2_CAP_STREGUSE_STREGUSE_IF)
{
printf ("Nemo 设备%s:支持流式传输。\n",file_video);
}
}
//emu 都支持 fmt
fmtdesc.index=0;
fmtdesc.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;
printf ("支持格式:\n");
while (ioctl (fd、VIDIOC_ENUM_FMT、&fmtdesc)!=1)
{
printf ("Nemo \t%d.%s\n"、fmtdesc.index+1,fmtdesc.description);
fmtdesc.index++;
}
FMT.TYPE = V4L2_BUF_TYPE_VIDEO 捕捉;
if (ioctl (FD、VIDIOC_G_FMT、&fmt)==1)
{
printf ("无法获取格式\n");
返回-1;
}
其他
{
printf ("Nemo 启用以获取格式\n");
}
fmt.fmt.pix.pixelformat = FourCC_STR ("YUYV");
FMT.TYPE = V4L2_BUF_TYPE_VIDEO 捕捉;
fmt.fmt.pix.height = IMAGEHEIGHT;
fmt.fmt.pix.width = IMAGEWIDTH;
//fmt.fmt.pix.field = V4L2_field_interlosed;
if (ioctl (FD、VIDIOC_S_FMT、&fmt)==1)
{
printf ("无法设置格式\n");
返回-1;
}
{
printf ("fmt.type:\t\t%d\n"、fmt.type);
printf ("pix.pixelformat:\t%c%c%c%c%c\n"、fmt.fmt.pix.pixelformat & 0xFF、(fmt.fmt.pix.pix.pixelformat >> 8)& 0xFF、(fmt.fmt.pix.pix.pixelformat >> 16)& 0xFF、 (fmt.fmt.pix.pixelformat >> 24)和0xFF);
printf ("pix.height:\t\t%d\n"、fmt.fmt.pix.height);
printf ("pix.width:\t\t%d\n"、fmt.fmt.pix.width);
printf ("pix.field:\t\t%d\n"、fmt.fmt.pix.field);
}
//set fps
setfps.type = V4L2_BUF_TY_VIDEO_CAPTURE;
setfps.parm.capture.timeperframe.numerator = 10;
setfps.parm.capture.timeperframe.denominator = 10;
printf ("init %s \t[OK]\n"、file_video);
int i;int i
内部转台;
//应用缓冲区
//3.
struct v4l2_requestbuffers requestbuffer;
requestbuffer.count = count;
requestbuffer.type = V4L2_BUF_TYPE_VIDEO 捕捉;
requestbuffer.memory = V4L2_MEMORY_DMABUF;
RET = ioctl (FD、VIDIOC_REQBUFS、&requestbuffer);
if (ret!= 0)
{
perror ("请求缓冲区失败");
返回-3;}
其他
{
printf ("Nemo VIDIOC_REQBUFS ok ");
}
//querybuffer
struct v4l2_buffer querybuffer;
querybuffer.type = V4L2_BUF_TYPE_VIDEO 捕捉;
querybuffer.memory = V4L2_memory_DMABUF;
struct v4l2_buffer queuebuffer;
queuebuffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
queuebuffer.memory = V4L2_MEMORY_DMABUF;
for (i = 0;i < count;i++)
{
querybuffer.index = I;
RET = ioctl (FD、VIDIOC_QUERYBUF、&querybuffer);
if (ret!= 0)
{
perror ("查询缓冲区失败");
返回-4;
}
其他
{
printf ("助记符 VIDIOC_QUERYBUF ok \n");
}
printf (“索引:%d 长度:%d 偏移:%d \n”,
querybuffer.index、querybuffer.length、querybuffer.m.offset);
length = querybuffer.length;
//内存映射
yuV[i]= mmap (0、querybuffer.length、PROT_read | PROT_write、map_shared、fd、querybuffer.m.offset);
//队列
queuebuffer.index = I;
RET = ioctl (FD、VIDIOC_QBUF、&queuebuffer);
if (ret!= 0)
{
perror ("queuebuffer fail");
返回-5;
}
}
//init 队列
enqueue.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
dequeue.type = V4L2_BUF_TYPE_视频_捕捉;
enqueue.memory = V4L2_MEMORY_DMABUF;
dequeue.memory = V4L2_memory_DMABUF;
返回0;
}
日志如下所示:
root@am57xx-EVM:~#./cameram Nemo Init Camin院 Nemo VIDIOC_QUERYCAP 正常 驱动程序: VIP 卡: VIP BUS_INFO: 平台:VIP 版本: 263200 功能:85200001 Nemo 器件/dev/video1:支持捕捉。 Nemo 器件/dev/video1:支持流。 支持格式: Nemo 1.Y/CbCr 4:2:0 Nemo 2.UYVY 4:2:2 Nemo 3.YUYV 4:2:2 Nemo 4.VYUY 4:2:2 Nemo 5.YVYU 4:2:2 Nemo 6.24位 RGB 8-8. Nemo 7.32位 A/XRGB 8-8. Nemo 8.24位 BGR 8-8. Nemo 9.32位 BGRA/X 8-8-8. Nemo 10.8位 Bayer BGBG/GRGR Nemo 使能以获取格式 FMT.TYPE: 1 PIx.pixelformat: YUYV PIX 高度: 240 PIX.width (PIX.宽度): 320 PIX 射野: 1 初始化/dev/video1 [确定] Nemo VIDIOC_REQBUFS OK Nemo VIDIOC_QUERYBUF OK 索引:0长度:153600偏移:0 queuebuffer 失败:参数无效 root@am57xx-EVM:~#./cameram Nemo Init Camin院 Nemo VIDIOC_QUERYCAP 正常 驱动程序: VIP 卡: VIP BUS_INFO: 平台:VIP 版本: 263200 功能:85200001 Nemo 器件/dev/video1:支持捕捉。 Nemo 器件/dev/video1:支持流。 支持格式: Nemo 1.Y/CbCr 4:2:0 Nemo 2.UYVY 4:2:2 Nemo 3.YUYV 4:2:2 Nemo 4.VYUY 4:2:2 Nemo 5.YVYU 4:2:2 Nemo 6.24位 RGB 8-8. Nemo 7.32位 A/XRGB 8-8. Nemo 8.24位 BGR 8-8. Nemo 9.32位 BGRA/X 8-8-8. Nemo 10.8位 Bayer BGBG/GRGR Nemo 使能以获取格式 FMT.TYPE: 1 PIx.pixelformat: YUYV PIX 高度: 240 PIX.width (PIX.宽度): 320 PIX 射野: 1 初始化/dev/video1 [确定] Nemo VIDIOC_REQBUFS OK Nemo VIDIOC_QUERYBUF OK 索引:0长度:153600偏移:0 queuebuffer 失败:参数无效
这里的问题是什么? 非常感谢!
此致、
Nemo