On Thu, Sep 6, 2018 at 3:40 PM Julien Isorce <julien.iso...@gmail.com> wrote:
>
> Useful when video decoders only support NV12. Currently
> glamor Xv only supports I420 and YV12.
>
> Note that Intel's sna supports I420, YV12, YUY2, UYVY, NV12.
>
> Test: xvinfo | grep NV12
> Test: gst-launch-1.0 videotestsrc ! video/x-raw, format=NV12 ! xvimagesink
>
> Signed-off-by: Julien Isorce <jiso...@oblong.com>
> ---
>  glamor/glamor_xv.c | 180 
> +++++++++++++++++++++++++++++++++++++++++++++--------
>  1 file changed, 155 insertions(+), 25 deletions(-)
>
> diff --git a/glamor/glamor_xv.c b/glamor/glamor_xv.c
> index 62fc4ff..5631293 100644
> --- a/glamor/glamor_xv.c
> +++ b/glamor/glamor_xv.c
> @@ -59,8 +59,40 @@ typedef struct tagREF_TRANSFORM {
>  #define RTFContrast(a)   (1.0 + ((a)*1.0)/1000.0)
>  #define RTFHue(a)   (((a)*3.1416)/1000.0)
>
> -static const glamor_facet glamor_facet_xv_planar = {
> -    .name = "xv_planar",
> +static const glamor_facet glamor_facet_xv_planar_2 = {
> +    .name = "xv_planar_2",
> +
> +    .version = 120,
> +
> +    .source_name = "v_texcoord0",
> +    .vs_vars = ("attribute vec2 position;\n"
> +                "attribute vec2 v_texcoord0;\n"
> +                "varying vec2 tcs;\n"),
> +    .vs_exec = (GLAMOR_POS(gl_Position, position)
> +                "        tcs = v_texcoord0;\n"),
> +
> +    .fs_vars = ("uniform sampler2D y_sampler;\n"
> +                "uniform sampler2D u_sampler;\n"
> +                "uniform vec4 offsetyco;\n"
> +                "uniform vec4 ucogamma;\n"
> +                "uniform vec4 vco;\n"
> +                "varying vec2 tcs;\n"),
> +    .fs_exec = (
> +                "        float sample;\n"
> +                "        vec4 temp1;\n"
> +                "        sample = texture2D(y_sampler, tcs).w;\n"
> +                "        temp1.xyz = offsetyco.www * vec3(sample) + 
> offsetyco.xyz;\n"
> +                "        sample = texture2D(u_sampler, tcs).x;\n"
> +                "        temp1.xyz = ucogamma.xyz * vec3(sample) + 
> temp1.xyz;\n"
> +                "        sample = texture2D(u_sampler, tcs).y;\n"

Might as well combine the two texture2Ds on u_sampler. I expect most
GLSL compilers will be able to combine them into one operation, but
there's no point in leaving it to chance.
_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to