static vx_status vxHistogramOutputValidator(vx_node node, vx_uint32 index, vx_meta_format_t *ptr) { vx_status status = VX_ERROR_INVALID_PARAMETERS; if (index == 1) { vx_image src = 0; vx_parameter src_param = vxGetParameterByIndex(node, 0); vx_parameter dst_param = vxGetParameterByIndex(node, 1); vx_distribution dist; vxQueryParameter(src_param, VX_PARAMETER_ATTRIBUTE_REF, &src, sizeof(src)); vxQueryParameter(dst_param, VX_PARAMETER_ATTRIBUTE_REF, &dist, sizeof(dist)); if ((src) && (dist)) { vx_uint32 width = 0, height = 0; vx_df_image format; vx_size numBins = 0; vxQueryDistribution(dist, VX_DISTRIBUTION_ATTRIBUTE_BINS, &numBins, sizeof(numBins)); vxQueryImage(src, VX_IMAGE_ATTRIBUTE_WIDTH, &width, sizeof(height)); vxQueryImage(src, VX_IMAGE_ATTRIBUTE_HEIGHT, &height, sizeof(height)); vxQueryImage(src, VX_IMAGE_ATTRIBUTE_FORMAT, &format, sizeof(format)); /* fill in the meta data with the attributes so that the checker will pass */ ptr->type = VX_TYPE_DISTRIBUTION; status = VX_SUCCESS; vxReleaseDistribution(&dist); vxReleaseImage(&src); } vxReleaseParameter(&dst_param); vxReleaseParameter(&src_param); } return status; }
int CVxParamDistribution::Shutdown(void) { if (m_compareCountMatches > 0 && m_compareCountMismatches == 0) { printf("OK: distribution COMPARE MATCHED for %d frame(s) of %s\n", m_compareCountMatches, GetVxObjectName()); } if (m_distribution){ vxReleaseDistribution(&m_distribution); m_distribution = nullptr; } if (m_bufForCompare) { delete[] m_bufForCompare; m_bufForCompare = nullptr; } return 0; }
int CVxParamDistribution::Initialize(vx_context context, vx_graph graph, const char * desc) { // get object parameters and create object char objType[64]; const char * ioParams = ScanParameters(desc, "distribution:<numBins>,<offset>,<range>", "s:D,d,d", objType, &m_numBins, &m_offset, &m_range); if (!_stricmp(objType, "distribution")) { m_distribution = vxCreateDistribution(context, m_numBins, m_offset, m_range); } else ReportError("ERROR: unsupported distribution type: %s\n", desc); vx_status ovxStatus = vxGetStatus((vx_reference)m_distribution); if (ovxStatus != VX_SUCCESS){ printf("ERROR: distribution creation failed => %d (%s)\n", ovxStatus, ovxEnum2Name(ovxStatus)); if (m_distribution) vxReleaseDistribution(&m_distribution); throw - 1; } m_vxObjRef = (vx_reference)m_distribution; // io initialize return InitializeIO(context, graph, m_vxObjRef, ioParams); }