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:如何获取 tivxVpacMscPyramidNode's different level's out?

Guru**** 2482805 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1550613/tda4vm-how-can-i-get-tivxvpacmscpyramidnode-s-different-level-s-out-put

器件型号:TDA4VM


工具/软件:

我正在使用 tivxVpacMscPyramidNode 获取不同大小的图片,似乎我只能得到 0 级的图片,其他级别的图片是黑色的。  将 tivxVpacMscPyramidNode 的级别设置为 4。

只有标记的线路输出正常;

代码如下:

vx_status writePyramidOutput(char * file_name、vx_金字塔、vx_int32 金字塔级别)

VX_STATUS 状态;
文件*fp = fopen (file_name、“wb")“);

vx_image out_img;
out_img = vxGetPyramidLevel (PyramidLevel、Pyramid_Level);

vx_rectange_t RECT;
vx_imagepatch_addressing_t image_addr;
vx_map_id map_id;
void *data_ptr;
vx_uint32 img_width;
vx_uint32 img_height;

vx_uint32 num_bytes = 0;
vx_df_image df;

vxQueryImage (out_img、vx_image_width、&img_width、sizeof (vx_uint32));
vxQueryImage (out_img、vx_image_height、&img_height、sizeof (vx_uint32));
vxQueryImage (out_img、vx_image_format、&df、sizeof (vx_df_image));
printf(“image_width %d。\n“、img_width);
printf(“image_height %d.\n“、img_height);
printf(“image_format %d.\n“、df);
IF (df == Vx_DF_IMAGE_U8)

printf(“image is u8.\n“);
}
暴露

printf(“图像不是 u8.\n“);
}

RECT.START_x = 0;
RECT.START_y = 0;
RECT.END_x = IMG_WIDTH;
RECT.END_y = IMG_HEIGHT;
fprintf (FP、“p5\n%d %d\n255\n“、img_width、img_height);

状态= vxMapImagePatch (out_img、
矩形 (&R)
0、
&MAP_ID、
ℑ_addr、
&DATA_PTR、
Vx_READ_ONLY、
vx_memory_type_host、
Vx_NOGAP_X);
int j;
/*复制 Luma */
对于 (j = 0;j < img_height;j++)

num_bytes += fwrite (data_ptr、1、img_width、fp);
data_ptr += image_addr.strip_y;
}

if (num_bytes!=(img_width * img_height))
printf(“Luma bytes writed =%d、expected =%d\n“、num_bytes、img_width * img_height);

vxUnmapImagePatch (out_img、map_id);
vxReleaseImage (&OUT_img);

fclose (fp);

故障分析 (STATUS);
}

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

    尊敬的 Cheng:

    你能检查水平的宽度和高度,是所有似乎都是正常的吗?

    以及调用 vxProcessGraph() 后何时保存输出。

    我们有一些实现方案来保存金字塔输出、类似于您分享的内容、

    您是否可以尝试打印 1 至 4 级的存储器缓冲区并查看其中是否存在数据?

    此致、
    Gokul

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

    Hi Gokul、

    对不起,我检查所有的输出金字塔图片,似乎所有级别的金字塔图片都是好的。 但更糟糕的是阳极问题,一些输出图片是不正常的。 有些画面的画面是像画面波纹管,每三帧输出的 画面有两个画面像波纹管,  你知道为什么吗?

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

    尊敬的 Cheng:

    您正在运行哪些应用程序并描述如何按顺序转储帧。

    您的图形是如何创建的? 是否启用了流水线?

    此致、
    Gokul

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

    这是 vx_app_single_cam 应用程序,在应用程序中我添加了颜色转换,缩放和金字塔节点, 管道与原始应用相同(但删除 buf 大小代码),似乎管道输入的 buf 必须大于 4, 你能告诉我为什么?

     //添加了 vx_node

    status = app_create_grap_secapture(obj->graph、&obj->captureObj);

    printf(捕获后为“[app-module]。\n“);

    IF (STATUS == Vx_Success)

    status = app_create_graph convert(obj->graph、&obj->colorConvertObj, obj->captureObj.raw_image_arr[0]);
    }
    printf(转换后的“[app-module]。\n“);

    IF (STATUS == Vx_Success)

    status = app_create_graph scaler(obj->context、obj->graph、&obj->scalerObj、obj->inputImageObj.input_image_array);
    }

    printf(除法器后的“[app-module]。\n“);

    IF (STATUS == Vx_Success)

    status = app_create_grapt_bilypage(obj->graph,
    &OBJ->PyramidObj、
    obj->scalerObj.output[index_Picture_SEGMENTION].arr、
    DOF_BURTOM_START_FROM_BEVER);
    }

    //流水线集

    add_graph parameter_by_node_index (obj->graph、obj->captureObj.node、1);

    graph_parames_queue_params_list[graph_parameter_num].graph_parameter_index = graph_parameter_num;
    graph_parames_queue_params_list[graph_parameter_num].refs_list_size = obj->num_cap_buf;
    printf(“图形参数大小为%d。\n“、obj->num_cap_buf);
    graph_parames_queue_params_list[graph_parameter_num].refs_list =(vx_reference *)&(obj->captureObj.raw_image_arr[0]);

    IF (STATUS == Vx_Success)

    status = tivxSetGraphPipelineDepth(obj->graph, obj->num_cap_buf);
    }

    /*使用自动计划模式,在这里我们不需要调用 vxScheduleGraph
    *统计图会在引用进入队列时自动安排
    */
    IF (STATUS == Vx_Success)

    status = vxSetGraphScheduleConfig(obj->graph,
    vx_grap_schedule_mode_queue_auto
    PARAMS_LIST_DEPTH、
    graph_parames_queue_params_list);
    }

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

    尊敬的 Cheng:

    似乎流水线输入的 buf 必须大于 4、 您能告诉我为什么吗?

    是的、因为对于在流水线中运行 capture_node、我们至少设置了 3 个管道缓冲区、因此您必须至少将 3 个缓冲区排入队列以捕获节点。

    如果在流水线模式下运行、则应将 金字塔 节点的输出添加为图形参数、并将其保存到文件中。

    此致、
    Gokul

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

    在应用中,我不添加图形参数,但它也可以将金字塔输出保存到文件中,它也适用于缩放器节点,添加节点参数和不添加它之间有什么区别,你能告诉我它的效果吗? 上面的图片,这不是正常的,是影响的图形参数?

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

    尊敬的 Cheng:

    如果在流水线模式下运行、建议不要直接保存图像而不将其创建为图形参数。 由于框架使用缓冲区、您可能会遇到一些损坏。 将其设置为图形参数可以控制应用的缓冲区。

    请参阅  用户指南中的节点和图形参数定义。

    此致、
    Gokul