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.

[参考译文] TDA4VH-Q1:使用 v4l2h264enc 的 GStreamer、输入 NV12、行宽度未对齐64字节

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1505800/tda4vh-q1-gstreamer-using-v4l2h264enc-input-nv12-with-row-width-not-aligned-64bytes

器件型号:TDA4VH-Q1
Thread 中讨论的其他器件:TDA4VH

工具/软件:

您好:

我尝试使用 GStreamer 和编码器对一些 NV12输入数据进行编码  v4l2h264enc 距离。 我使用 appsrc 和 appsink 进行"每帧"编码。 NV12数据封装到 GstBuffer 中、然后发送到 GStreamer 流水线。

流水线字符串:

"appsrc name=mysource format=time ! "
"video/x-raw,format=NV21 ! " // NV21 to reverse channels
"v4l2h264enc name=v4l2h264enc extra-controls=\"enc,prepend_sps_and_pps_to_idr=1,video_gop_size=1\" ! "
"video/x-h264 ! "
"appsink name=mysink emit-signals=false sync=false drop=false",
 

它运行良好、除了我需要将输入数据显式重组为  连续块存储器 在解码时获得正确的图像(解码编码数据)。 我的 NV12映像如所示 宽度 3848伏 步幅 3904个(64字节对齐)。 一些抖动 操作 为了提供跨度为3848 (width==stride)的流水线 NV12数据、我在解码时获得正确的图像输出。  

-----

我的目标是避免这样做  操作 、然后发送到管道(提供原始 NV12数据)。 是否有正确编码( v4l2h264enc )宽度为!=跨度的 NV12图像?

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

    您好:

    您能否提供有关您的申请的更多信息? 您是否在流水线中使用了任何边缘 AI GStreamer 插件(TIOVX)?

    谢谢您、

    法比亚纳

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

    您好:

    我们直接使用 GStreamer API、而不是使用 TIOVX 的边缘 AI 插件

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

    尊敬的 Pl Tanguay

    您是否正在从摄像头进行流式传输? 如果是、您正在使用哪个摄像头、它是否需要 ISP 调优二进制文件?  

    谢谢您、

    法比亚纳

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

    您好:  

    我正在进行"每帧"编码。 我基本上采用一个包含要编码的图像数据的数据指针(例如 cv::mat nv12.data)、然后将其分配到 GstBuffer 中、并将其发送到 GST 流水线中。 我不是从摄像头进行流式传输。

    提醒:如果我做: cv::Mat nv12Cloned = nv12.clone (),它就可以工作。 当执行 clone ()时,它会分配给 nv12Cloned 一个连续的内存块  跨度==宽度 。 我正在研究如何向流水线提供援助  Cv::Mat nv12 而不执行克隆()。

    仅供参考、我还可以访问 nv12图像的 vx_image 进行编码。

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

    您好:

    您是否可以尝试 进行以下更改 并告诉我这样是否能解决您的问题?

    diff --git a/kernels/hwa/vpac_viss/vx_vpac_viss_target.c b/kernels/hwa/vpac_viss/vx_vpac_viss_target.c
    index 01c4bd6..6d577e3 100755
    --- a/kernels/hwa/vpac_viss/vx_vpac_viss_target.c
    +++ b/kernels/hwa/vpac_viss/vx_vpac_viss_target.c
    @@ -1688,7 +1688,7 @@ static void tivxVpacVissSetInputParams(tivxVpacVissObj *vissObj,
         /* Set the Input Format */
         fmt->width = raw_img_desc->params.width;
         fmt->height = raw_img_desc->params.height;
    -    fmt->pitch[0] = (uint32_t)raw_img_desc->imagepatch_addr[0U].stride_y;
    +    fmt->pitch[0] = fmt->width * 2;
         fmt->dataFormat = FVID2_DF_RAW;
    
         switch (raw_img_desc->params.format[0U].pixel_container)

    谢谢您、

    法比亚纳

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

    我尚未尝试该过程、但我认为现在无法修改 VPAC VISS 内核。 它似乎有点太"低水平"。 有什么具体的 Gstreamer 可以做的吗?

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

    分配给该线程的专家(Fabiana)今天已不在办公室。 请等待对此查询的响应延迟。 谢谢。

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

    尊敬的 Pl Tanguay

    我将让我的同事 拉胡尔 ·拉维库马尔对此发表评论。

    谢谢您、

    法比亚纳

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

    您好、

    您能否尝试将 tiovxmemalloc 添加到流水线(在编码器之前)?

    此致、
    Jared

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

    尊敬的 Tanguay:

    您可以尝试下面的流水线

    "appsrc name=mysource format=time! "
    "video/x-raw、format=NV21、strip-y-align=64! tiovxdlcolorconvert! video/x-raw、format=NV12、strip-y-align=64!  "// NV21用于反向通道
    "v4l2h264enc name=v4l2h264enc output-io-mode=5 extra-controls="enc、prepend_sps_and_pps_to_idr=1、video_gop_size=1\"! "
    "视频/x-h264! "
    "appsink name=mysink emit-signals=false sync=false DROP=false"、

    此致
    Rahul T r