hi ti:
如题,如何将m2m转换后的数据保存下来。
我的流水线:capture->viss->ldc->msc->m2m->csitx。其中m2m可以将msc缩放后的NV12格式数据转化成UYVY然后通过csitx输出。这样是没有问题的。但是我还需要将m2m转化后的数据保存下来,另做他用。
我遇到的问题是,csitx输出的数据是正常的,但是,将m2m输出节点的数据保存下来,却出现了画面撕裂的情况。我在使用m2m的时候,如果使用m2m输出数据,就会出现这种情况,困扰我很久,我软件版本是8.1.麻烦帮忙指导下,多谢!
m2m代码配置如下
/*DSS Start*/
obj->m2m_enable = 0;
#if 1
obj->m2m_enable = 1;
#define DSS_M2M_WB_PIPE_INST_ID (0U)
#define DSS_M2M_PIPE_NUM (1U)
#define DSS_M2M_PIPE_INST_ID (3U)
#define DSS_M2M_OVERLAY_ID (3U)
if (vx_true_e == tivxIsTargetEnabled(TIVX_TARGET_DISPLAY_M2M3))
{
// vx_image in_image = vxCreateImage(obj->context,image_width, image_height,VX_DF_IMAGE_UYVY);
// obj->in_image_arr = vxCreateObjectArray(obj->context, (vx_reference)in_image, num_capture_frames);
// status = vxReleaseImage(&in_image);
// obj->m2m_in_image = (vx_image)vxGetObjectArrayItem(obj->in_image_arr, 0);
vx_image out_image = vxCreateImage(obj->context, obj->scaler_out_w, /*image_height*/ obj->scaler_out_h, VX_DF_IMAGE_UYVY);
obj->out_dss_rgb_arr = vxCreateObjectArray(obj->context, (vx_reference)out_image, num_capture_frames);
status = vxReleaseImage(&out_image);
obj->out_dss_rgb = (vx_image)vxGetObjectArrayItem(obj->out_dss_rgb_arr, 0);
/* DSS M2M initialization */
tivx_display_m2m_params_init(&obj->local_m2m_config);
obj->local_m2m_config.instId = DSS_M2M_WB_PIPE_INST_ID;
/* Only one pipeline is supported */
obj->local_m2m_config.numPipe = DSS_M2M_PIPE_NUM;
obj->local_m2m_config.pipeId[0U] = DSS_M2M_PIPE_INST_ID;
obj->local_m2m_config.overlayId = DSS_M2M_OVERLAY_ID;
obj->m2m_config = vxCreateUserDataObject(obj->context,
"tivx_display_m2m_params_t",
sizeof(tivx_display_m2m_params_t),
&obj->local_m2m_config);
obj->m2m_node = tivxDisplayM2MNode(obj->graph, obj->m2m_config, obj->scaler_out_img, obj->out_dss_rgb);
vx_bool replicate_m2m[] = { vx_false_e, vx_true_e, vx_true_e};
vxReplicateNode(obj->graph, obj->m2m_node, replicate_m2m, 3);
status = tivxSetNodeParameterNumBufByIndex(obj->m2m_node, 2u, obj->num_cap_buf);
vxSetNodeTarget(obj->m2m_node, VX_TARGET_STRING, TIVX_TARGET_DISPLAY_M2M3);
}
#endif /*DSS end*/
m2m输出保存代码如下:方式是在每个pipe周期保存m2m输出的image到文件。尺寸已经被我缩放到360p了,也不会是flash写入速度问题
for (i = 0; i < frm_loop_cnt; i++)
{
vx_image test_image;
appPerfPointBegin(&obj->total_perf);
graph_parameter_num = 0;
if(status == VX_SUCCESS)
{
status = vxGraphParameterDequeueDoneRef(obj->graph, graph_parameter_num, (vx_reference*)&out_capture_frames, 1, &num_refs_capture);
}
graph_parameter_num++;
if((status == VX_SUCCESS) && (obj->test_mode == 1))
{
status = vxGraphParameterDequeueDoneRef(obj->graph, 1, (vx_reference*)&test_image, 1, &num_refs_capture);
}
if((obj->test_mode == 1) && (frm_loop_cnt > BUFFER) && (status == VX_SUCCESS))
{
vx_uint32 actual_checksum = 0;
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);
}
if (fp)
{
write_output_image_fp(fp, obj->out_dss_rgb);
}
graph_parameter_num = 0;
if ((status == VX_SUCCESS) && (obj->test_mode == 1))
{
status = vxGraphParameterEnqueueReadyRef(obj->graph, 1, (vx_reference *)&test_image, 1);
}
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 ((obj->stop_task) || (status != VX_SUCCESS))
{
break;
}
}
