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.

[参考译文] Linux/TMDXEVM8148:捕获组件输入存在一些问题

Guru**** 2553610 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/604508/linux-tmdxevm8148-some-problems-with-capture-component-input

器件型号: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。

非常感谢!

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

    GStreamer 视点您观察到的错误意味着您从 v4l2src 获得的视频格式(颜色空间)在大多数情况下与接收器不兼容。
    我建议您在流水线中添加--gst-debug=v4l2src:5 -v 以获得更多调试打印。
    您还可以尝试:
    gst-launch v4l2src device=/dev/video0 always-copy=false queue-size=8! 'VIDEO/x-RAWE-YUV、format=(fourcc) NV12、width=1280、height=720'! 很棒! fakesink 无声=true

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

    您好、 Margarita、

    下面是上述管道的输出,您能看一下输出吗? 两个管道都有错误"ERROR:From Element /GstPipeline0/GstV4l2Src:v4l2src0:internal data flow error"

    我使用的 EVM 套件具有默认的 SD 卡、但运行 gstreamer 时仍会出现许多错误。 !!??

    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-debug=v4l2src:5 -v

    短日志:  

    SRC_CAPTURE_START: 开始捕获
    /GstPipeline0/GstV4l2Src:v4l2src0.GstPad:src:cap = video/x-raw/yUV 删除、form
    t=(fourcc) NV12、帧速率=(fraction) 60/1、width=(int) 1280、height=(int) 720、rowstro=(int) 1
    280
    0:00:01.579049599 1502   0x16050日志                 v4l2src gstv4l2src.c:804:gst_v4l2src
    _解锁_停止: 不再冲洗
    管道处于活动状态,不需要 PREROLL...
    正在将管道设置为正在播放...
    0:00:01.583910348 1502   0x16050日志                 v4l2src gstv4l2src.c:804:gst_v4l2src
    _解锁_停止: 不再冲洗
    新时钟:GstSystemClock
    0:00:01.585608299 1502  0x180f08调试               v4l2src v4l2src_calls.c:110:GST_v4l2
    src_grab 帧: 抓取帧
    0:00:01.619383949 1502  0x180f08信息                v4l2src gstv4l2src.c:1024:gst_v4l2sr
    c_create: 同步到0:00:00.000000000
    接收到的 EOS 事件、按 以终止管道。
    错误:来自元素/GstPipeline:流水 线0/GstV4l2Src:v4l2src0:内部数据流错误。
    其他调试信息:
    gstbasesrc.c (2574):gst_base_src_loop ():/GstPipeline:流水线0/GstV4l2Src:v4l2src0:
    流任务暂停、原因未协商(-4)
    37456850ns 后结束执行。
    正在将管道设置为暂停...
    0:00:01.622147398 1502   0x16050日志                 v4l2src gstv4l2src.c:793:gst_v4l2src
    解锁(_U): 冲洗
    正在将管道设置为就绪...

    0:00:01.623447698 1502   0x16050 log                 v4l2src gstv4l2src.c:793:gst_v4l2src
    解锁(_U): 冲洗
    0:00:01.623536648 1502   0x16050日志                 v4l2src gstv4l2src.c:804:gst_v4l2src
    _解锁_停止: 不再冲洗
    0:00:01.623822648 1502   0x16050调试               v4l2src v4l2src_calls.c:528:GST_v4l2
    SRC_CAPTURE_STOP: 停止捕获
    0:00:01.633155948 1502   0x16050调试               v4l2src v4l2src_calls.c:562:GST_v4l2
    SRC_CAPTURE_DEINIT: 正在退出捕获系统
    !!!!!!!!! 取消引用所有剩余的缓冲区!!!!!!!! /GstPipeline:流水 线0/GstV4l2Src:V4L
    2src0.GstPad:src:cap = NULL
    正在将管道设置为 NULL ...
    正在释放管道...

    完整日志: https://drive.google.com/open?id=0B1sYeYUmGy08N3dXbGFSZUEzZVU

    gst-launch  v4l2src device=/dev/video0 always-copy=false queue-size=8! 'VIDEO/x-RAWE-YUV、format=(fourcc) NV12、width=1280、height=720'! 很棒! fakesink 无声=true

    短日志:

    SRC_CAPTURE_START: 开始捕获
    /GstPipeline0/GstV4l2Src:v4l2src0.GstPad:src:cap = video/x-raw/yUV 删除、form
    t=(fourcc) NV12、帧速率=(fraction) 100/1、width=(int) 1280、height=(int) 720、rowSTRIDE =(int)
    1280
    0:00:00.465240077 1511   0x16050 log                 v4l2src gstv4l2src.c:804:gst_v4l2src
    _解锁_停止: 不再冲洗
    管道处于活动状态,不需要 PREROLL...
    正在将管道设置为正在播放...
    0:00:00.469940327 1511   0x16050 log                 v4l2src gstv4l2src.c:804:gst_v4l2src
    _解锁_停止: 不再冲洗
    新时钟:GstSystemClock
    0:00:00.471455327 1511  0x16aaa8调试               v4l2src v4l2src_calls.c:110:gst_v4l2
    src_grab 帧: 抓取帧
    0:00:00.497549226 1511  0x16aaa8信息                v4l2src gstv4l2src.c:1024:gst_v4l2sr
    c_create: 同步到0:00:00.000000000
    错误:来自元素/GstPipeline:流水 线0/GstV4l2Src:v4l2src0:内部数据流错误。
    其他调试信息:
    gstbasesrc.c (2574):gst_base_src_loop ():/GstPipeline:流水线0/GstV4l2Src:v4l2src0:
    流任务暂停、原因未协商(-4)
    33095299 ns 后结束执行。
    正在将管道设置为暂停...
    0:00:00.503672126 1511   0x16050 log                 v4l2src gstv4l2src.c:793:gst_v4l2src
    解锁(_U): 冲洗
    正在将管道设置为就绪...
    0:00:00.504606876 1511   0x16050 log                 v4l2src gstv4l2src.c:793:gst_v4l2src
    解锁(_U): 冲洗
    0:00:00.504695176 1511   0x16050 log                 v4l2src gstv4l2src.c:804:gst_v4l2src
    _解锁_停止: 不再冲洗
    0:00:00.504989226 1511   0x16050调试               v4l2src v4l2src_calls.c:528:gst_v4l2
    SRC_CAPTURE_STOP: 停止捕获
    0:00:00.515228627 1511   0x16050调试               v4l2src v4l2src_calls.c:562:gst_v4l2
    SRC_CAPTURE_DEINIT: 正在退出捕获系统
    /GstPipeline:流水线0/GstV4l2Src:v4l2src0.GstPad:src:cap = NULL
    正在将管道设置为 NULL ...
    正在释放管道...

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

    什么是连接到电路板的视频源?如何连接?
    它提供的格式是什么?
    在日志中、在管道移动到播放状态之前、我看不到调试消息。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将摄像头连接到组件输入。 摄像头输出为720p (HD 模拟)、我可以通过回声示例捕获输入。
    以下是完整日志(--gst-debug=v4l2src:5 -v): drive.google.com/open
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    使用 saloopback 示例、我选择用户指针缓冲器(V4L2_MEMORY_USERPTR)。 此外、捕获驱动程序仅支持用户指针缓冲器。

    对于上述流水线、我认为 v4l2src 仍使用存储器映射缓冲器。

    0:00:00.407333943 1444  0x16050信息         v4l2src v4l2src_calls.c:452:gst_v4l2src_capture_init: 通过 mmap()捕获缓冲区

    但是、这个流水线使用 omxbufferalloc、v4l2src 必须处于用户指针缓冲模式。

    您对此问题还有其他意见吗?

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

    您好!

    很抱歉耽误你的时间。

    在日志中、捕获模式似乎设置正确。

    在调试日志中、我看到 GST_PAD_PUSH 失败。 正如我所说的、您观察到流任务暂停的错误、未协商原因(-4) 意味着您尝试链接不兼容的元素、或者某些涉及的元素未正确处理上限。

    我假设是第二种情况(capsfilter)。

    您是否曾尝试过类似的流水线?

    gst-launch -v --gst-debug=v4l2src:1 v4l2src device=/dev/video0 always-copy=false queue-size=12!  VIDEO/x-RAWE-YUV 条纹、FORMAT=NV12、width=1280、height=720、帧速率=60/1 ! fakesink 无声=true

    BR
    玛格丽塔

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

    您好!

    通常、我无法运行任何包含 v4l2src 的流水线

    root@dm814x-evm:/home/shang/capture # gst-launch -v --gst-debug=v4l2src:1 v4l2src device=/dev/video0 always-copy=false queue-size=12!  VIDEO/x-RAWE-YUV 条纹、FORMAT=NV12、width=1280、height=720、帧速率=60/1 ! fakesink 无声=true


    警告:错误流水线:无法将 v4l2src0链接到 fakesink0

    下面是详细日志中的一些行:

    0:00:00.222618700 1413   0x16050信息    GST_PADS gstpad.c:1941:GST_PAD_LINK_PREPARE:尝试链接 v4l2src0:src 和 capsfilter0:SINK                                     
    0:00:00.223804300 1413   0x16050 INFO    GST_PADS gstpad.c:2124:GST_PAD_LINK_FULL:已链接 v4l2src0:src 和 capsfilter0:sink、成功                                    
    0:00:00.224002200 1413   0x16050 INFO       GST_Element _pads gstutils.c:1568:GST_Element _link_pad_full:正在尝试将元素 capsfilter0:src 链接到元素 fakesink0:(任何)

               
    0:00:00.224097700 1413   0x16050 INFO       GST_ELECK_PADS GSTElement。c:963:GST_ELECK_GET_STATUS_PAD:找到 PAD capsfilter0:src                                                   
    0:00:00.224196000 1413   0x16050 INFO    GST_PADS gstutils.c:1028:GST_PAD_CHECK_LINK:尝试链接 capsfilter0:src 和 fakesink0:sink                                    
    0:00:00.232356450 1413   0x16050信息       GST_Element _PADS gstutils.c:1203:GST_Element _GET_compatible _pad: 找不到可链接到 capsfilter0:src 的兼容填充    

    0:00:00.232485150 1413   0x16050信息    默认 gstutils.c:1892:gst_el元_link_pads_filtered:无法链接 pads:capsfilter:src -fakesink0:(空)

    0:00:00.232596650 1413   0x16050信息    GST_States gstelement.c:2341:GST_Element _Continue_state: 已完成状态更改为 NULL     

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

    您是否可以尝试将视频源连接到 PC 并使用 gstreamer 版本0.10进行捕获?
    您还可以尝试板载此流水线吗?
    gst-launch -v --gst-debug=v4l2src:1 v4l2src device=/dev/video0 queue-size=12! fakesink 无声=false
    我怀疑您可能会遇到此错误、因为未设置电容滤波器、因此无法将 v4l2src0链接到 fakesink0。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    这是输出
    root@dm814x-evm:/home/shang/capture # gst-launch -v --gst-debug=v4l2src:1 v4l2src device=/dev/dev
    /video0队列大小=12! fakesink 无声=false
    正在将管道设置为暂停...

    模式设置为720p60
    错误:管道不想暂停。
    错误:来自元素/GstPipeline:流水 线0/GstV4l2Src:v4l2src0:无法协商格式
    其他调试信息:
    gstbasesrc.c (2778):gst_base_src_start ():/GstPipeline:流水线0/GstV4l2Src:v4l2src0:
    检查过滤的电容器(如果有)
    正在将管道设置为 NULL ...
    正在释放管道...

    现在、我没有任何支持组件输入的视频捕捉器。 我稍后会向您提供反馈。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    此错误是预期的。

    是否确定格式正确?
    在这张图片中、格式似乎错误:
    drive.google.com/.../view

    BR
    玛格丽塔

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

    我有一个用于设置摄像头输出和设置720p60的软件。
    使用回调示例、它始终检测正确的预设720p60。

    您能告诉我 v4l2src 的输出格式吗? 在 saloopback 中、我按如下方式设置输出格式:
    + capt.fmt.fmt.pix.pixelformat = V4L2_PI_FMT_YUV
    捕获和显示正常。

    + capt.fmt.fmt.pix.pixelformat = V4L2_PI_FMT_NV12
    使用这种格式、我不显示帧、只保存一些原始帧、并在 PC 上使用 ffmpeg 来转换和显示它们。 帧数据错误。 因此、我想知道 NV12格式的 v4l2驱动程序包数据。

    使用 gstreamer、我没有运行任何流水线(YUV 和 NV12)

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

    请检查此主题:
    e2e.ti.com/.../524827
    它可以为 omxbufferalloc (第2页)提供一些想法和修补程序。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我认为我使用的 EVM 套件默认为 EZSDK、gstreamer 将始终正确运行。
    我将检查上面的线程。
    感谢您的支持!!!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    这是 omxbufferalloc 的修补程序:
    gst-openmax-dm81xx.orig/src/OMX/gstomxbufferalloc.c 2012-11-14 16:15:41.392143697 -0600
    ++ gst-openmax-dm81xx/src/OMX/gstomxbufferalloc.c 2012-11-14 16:17:40.760145714-0600
    @@-190、6 +190、7 @@

    GST_ELECK_ADD_PAD (GST_ELEMENT (FILTER)、FILTER->SINKPAD);
    gst_element_add_pad (gst_element (filter)、filter->srcpad);
    + filter->out_port.portptr = gst_omxportptR_new (&filter->out_port);
    filter->silent = false;
    filter->out_port.num_pbuffers = 10;
    filter->out_port.always_copy = false;

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

    您好!

    我的流水线可以很好地运行。 此补丁也包含 在组件源代码/GST-openmax_GST_DM81XX_00_07_00_00/补丁中。  

    然而、ARM 负载非常高、~ 70% CPU。 回调示例仅花费1%的 CPU。

    您能给我一些关于这个问题的评论吗?

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

    请发布您正在使用的流水线。

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

    您好!

    这是我的流水线

    root@dm814x-evm:~ gst-launch v4l2src always 复制= 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:1362):Critical **:GST_v4l2SINK_SYNC_RONATION:Assertion `v4l2_ioctl (FD、VIDIOC_S_CTRL、&CONTROL)>=0' failed

    **(GST-LAUNCH-0.10:1362):Critical **:GST_v4l2SINK_SYNC_RONATION:Assertion `v4l2_ioctl (FD、VIDIOC_S_CTRL、&CONTROL)>=0' failed

    **(GST-LAUNCH-0.10:1362):Critical **:GST_v4l2SINK_SYNC_FLIP:断言`v4l2_ioctl (FD、VIDIOC_S_CTRL、&CONTROL)>=0'失败

    模式设置为720p60
    分配8个大小为:1382400!!
    分配的 outbuf:0x40bef080
    分配的 outbuf:0x40d40880
    分配的 outbuf:0x40e92080
    分配的 outbuf:0x40fe3880
    分配的 outbuf:0x41135080
    分配的 outbuf:0x41286880
    分配的 outbuf:0x413d8080
    分配的 outbuf:0x41529880
    管道处于活动状态,不需要 PREROLL...
    正在将管道设置为正在播放...
    新时钟:GstSystemClock
    perf0:帧数:46      电流:45.56  平均值:45.56 ARM-LOAD:18
    perf0:帧:96      电流:49.15  平均值:47.36 ARM-LOAD:67
    perf0:帧:148     电流:50.59  平均值:48.45 ARM-LOAD:65
    perf0:帧:201     电流:52.43  平均值:49.44 ARM-LOAD:61
    perf0:帧:251     电流:49.28  平均值:49.40 ARM 负载:59
    perf0:帧数:301     电流:49.82  平均值:49.47 ARM-LOAD:68
    perf0:帧:351     电流:49.38  平均值:49.46 ARM-LOAD:65
    perf0:帧:401     电流:49.21  平均值:49.43 ARM-LOAD:65

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

    当您使用 gstreamer 而不是 saLoopBack 时、观察到更高的 CPU 负载是正常现象。
    saLoopBack 演示使用的是低级 v4l2捕获驱动程序。

    但是、您可以尝试放大 v4l2src 元素的队列大小属性(v4l2src queue-size=16)。
    我建议您在流水线中添加一些队列元素并设置属性。
    默认情况下,queue max-size-buffers=0 max-size-time=0 max-size-bytes=0使用这些属性。
    请放大队列中的缓冲区。 即使没有必要增加缓冲区大小、也不会对在流水线中添加缓冲区造成任何损害。 大缓冲器只会增加管道的延迟、而这对于捕获而言并不重要。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我认为 v4l2src 和 saloopback 都直接使用 v4l2 API (打开设备、设置格式、设置缓冲区、打开流、队列和去队列缓冲区)。
    V4l2子系统将控制 HDVPSS 以捕获帧、因此 ARM 负载应较小。

    您能否记下您的管道?
    这是我的新流水线、它仍然花费了过多的 CPU 负载。

    root@dm814x-evm:~ gst-launch v4l2src always 复制= false queue-size=16! 'VIDEO/x-RAWE-YUV 条纹,format=(fourcc) NV12,width=1280,height=720,帧速率=(分数) 60/1'! omxbufferalloc numBuffers=16! 队列最大大小缓冲区=16! OMX_标量器! 很棒! v4l2sink 设备=/dev/video1
    正在将管道设置为暂停...

    **(GST-LAUNCH-0.10:1366):严重**:GST_v4l2SINK_SYNC_RONATION:断言`v4l2_ioctl (FD、VIDIOC_S_CTRL、&CONTROL)>=0'失败

    **(GST-LAUNCH-0.10:1366):严重**:GST_v4l2SINK_SYNC_RONATION:断言`v4l2_ioctl (FD、VIDIOC_S_CTRL、&CONTROL)>=0'失败

    **(GST-LAUNCH-0.10:1366):严重**:GST_v4l2sink_sync_flip:断言`v4l2_ioctl (FD、VIDIOC_S_CTRL、&control)>=0'失败

    模式设置为720p60
    分配16个大小为:1382400!!
    分配的 outbuf:0x40cca080
    分配的 outbuf:0x40e1b880
    分配的 outbuf:0x40f6d080
    分配的 outbuf:0x410be880
    分配的 outbuf:0x41210080
    分配的 outbuf:0x41361880
    分配的 outbuf:0x414b3080
    分配的 outbuf:0x41604880
    分配的 outbuf:0x41756080
    分配的 outbuf:0x418a7880
    分配的 outbuf:0x419f9080
    分配的 outbuf:0x41b4a880
    已分配 outbuf:0x41c9c080
    分配的 outbuf:0x41ed880
    分配的 outbuf:0x41f3f080
    分配的 outbuf:0x42090880
    管道处于活动状态,不需要 PREROLL...
    正在将管道设置为正在播放...
    新时钟:GstSystemClock
    perf0:帧:46 电流:45.67平均值:45.67臂载:37
    perf0:帧:95 电流:48.24平均值:46.96臂负载:73
    perf0:帧:146 电流:49.70平均值:47.88臂载:70
    perf0:帧:195 电流:47.73平均值:47.84臂载:69
    perf0:帧:245 电流:49.86平均值:48.24臂负载:73
    perf0:帧:296 电流:50.20平均值:48.57 ARM-LOAD:66
    perf0:帧:345 电流:48.86平均值:48.61 ARM-LOAD:73
    perf0:帧:394 电流:48.38平均值:48.58臂负载:68
    perf0:帧:443 电流:48.20平均值:48.54 ARM-LOAD:63
    perf0:帧:491 电流:47.09平均值:48.39 ARM-LOAD:69
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!


    请尝试在以下位置添加队列:

    gst-launch v4l2src queue 大小=16! 'VIDEO/x-RAWE-YUV 条纹,format=(fourcc) NV12,width=1280,height=720,帧速率=(分数) 60/1'! 队列最大大小缓冲区=100最大大小时间=0最大大小字节=0 ! omxbufferalloc numBuffers=16! 队列队列最大大小缓冲区=100最大大小时间=0最大大小字节=0 ! OMX_标量器! 很棒! v4l2sink 设备=/dev/video1

    您可以尝试增加最大大小的缓冲区。

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

    您好!

    当插入最大大小缓冲区=20、100或200的队列元素时、在所有情况下、arm-load 近似为60%。

    我在运行 gstreamer 时还发现了一个奇怪的行为。 有时、我按 Ctrl C 停止管道、但它停留在"将管道设置为暂停..."。 我必须再按一次 Ctrl C 才能停止。 之后、如果我再次运行流水线、则 arm-load 仅 近似为30%。

    除了使用 gstreamer 之外、我的应用程序还在 A8上运行其他任务、因此我确实希望优化此流水线。

    Ridge Run 改进了 TI GST-openmax。 我应该购买他们的包裹吗?  

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

    您好!

    [引用 user="Kiet Phi77">运行 gstreamer 时,我还发现了一种奇怪的行为。 有时、我按 Ctrl C 停止管道、但它停留在"将管道设置为暂停..."。 我必须再按一次 Ctrl C 来停止

    您可以在流水线中添加-e。

    [引用用户="Kiet Phi77"]

    除了使用 gstreamer、我的应用程序还在 A8上运行其他任务、

    [/报价]

    这可能是负载的原因。

    [报价用户="Kiet Phi77"]Ridge Run 改进了 TI GST-openmax。 我应该购买他们的包裹吗?  [/报价]

    很抱歉我不知道这一点。

    BR
    玛格丽塔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我仅使用上述 gstreamer 流水线进行测试。 我稍后将尝试调试此问题。
    感谢您的支持!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Margarita、
    您能否向我发送固件 dm816x_hdvpss_v4l2.xem3的源代码? 我想检查一些配置。
    谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    此源代码是覆盖包的一部分、并且处于 NDA 状态、因此我无法发送。

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

    您好、Margarita、

    我有一个小问题,您能帮我一秒钟吗?

    TI81XX 视频捕获驱动程序是否支持非阻塞模式? 我在非阻塞模式(O_RDWR | O_NONBLOCK)下打开/dev/video0、并使用选择功能检查 IO。 但是、select 函数始终返回超时。

    FD_ZERO (&FDS);
    FD_SET (FD、&FDS);
    /*超时。 */
    tV.tv_sec = 2;
    tV.tv_usec = 0;
    
    int ret = select (fd + 1、&fds、NULL、NULL、&tv);