Use correct chroma co-siting offsets in Metal
This commit is contained in:
parent
fd314db27e
commit
181dba5864
2 changed files with 18 additions and 20 deletions
|
|
@ -26,8 +26,8 @@ fragment float4 ps_draw_biplanar(Vertex v [[ stage_in ]],
|
||||||
texture2d<float> luminancePlane [[ texture(0) ]],
|
texture2d<float> luminancePlane [[ texture(0) ]],
|
||||||
texture2d<float> chrominancePlane [[ texture(1) ]])
|
texture2d<float> chrominancePlane [[ texture(1) ]])
|
||||||
{
|
{
|
||||||
float2 chromaOffset = float2(cscParams.chromaOffset.x / chrominancePlane.get_width(),
|
float2 chromaOffset = float2(cscParams.chromaOffset.x / luminancePlane.get_width(),
|
||||||
cscParams.chromaOffset.y / chrominancePlane.get_height());
|
cscParams.chromaOffset.y / luminancePlane.get_height());
|
||||||
float3 yuv = float3(luminancePlane.sample(s, v.texCoords).r,
|
float3 yuv = float3(luminancePlane.sample(s, v.texCoords).r,
|
||||||
chrominancePlane.sample(s, v.texCoords + chromaOffset).rg);
|
chrominancePlane.sample(s, v.texCoords + chromaOffset).rg);
|
||||||
yuv *= cscParams.bitnessScaleFactor;
|
yuv *= cscParams.bitnessScaleFactor;
|
||||||
|
|
@ -46,13 +46,11 @@ fragment float4 ps_draw_triplanar(Vertex v [[ stage_in ]],
|
||||||
texture2d<float> chrominancePlaneU [[ texture(1) ]],
|
texture2d<float> chrominancePlaneU [[ texture(1) ]],
|
||||||
texture2d<float> chrominancePlaneV [[ texture(2) ]])
|
texture2d<float> chrominancePlaneV [[ texture(2) ]])
|
||||||
{
|
{
|
||||||
float2 chromaOffsetU = float2(cscParams.chromaOffset.x / chrominancePlaneU.get_width(),
|
float2 chromaOffset = float2(cscParams.chromaOffset.x / luminancePlane.get_width(),
|
||||||
cscParams.chromaOffset.y / chrominancePlaneU.get_height());
|
cscParams.chromaOffset.y / luminancePlane.get_height());
|
||||||
float2 chromaOffsetV = float2(cscParams.chromaOffset.x / chrominancePlaneV.get_width(),
|
|
||||||
cscParams.chromaOffset.y / chrominancePlaneV.get_height());
|
|
||||||
float3 yuv = float3(luminancePlane.sample(s, v.texCoords).r,
|
float3 yuv = float3(luminancePlane.sample(s, v.texCoords).r,
|
||||||
chrominancePlaneU.sample(s, v.texCoords + chromaOffsetU).r,
|
chrominancePlaneU.sample(s, v.texCoords + chromaOffset).r,
|
||||||
chrominancePlaneV.sample(s, v.texCoords + chromaOffsetV).r);
|
chrominancePlaneV.sample(s, v.texCoords + chromaOffset).r);
|
||||||
yuv *= cscParams.bitnessScaleFactor;
|
yuv *= cscParams.bitnessScaleFactor;
|
||||||
yuv -= cscParams.offsets;
|
yuv -= cscParams.offsets;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -317,28 +317,28 @@ public:
|
||||||
switch (frame->chroma_location) {
|
switch (frame->chroma_location) {
|
||||||
default:
|
default:
|
||||||
case AVCHROMA_LOC_LEFT:
|
case AVCHROMA_LOC_LEFT:
|
||||||
paramBuffer.chromaOffset[0] = 0;
|
paramBuffer.chromaOffset[0] = 0.5;
|
||||||
paramBuffer.chromaOffset[1] = 0.5;
|
paramBuffer.chromaOffset[1] = 0;
|
||||||
break;
|
break;
|
||||||
case AVCHROMA_LOC_CENTER:
|
case AVCHROMA_LOC_CENTER:
|
||||||
|
paramBuffer.chromaOffset[0] = 0;
|
||||||
|
paramBuffer.chromaOffset[1] = 0;
|
||||||
|
break;
|
||||||
|
case AVCHROMA_LOC_TOPLEFT:
|
||||||
paramBuffer.chromaOffset[0] = 0.5;
|
paramBuffer.chromaOffset[0] = 0.5;
|
||||||
paramBuffer.chromaOffset[1] = 0.5;
|
paramBuffer.chromaOffset[1] = 0.5;
|
||||||
break;
|
break;
|
||||||
case AVCHROMA_LOC_TOPLEFT:
|
|
||||||
paramBuffer.chromaOffset[0] = 0;
|
|
||||||
paramBuffer.chromaOffset[1] = 0;
|
|
||||||
break;
|
|
||||||
case AVCHROMA_LOC_TOP:
|
case AVCHROMA_LOC_TOP:
|
||||||
paramBuffer.chromaOffset[0] = 0.5;
|
paramBuffer.chromaOffset[0] = 0;
|
||||||
paramBuffer.chromaOffset[1] = 0;
|
paramBuffer.chromaOffset[1] = 0.5;
|
||||||
break;
|
break;
|
||||||
case AVCHROMA_LOC_BOTTOMLEFT:
|
case AVCHROMA_LOC_BOTTOMLEFT:
|
||||||
paramBuffer.chromaOffset[0] = 0;
|
paramBuffer.chromaOffset[0] = 0.5;
|
||||||
paramBuffer.chromaOffset[1] = 1.0;
|
paramBuffer.chromaOffset[1] = -0.5;
|
||||||
break;
|
break;
|
||||||
case AVCHROMA_LOC_BOTTOM:
|
case AVCHROMA_LOC_BOTTOM:
|
||||||
paramBuffer.chromaOffset[0] = 0.5;
|
paramBuffer.chromaOffset[0] = 0;
|
||||||
paramBuffer.chromaOffset[1] = 1.0;
|
paramBuffer.chromaOffset[1] = -0.5;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue