 //              C6 = coeffs[6], C7 = coeffs[7], C8 = coeffs[8];
 //        float alpha = ColorChannel<float>::max();
 //        n *= 3;
-//        
+//
 //        for( i = 0; i < n; i += 3, dst += dcn )
 //        {
 //            float L = src[i], a = src[i+1], b = src[i+2];

//                dst[3] = alpha;
//        }
//    }
//        
//    int dstcn, blueIdx;
//    float hscale;
//};
//    
//
//struct HLS2RGB_b
//{
//    typedef uchar channel_type;
//    
//    HLS2RGB_b(int _dstcn, int _blueIdx, int _hrange)
//    : dstcn(_dstcn), cvt(3, _blueIdx, _hrange)
//    {}
//    
//    void operator()(const uchar* src, uchar* dst, int n) const
//    {
//        int i, j, dcn = dstcn;
//        uchar alpha = ColorChannel<uchar>::max();
//        float buf[3*BLOCK_SIZE];
//        
//        for( i = 0; i < n; i += BLOCK_SIZE, src += BLOCK_SIZE*3 )
//        {
//            int dn = std::min(n - i, (int)BLOCK_SIZE);
//            
//            for( j = 0; j < dn*3; j += 3 )
//            {
//                buf[j] = src[j];

        const int cg = 9617;
        const int cb = 1868;
        const int yuv_shift = 14;

		const int x = (blockDim.x * blockIdx.x + threadIdx.x) << 2;
		const int y = blockDim.y * blockIdx.y + threadIdx.y;

        if (y < rows && x < cols)
        {
            uchar4 src = *(uchar4*)(src_ + y * src_step + (x << 2));

            uchar t0 = ((uchar*)(&src))[bidx], t1 = src.y, t2 = ((uchar*)(&src))[bidx ^ 2];

            uchar4 dst;
