[{"id":12329,"web_url":"https://patchwork.libcamera.org/comment/12329/","msgid":"<20200906005644.GB25630@pendragon.ideasonboard.com>","date":"2020-09-06T00:56:44","subject":"Re: [libcamera-devel] [PATCH v5 1/4] qcam: add OpenGL shader code\n\tas Qt resource","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Show,\n\nThank you for the patch.\n\nOn Fri, Sep 04, 2020 at 04:43:12PM +0800, Show Liu wrote:\n> qcam: add OpenGL shader code as Qt resource\n> \n> Signed-off-by: Show Liu <show.liu@linaro.org>\n> ---\n>  src/qcam/assets/shader/NV_2_planes_UV_f.glsl | 32 +++++++++++++++++++\n>  src/qcam/assets/shader/NV_2_planes_VU_f.glsl | 32 +++++++++++++++++++\n>  src/qcam/assets/shader/NV_3_planes_UV_f.glsl | 33 ++++++++++++++++++++\n>  src/qcam/assets/shader/NV_3_planes_VU_f.glsl | 33 ++++++++++++++++++++\n>  src/qcam/assets/shader/NV_vertex_shader.glsl | 16 ++++++++++\n>  src/qcam/assets/shader/shaders.qrc           | 10 ++++++\n>  src/qcam/meson.build                         |  1 +\n>  7 files changed, 157 insertions(+)\n>  create mode 100644 src/qcam/assets/shader/NV_2_planes_UV_f.glsl\n>  create mode 100644 src/qcam/assets/shader/NV_2_planes_VU_f.glsl\n>  create mode 100644 src/qcam/assets/shader/NV_3_planes_UV_f.glsl\n>  create mode 100644 src/qcam/assets/shader/NV_3_planes_VU_f.glsl\n>  create mode 100644 src/qcam/assets/shader/NV_vertex_shader.glsl\n>  create mode 100644 src/qcam/assets/shader/shaders.qrc\n> \n> diff --git a/src/qcam/assets/shader/NV_2_planes_UV_f.glsl b/src/qcam/assets/shader/NV_2_planes_UV_f.glsl\n> new file mode 100644\n> index 0000000..54bb459\n> --- /dev/null\n> +++ b/src/qcam/assets/shader/NV_2_planes_UV_f.glsl\n> @@ -0,0 +1,32 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2020, Linaro\n> + *\n> + * NV_2_planes_UV_f.glsl - Fragment shader code for NV12, NV16 and NV24 formats\n> + */\n> +\n> +#ifdef GL_ES\n> +precision mediump float;\n> +#endif\n> +\n> +varying vec2 textureOut;\n> +uniform sampler2D tex_y;\n> +uniform sampler2D tex_u;\n> +\n> +void main(void)\n> +{\n> +\tvec3 yuv;\n> +\tvec3 rgb;\n> +\tmat3 yuv2rgb_bt601_mat = mat3(\n> +\t\t\t\t      vec3(1.164,  1.164, 1.164),\n> +\t\t\t\t      vec3(0.000, -0.392, 2.017),\n> +\t\t\t\t      vec3(1.596, -0.813, 0.000)\n> +\t\t\t\t );\n> +\n> +\tyuv.x = texture2D(tex_y, textureOut).r - 0.063;\n> +\tyuv.y = texture2D(tex_u, textureOut).r - 0.500;\n> +\tyuv.z = texture2D(tex_u, textureOut).g - 0.500;\n> +\n> +\trgb = yuv2rgb_bt601_mat * yuv;\n> +\tgl_FragColor = vec4(rgb, 1.0);\n> +}\n> diff --git a/src/qcam/assets/shader/NV_2_planes_VU_f.glsl b/src/qcam/assets/shader/NV_2_planes_VU_f.glsl\n> new file mode 100644\n> index 0000000..6571ed6\n> --- /dev/null\n> +++ b/src/qcam/assets/shader/NV_2_planes_VU_f.glsl\n> @@ -0,0 +1,32 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2020, Linaro\n> + *\n> + * NV_2_planes_VU_f.glsl - Fragment shader code for NV21, NV61 and NV42 formats\n> + */\n> +\n> +#ifdef GL_ES\n> +precision mediump float;\n> +#endif\n> +\n> +varying vec2 textureOut;\n> +uniform sampler2D tex_y;\n> +uniform sampler2D tex_u;\n> +\n> +void main(void)\n> +{\n> +\tvec3 yuv;\n> +\tvec3 rgb;\n> +\tmat3 yuv2rgb_bt601_mat = mat3(\n> +\t\t\t\t      vec3(1.164,  1.164, 1.164),\n> +\t\t\t\t      vec3(0.000, -0.392, 2.017),\n> +\t\t\t\t      vec3(1.596, -0.813, 0.000)\n> +\t\t\t\t );\n> +\n> +\tyuv.x = texture2D(tex_y, textureOut).r - 0.063;\n> +\tyuv.y = texture2D(tex_u, textureOut).g - 0.500;\n> +\tyuv.z = texture2D(tex_u, textureOut).r - 0.500;\n> +\n> +\trgb = yuv2rgb_bt601_mat * yuv;\n> +\tgl_FragColor = vec4(rgb, 1.0);\n> +}\n> diff --git a/src/qcam/assets/shader/NV_3_planes_UV_f.glsl b/src/qcam/assets/shader/NV_3_planes_UV_f.glsl\n> new file mode 100644\n> index 0000000..9d104fd\n> --- /dev/null\n> +++ b/src/qcam/assets/shader/NV_3_planes_UV_f.glsl\n> @@ -0,0 +1,33 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2020, Linaro\n> + *\n> + * NV_3_planes_UV_f.glsl - Fragment shader code for YUV420 format\n> + */\n> +\n> +#ifdef GL_ES\n> +precision mediump float;\n> +#endif\n> +\n> +varying vec2 textureOut;\n> +uniform sampler2D tex_y;\n> +uniform sampler2D tex_u;\n> +uniform sampler2D tex_v;\n> +\n> +void main(void)\n> +{\n> +\tvec3 yuv;\n> +\tvec3 rgb;\n> +\tmat3 yuv2rgb_bt601_mat = mat3(\n> +\t\t\t\t      vec3(1.164,  1.164, 1.164),\n> +\t\t\t\t      vec3(0.000, -0.392, 2.017),\n> +\t\t\t\t      vec3(1.596, -0.813, 0.000)\n> +\t\t\t\t );\n> +\n> +\tyuv.x = texture2D(tex_y, textureOut).r - 0.063;\n> +\tyuv.y = texture2D(tex_u, textureOut).r - 0.500;\n> +\tyuv.z = texture2D(tex_v, textureOut).r - 0.500;\n> +\n> +\trgb = yuv2rgb_bt601_mat * yuv;\n> +\tgl_FragColor = vec4(rgb, 1.0);\n> +}\n> diff --git a/src/qcam/assets/shader/NV_3_planes_VU_f.glsl b/src/qcam/assets/shader/NV_3_planes_VU_f.glsl\n> new file mode 100644\n> index 0000000..245a619\n> --- /dev/null\n> +++ b/src/qcam/assets/shader/NV_3_planes_VU_f.glsl\n> @@ -0,0 +1,33 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2020, Linaro\n> + *\n> + * NV_3_planes_VU_f.glsl - Fragment shader code for YVU420 format\n> + */\n> +\n> +#ifdef GL_ES\n> +precision mediump float;\n> +#endif\n> +\n> +varying vec2 textureOut;\n> +uniform sampler2D tex_y;\n> +uniform sampler2D tex_u;\n> +uniform sampler2D tex_v;\n> +\n> +void main(void)\n> +{\n> +\tvec3 yuv;\n> +\tvec3 rgb;\n> +\tmat3 yuv2rgb_bt601_mat = mat3(\n> +\t\t\t\t      vec3(1.164,  1.164, 1.164),\n> +\t\t\t\t      vec3(0.000, -0.392, 2.017),\n> +\t\t\t\t      vec3(1.596, -0.813, 0.000)\n> +\t\t\t\t );\n> +\n> +\tyuv.x = texture2D(tex_y, textureOut).r - 0.063;\n> +\tyuv.y = texture2D(tex_u, textureOut).r - 0.500;\n> +\tyuv.z = texture2D(tex_v, textureOut).r - 0.500;\n\nShouldn't this be\n\n\tyuv.y = texture2D(tex_v, textureOut).r - 0.500;\n\tyuv.z = texture2D(tex_u, textureOut).r - 0.500;\n\n?\n\nApart from that,\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> +\n> +\trgb = yuv2rgb_bt601_mat * yuv;\n> +\tgl_FragColor = vec4(rgb, 1.0);\n> +}\n> diff --git a/src/qcam/assets/shader/NV_vertex_shader.glsl b/src/qcam/assets/shader/NV_vertex_shader.glsl\n> new file mode 100644\n> index 0000000..403b791\n> --- /dev/null\n> +++ b/src/qcam/assets/shader/NV_vertex_shader.glsl\n> @@ -0,0 +1,16 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2020, Linaro\n> + *\n> + * NV_vertex_shader.glsl - Vertex shader code for NV family\n> + */\n> +\n> +attribute vec4 vertexIn;\n> +attribute vec2 textureIn;\n> +varying vec2 textureOut;\n> +\n> +void main(void)\n> +{\n> +\tgl_Position = vertexIn;\n> +\ttextureOut = textureIn;\n> +}\n> diff --git a/src/qcam/assets/shader/shaders.qrc b/src/qcam/assets/shader/shaders.qrc\n> new file mode 100644\n> index 0000000..6fe4c7f\n> --- /dev/null\n> +++ b/src/qcam/assets/shader/shaders.qrc\n> @@ -0,0 +1,10 @@\n> +<!-- SPDX-License-Identifier: GPL-2.0-or-later -->\n> +<!DOCTYPE RCC><RCC version=\"1.0\">\n> +<qresource>\n> +<file>./NV_vertex_shader.glsl</file>\n> +<file>./NV_2_planes_UV_f.glsl</file>\n> +<file>./NV_2_planes_VU_f.glsl</file>\n> +<file>./NV_3_planes_UV_f.glsl</file>\n> +<file>./NV_3_planes_VU_f.glsl</file>\n> +</qresource>\n> +</RCC>\n> diff --git a/src/qcam/meson.build b/src/qcam/meson.build\n> index 6ea886a..e0c6f26 100644\n> --- a/src/qcam/meson.build\n> +++ b/src/qcam/meson.build\n> @@ -16,6 +16,7 @@ qcam_moc_headers = files([\n>  \n>  qcam_resources = files([\n>      'assets/feathericons/feathericons.qrc',\n> +    'assets/shader/shaders.qrc'\n>  ])\n>  \n>  qt5 = import('qt5')","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id F180CBDB1D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun,  6 Sep 2020 00:57:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 86FEF62B5D;\n\tSun,  6 Sep 2020 02:57:09 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4AD8C61EA0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun,  6 Sep 2020 02:57:08 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id BB601277;\n\tSun,  6 Sep 2020 02:57:07 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"UZGyocW8\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1599353827;\n\tbh=RhYGfgi38RxiawAg6SLlB3VLpwSd2j9sLyT1HsMrkgg=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=UZGyocW8SBuIS1XGhrvpCGEGlZAVh30teQrBg+9ZHRoI3nEDRWaCmFLyou3Q6qXSr\n\tN2TZIumKWcFboQUM2STEFN9Mu9R+s3yo6kLGrFYJgrSduk9kXVT/IqsWsXZLOtcEjT\n\tnMPVdkh3fIJDciDvoJTIyr1wBlUf/w11wi5dK/lA=","Date":"Sun, 6 Sep 2020 03:56:44 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Show Liu <show.liu@linaro.org>","Message-ID":"<20200906005644.GB25630@pendragon.ideasonboard.com>","References":"<20200904084316.7319-1-show.liu@linaro.org>\n\t<20200904084316.7319-2-show.liu@linaro.org>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200904084316.7319-2-show.liu@linaro.org>","Subject":"Re: [libcamera-devel] [PATCH v5 1/4] qcam: add OpenGL shader code\n\tas Qt resource","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":12331,"web_url":"https://patchwork.libcamera.org/comment/12331/","msgid":"<20200906010025.GD25630@pendragon.ideasonboard.com>","date":"2020-09-06T01:00:25","subject":"Re: [libcamera-devel] [PATCH v5 1/4] qcam: add OpenGL shader code\n\tas Qt resource","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Sun, Sep 06, 2020 at 03:56:45AM +0300, Laurent Pinchart wrote:\n> Hi Show,\n> \n> Thank you for the patch.\n> \n> On Fri, Sep 04, 2020 at 04:43:12PM +0800, Show Liu wrote:\n> > qcam: add OpenGL shader code as Qt resource\n\nMaybe with a bit more detailed commit message actually, this just\nduplicates the subject line. How about the following ?\n\nAdd OpenGL fragment and vertex shaders to convert two- and tri-planar\nYUV formats to RGB. This will be used to accelerate YUV image rendering.\n\n> > Signed-off-by: Show Liu <show.liu@linaro.org>\n> > ---\n> >  src/qcam/assets/shader/NV_2_planes_UV_f.glsl | 32 +++++++++++++++++++\n> >  src/qcam/assets/shader/NV_2_planes_VU_f.glsl | 32 +++++++++++++++++++\n> >  src/qcam/assets/shader/NV_3_planes_UV_f.glsl | 33 ++++++++++++++++++++\n> >  src/qcam/assets/shader/NV_3_planes_VU_f.glsl | 33 ++++++++++++++++++++\n> >  src/qcam/assets/shader/NV_vertex_shader.glsl | 16 ++++++++++\n> >  src/qcam/assets/shader/shaders.qrc           | 10 ++++++\n> >  src/qcam/meson.build                         |  1 +\n> >  7 files changed, 157 insertions(+)\n> >  create mode 100644 src/qcam/assets/shader/NV_2_planes_UV_f.glsl\n> >  create mode 100644 src/qcam/assets/shader/NV_2_planes_VU_f.glsl\n> >  create mode 100644 src/qcam/assets/shader/NV_3_planes_UV_f.glsl\n> >  create mode 100644 src/qcam/assets/shader/NV_3_planes_VU_f.glsl\n> >  create mode 100644 src/qcam/assets/shader/NV_vertex_shader.glsl\n> >  create mode 100644 src/qcam/assets/shader/shaders.qrc\n> > \n> > diff --git a/src/qcam/assets/shader/NV_2_planes_UV_f.glsl b/src/qcam/assets/shader/NV_2_planes_UV_f.glsl\n> > new file mode 100644\n> > index 0000000..54bb459\n> > --- /dev/null\n> > +++ b/src/qcam/assets/shader/NV_2_planes_UV_f.glsl\n> > @@ -0,0 +1,32 @@\n> > +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> > +/*\n> > + * Copyright (C) 2020, Linaro\n> > + *\n> > + * NV_2_planes_UV_f.glsl - Fragment shader code for NV12, NV16 and NV24 formats\n> > + */\n> > +\n> > +#ifdef GL_ES\n> > +precision mediump float;\n> > +#endif\n> > +\n> > +varying vec2 textureOut;\n> > +uniform sampler2D tex_y;\n> > +uniform sampler2D tex_u;\n> > +\n> > +void main(void)\n> > +{\n> > +\tvec3 yuv;\n> > +\tvec3 rgb;\n> > +\tmat3 yuv2rgb_bt601_mat = mat3(\n> > +\t\t\t\t      vec3(1.164,  1.164, 1.164),\n> > +\t\t\t\t      vec3(0.000, -0.392, 2.017),\n> > +\t\t\t\t      vec3(1.596, -0.813, 0.000)\n> > +\t\t\t\t );\n> > +\n> > +\tyuv.x = texture2D(tex_y, textureOut).r - 0.063;\n> > +\tyuv.y = texture2D(tex_u, textureOut).r - 0.500;\n> > +\tyuv.z = texture2D(tex_u, textureOut).g - 0.500;\n> > +\n> > +\trgb = yuv2rgb_bt601_mat * yuv;\n> > +\tgl_FragColor = vec4(rgb, 1.0);\n> > +}\n> > diff --git a/src/qcam/assets/shader/NV_2_planes_VU_f.glsl b/src/qcam/assets/shader/NV_2_planes_VU_f.glsl\n> > new file mode 100644\n> > index 0000000..6571ed6\n> > --- /dev/null\n> > +++ b/src/qcam/assets/shader/NV_2_planes_VU_f.glsl\n> > @@ -0,0 +1,32 @@\n> > +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> > +/*\n> > + * Copyright (C) 2020, Linaro\n> > + *\n> > + * NV_2_planes_VU_f.glsl - Fragment shader code for NV21, NV61 and NV42 formats\n> > + */\n> > +\n> > +#ifdef GL_ES\n> > +precision mediump float;\n> > +#endif\n> > +\n> > +varying vec2 textureOut;\n> > +uniform sampler2D tex_y;\n> > +uniform sampler2D tex_u;\n> > +\n> > +void main(void)\n> > +{\n> > +\tvec3 yuv;\n> > +\tvec3 rgb;\n> > +\tmat3 yuv2rgb_bt601_mat = mat3(\n> > +\t\t\t\t      vec3(1.164,  1.164, 1.164),\n> > +\t\t\t\t      vec3(0.000, -0.392, 2.017),\n> > +\t\t\t\t      vec3(1.596, -0.813, 0.000)\n> > +\t\t\t\t );\n> > +\n> > +\tyuv.x = texture2D(tex_y, textureOut).r - 0.063;\n> > +\tyuv.y = texture2D(tex_u, textureOut).g - 0.500;\n> > +\tyuv.z = texture2D(tex_u, textureOut).r - 0.500;\n> > +\n> > +\trgb = yuv2rgb_bt601_mat * yuv;\n> > +\tgl_FragColor = vec4(rgb, 1.0);\n> > +}\n> > diff --git a/src/qcam/assets/shader/NV_3_planes_UV_f.glsl b/src/qcam/assets/shader/NV_3_planes_UV_f.glsl\n> > new file mode 100644\n> > index 0000000..9d104fd\n> > --- /dev/null\n> > +++ b/src/qcam/assets/shader/NV_3_planes_UV_f.glsl\n> > @@ -0,0 +1,33 @@\n> > +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> > +/*\n> > + * Copyright (C) 2020, Linaro\n> > + *\n> > + * NV_3_planes_UV_f.glsl - Fragment shader code for YUV420 format\n> > + */\n> > +\n> > +#ifdef GL_ES\n> > +precision mediump float;\n> > +#endif\n> > +\n> > +varying vec2 textureOut;\n> > +uniform sampler2D tex_y;\n> > +uniform sampler2D tex_u;\n> > +uniform sampler2D tex_v;\n> > +\n> > +void main(void)\n> > +{\n> > +\tvec3 yuv;\n> > +\tvec3 rgb;\n> > +\tmat3 yuv2rgb_bt601_mat = mat3(\n> > +\t\t\t\t      vec3(1.164,  1.164, 1.164),\n> > +\t\t\t\t      vec3(0.000, -0.392, 2.017),\n> > +\t\t\t\t      vec3(1.596, -0.813, 0.000)\n> > +\t\t\t\t );\n> > +\n> > +\tyuv.x = texture2D(tex_y, textureOut).r - 0.063;\n> > +\tyuv.y = texture2D(tex_u, textureOut).r - 0.500;\n> > +\tyuv.z = texture2D(tex_v, textureOut).r - 0.500;\n> > +\n> > +\trgb = yuv2rgb_bt601_mat * yuv;\n> > +\tgl_FragColor = vec4(rgb, 1.0);\n> > +}\n> > diff --git a/src/qcam/assets/shader/NV_3_planes_VU_f.glsl b/src/qcam/assets/shader/NV_3_planes_VU_f.glsl\n> > new file mode 100644\n> > index 0000000..245a619\n> > --- /dev/null\n> > +++ b/src/qcam/assets/shader/NV_3_planes_VU_f.glsl\n> > @@ -0,0 +1,33 @@\n> > +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> > +/*\n> > + * Copyright (C) 2020, Linaro\n> > + *\n> > + * NV_3_planes_VU_f.glsl - Fragment shader code for YVU420 format\n> > + */\n> > +\n> > +#ifdef GL_ES\n> > +precision mediump float;\n> > +#endif\n> > +\n> > +varying vec2 textureOut;\n> > +uniform sampler2D tex_y;\n> > +uniform sampler2D tex_u;\n> > +uniform sampler2D tex_v;\n> > +\n> > +void main(void)\n> > +{\n> > +\tvec3 yuv;\n> > +\tvec3 rgb;\n> > +\tmat3 yuv2rgb_bt601_mat = mat3(\n> > +\t\t\t\t      vec3(1.164,  1.164, 1.164),\n> > +\t\t\t\t      vec3(0.000, -0.392, 2.017),\n> > +\t\t\t\t      vec3(1.596, -0.813, 0.000)\n> > +\t\t\t\t );\n> > +\n> > +\tyuv.x = texture2D(tex_y, textureOut).r - 0.063;\n> > +\tyuv.y = texture2D(tex_u, textureOut).r - 0.500;\n> > +\tyuv.z = texture2D(tex_v, textureOut).r - 0.500;\n> \n> Shouldn't this be\n> \n> \tyuv.y = texture2D(tex_v, textureOut).r - 0.500;\n> \tyuv.z = texture2D(tex_u, textureOut).r - 0.500;\n> \n> ?\n> \n> Apart from that,\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n> > +\n> > +\trgb = yuv2rgb_bt601_mat * yuv;\n> > +\tgl_FragColor = vec4(rgb, 1.0);\n> > +}\n> > diff --git a/src/qcam/assets/shader/NV_vertex_shader.glsl b/src/qcam/assets/shader/NV_vertex_shader.glsl\n> > new file mode 100644\n> > index 0000000..403b791\n> > --- /dev/null\n> > +++ b/src/qcam/assets/shader/NV_vertex_shader.glsl\n> > @@ -0,0 +1,16 @@\n> > +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> > +/*\n> > + * Copyright (C) 2020, Linaro\n> > + *\n> > + * NV_vertex_shader.glsl - Vertex shader code for NV family\n> > + */\n> > +\n> > +attribute vec4 vertexIn;\n> > +attribute vec2 textureIn;\n> > +varying vec2 textureOut;\n> > +\n> > +void main(void)\n> > +{\n> > +\tgl_Position = vertexIn;\n> > +\ttextureOut = textureIn;\n> > +}\n> > diff --git a/src/qcam/assets/shader/shaders.qrc b/src/qcam/assets/shader/shaders.qrc\n> > new file mode 100644\n> > index 0000000..6fe4c7f\n> > --- /dev/null\n> > +++ b/src/qcam/assets/shader/shaders.qrc\n> > @@ -0,0 +1,10 @@\n> > +<!-- SPDX-License-Identifier: GPL-2.0-or-later -->\n> > +<!DOCTYPE RCC><RCC version=\"1.0\">\n> > +<qresource>\n> > +<file>./NV_vertex_shader.glsl</file>\n> > +<file>./NV_2_planes_UV_f.glsl</file>\n> > +<file>./NV_2_planes_VU_f.glsl</file>\n> > +<file>./NV_3_planes_UV_f.glsl</file>\n> > +<file>./NV_3_planes_VU_f.glsl</file>\n> > +</qresource>\n> > +</RCC>\n> > diff --git a/src/qcam/meson.build b/src/qcam/meson.build\n> > index 6ea886a..e0c6f26 100644\n> > --- a/src/qcam/meson.build\n> > +++ b/src/qcam/meson.build\n> > @@ -16,6 +16,7 @@ qcam_moc_headers = files([\n> >  \n> >  qcam_resources = files([\n> >      'assets/feathericons/feathericons.qrc',\n> > +    'assets/shader/shaders.qrc'\n> >  ])\n> >  \n> >  qt5 = import('qt5')\n> \n> -- \n> Regards,\n> \n> Laurent Pinchart","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 0B76BBDB1D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun,  6 Sep 2020 01:00:52 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8B8BD62B5D;\n\tSun,  6 Sep 2020 03:00:51 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 053C361EA0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun,  6 Sep 2020 03:00:49 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 5C714277;\n\tSun,  6 Sep 2020 03:00:49 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"VOioPQYl\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1599354049;\n\tbh=jxu+MMF6LeEhpK5BCfs99eeFKwVVGco1AINrqnLQYDU=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=VOioPQYlXys7YofaA1F2BpOXkBZfFyoHE8wOE8P158tGPfTzbe4dAqseUUkKQt9xo\n\tHk6/JZuOIAm1ecfaNB6K+SXdRoIEkpqDAy2FjIUozk7K1iDZGRyEUUYoqcTWcgEwsV\n\tOi/hnF7MzF1UmaXcqJsM1x9YyAfqciMuXVA7Q3+8=","Date":"Sun, 6 Sep 2020 04:00:25 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Show Liu <show.liu@linaro.org>","Message-ID":"<20200906010025.GD25630@pendragon.ideasonboard.com>","References":"<20200904084316.7319-1-show.liu@linaro.org>\n\t<20200904084316.7319-2-show.liu@linaro.org>\n\t<20200906005644.GB25630@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200906005644.GB25630@pendragon.ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v5 1/4] qcam: add OpenGL shader code\n\tas Qt resource","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]