首页 > 解决方案 > 我想用金属将RGB转换为YUV

问题描述

我想用metal把RGB转YUV,现在得到的YUV数据显示有问题,谁能帮帮我?

kernel void rgb2yuv(
                    texture2d<float, access::sample> inTexture [[ texture(0) ]],
                    device float *outBufferY [[ buffer(0) ]],
                    device float2 *outBufferUV [[ buffer(1) ]],
//                    device float *outBufferV [[ buffer(2) ]],
                    constant uint2 &outSize [[ buffer(3) ]],
                    constant TestColorConversion &colorConversion [[ buffer(4) ]],
                    uint2 gid [[thread_position_in_grid]]
                    ) {
    if (gid.x >= outSize.x || gid.y >= outSize.y) {
        return;
    }
    
    float3 rgb = inTexture.read(gid).rgb;

    float3 ycbcr = colorConversion.offset + colorConversion.matrix*rgb;
    
    uint idx = gid.y * outSize.x + gid.x;

    outBufferY[idx] = ycbcr.r;
    outBufferUV[idx] = ycbcr.gb;
}

标签: metal

解决方案


推荐阅读