Example #1
0
/* Fill float vector with random numbers over a range. */
void      vecran_float(float *vec, int beg, int end)
{
    int       i;
    float    *pntr;
    double    normalize_float(float *vec, int beg, int end);
    double    drandom(void);

    pntr = vec + beg;
    for (i = end - beg + 1; i; i--) {
	(*pntr++) = drandom();
    }
    normalize_float(vec, beg, end);
}
Example #2
0
int main(int argc, char *argv[])
{
    if (argc == 1)
    {
        const cl_uint width = 1920;
        const cl_uint height = 1080;
        const cl_uint numPixels = height * width;
        cl_int err = CL_SUCCESS;

        float *r = cl_malloc_array(float, numPixels);
        float *g = cl_malloc_array(float, numPixels);
        float *b = cl_malloc_array(float, numPixels);
        float *y = cl_malloc_array(float, numPixels);
        float *u = cl_malloc_array(float, numPixels);
        float *v = cl_malloc_array(float, numPixels);
        cl_uchar *Yp = cl_malloc_array(cl_uchar, numPixels);
        cl_uchar *Up = cl_malloc_array(cl_uchar, numPixels);
        cl_uchar *Vp = cl_malloc_array(cl_uchar, numPixels);

        float bt601[9] = {0.257f, 0.504f, 0.098f, -0.148f, -0.291f, 0.439f, 0.439f, -0.368f, -0.071f};
        time_t start, diff;
        clock_t c_start, c_diff1, c_diff2;

#ifdef CL_BUILD_RUNTIME
        cl_environment_t *pEnv = clCreateEnvironment(KDIR"kernel_yuv.cl",CL_DEVICE_TYPE_GPU,1,notify, CL_ARGS);
#else
        cl_environment_t *pEnv = clCreateEnvironmentFromBins(&gKernelBins, notify, CL_ARGS);
#endif
		printf("Processing %ux%u => %u pixels\n", width, height, numPixels);
        
        if (pEnv && r && g && b && y && u && v)
        {
            cl_uint i = 0;

            srand((unsigned int)time(NULL));
            // initialize the data
            for (i = 0; i < numPixels; i++)
            {
                r[i] = frrand(0.0,1.0); // [0-1]
                g[i] = frrand(0.0,1.0); // [0-1]
                b[i] = frrand(0.0,1.0); // [0-1]
                y[i] = 0.00;
                u[i] = 0.00;
                v[i] = 0.00;
            }

            start = time(NULL);
            c_start = clock();
            err = cl_convert_rgbf_to_yuvf_bt601(pEnv, r, g, b, y, u, v, numPixels);
            cl_assert(err == CL_SUCCESS,printf("Error = %d\n",err));
            c_diff1 = clock() - c_start;
            diff = time(NULL) - start;
            printf("With Constants Version Ran in %lu seconds (%lu ticks)\n", diff, c_diff1);

            // initialize the data
            for (i = 0; i < numPixels; i++)
            {
                r[i] = frrand(0.0,1.0); // [0-1]
                g[i] = frrand(0.0,1.0); // [0-1]
                b[i] = frrand(0.0,1.0); // [0-1]
                y[i] = 0.00;
                u[i] = 0.00;
                v[i] = 0.00;
            }

            start = time(NULL);
            c_start = clock();
            cl_convert_rgbf_to_yuvf(pEnv, r, g, b, y, u, v, bt601, numPixels);
            c_diff2 = clock() - c_start;
            diff = time(NULL) - start;
            printf("With No Constants Version Ran in %lu seconds (%lu ticks)\n", diff, c_diff2);

            normalize_float(y,   16, 235, Yp, numPixels);
            normalize_float(u, -128, 128, Up, numPixels);
            normalize_float(v, -128, 128, Vp, numPixels);

    #ifdef CL_DEBUG
            for (i = 0; i < numPixels; i++)
                printf("YUV = {0x%02x, 0x%02x, 0x%02x}\n", Yp[i], Up[i], Vp[i]);
    #endif
            clDeleteEnvironment(pEnv);
        }

        cl_free(r); cl_free(g); cl_free(b);
        cl_free(y); cl_free(u); cl_free(v);
    }
    else if (argc >= 6)