X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavutil%2Fhwcontext_opencl.c;h=41fac432297ca806d95501656bf725f8a603af05;hb=ef6a9e5e311f09fa8032974fa4d0c1e166a959bb;hp=d3df6221c4976c8ca7938c6c1c66f82620ccd072;hpb=ac4b5d86222006fa71ffe5922e1a34f1422507d8;p=ffmpeg diff --git a/libavutil/hwcontext_opencl.c b/libavutil/hwcontext_opencl.c index d3df6221c49..41fac432297 100644 --- a/libavutil/hwcontext_opencl.c +++ b/libavutil/hwcontext_opencl.c @@ -50,7 +50,7 @@ #include #endif #include -#include +#include #include "hwcontext_vaapi.h" #endif @@ -1194,7 +1194,7 @@ static int opencl_filter_drm_arm_device(AVHWDeviceContext *hwdev, #endif static int opencl_device_derive(AVHWDeviceContext *hwdev, - AVHWDeviceContext *src_ctx, + AVHWDeviceContext *src_ctx, AVDictionary *opts, int flags) { int err; @@ -1207,16 +1207,16 @@ static int opencl_device_derive(AVHWDeviceContext *hwdev, // Surface mapping works via DRM PRIME fds with no special // initialisation required in advance. This just finds the // Beignet ICD by name. - AVDictionary *opts = NULL; + AVDictionary *selector_opts = NULL; - err = av_dict_set(&opts, "platform_vendor", "Intel", 0); + err = av_dict_set(&selector_opts, "platform_vendor", "Intel", 0); if (err >= 0) - err = av_dict_set(&opts, "platform_version", "beignet", 0); + err = av_dict_set(&selector_opts, "platform_version", "beignet", 0); if (err >= 0) { OpenCLDeviceSelector selector = { .platform_index = -1, .device_index = 0, - .context = opts, + .context = selector_opts, .enumerate_platforms = &opencl_enumerate_platforms, .filter_platform = &opencl_filter_platform, .enumerate_devices = &opencl_enumerate_devices, @@ -1224,7 +1224,7 @@ static int opencl_device_derive(AVHWDeviceContext *hwdev, }; err = opencl_device_create_internal(hwdev, &selector, NULL); } - av_dict_free(&opts); + av_dict_free(&selector_opts); } break; #endif @@ -1419,8 +1419,9 @@ static int opencl_get_plane_format(enum AVPixelFormat pixfmt, // from the same component. if (step && comp->step != step) return AVERROR(EINVAL); - order = order * 10 + c + 1; + depth = comp->depth; + order = order * 10 + comp->offset / ((depth + 7) / 8) + 1; step = comp->step; alpha = (desc->flags & AV_PIX_FMT_FLAG_ALPHA && c == desc->nb_components - 1); @@ -1456,14 +1457,10 @@ static int opencl_get_plane_format(enum AVPixelFormat pixfmt, case order: image_format->image_channel_order = type; break; switch (order) { CHANNEL_ORDER(1, CL_R); - CHANNEL_ORDER(2, CL_R); - CHANNEL_ORDER(3, CL_R); - CHANNEL_ORDER(4, CL_R); CHANNEL_ORDER(12, CL_RG); - CHANNEL_ORDER(23, CL_RG); CHANNEL_ORDER(1234, CL_RGBA); + CHANNEL_ORDER(2341, CL_ARGB); CHANNEL_ORDER(3214, CL_BGRA); - CHANNEL_ORDER(4123, CL_ARGB); #ifdef CL_ABGR CHANNEL_ORDER(4321, CL_ABGR); #endif @@ -1620,7 +1617,7 @@ static void opencl_pool_free(void *opaque, uint8_t *data) av_free(desc); } -static AVBufferRef *opencl_pool_alloc(void *opaque, int size) +static AVBufferRef *opencl_pool_alloc(void *opaque, size_t size) { AVHWFramesContext *hwfc = opaque; AVOpenCLDeviceContext *hwctx = hwfc->device_ctx->hwctx;