Przeglądaj źródła

Add Packed422 decompression shader

Palana 11 lat temu
rodzic
commit
b0becea1a0
1 zmienionych plików z 44 dodań i 0 usunięć
  1. 44 0
      build/data/libobs/format_conversion.effect

+ 44 - 0
build/data/libobs/format_conversion.effect

@@ -193,6 +193,23 @@ float4 PSPlanar420(VertInOut vert_in) : TARGET
 		return out_val[2];
 }
 
+float4 PSPacked422_Reverse(VertInOut vert_in, int u_pos, int v_pos,
+		int y0_pos, int y1_pos) : TARGET
+{
+	float y = vert_in.uv.y;
+#ifdef _OPENGL
+	y = 1. - y;
+#endif
+	float odd = floor(fmod(width * vert_in.uv.x + PRECISION_OFFSET, 2.0));
+	float x = floor(width_d2 * vert_in.uv.x + PRECISION_OFFSET) *
+			width_d2_i;
+	float4 texel = image.Sample(def_sampler, float2(x, y));
+	return float4(odd > 0.5 ? texel[y1_pos] : texel[y0_pos],
+			texel[u_pos], texel[v_pos], 1.0);
+}
+
+
+
 technique Planar420
 {
 	pass
@@ -210,3 +227,30 @@ technique NV12
 		pixel_shader  = PSNV12(vert_in);
 	}
 }
+
+technique UYUV_Reverse
+{
+	pass
+	{
+		vertex_shader = VSDefault(vert_in);
+		pixel_shader  = PSPacked422_Reverse(vert_in, 0, 2, 1, 3);
+	}
+}
+
+technique YUY2_Reverse
+{
+	pass
+	{
+		vertex_shader = VSDefault(vert_in);
+		pixel_shader  = PSPacked422_Reverse(vert_in, 1, 3, 0, 2);
+	}
+}
+
+technique YVYU_Reverse
+{
+	pass
+	{
+		vertex_shader = VSDefault(vert_in);
+		pixel_shader  = PSPacked422_Reverse(vert_in, 3, 1, 0, 2);
+	}
+}