Part Number: TDA4VM
I am using vpacviss on tda4, and some resolutions of the raw image size causes the openvx to get stuck.
in particular, raw image widthxheight:
this works: 3848x2168
this doesn't: 1408x206 (getting stuck)
this is how I configured the vpacviss(very similiar to one of the examples in the sdk):
vx_user_data_object configuration = NULL;
vx_user_data_object ae_awb_result = NULL;
vx_image y12 = NULL, uv12_c1 = NULL;
vx_image uv8_g8_c3 = NULL, s8_b8_c4 = NULL;
vx_user_data_object h3a_aew_af = NULL;
/* Dcc objects */
vx_user_data_object dcc_param_viss = NULL;
const vx_char dcc_viss_user_data_object_name[] = "dcc_viss";
vx_size dcc_buff_size = 1;
vx_map_id dcc_viss_buf_map_id;
uint8_t *dcc_viss_buf;
int32_t dcc_status;
uint32_t sensor_dcc_id;
uint32_t sensor_dcc_mode;
char *sensor_name = NULL;
char *file_name = NULL;
uint16_t downshift_bits;
tivx_vpac_viss_params_t params;
tivx_ae_awb_params_t ae_awb_params;
vx_node node = 0;
tivx_raw_image_create_params_t raw_params;
raw_params.width = m_rawImgSize.width;
raw_params.height = m_rawImgSize.height;
raw_params.meta_height_after = 0;
sensor_dcc_id = 233;
sensor_name = const_cast<char *>(SENSOR_ONSEMI_AR0233_UB953_MARS);
sensor_dcc_mode = 0;
raw_params.num_exposures = 1;
raw_params.line_interleaved = vx_false_e;
raw_params.format[0].pixel_container = TIVX_RAW_IMAGE_16_BIT;
raw_params.format[0].msb = 11;
raw_params.meta_height_before = 0;
vx_uint32 i;
checkkR(m_raw = tivxCreateRawImage(m_context, &raw_params));
checkkR(m_nv12 = vxCreateImage(m_context, m_rawImgSize.width, m_rawImgSize.height, VX_DF_IMAGE_NV12));
/* Create/Configure configuration input structure */
tivx_vpac_viss_params_init(¶ms);
params.sensor_dcc_id = sensor_dcc_id;
params.fcp[0].ee_mode = TIVX_VPAC_VISS_EE_MODE_OFF;
params.fcp[0].mux_output0 = 0;
params.fcp[0].mux_output1 = 0;
params.fcp[0].mux_output2 = TIVX_VPAC_VISS_MUX2_NV12;
params.fcp[0].mux_output3 = 0;
params.fcp[0].mux_output4 = 3;
params.h3a_in = TIVX_VPAC_VISS_H3A_IN_LSC;
params.h3a_aewb_af_mode = TIVX_VPAC_VISS_H3A_MODE_AEWB;
params.fcp[0].chroma_mode = TIVX_VPAC_VISS_CHROMA_MODE_420;
params.bypass_glbce = 1;
params.bypass_nsf4 = 1;
params.bypass_cac = 1;
params.bypass_dwb = 1;
checkkR(configuration = vxCreateUserDataObject(m_context, "tivx_vpac_viss_params_t",
sizeof(tivx_vpac_viss_params_t), ¶ms));
/* Create/Configure ae_awb_params input structure */
tivx_ae_awb_params_init(&ae_awb_params);
ae_awb_params.ae_valid = 1;
ae_awb_params.exposure_time = 16666;
ae_awb_params.analog_gain = 1030;
ae_awb_params.awb_valid = 1;
ae_awb_params.color_temperature = 3000;
for (i = 0; i < 4; i++)
{
ae_awb_params.wb_gains[i] = 525;
ae_awb_params.wb_offsets[i] = 2;
}
checkkR(ae_awb_result = vxCreateUserDataObject(m_context,
"tivx_ae_awb_params_t", sizeof(tivx_ae_awb_params_t), &ae_awb_params));
/* Creating DCC */
checkkB((dcc_buff_size = appIssGetDCCSizeVISS(sensor_name, sensor_dcc_mode)) != 0);
checkkR(dcc_param_viss = vxCreateUserDataObject(m_context, (const vx_char *)&dcc_viss_user_data_object_name,
dcc_buff_size, NULL));
checkkS(vxMapUserDataObject(
dcc_param_viss,
0,
dcc_buff_size,
&dcc_viss_buf_map_id,
(void **)&dcc_viss_buf,
VX_WRITE_ONLY,
VX_MEMORY_TYPE_HOST,
0));
memset(dcc_viss_buf, 0xAB, dcc_buff_size);
checkkB((dcc_status = appIssGetDCCBuffVISS(sensor_name, sensor_dcc_mode, dcc_viss_buf, dcc_buff_size)) == 0);
checkkS(vxUnmapUserDataObject(dcc_param_viss, dcc_viss_buf_map_id));
/* Done w/ DCC */
/* Creating H3A output */
checkkB((h3a_aew_af = vxCreateUserDataObject(m_context, "tivx_h3a_data_t", sizeof(tivx_h3a_data_t), NULL)) != NULL);
checkkS(vxMapUserDataObject(h3a_aew_af,
0,
sizeof(tivx_h3a_data_t),
&dcc_viss_buf_map_id,
(void **)&dcc_viss_buf,
(vx_enum)VX_WRITE_ONLY,
(vx_enum)VX_MEMORY_TYPE_HOST,
0));
memset(dcc_viss_buf, 0, sizeof(tivx_h3a_data_t));
checkkS(vxUnmapUserDataObject(h3a_aew_af, dcc_viss_buf_map_id));
checkkR(node = tivxVpacVissNode(m_graph, configuration, ae_awb_result, dcc_param_viss,
m_raw, y12, uv12_c1, m_nv12, uv8_g8_c3, s8_b8_c4,
h3a_aew_af, NULL, NULL, NULL));