int CVxParamArray::ReadFrame(int frameNumber)
{
	// check if user specified input file to read from
	if (m_fileNameRead.length() < 1) return 0;

	// for single frame reads, there is no need to read the array 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 >= (int)m_captureFrameStart) {
			// end of sequence detected for multiframe sequences
			return 1;
		}
		else ReportError("ERROR: Unable to open: %s\n", fileName);
	}
	size_t numItems = ReadFileIntoBuffer(fp, m_readFileIsBinary);
	fclose(fp);

	// set array size to numItems and write the data into array object
	ERROR_CHECK(vxTruncateArray(m_array, 0));
	if (numItems > 0) {
		ERROR_CHECK(vxAddArrayItems(m_array, numItems, m_bufForRead, m_itemSize));
	}

	// process user requested directives
	if (m_useSyncOpenCLWriteDirective) {
		ERROR_CHECK_AND_WARN(vxDirective((vx_reference)m_array, VX_DIRECTIVE_AMD_COPY_TO_OPENCL), VX_ERROR_NOT_ALLOCATED);
	}

	return 0;
}
Example #2
0
// nodeless version of the Fast9Corners kernel
vx_status vxFast9Corners(vx_image src, vx_scalar sens, vx_scalar nonm, vx_array points,
                         vx_scalar s_num_corners, vx_border_mode_t *bordermode)
{
    vx_float32 b = 0.0f;
    vx_imagepatch_addressing_t src_addr;
    void *src_base = NULL;
    vx_rectangle_t rect;
    vx_uint8 tolerance = 0;
    vx_bool do_nonmax;
    vx_uint32 num_corners = 0;
    vx_size dst_capacity = 0;
    vx_keypoint_t kp;

    vx_status status = vxGetValidRegionImage(src, &rect);
    status |= vxReadScalarValue(sens, &b);
    status |= vxReadScalarValue(nonm, &do_nonmax);
    /* remove any pre-existing points */
    status |= vxTruncateArray(points, 0);
    status |= vxAccessImagePatch(src, &rect, 0, &src_addr, &src_base, VX_READ_ONLY);
    tolerance = (vx_uint8)b;
    status |= vxQueryArray(points, VX_ARRAY_ATTRIBUTE_CAPACITY, &dst_capacity, sizeof(dst_capacity));

    memset(&kp, 0, sizeof(kp));

    if (status == VX_SUCCESS)
    {
        /*! \todo implement other Fast9 Corners border modes */
        if (bordermode->mode == VX_BORDER_MODE_UNDEFINED)
        {
            vx_int32 y, x;
            for (y = APERTURE; y < (vx_int32)(src_addr.dim_y - APERTURE); y++)
            {
                for (x = APERTURE; x < (vx_int32)(src_addr.dim_x - APERTURE); x++)
                {
                    vx_uint8 strength = vxGetFastCornerStrength(x, y, src_base, &src_addr, tolerance);
                    if (strength > 0)
                    {
                        if (do_nonmax)
                        {
                            if (strength >= vxGetFastCornerStrength(x-1, y-1, src_base, &src_addr, tolerance) &&
                                strength >= vxGetFastCornerStrength(x, y-1, src_base, &src_addr, tolerance) &&
                                strength >= vxGetFastCornerStrength(x+1, y-1, src_base, &src_addr, tolerance) &&
                                strength >= vxGetFastCornerStrength(x-1, y, src_base, &src_addr, tolerance) &&
                                strength >  vxGetFastCornerStrength(x+1, y, src_base, &src_addr, tolerance) &&
                                strength >  vxGetFastCornerStrength(x-1, y+1, src_base, &src_addr, tolerance) &&
                                strength >  vxGetFastCornerStrength(x, y+1, src_base, &src_addr, tolerance) &&
                                strength >  vxGetFastCornerStrength(x+1, y+1, src_base, &src_addr, tolerance))
                                ;
                            else
                                continue;
                        }
                        if (num_corners < dst_capacity)
                        {
                            kp.x = x;
                            kp.y = y;
                            kp.strength = strength;
                            status |= vxAddArrayItems(points, 1, &kp, 0);
                        }
                        num_corners++;
                    }
                }
            }
        }
        else
        {
            status = VX_ERROR_NOT_IMPLEMENTED;
        }
        if (s_num_corners)
            status |= vxWriteScalarValue(s_num_corners, &num_corners);
        status |= vxCommitImagePatch(src, NULL, 0, &src_addr, src_base);
    }

    return status;
}