X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=ycbcr_422interleaved_input.frag;fp=ycbcr_422interleaved_input.frag;h=66762a8c7d685060d75a2feff2e82a7058482aac;hp=0000000000000000000000000000000000000000;hb=ba60914d4e5eda7b28af700bf43e9699b7aa720d;hpb=5155a601695e522bb0ce23c9b67bfda37ebf918a diff --git a/ycbcr_422interleaved_input.frag b/ycbcr_422interleaved_input.frag new file mode 100644 index 0000000..66762a8 --- /dev/null +++ b/ycbcr_422interleaved_input.frag @@ -0,0 +1,32 @@ +uniform sampler2D PREFIX(tex_y); +uniform sampler2D PREFIX(tex_cbcr); + +vec4 FUNCNAME(vec2 tc) { + // OpenGL's origin is bottom-left, but most graphics software assumes + // a top-left origin. Thus, for inputs that come from the user, + // we flip the y coordinate. + tc.y = 1.0 - tc.y; + + vec3 ycbcr; + ycbcr.x = tex2D(PREFIX(tex_y), tc).y; +#if CB_CR_OFFSETS_EQUAL + vec2 tc_cbcr = tc; + tc_cbcr.x += PREFIX(cb_offset_x); + ycbcr.yz = tex2D(PREFIX(tex_cbcr), tc_cbcr).xz; +#else + vec2 tc_cb = tc; + tc_cb.x += PREFIX(cb_offset_x); + ycbcr.y = tex2D(PREFIX(tex_cbcr), tc_cb).x; + + vec2 tc_cr = tc; + tc_cr.x += PREFIX(cr_offset_x); + ycbcr.z = tex2D(PREFIX(tex_cbcr), tc_cr).z; +#endif + + ycbcr -= PREFIX(offset); + + vec4 rgba; + rgba.rgb = PREFIX(inv_ycbcr_matrix) * ycbcr; + rgba.a = 1.0; + return rgba; +}