mirror of
https://github.com/opencv/opencv.git
synced 2026-07-31 08:13:04 +04:00
RGB[A] <- RGB5x5
This commit is contained in:
@@ -92,6 +92,7 @@
|
||||
#include "precomp.hpp"
|
||||
#include "opencl_kernels.hpp"
|
||||
#include <limits>
|
||||
#include <iostream>
|
||||
|
||||
#define CV_DESCALE(x,n) (((x) + (1 << ((n)-1))) >> (n))
|
||||
|
||||
@@ -2728,7 +2729,20 @@ static bool ocl_cvtColor( InputArray _src, OutputArray _dst, int code, int dcn )
|
||||
int greenbits = code == COLOR_BGR5652BGR || code == COLOR_BGR5652RGB ||
|
||||
code == COLOR_BGR5652BGRA || code == COLOR_BGR5652RGBA ? 6 : 5;
|
||||
k.create("RGB5x52RGB", ocl::imgproc::cvtcolor_oclsrc,
|
||||
format("-D depth=%d -D scn=2 -D dcn=%s -D bidx=%d -D greenbits=%d", depth, scn, dcn, bidx, greenbits));
|
||||
format("-D depth=%d -D scn=2 -D dcn=%d -D bidx=%d -D greenbits=%d", depth, dcn, bidx, greenbits));
|
||||
break;
|
||||
}
|
||||
case COLOR_BGR2BGR565: case COLOR_BGR2BGR555: case COLOR_RGB2BGR565: case COLOR_RGB2BGR555:
|
||||
case COLOR_BGRA2BGR565: case COLOR_BGRA2BGR555: case COLOR_RGBA2BGR565: case COLOR_RGBA2BGR555:
|
||||
{
|
||||
CV_Assert((scn == 3 || scn == 4) && depth == CV_8U );
|
||||
bidx = code == COLOR_BGR2BGR565 || code == COLOR_BGR2BGR555 ||
|
||||
code == COLOR_BGRA2BGR565 || code == COLOR_BGRA2BGR555 ? 0 : 2;
|
||||
int greenbits = code == COLOR_BGR2BGR565 || code == COLOR_RGB2BGR565 ||
|
||||
code == COLOR_BGRA2BGR565 || code == COLOR_RGBA2BGR565 ? 6 : 5;
|
||||
dcn = 2;
|
||||
k.create("RGB2RGB5x5", ocl::imgproc::cvtcolor_oclsrc,
|
||||
format("-D depth=%d -D scn=%d -D dcn=2 -D bidx=%d -D greenbits=%d", depth, scn, bidx, greenbits));
|
||||
break;
|
||||
}
|
||||
case COLOR_BGR2GRAY: case COLOR_BGRA2GRAY:
|
||||
|
||||
@@ -490,28 +490,28 @@ __kernel void RGB5x52RGB(__global const uchar* src, int src_step, int src_offset
|
||||
}
|
||||
}
|
||||
|
||||
//__kernel void RGB2RGB5x5(int cols, int rows, int src_step, int dst_step, int bidx,
|
||||
// __global const uchar * src, __global ushort * dst,
|
||||
// int src_offset, int dst_offset)
|
||||
//{
|
||||
// int x = get_global_id(0);
|
||||
// int y = get_global_id(1);
|
||||
__kernel void RGB2RGB5x5(__global const uchar* src, int src_step, int src_offset,
|
||||
__global uchar* dst, int dst_step, int dst_offset,
|
||||
int rows, int cols)
|
||||
{
|
||||
int x = get_global_id(0);
|
||||
int y = get_global_id(1);
|
||||
|
||||
// if (y < rows && x < cols)
|
||||
// {
|
||||
// int src_idx = mad24(y, src_step, src_offset + (x << 2));
|
||||
// int dst_idx = mad24(y, dst_step, dst_offset + x);
|
||||
if (y < rows && x < cols)
|
||||
{
|
||||
int src_idx = mad24(y, src_step, src_offset + x * scnbytes);
|
||||
int dst_idx = mad24(y, dst_step, dst_offset + x * dcnbytes);
|
||||
|
||||
//#if greenbits == 6
|
||||
// dst[dst_idx] = (ushort)((src[src_idx + bidx] >> 3)|((src[src_idx + 1]&~3) << 3)|((src[src_idx + (bidx^2)]&~7) << 8));
|
||||
//#elif scn == 3
|
||||
// dst[dst_idx] = (ushort)((src[src_idx + bidx] >> 3)|((src[src_idx + 1]&~7) << 2)|((src[src_idx + (bidx^2)]&~7) << 7));
|
||||
//#else
|
||||
// dst[dst_idx] = (ushort)((src[src_idx + bidx] >> 3)|((src[src_idx + 1]&~7) << 2)|
|
||||
// ((src[src_idx + (bidx^2)]&~7) << 7)|(src[src_idx + 3] ? 0x8000 : 0));
|
||||
//#endif
|
||||
// }
|
||||
//}
|
||||
#if greenbits == 6
|
||||
*((__global ushort*)(dst + dst_idx)) = (ushort)((src[src_idx + bidx] >> 3)|((src[src_idx + 1]&~3) << 3)|((src[src_idx + (bidx^2)]&~7) << 8));
|
||||
#elif scn == 3
|
||||
*((__global ushort*)(dst + dst_idx)) = (ushort)((src[src_idx + bidx] >> 3)|((src[src_idx + 1]&~7) << 2)|((src[src_idx + (bidx^2)]&~7) << 7));
|
||||
#else
|
||||
*((__global ushort*)(dst + dst_idx)) = (ushort)((src[src_idx + bidx] >> 3)|((src[src_idx + 1]&~7) << 2)|
|
||||
((src[src_idx + (bidx^2)]&~7) << 7)|(src[src_idx + 3] ? 0x8000 : 0));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user