器件型号:TMDXEVM8148
工具/软件:Linux
您好!
我正在从套件 EVM DM8148上的组件输入捕获视频。 我有一些问题,有人能帮我一秒钟吗?
我已将脚本/etc/init.d/load-hd-firmware.sh 的内容替换为脚本 load-HD-v4l2-firmware.sh 的内容。 我在 Linux 中找到了/dev/video0、1、2、3、4、5、6。
/etc/init.d/matrix-gui-e 停止
/etc/init.d/pvr-init 停止
1.使用 gstreamer
我的摄像头输出为720p60。 我运行该流水线
gst-launch v4l2src device=/dev/video0 always-copy=false queue-size=8 ! 'VIDEO/x-RAWE-YUV、FORMAT=(fourcc) NV12、width=1280、height=720、帧速率=(分数) 60/1' ! omxbufferalloc 数字缓冲区=8 ! 很棒! OMX_标量 器! v4l2sink 设备=/dev/video1
以下是输出:
正在将管道设置为暂停...
**(GST-LAUNCH-0.10:1448):严重**:GST_v4l2SINK_SYNC_RONATION:断言`v4l2_ioctl (FD、VIDIOC_S_CTRL、&CONTROL)>=0'失败
**(GST-LAUNCH-0.10:1448):严重**:GST_v4l2SINK_SYNC_RONATION:断言`v4l2_ioctl (FD、VIDIOC_S_CTRL、&CONTROL)>=0'失败
**(GST-LAUNCH-0.10:1448):严重**:GST_v4l2SINK_SYNC_FLIP:断言`v4l2_ioctl (FD、VIDIOC_S_CTRL、&CONTROL)>=0'失败
模式设置为720p60
管道处于活动状态,不需要 PREROLL...
正在将管道设置为正在播放...
新时钟:GstSystemClock
错误:来自元素/GstPipeline:流水 线0/GstV4l2Src:v4l2src0:内部数据流错误。
其他调试信息:
gstbasesrc.c (2574):gst_base_src_loop ():/GstPipeline:流水线0/GstV4l2Src:v4l2src0:
流任务暂停、原因未协商(-4)
40502700ns 后结束执行。
正在将管道设置为暂停...
正在将管道设置为就绪...
!!!!!!!!! 取消引用所有剩余的缓冲区!!!!!!!! 正在将管道设置为 NULL ...
正在释放管道...
以下是调试日志: https://drive.google.com/open?id=0B1sYeYUmGy08X2hWSEdnRzFzb1k
通常、我无法使用任何包含 v4l2src 的流水线。
2.运行 saloopback 和 saLoopBackFbdev 示例
捕获和显示正常。
3.我正在开发一个使用 V4L2 API 从组件输入捕获的应用程序。
我修改了 saloopback 示例以从输入捕获 NV12并将原始帧数据写入文件。
我想使用格式 NV12、因为我将使用 OMX_h264enc 对帧数据进行编码。
下面是用于设置格式的代码
capt.fmt.fmt.pix.pixelformat = V4L2_PI_FMT_NV12;
capt.fmt.fmt.pix.bytesperline = capt.fmt.fmt.pix.width * 3/2;
capt.fmt.fmt.sizeimage = t.ft.fmt.ipoc.f.f.ft.ft.ft.pr.s.pix.width * 3/2;capt.capt.capt.fmt.capt.capt.capt.ft.capt.capt.capt.ft.capt.capt.ft.capt.capt.capt.ft.capt.ft.ft.cap
&capt.fmt);
//再次获取格式并打印它
capt.fmt.type = V4L2_BUF_TY_VIDEO_CAPTURE;
ioctl (capt.FD、VIDIOC_G_FMT、&capt.fmt);
printFormat ("Capture after VIDIOC_G_FMT"、 capt.fmt (&C);
宽度= 1280、高度= 720、capt.fmt.fmt.pix.sizeimage = 1280*1.5 * 720 = 1382400 (字节)。 但是、当我再次获得格式时、 capt.fmt.fmt.pix.sizeimage = 2073600 (字节)
VIDIOC_S_FMT 格式之前的捕捉:
===========================================================================================================================
FMT.TYPE = 1.
FMT.width = 1280
FMT.Height = 720
FMT.PIXelformat = NV12
FMT.bytesperline = 1920
fmt.sizeimage = 1382400
===========================================================================================================================
===========================================================================================================================
VIDIOC_G_FMT 格式后的捕捉:
===========================================================================================================================
FMT.TYPE = 1.
FMT.width = 1280
FMT.Height = 720
FMT.PIXelformat = NV12
FMT.bytesperline = 1920
fmt.sizeimage = 2073600
===========================================================================================================================
我将原始文件复制到我的 PC 并使用 ffplay 进行显示
ffplay -v info -f rawvideo -pixel_format nv12 -video_size 1280x720 ray.nv12
帧数据错误。 下图: https://drive.google.com/open?id=0B1sYeYUmGy08X2IycVRuMWw2eU0
如果我设置格式 V4L2_PI_FMT_YUV、则原始帧数据有效、我可以播放。
有人能帮我确认什么吗?
+对于 NV12帧(1280x720)、fmt.sizeimage = 1382400字节或 2073600字节
+如果 fmt.sizeimage = 2073600、我认为 Y 和 UV 之间有一些填充字节。
有人能帮我解决这种格式吗? 当然 、我有它、但帧大小必须为宽度*高度* 1.5。
非常感谢!