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:v4l2h264enc 输入的摄像头输出格式不匹配 — 是否需要转换?

Guru**** 2463330 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1536149/tda4vm-camera-output-format-mismatch-with-v4l2h264enc-input---conversion-needed

器件型号:TDA4VM


工具/软件:

我发现摄像机输出和v4l2h264enc编码器输入要求之间格式不匹配:

摄像头输出 (v4l2-ctl):

  • YUV 格式(YUYV、UYVY 等)

  • Bayer 格式(BA81、GBRG 等)

  • 灰度(灰色)

  • RGB 格式(RGBR、XR24 等)

v4l2h264enc 输入 (GST-CHECK-1.0):

  • 接受: video/x-raw

  • 支持的格式:Y42B、NV16、NV61、NV21、NV12、 I420

  • 支持分辨率 1x1 至 32768x32768 和各种帧速率。

关键问题: 摄像头的主要输出(如 YUYV/UYVY) 直接兼容 使用编码器所需的格式(如 NV12/I420)。 这意味着我们不能将摄像机输出直接送入v4l2h264enc

问题: 鉴于此不匹配、 编码前是否需要格式转换? 我的理解是否正确? 如果没有、正确的方法是什么?

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

    root@j784s4-evm:~# gst-inspect-1.0 v4l2h264enc
    Factory Details:
      Rank                     primary + 1 (257)
      Long-name                V4L2 H.264 Encoder
      Klass                    Codec/Encoder/Video/Hardware
      Description              Encode H.264 video streams via V4L2 API
      Author                   ayaka <ayaka@soulik.info>
      Documentation            gstreamer.freedesktop.org/.../v4l2h264enc.html
    
    Plugin Details:
      Name                     video4linux2
      Description              elements for Video 4 Linux
      Filename                 /usr/lib/gstreamer-1.0/libgstvideo4linux2.so
      Version                  1.22.12
      License                  LGPL
      Source module            gst-plugins-good
      Documentation            gstreamer.freedesktop.org/.../
      Source release date      2024-04-29
      Binary package           GStreamer Good Plug-ins source release
      Origin URL               Unknown package origin
    
    GObject
     +----GInitiallyUnowned
           +----GstObject
                 +----GstElement
                       +----GstVideoEncoder
                             +----GstV4l2VideoEnc
                                   +----GstV4l2H264Enc
                                         +----v4l2h264enc
    
    Implemented Interfaces:
      GstPreset
    
    Pad Templates:
      SINK template: 'sink'
        Availability: Always
        Capabilities:
          video/x-raw
                     format: { (string)Y42B, (string)NV16, (string)NV61, (string)NV21, (string)NV12, (string)I420 }
                      width: [ 1, 32768 ]
                     height: [ 1, 32768 ]
                  framerate: [ 0/1, 2147483647/1 ]
      
      SRC template: 'src'
        Availability: Always
        Capabilities:
          video/x-h264
              stream-format: byte-stream
                  alignment: au
                      level: { (string)1, (string)1b, (string)1.1, (string)1.2, (string)1.3, (string)2, (string)2.1, (string)
    (string)3.1, (string)3.2, (string)4, (string)4.1, (string)4.2, (string)5, (string)5.1 }
                    profile: { (string)baseline, (string)constrained-baseline, (string)main, (string)extended, (string)high, 
     (string)high-4:2:2, (string)high-4:4:4 }
    
    Element has no clocking capabilities.
    Element has no URI handling capabilities.
    
    Pads:
      SINK: 'sink'
        Pad Template: 'sink'
      SRC: 'src'
        Pad Template: 'src'
    
    Element Properties:
    
      capture-io-mode     : Capture I/O mode (matches src pad)
                            flags: readable, writable
                            Enum "GstV4l2IOMode" Default: 0, "auto"
                               (0): auto             - GST_V4L2_IO_AUTO
                               (1): rw               - GST_V4L2_IO_RW
                               (2): mmap             - GST_V4L2_IO_MMAP
                               (3): userptr          - GST_V4L2_IO_USERPTR
                               (4): dmabuf           - GST_V4L2_IO_DMABUF
                               (5): dmabuf-import    - GST_V4L2_IO_DMABUF_IMPORT
      
      device              : Device location
                            flags: readable
                            String. Default: "/dev/video1"
      
      device-fd           : File descriptor of the device
                            flags: readable
                            Integer. Range: -1 - 2147483647 Default: -1 
      
      device-name         : Name of the device
                            flags: readable
                            String. Default: null
      
      extra-controls      : Extra v4l2 controls (CIDs) for the device
                            flags: readable, writable
                            Boxed pointer of type "GstStructure"
      
      min-force-key-unit-interval: Minimum interval between force-keyunit requests in nanoseconds
                            flags: readable, writable
                            Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 
      
      name                : The name of the object
                            flags: readable, writable
                            String. Default: "v4l2h264enc0"
      
      output-io-mode      : Output side I/O mode (matches sink pad)
                            flags: readable, writable
                            Enum "GstV4l2IOMode" Default: 0, "auto"
                               (0): auto             - GST_V4L2_IO_AUTO
                               (1): rw               - GST_V4L2_IO_RW
                               (2): mmap             - GST_V4L2_IO_MMAP
                               (3): userptr          - GST_V4L2_IO_USERPTR
                               (4): dmabuf           - GST_V4L2_IO_DMABUF
                               (5): dmabuf-import    - GST_V4L2_IO_DMABUF_IMPORT
      
      parent              : The parent of the object
                            flags: readable, writable
                            Object of type "GstObject"
      
      qos                 : Handle Quality-of-Service events from downstream
                            flags: readable, writable
                            Boolean. Default: false
      
     ESC[D
                            Integer. Range: -1 - 2147483647 Default: -1 
      
      device-name         : Name of the device
                            flags: readable
                            String. Default: null
      
      extra-controls      : Extra v4l2 controls (CIDs) for the device
                            flags: readable, writable
                            Boxed pointer of type "GstStructure"
      
      min-force-key-unit-interval: Minimum interval between force-keyunit requests in nanoseconds
                            flags: readable, writable
                            Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0 
      
      name                : The name of the object
                            flags: readable, writable
                            String. Default: "v4l2h264enc0"
      
      output-io-mode      : Output side I/O mode (matches sink pad)
                            flags: readable, writable
                            Enum "GstV4l2IOMode" Default: 0, "auto"
                               (0): auto             - GST_V4L2_IO_AUTO
                               (1): rw               - GST_V4L2_IO_RW
                               (2): mmap             - GST_V4L2_IO_MMAP
                               (3): userptr          - GST_V4L2_IO_USERPTR
                               (4): dmabuf           - GST_V4L2_IO_DMABUF
                               (5): dmabuf-import    - GST_V4L2_IO_DMABUF_IMPORT
      
      parent              : The parent of the object
                            flags: readable, writable
                            Object of type "GstObject"
      
      qos                 : Handle Quality-of-Service events from downstream
                            flags: readable, writable
                            Boolean. Default: false
    

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

    root@j784s4-evm:~# v4l2-ctl -d /dev/video4 --list-formats-ex
    ioctl: VIDIOC_ENUM_FMT
            Type: Video Capture
    
            [0]: 'YUYV' (YUYV 4:2:2)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [1]: 'UYVY' (UYVY 4:2:2)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [2]: 'YVYU' (YVYU 4:2:2)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [3]: 'VYUY' (VYUY 4:2:2)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [4]: 'BA81' (8-bit Bayer BGBG/GRGR)
                    Size: Stepwise 16x1 - 16384x16384 with step 16/1
            [5]: 'GBRG' (8-bit Bayer GBGB/RGRG)
                    Size: Stepwise 16x1 - 16384x16384 with step 16/1
            [6]: 'GRBG' (8-bit Bayer GRGR/BGBG)
                    Size: Stepwise 16x1 - 16384x16384 with step 16/1
            [7]: 'RGGB' (8-bit Bayer RGRG/GBGB)
                    Size: Stepwise 16x1 - 16384x16384 with step 16/1
            [8]: 'GREY' (8-bit Greyscale)
                    Size: Stepwise 16x1 - 16384x16384 with step 16/1
            [9]: 'BG10' (10-bit Bayer BGBG/GRGR)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [10]: 'GB10' (10-bit Bayer GBGB/RGRG)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [11]: 'BA10' (10-bit Bayer GRGR/BGBG)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [12]: 'RG10' (10-bit Bayer RGRG/GBGB)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [13]: 'RGI0' (10-bit Bayer RGBG/GIrGIr)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [14]: 'GRI0' (10-bit Bayer GRGB/IrGIrG)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [15]: 'BGI0' (10-bit Bayer BGRG/GIrGIr)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [16]: 'GBI0' (10-bit Bayer GBGR/IrGIrG)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [17]: 'GIR0' (10-bit Bayer GIrGIr/RGBG)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [18]: 'IGR0' (10-bit Bayer IrGIrG/GRGB)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [19]: 'GIB0' (10-bit Bayer GIrGIr/BGRG)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [20]: 'IGB0' (10-bit Bayer IrGIrG/GBGR)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [21]: 'BG12' (12-bit Bayer BGBG/GRGR)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [22]: 'GB12' (12-bit Bayer GBGB/RGRG)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [23]: 'BA12' (12-bit Bayer GRGR/BGBG)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [24]: 'RG12' (12-bit Bayer RGRG/GBGB)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [25]: 'RGBR' (16-bit RGB 5-6-5 BE)
                    Size: Stepwise 8x1 - 8192x16384 with step 8/1
            [26]: 'XR24' (32-bit BGRX 8-8-8-8)
                    Size: Stepwise 4x1 - 4096x16384 with step 4/1
            [27]: 'XB24' (32-bit RGBX 8-8-8-8)
                    Size: Stepwise 4x1 - 4096x16384 with step 4/1
    

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

    您好、

    感谢您的详细问题。 由于今天在美国度假、预计回复会延迟。

    此致、

    Josiitaa

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

    您好:  

    您使用的是哪个 SDK 版本? 我会做一些背景研究,你可能需要加入哪些插件来协助转换. 但是、编码器确实支持使用 YUV420 输入和 YUV422(在内部下采样到 YUV420)。

    谢谢、
    Sarabesh S.

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

    您好:

    我们使用的 SDK 版本是 10.00.00。

    谢谢、

    Linghui。

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

    尊敬的 Linghui:  

    感谢您提供的信息。 我明天将为您提供更新。

    此致、
    Sarabesh S.

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

    尊敬的 Linghui:  

    对延迟表示歉意、带宽受限。 查看该规范后、 VPU 仅支持 YUV420 的原生 H264 和 H265 编码/解码。 不过、  YUV422 输入是可接受的编码输入  并 将下采样到 420 以由 PRP 硬件模块进行内部处理。

    因此、您的用例受支持、您可以 在没有外部 gstreamer 插件的情况下将摄像头输出馈送到编码器。

    示例流水线:  

    • gst-launch-1.0 filesrc location=/example.yuv! 射频豹宽度=1920 高度=1080 格式=YVYU  帧率=30/1 比色度=bt709! v4l2h264enc! filesink location=/example_out.h264

    谢谢您、
    Sarabesh S.

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

    尊敬的 Sarabesh:

    当我们运行捕获流水线时:

    gst-launch-1.0 v4l2src device=/dev/video4 num-buffers=100 ! \
    video/x-raw,format=UYVY,width=1920,height=1080 ! \
    filesink location=test.uyvy
    

    …完成且无错误、并生成`test.UYVY`。

    但是、当我们随后将该文件馈入编码器流水线时:

    gst-launch-1.0 filesrc location=/test.uyvy ! \
    rawvideoparse width=1920 height=1080 format=UYVY framerate=30/1 colorimetry=bt709 ! \
    v4l2h264enc ! filesink location=/example_out.h264
    

    启动器中止:

    WARNING: erroneous pipeline: could not set property "format" in element "rawvideoparse" to "UYVY"
    

    此致、
    Linghui

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

    尊敬的 Linghui:  

    明天我将提供最新情况。

    谢谢、
    Sarabesh S.

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

    您好灵辉、对延迟的道歉有限。 仍在努力验证此用例的流水线是否正确。 感谢您的耐心。

    此致、
    Sarabesh S.

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

    尊敬的 Sarabesh:

    请问您可以提前向客户提供任何阶段更新吗?

    客户仍在等待。

    谢谢、

    Kevin

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

    尊敬的 Kevin:  

    对不起, 占用了一些其他主题,占用了带宽. 我使用以下流水线验证了 YUV422 编码:  

    • gst-launch-1.0 filesrc location=/松鼠–720x576-422P.yu! rawvideoparse width=720 height=576 format=y42b 帧速=30/1 色度=bt601! v4l2h264enc! filesink location=/松鼠.h264

    对于您的特定用例、请尝试以下操作:  

    • gst-launch-1.0 filesrc location=/example.yuv! rawvideoparse width=1920 height=1080 format=y42b  帧率=30/1 比色度=bt601! v4l2h264enc! filesink location=/example_out.h264

    如果这对您不起作用、请共享流输入、以便我可以在我的环境中进行复制。

    谢谢您、
    Sarabesh S.

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

    尊敬的 Sarabesh:

    感谢管道样品!
    我只更改了文件名:

    • gst-launch-1.0 filesrc location=./raw_video_600.yuv! \
      rawvideoparse width=1920 height=1080 format=y42b 帧速=30/1 色度=bt601! \
      v4l2h264enc! \
      filesink location=../example_out.h264

    生成的颜色为 Off(关闭)。
    我们的来源实际上是 UYVY、所以我尝试了:

    • gst-launch-1.0 filesrc location=./raw_video_600.yuv! \
      rawvideoparse width=1920 height=1080 format=UYVY 帧速=30/1! \
      视频转换! \
      v4l2h264enc! \
      filesink location=../example_out.h264

    …但在预卷过程中失败:

    • 错误:来自元素/GstPipeline:pipaine0/GstRawVideoParse:rawvideoparse0:内部数据流错误。

    您能分享一些建议吗? 下面提供了原始视频流。
    再次感谢!

    此致、
    Linghui

    e2e.ti.com/.../4555.raw_5F00_video_5F00_10.rar

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

    尊敬的 Linghui:

    我测试了提供的视频流、并使用以下命令成功输出:

    • gst-launch-1.0 filesrc location=/raw_video_10.yuv! rawvideoparse width=1920 身高=1080 格式=UYVY 帧速=30/1 色度=bt601 ! v4l2h264enc! filesink location=/raw_video_10_UYVY.h264

    请尝试并告诉我您的结果。 这包含最新的默认 11.0 SDK 版本。

    谢谢您、
    Sarabesh S.