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.

[参考译文] AM62A7:GStreamer tiovxmultiscaler 是否支持动态调整?

Guru**** 2587365 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1567576/am62a7-is-gstreamer-tiovxmultiscaler-support-dynamic-adjust

器件型号:AM62A7


工具/软件:

SDK 版本:10_00_00_08

我们想询问 GStreamer tiovxmultiscaler 插件是否支持在流水线播放时动态调整 ROI 参数、例如 ROI-startx 和 ROI-starty。

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

    尊敬的 Jason:

    我们将为此尝试一些方法、下周再回复您。

    此致、

    建中

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

    尊敬的 Jason:

    您能否尝试使用 gst-validate 并创建一个场景来更改 tiovxmultis标 量的参数(我们已在编码器元素上尝试过)来更改比特率和密钥帧请求。

     SK-AM62A-LP:H264 编码器 — I 帧按需和动态比特率控制 

    此致、

    Suren

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

    您好、Suren

    编码器确实可以进行动态修改、我们已经进行了实验并已经实现。 然而、我们在尝试修改 TIOVX MultiScaler 的 ROI 参数时遇到了问题。

    在测试过程中、我不得不停止并重新启动管道、以使修改后的 ROI 参数生效、从而导致屏幕冻结和闪烁问题。

    BR、

    Jason

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

    尊敬的 Jason:

    您能否向我们提供您尝试测试的示例应用、以便重现问题并进行分析?

    此致、

    Suren

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

    您好、Suren

    我编写了一个测试演示、可以使用 videotestsrc 重现此问题。 程序流将创建一个简单的流水线videotestsrc->multiscaler->kmssink。 在流水线开始播放后、它会尝试在 3 秒后修改 ROI 参数、同时打印“No Stop Pipeline(无法停止流水线)“。 在机器上、我们可以观察到 ROI 更改不会立即生效。 等待另外 3 秒钟后、当管道停止并重新启动时、ROI 修改将立即生效。

    //也许由于我的网络问题、我无法将我的代码放在代码块中、只能直接粘贴到这里

    #include
    #include

    int gstTestRoi (int argc、char *argv[])

    G_setenv(“gst_debug_dump_dot_DIR",“,"/tmp/"、"/tmp/",“,true“true)、);

    GstElement *管道;
    GstElement *videoSrc,*capsSrc;
    GstElement *msc、*capsFilterMsc0;
    GstElement *kmssink;

    GstPad *mscSrcPad0;
    GstPad *capsFilterMsc0Sink;

    /*初始化 GStreamer */
    gst_init (&argc、&argv);

    /*创建主循环*/
    GMainLoop * loop = g_MAIN_LOOP_NEW (NULL、FALSE);

    /*创建元素*/
    videoSrc = gst_element_FACTORY_make(“videotestsrc",“,"videotestsrc"、"videotestsrc")“);“;
    capsSrc = gst_Element_FACTORY_make(“capsfilter",“,"capsSrc"、"capsSrc")“);“;
    MSC = gst_element_FACTORY_make(“tiovxmultiscaler",“,"msc"、"msc")“);“;
    capsFilterMsc0 = gst_Element_FACTORY_make(“capsfilter",“,"capsFilterMsc0"、"capsFilterMsc0")“);“;
    kmssink = gst_element_FACTORY_make(“kmssink",“,"kmssink"、"kmssink")“);“;

    /*创建空流水线*/
    pipeline = gst_pipeline_new(“test-pipeline “);

    if(!pipeline ||!videoSrc ||!capsSrc ||!msc ||!capsFilterMsc0 ||!kmssink)

    g_printerr(“不能创建所有元素。\n“);
    返回–1;
    }

    //设置属性
    //================= 进行讨论
    G_object_set (videoSrc、“pattern",“,0、0、NULL);
    g_object_set (videoSrc、“is-live",“,true、true、NULL);
    GstCaps *capsCam0;
    // config v4l2 src
    capsCam0 = gst_caps_new_simple(“video/x-raw",“,</s>、
    “WIDTH",“,G_TYPE_INT、G_TYPE_INT、1920、
    “高度“、G_TYPE_INT、1080、
    “帧速率“、gst_type_faction、60、1、
    “format",“,G_type_string、G_type_string、“NV12",“,</s>、
    “比色法“、G_TYPE_STRING、“bt709",“,</s>、
    “interlace-mode",“,G_type_string、G_type_string、“progressive",“,</s>、
    空);
    G_object_set (G_object (capsSrc)、“caps",“,capsCam0、capsCam0、NULL);
    GST_CAPS_UNREF (capsCam0);

    //================= MSC
    G_object_set (msc、“target",“,0、0、NULL);
    GstCaps *capsMsc0;
    capsMsc0 = gst_caps_new_simple(“video/x-raw",“,</s>、
    “WIDTH",“,G_TYPE_INT、G_TYPE_INT、1280、
    “HEIGHT",“,G_TYPE_INT、G_TYPE_INT、720、
    “format",“,G_type_string、G_type_string、“NV12",“,</s>、
    空);
    G_object_set (G_object (capsFilterMsc0)、“caps",“,capsMsc0、capsMsc0、NULL);
    GST_CAPS_UNREF (capsMsc0);

    //================= KMSSINK
    G_object_set (G_object (kmssink)、“driver-name",“,"tidss"、"tidss",“,NULL“NULL)、);
    G_object_set (G_object (kmssink)、“sync",“,false、false、NULL);
    G_object_set (G_object (kmssink)、“async",“,true、true、NULL);
    G_object_set (G_object (kmssink)、“skip-vsync",“,true、true、NULL);

    /*链接所有可以自动链接的元素,因为它们具有“始终“的填充*/
    gst_bin_add_multiple (gst_bin (pipeline)、videoSrc、capsSrc、msc、capsFilterMsc0、 kmssink、NULL);
    if (gst_element_link_many (videoSrc、capsSrc、msc、NULL)!= true ||
    gst_element_link_many (capsFilterMsc0、kmssink、NULL)!= true)

    g_printerr(“无法链接元素。\n“);
    gst_object_unREF (pipeline);
    返回–1;
    }

    /*手动链接“请求“标签*/
    // GstPad *mscSrcPad0;
    // GstPad *capsFilterMsc0Sink;
    mscSrcPad0 = gst_element_request_pad_simple(msc、“src_%u");“;

    capsFilterMsc0Sink = gst_element_get_static_pad (capsFilterMsc0、“sink")“);

    if(!mscSrcPad0 ||!capsFilterMsc0Sink)

    g_printerr(“不能创建所有 PAD。\n“);
    返回–1;
    }

    G_object_set (mscSrcPad0、“roi-startx",“,0、0、NULL);
    G_object_set (mscSrcPad0、“roi-starty",“,0、0、NULL);
    G_object_set (mscSrcPad0、“roi-width",“,1280、1280、NULL);
    G_object_set (mscSrcPad0、“roi-height",“,720、720、NULL);

    IF (gst_pad_link (mscSrcPad0、capsFilterMsc0Sink)!= gst_pad_link_OK)

    g_printerr(“无法链接。\n“);
    gst_object_unREF (pipeline);
    返回–1;
    }

    // gst_object_unREF (mscSrcPad0);
    gst_object_unREF (capsFilterMsc0Sink);

    /*开始播放流水线*/
    GST_Element_set_state (pipeline、GST_State_playing);
    G_uSleep (3 * 1000 * 1000);
    //不起作用
    G_message (“无停止流水线“);
    G_object_set (mscSrcPad0、“roi-startx",“,500、500、NULL);
    G_object_set (mscSrcPad0、“roi-starty",“,300、300、NULL);
    G_object_set (mscSrcPad0、“roi-width",“,1280、1280、NULL);
    G_object_set (mscSrcPad0、“roi-height",“,720、720、NULL);
    // gst_debug_bin_to_dot_file (gst_bin (pipeline)、gst_debug_grap_show_all、“pipeline “);

    //停止和播放、ROI 更改工作
    G_uSleep (3 * 1000 * 1000);
    G_message (“停止流水线“);
    GST_ELEMENT_SET_STATE (pipeline、GST_STATE_NULL);
    G_usleep (1 * 1000 * 1000);
    GST_Element_set_state (pipeline、GST_State_playing);
    G_MAIN_LOOP_RUN (LOOP);

    gst_object_unREF (pipeline);
    返回 0;
    }

    int main (int argc、char *argv[])

    gstTestRoi (argc、argv);
    返回 0;
    }

    BR、

    Jason

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

    您好、Suren

    是否有关于此问题的任何更新?

    BR

    Jason

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

    尊敬的 Jason:

    我们将尝试在本周进行一些实验并返回报告。 对延迟深表歉意。

    您有任何突破吗? 另外,我建议使用阀门元件来查看是否可以在另一个线程中的两个多标量输出之间切换

    此致、

    Suren

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

    尊敬的 Jason:

     AM62A7:GStreamer 输入选择器在多次切换后冻结 

    在上面的线程中添加了有关动态更改合成器灌电流焊盘的一些示例应用。 请检查并查看这些线路上是否有帮助您继续。

    此致、

    Suren

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

    您好、Suren

    我尝试使用输入选择器、但它一直卡住。 我认为最重要的是,如果我们能够实现动态 ROI 参数,那么就不需要输入选择器。

    BR

    Jason

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

    你好

    当我们需要更改 ROI 时、通过手动调用 tiovx_multi_scalibrator_module_update_input_params (&self->obj) 来修复此问题。

    需要像 edgeai-tiovx-apps 中使用的另一个 tiovx_multi_caler_module_update_input_params 一样对 edgeai-tiovx-modiler_module_update_input_params 中的 tiovx_multi_caler_module_update_input_params 进行修改。 否则会存在缓存一致性问题、即更新的裁剪参数未更新到共享存储器中、而 msc 目标无法获取正确的参数。

        vx_status status = VX_FAILURE;
        vx_reference refs[1];
        tivx_vpac_msc_input_params_t input_prm;
        vx_user_data_object input_prm_obj;
    
        tivx_vpac_msc_input_params_init(&input_prm);
    
    #if !defined(SOC_J721E) //This feature is supported only on VPAC3 and VPAC3L
        if (node->num_outputs <= 2) {
            input_prm.is_enable_simul_processing = 1;
        }
    #endif
        input_prm_obj = vxCreateUserDataObject(node->graph->tiovx_context,
                                               "tivx_vpac_msc_input_params_t",
                                               sizeof(tivx_vpac_msc_input_params_t),
                                               &input_prm);
    
        refs[0] = (vx_reference)input_prm_obj;
        status = tivxNodeSendCommand(node->tiovx_node, 0u,
                                     TIVX_VPAC_MSC_CMD_SET_INPUT_PARAMS,
                                     refs, 1u);
    
        if((vx_status)VX_SUCCESS != status)
        {
            TIOVX_MODULE_ERROR(
                    "[MULTI-SCALER-MODULE] Node send command "
                    "TIVX_VPAC_MSC_CMD_SET_INPUT_PARAMS, failed!\n");
        }
    
        vxReleaseUserDataObject(&input_prm_obj);
    
        return status;

    徐建中 请帮助说明是否将其添加到 SDK 中以支持未来版本中的动态 ROI。

    此致、

    Adam