Fixed primitives cleanup code.

This commit is contained in:
Armin Novak 2019-11-07 15:44:41 +01:00 committed by akallabeth
parent 0a3721587a
commit 733c70cd25
2 changed files with 39 additions and 62 deletions

View File

@ -209,32 +209,8 @@ FREERDP_LOCAL void primitives_init_YUV_opt(primitives_t* prims);
#endif #endif
#if defined(WITH_OPENCL) #if defined(WITH_OPENCL)
<<<<<<< HEAD
#ifdef __APPLE__
#include "OpenCL/opencl.h"
#else
#include <CL/cl.h>
#endif
typedef struct
{
BOOL support;
cl_platform_id platformId;
cl_device_id deviceId;
cl_context context;
cl_command_queue commandQueue;
cl_program program;
__YUV420ToRGB_8u_P3AC4R_t YUV420ToRGB_backup;
} primitives_opencl_context;
FREERDP_LOCAL BOOL primitives_init_opencl(primitives_t* prims); FREERDP_LOCAL BOOL primitives_init_opencl(primitives_t* prims);
FREERDP_LOCAL pstatus_t primitives_uninit_opencl(void); FREERDP_LOCAL pstatus_t primitives_uninit_opencl(void);
FREERDP_LOCAL primitives_opencl_context *primitives_get_opencl_context(void);
=======
FREERDP_LOCAL BOOL primitives_init_opencl(primitives_t* prims);
FREERDP_LOCAL pstatus_t primitives_uninit_opencl(void);
>>>>>>> 79139d536... Cleaned up primitives code.
FREERDP_LOCAL void primitives_init_YUV_opencl(primitives_t* prims); FREERDP_LOCAL void primitives_init_YUV_opencl(primitives_t* prims);
#endif #endif

View File

@ -119,30 +119,42 @@ typedef struct {
UINT32 testedFormat; UINT32 testedFormat;
} primitives_YUV_benchmark; } primitives_YUV_benchmark;
static primitives_YUV_benchmark* primitives_YUV_benchmark_init(void) static void primitives_YUV_benchmark_free(primitives_YUV_benchmark* bench)
{ {
int i; int i;
primitives_YUV_benchmark *ret = calloc(1, sizeof(*ret)); if (!bench)
prim_size_t *roi; return;
free(bench->outputBuffer);
for (i = 0; i < 3; i++)
free(bench->channels[i]);
memset(bench, 0, sizeof(primitives_YUV_benchmark));
}
static primitives_YUV_benchmark* primitives_YUV_benchmark_init(primitives_YUV_benchmark* ret)
{
int i;
prim_size_t* roi;
if (!ret) if (!ret)
return NULL; return NULL;
memset(ret, 0, sizeof(primitives_YUV_benchmark));
roi = &ret->roi; roi = &ret->roi;
roi->width = 1024; roi->width = 1024;
roi->height = 768; roi->height = 768;
ret->outputStride = roi->width * 4;
ret->outputStride = roi->width *4;
ret->testedFormat = PIXEL_FORMAT_BGRA32; ret->testedFormat = PIXEL_FORMAT_BGRA32;
ret->outputBuffer = malloc(roi->width * roi->height * 4); ret->outputBuffer = malloc(ret->outputStride * roi->height);
if (!ret->outputBuffer) if (!ret->outputBuffer)
goto error_output; goto fail;
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{ {
BYTE *buf = ret->channels[i] = malloc(roi->width * roi->height); BYTE *buf = ret->channels[i] = malloc(roi->width * roi->height);
if (!buf) if (!buf)
goto error_channels; goto fail;
winpr_RAND(buf, roi->width * roi->height); winpr_RAND(buf, roi->width * roi->height);
ret->steps[i] = roi->width; ret->steps[i] = roi->width;
@ -150,29 +162,9 @@ static primitives_YUV_benchmark* primitives_YUV_benchmark_init(void)
return ret; return ret;
error_channels: fail:
for(i = 0; i < 3; i++) primitives_YUV_benchmark_free(ret);
free(ret->channels[i]); return ret;
error_output:
free(ret);
return NULL;
}
static void primitives_YUV_benchmark_free(primitives_YUV_benchmark **pbench)
{
int i;
primitives_YUV_benchmark *bench;
if (!*pbench)
return;
bench = *pbench;
free(bench->outputBuffer);
for (i = 0; i < 3; i++)
free(bench->channels[i]);
free(bench);
*pbench = NULL;
} }
static BOOL primitives_YUV_benchmark_run(primitives_YUV_benchmark *bench, primitives_t *prims, static BOOL primitives_YUV_benchmark_run(primitives_YUV_benchmark *bench, primitives_t *prims,
@ -213,9 +205,9 @@ static BOOL primitives_autodetect_best(primitives_t *prims)
primitives_t* openclPrims = primitives_get_by_type(PRIMITIVES_ONLY_GPU); primitives_t* openclPrims = primitives_get_by_type(PRIMITIVES_ONLY_GPU);
UINT32 openclCount = 0; UINT32 openclCount = 0;
#endif #endif
const char *primName = "generic"; const char* primName = "generic";
primitives_YUV_benchmark bench;
primitives_YUV_benchmark *yuvBench = primitives_YUV_benchmark_init(); primitives_YUV_benchmark* yuvBench = primitives_YUV_benchmark_init(&bench);
if (!yuvBench) if (!yuvBench)
return FALSE; return FALSE;
@ -285,7 +277,7 @@ static BOOL primitives_autodetect_best(primitives_t *prims)
WLog_INFO(TAG, "primitives autodetect, using %s", primName); WLog_INFO(TAG, "primitives autodetect, using %s", primName);
ret = TRUE; ret = TRUE;
out: out:
primitives_YUV_benchmark_free(&yuvBench); primitives_YUV_benchmark_free(yuvBench);
return ret; return ret;
} }
@ -341,9 +333,18 @@ BOOL primitives_init(primitives_t* p, primitive_hints hints)
} }
} }
void primitives_uninit() { void primitives_uninit()
if (pPrimitives.uninit) {
pPrimitives.uninit(); #if defined(WITH_OPENCL)
if (pPrimitivesGpu.uninit)
pPrimitivesGpu.uninit();
#endif
#if defined(HAVE_CPU_OPTIMIZED_PRIMITIVES)
if (pPrimitivesCpu.uninit)
pPrimitivesCpu.uninit();
#endif
if (pPrimitivesGeneric.uninit)
pPrimitivesGeneric.uninit();
} }
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */