Example #1
0
int CVxParamDistribution::CompareFrame(int frameNumber)
{
	// check if there is no user request to compare
	if (m_fileNameCompare.length() < 1) return 0;

	// make sure m_bufForRead is allocated
	if (!m_bufForCompare) NULLPTR_CHECK(m_bufForCompare = new vx_uint32[m_numBins]);

	// reading data from reference file
	char fileName[MAX_FILE_NAME_LENGTH]; sprintf(fileName, m_fileNameCompare.c_str(), frameNumber);
	FILE * fp = fopen(fileName, m_compareFileIsBinary ? "rb" : "r");
	if (!fp) {
		ReportError("ERROR: Unable to open: %s\n", fileName);
	}
	int status = ReadFileIntoBuffer(fp, m_bufForCompare);
	fclose(fp);
	if (status) ReportError("ERROR: distribution compare reference doesn't have enough data: %s\n", fileName);

	// compare and report error if mismatched
	vx_uint32 * bufRef = nullptr;
	ERROR_CHECK(vxAccessDistribution(m_distribution, (void **)&bufRef, VX_READ_ONLY));
	status = memcmp(bufRef, m_bufForCompare, m_numBins * sizeof(vx_uint32)) ? -1 : 0;
	ERROR_CHECK(vxCommitDistribution(m_distribution, bufRef));
	if (status) {
		m_compareCountMismatches++;
		printf("ERROR: distribution COMPARE MISMATCHED for %s with frame#%d of %s\n", GetVxObjectName(), frameNumber, fileName);
		if (!m_discardCompareErrors) return -1;
	}
	else {
		m_compareCountMatches++;
		if (m_verbose) printf("OK: distribution COMPARE MATCHED for %s with frame#%d of %s\n", GetVxObjectName(), frameNumber, fileName);
	}
	return 0;
}
Example #2
0
int CVxParamDistribution::ReadFrame(int frameNumber)
{
	// check if there is no user request to read
	if (m_fileNameRead.length() < 1) return 0;

	// for single frame reads, there is no need to read it again
	// as it is already read into the object
	if (!m_fileNameForReadHasIndex && frameNumber != m_captureFrameStart) {
		return 0;
	}

	// reading data from input file
	char fileName[MAX_FILE_NAME_LENGTH]; sprintf(fileName, m_fileNameRead.c_str(), frameNumber);
	FILE * fp = fopen(fileName, m_readFileIsBinary ? "rb" : "r");
	if (!fp) {
		if (frameNumber == m_captureFrameStart) {
			ReportError("ERROR: Unable to open: %s\n", fileName);
		}
		else {
			return 1; // end of sequence detected for multiframe sequences
		}
	}
	vx_uint32 * data = nullptr;
	ERROR_CHECK(vxAccessDistribution(m_distribution, (void **)&data, VX_WRITE_ONLY));
	int status = ReadFileIntoBuffer(fp, data);
	ERROR_CHECK(vxCommitDistribution(m_distribution, data));
	fclose(fp);

	return status;
}
Example #3
0
int CVxParamDistribution::WriteFrame(int frameNumber)
{
	// check if there is no user request to write
	if (m_fileNameWrite.length() < 1) return 0;

	// reading data from input file
	char fileName[MAX_FILE_NAME_LENGTH]; sprintf(fileName, m_fileNameWrite.c_str(), frameNumber);
	FILE * fp = fopen(fileName, m_writeFileIsBinary ? "wb" : "w");
	if (!fp) ReportError("ERROR: Unable to create: %s\n", fileName);
	vx_uint32 * data = nullptr;
	ERROR_CHECK(vxAccessDistribution(m_distribution, (void **)&data, VX_READ_ONLY));
	if (m_writeFileIsBinary)
	{ // write in BINARY mode
		fwrite(data, sizeof(data[0]), m_numBins, fp);
	}
	else
	{ // write in ASCII mode
		for (size_t i = 0; i < m_numBins; i++)
			fprintf(fp, "%8d\n", data[i]);
	}
	ERROR_CHECK(vxCommitDistribution(m_distribution, data));
	fclose(fp);

	return 0;
}
Example #4
0
static vx_status vxHistogramKernel(vx_node node, vx_reference *parameters, vx_uint32 num)
{
    vx_status status = VX_FAILURE;
    if (num == 2)
    {
        vx_image src_image = (vx_image)parameters[0];
        vx_distribution dist = (vx_scalar)parameters[1];
        vx_rectangle src_rect;
        vx_imagepatch_addressing_t src_addr;
        void *src_base = NULL, *dist_ptr = NULL;
        vx_fourcc format = 0;
        vx_uint32 y = 0, x = 0;
        vx_uint32 offset = 0, range = 0, numBins = 0, window_size = 0;

        vxQueryImage(src_image, VX_IMAGE_ATTRIBUTE_FORMAT, &format, sizeof(format));
        vxQueryDistribution(dist, VX_DISTRIBUTION_ATTRIBUTE_BINS, &numBins, sizeof(numBins));
        vxQueryDistribution(dist, VX_DISTRIBUTION_ATTRIBUTE_RANGE, &range, sizeof(range));
        vxQueryDistribution(dist, VX_DISTRIBUTION_ATTRIBUTE_OFFSET, &offset, sizeof(offset));
        vxQueryDistribution(dist, VX_DISTRIBUTION_ATTRIBUTE_WINDOW, &window_size, sizeof(window_size));
        src_rect = vxGetValidRegionImage(src_image);
        status = VX_SUCCESS;
        status |= vxAccessImagePatch(src_image, src_rect, 0, &src_addr, &src_base);
        status |= vxAccessDistribution(dist, &dist_ptr);
        printf("distribution:%p bins:%u off:%u ws:%u range:%u\n", dist_ptr, numBins, offset, window_size, range);
        if (status == VX_SUCCESS)
        {
            vx_int32 *dist_tmp = dist_ptr;

            /* clear the distribution */
            for (x = 0; x < numBins; x++)
            {
                dist_tmp[x] = 0;
            }

            for (y = 0; y < src_addr.dim_y; y++)
            {
                for (x = 0; x < src_addr.dim_x; x++)
                {
                    if (format == FOURCC_U8)
                    {
                        vx_uint8 *src_ptr = vxFormatImagePatchAddress2d(src_base, x, y, &src_addr);
                        vx_uint8 pixel = *src_ptr;
                        if ((offset <= (vx_size)pixel) && ((vx_size)pixel < (offset+range)))
                        {
                            vx_size index = (pixel - (vx_uint16)offset) / window_size;
                            dist_tmp[index]++;
                        }
                    }
                    else if (format == FOURCC_U16)
                    {
                        vx_uint16 *src_ptr = vxFormatImagePatchAddress2d(src_base, x, y, &src_addr);
                        vx_uint16 pixel = *src_ptr;
                        if ((offset <= (vx_size)pixel) && ((vx_size)pixel < (offset+range)))
                        {
                            vx_size index = (pixel - (vx_uint16)offset) / window_size;
                            dist_tmp[index]++;
                        }
                    }
                }
            }
        }
        status |= vxCommitDistribution(dist, dist_ptr);
        status |= vxCommitImagePatch(src_image, 0, 0, &src_addr, src_base);
        vxReleaseParameter(&src_rect);
    }
    return status;
}