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/DRA746:H.264编码期间的帧丢失

Guru**** 2554160 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/591820/linux-dra746-frame-drop-during-h-264-encode

器件型号:DRA746

工具/软件:Linux

尊敬的社区:

我正在寻找有关以下问题的支持:

我们有一个用例、我们希望捕获其中一个 CRC 的输出并将其馈送到 IVA-HD 编码器。

我们已经尝试了以下管道:

gst-launch-1.0 -e v4l2src device=/dev/video11 io-mode=dmabuf! VIDEO/x-RAW、FORMAT=NV12! ducatih264enc 级别=51! 排队! h264parse! mp4 mux! 文件链接位置= capture.mp4

尽管此流水线起作用、但仍存在不需要的存储器副本、这会导致显著的帧丢失(当帧数应为~60fps 时为~23fps)。

我们认为、产生存储器副本的原因是、当像素格式为 NV12时、从 omapwb-cap 驱动程序中解压缩的缓冲区在存储器中不连续。  但是、根据我们的理解、ducatih264enc Gstreamer 元素期望它们在存储器中保持连续(即、Y 平面和 UV 平面均为单个 dbabuf-FD)。

此外、我们认为 omapwb-cap 驱动器暴露的 NV12的正确像素格式应为 V4L2_PI_FMT_NV12M、而不是 V4L2_PI_FMT_NV12。

TI 是否曾在 writeBack v4l2器件中以60fps 使用 GStreamer 进行编码? 有没有正在进行的工作来解决这一问题?

作为参考、我们的内核版本是4.4.4-0-3、我们使用的是 GStreamer 1.11.90。  

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

    您使用的软件版本是什么?

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

    内核版本4.4.55

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

    我是说 PROCESSOR-SDK- Android、Linux 还是 RTOS?


    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    该应用程序是 Debian 映像、具有固件和处理器 SDK 3.02.00.03中的 Ducati GStreamer 电极。

    我发布这篇文章是为了检查我们是否曾使用 omapwb-cap 驱动器创建的捕获器件对1920x1080.30fps 视频进行过编码?

    我怀疑问题是由于内存复制性能降低。 以下是运行 gst_debug=v4l2*:log gst-launch-1.0 -e v4l2src device=/dev/video11 io-mode=dmabuf 时看到的内容! VIDEO/x-RAW、FORMAT=NV12! ducatih264enc 级别=51! 排队! h264parse! mp4 mux! 文件链接位置= capture.mp4

    0:00:02.339602868 20868 0x80dcb920日志 v4l2bufferpool gstv4l2bufferpool.c:1027:gst_v4l2_buffer_pool_poll: 轮询设备
    0:00:02.339936679 20868 0x80dcb920日志 v4l2bufferpool gstv4l2bufferpool.c:1160:gst_v4l2_buffer_pool_dqbuf: 对缓冲区进行去排队
    0:00:02.340338652 20868 0x80dcb920日志 v4l2allocator gstv4l2allocator.c:1311:gst_v4l2_allocator_dqbuf: 已出队列的缓冲区3 (标志0x2005)
    0:00:02.340797399 20868 0x80dcb920调试 v4l2allocator gstv4l2allocator.c:1315:gst_v4l2_allocator_dqbuf: 即使已成功取消队列,驱动程序优先缓冲区也会排队
    0:00:02.341188310 20868 0x80dcb920日志 v4l2bufferpool gstv4l2bufferpool.c:1192:gst_v4l2_buffer_pool_dqbuf: 已出队列的缓冲区 b510e220 SEQ:21 (ix=3),mem b5101868已使用2073600,plane=0,标记00002001,ts 23:56:15.158207000,pool-queue=8, Buffer=b5105e220
    0:00:02.341552705 20868 0x80dcb920日志 v4l2bufferpool gstv4l2bufferpool.c:1192:gst_v4l2_buffer_pool_dqbuf: 已出队列的缓冲区 b510e220 SEQ:21 (ix=3),mem b51018c0已使用1036800,plane =1,flags 00002001,ts 23:56:15.158207000,pool-queue=8, Buffer=b5105e220
    0:00:02.341938573 20868 0x80dcb920日志 v4l2bufferpool gstv4l2bufferpool.c:116:gst_v4l2_buffer_pool_copy_buffer: 正在复制缓冲区
    0:00:02.342350957 20868 0x80dcb920调试 v4l2bufferpool gstv4l2bufferpool.c:122:gst_v4l2_buffer_pool_copy_buffer: 复制视频帧
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Thomas:

    我已将您的问题转交给 Linux 多媒体专家。

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

    要回答主要问题-不、我们尚未实现1080p 30fps 的 WB 捕捉功能。 这不是经过测试的管道。 目前还没有支持写回管道的计划。  

    是的、Ducati 编码器需要一个 FD。 让我感到困惑的是、摄像机捕捉的速度是30fps、而不是 WB 捕捉。 从 gstreamer 的角度来看、缓冲区管理在这些情况下不应有所不同。   驾驶员的角度来看、Nikhil Devshatwar 是有区别的。

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


    尽管 VIP 和回写是 V4L2驱动程序、但 WB 完全不同、因为它使用数据的显示管线 DMA。

    从问题说明中可以清楚地看出、问题出在两个不同驱动器的单 FD 与两 FD 要求之间。
    它是用于降低 FPS 的 memcpy、驱动程序中不会发生压降。
    公开 NV12M 而不是 NV12是有意义的。

    如果以连续方式分配缓冲区、则可以解决此问题。
    或缓冲区使用 DRM 分配器分配并分配给捕获驱动程序(如 VIP 驱动程序)

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

    感谢您的澄清和解释。

    但是、这将引出下一个问题、即您能否帮助获取分配的经过修改的4.4 omapwb-cap 内核驱动程序
    连续存储器中的色度和亮度平面? (这可以作为现有模块的插件来完成吗?)

    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、 我建议的答案有两个部分。 检查回写管道是否可以使用外部分配的缓冲区。 如果是、则无需任何帧副本 Nikhil D 即可实现用例
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Nikhil。 我们将等待您确认以下问题:
    检查回写管道是否可以使用外部分配的缓冲区。 如果是、则无需任何帧副本即可实现用例
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有指定的设置。 我们使用 K4.4支持 GST 1.6。 请使用具有 IO 模式选项的相同管道来导入 dmabuf。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、Pooja、

    感谢您的意见、但我认为现在我们只需确认我在上一篇帖子中提到的要点。

    此致、

    Tom