summaryrefslogtreecommitdiff
path: root/libavutil/hwcontext_opencl.c
diff options
context:
space:
mode:
authorJarek Samic <cldfire3@gmail.com>2019-04-07 22:01:23 -0400
committerMark Thompson <sw@jkqxz.net>2019-04-09 22:16:01 +0100
commit1c50d61a5a689f8eabef37f504c6f8f33eb178ba (patch)
tree37cb99d4fb89257901a7ce09d20f278a051ece06 /libavutil/hwcontext_opencl.c
parent1ec777dcdd03b43d3d694c3b4532dccea0b419f0 (diff)
libavutil/hwcontext_opencl: Fix channel order in format support check
The `opencl_get_plane_format` function was incorrectly determining the value used to set the image channel order. This resulted in all RGB pixel formats being set to the `CL_RGBA` pixel format, regardless of whether or not they actually *were* RGBA. This patch fixes the issue by using the `offset` and depth of components rather than the loop index to determine the value of `order`. Signed-off-by: Jarek Samic <cldfire3@gmail.com> Signed-off-by: Mark Thompson <sw@jkqxz.net>
Diffstat (limited to 'libavutil/hwcontext_opencl.c')
-rw-r--r--libavutil/hwcontext_opencl.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/libavutil/hwcontext_opencl.c b/libavutil/hwcontext_opencl.c
index b116c5b708..41fdfe96f1 100644
--- a/libavutil/hwcontext_opencl.c
+++ b/libavutil/hwcontext_opencl.c
@@ -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