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:APP_srv_camera 输出

Guru**** 2535750 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1258045/tda4vm-app_srv_camera-output

器件型号:TDA4VM

尊敬的

static vx_status app_run_graph(AppObj *obj)
{
    vx_status status = VX_SUCCESS;
    uint32_t num_refs, buf_id;
    int graph_parameter_num = 0;
    uint32_t iteration = 0;

    if(NULL == obj->sensor_name)
    {
        printf("sensor name is NULL \n");
        status = VX_FAILURE;
    }
    if(status == VX_SUCCESS)
    {
        status = appStartImageSensor(obj->sensor_name, 0xF);
        APP_PRINTF("Sensor start status = %d\n", status);
    }

    /* Enqueue buf for pipe up but don't trigger graph execution */
    for(buf_id=0; buf_id<NUM_BUFS; buf_id++)
    {
        graph_parameter_num = 0;
        if(status == VX_SUCCESS)
        {
            status = vxGraphParameterEnqueueReadyRef(obj->graph, graph_parameter_num,
                       (vx_reference*)&obj->capt_frames[buf_id], 1);
        }
        graph_parameter_num++;
    }
    if(obj->test_mode == 1)
    {
        for(buf_id=0; buf_id<NUM_BUFS; buf_id++)
        {
            if(status == VX_SUCCESS)
            {
                status = vxGraphParameterEnqueueReadyRef(obj->graph, obj->displayNodeGraphParamNum,
                                (vx_reference*)&obj->output_image[buf_id], 1);
            }
        }
    }

    /* wait for graph instances to complete, compare output and
     * recycle data buffers, schedule again */
    vx_uint32 actual_checksum = 0;
    while(status == VX_SUCCESS)
    {
        vx_object_array out_capture_frames;
        vx_image test_image;
        graph_parameter_num = 0;

        appPerfPointBegin(&obj->total_perf);

        /* Get output reference, waits until a frame is available */
        if(status == VX_SUCCESS)
        {
            status = vxGraphParameterDequeueDoneRef(obj->graph, graph_parameter_num,
                            (vx_reference*)&out_capture_frames, 1, &num_refs);
        }
        graph_parameter_num++;

        if(obj->test_mode == 1)
        {
            /* Get output reference, waits until a frame is available */
            if(status == VX_SUCCESS)
            {
                status = vxGraphParameterDequeueDoneRef(obj->graph, obj->displayNodeGraphParamNum,
                                                        (vx_reference*)&test_image, 1, &num_refs);
            }
            printf("test iteration: %d of %d\n", iteration, TEST_BUFFER+1);
            if( (status == VX_SUCCESS) && (iteration > TEST_BUFFER) )
            {
                if(app_test_check_image(test_image, checksums_expected[0][0], &actual_checksum) == vx_false_e)
                {
                    test_result = vx_false_e;
                }
                populate_gatherer(0, 0, actual_checksum);
                obj->stop_task = 1;
            }
            /* Get output reference, waits until a frame is available */
            if(status == VX_SUCCESS)
            {
                status = vxGraphParameterEnqueueReadyRef(obj->graph, obj->displayNodeGraphParamNum,
                                (vx_reference*)&test_image, 1);
            }
        }

        graph_parameter_num = 0;
        if(status == VX_SUCCESS)
        {
            status = vxGraphParameterEnqueueReadyRef(obj->graph, graph_parameter_num, (vx_reference*)&out_capture_frames, 1);
        }
        graph_parameter_num++;

        appPerfPointEnd(&obj->total_perf);

        if(iteration==100)
        {
            /* after first 'n' iteration reset performance stats */
            appPerfStatsResetAll();
        }

        iteration++;

        if((obj->stop_task) || (status != VX_SUCCESS))
        {
            break;
        }
    }
    /* ensure all graph processing is complete */
    vxWaitGraph(obj->graph);

    /* Dequeue buf for pipe down */
    num_refs = 0xFF;
    graph_parameter_num = 0;
    while((num_refs > 0) && (status == VX_SUCCESS))
    {
        vx_object_array out_capture_frames;
        if(status == VX_SUCCESS)
        {
            status = vxGraphParameterCheckDoneRef(obj->graph, graph_parameter_num, &num_refs);
        }
        if(num_refs > 0)
        {
            APP_PRINTF("Dequeue capture\n");
            if(status == VX_SUCCESS)
            {
                status = vxGraphParameterDequeueDoneRef(
                                            obj->graph,
                                            graph_parameter_num,
                                            (vx_reference*)&out_capture_frames,
                                            1,
                                            &num_refs);
            }
        }
    }
    num_refs = 0xFF;
    while((num_refs > 0) && (obj->test_mode == 1) && (status == VX_SUCCESS))
    {
        vx_image out_image;
        if(status == VX_SUCCESS)
        {
            status = vxGraphParameterCheckDoneRef(obj->graph, obj->displayNodeGraphParamNum, &num_refs);
        }
        if(num_refs > 0)
        {
            APP_PRINTF("Dequeue display \n");
            if(status == VX_SUCCESS)
            {
                status = vxGraphParameterDequeueDoneRef(
                                            obj->graph,
                                            obj->displayNodeGraphParamNum,
                                            (vx_reference*)&out_image,
                                            1,
                                            &num_refs);
            }
        }
    }
    return status;
}

如何在此代码中找到"app_srv_camera"中的输出流并将其转换为 H264输出?

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

    您好!

    这是以下代码。 此处的 输出图像 以 RGBx 格式创建、用作 SRV 节点的输出图像。 相同的输出图像作为输入传递到显示节点。  

    /*为 OpenGL 节点创建对象*/
    for (int i=0;i < NUM_bufs;i++)
    {
    if (status == vx_Success)
    {
    obj->output_image[i]= vxCreateImage(obj->context、obj->outWidth、obj->outHeight、vx_df_image_RGBX);
    status = vxGetStatus ((vx_reference) obj->output_image[i]);

    obj->srv_node = tivxGlSrvNode (obj->graph、obj->param_obj、obj->viss_out_frames、obj->srv_views_array、obj->out_gpulut_array、 obj->output_image[0]);
    if (vxGetStatus ((vx_reference) obj->srcv_node)!= vx_Success)
    {
    APP_printf ("srv_node 创建失败\n");
    STATUS = VX_FAILURE;

    如果要对 SRV 输出进行编码、则需要首先将此输入转换为 YUV420格式。 您可以使用 DSS M2M 路径来进行此转换。 一旦转换、 就可以使用 GStreamer 在 A72上对其进行编码。  

    此致、

    布里耶什

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

    非常感谢您的答复。 您能否提供一种特定的实现方法、以将 GStreamer 编码用作"app_srv_camer"上的 H264? 我们对这方面不是很清楚,我们非常感激!

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

    尊敬的:

    您能帮助我如何在 DSS M2M 路径上执行此转换吗? 我想获得"h264"格式的环绕声视频流输出。

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

    您好!

    这两种 请求是不同的。

    -对于第一个请求,我 建议参考现有的示例, APP_MULTI_CAM_CODEC 示例。 VISION 应用中的这个示例从摄像头捕获图像、然后使用编解码器对其进行编码。  请参阅此示例、了解如何在您的应用中集成编解码器。  

    -对于第二个请求,您可以参考以下常见问题解答吗?

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1007456/faq-tda4vm-how-to-use-dss-m2m-for-format-conversion/4539758#4539758

    此致、

    布里耶什

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

    感谢您的回答。 您可否告知我们"app_multi_cam_codec"中集成编解码器的具体位置? 如果您能提供帮助、我们将不胜感激。

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

    您可以在 ti-processor-sdk-rtos-j721e-evm-08_06_00_12\vision_apps\apps\basic_demos\app_multi_cam_codec\main.c 文件中找到此示例。

    此致、

    布里耶什

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

    好的、谢谢!

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

    您能否指导我如何应用 vision_apps appsbasic_demos app_multi_cam_codec main 中的编解码器。 C 语言文件。" 并将输出视频流转换为 H264? 我一直在这个地区挣扎,请!

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

    我现在正处于一个艰难的境地。 您能帮助我在演示中对此方面进行适当的修改吗?

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

    抱歉、 我  只能引用现有应用程序。 您需要在 SRV 应用中进行更改。  

    此致、

    布里耶什

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

    您好、Qian、

    我们建议您查看以下 PSDK RTOS 文档链接-> https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/09_00_00_02/exports/docs/vision_apps/docs/user_guide/group_apps_basic_demos_app_multi_cam_codec.html 、其中显示了如何将编码器与摄像机集成。

    请注意、这是一个参考演示应用、可以根据您的需要进行修改。 请注意、  PSDK RTOS 的 vision_apps/apps/basic_demos 目录中提供了所需的演示代码。

    请注意、TI 不计划为 SRV 摄像头用例集成编码器、我们建议您进行所需的更新、请参阅提供的其他演示应用。

    谢谢。