<div dir="auto"><div>Hi Laurent,<div dir="auto"><br></div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Laurent Pinchart <<a href="mailto:laurent.pinchart@ideasonboard.com">laurent.pinchart@ideasonboard.com</a>> 於 2020年9月12日 週六 上午9:20 寫道:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Show,<br>
<br>
Thank you for the patch.<br>
<br>
On Fri, Sep 11, 2020 at 04:55:11PM +0800, Show Liu wrote:<br>
> Add OpenGL fragment and vertex shaders to convert two- and tri-planar<br>
> YUV formats to RGB. This will be used to accelerate YUV image rendering.<br>
> <br>
> Signed-off-by: Show Liu <<a href="mailto:show.liu@linaro.org" target="_blank" rel="noreferrer">show.liu@linaro.org</a>><br>
> ---<br>
>  src/qcam/assets/shader/NV_2_planes_UV_f.glsl | 32 +++++++++++++++++++<br>
>  src/qcam/assets/shader/NV_2_planes_VU_f.glsl | 32 +++++++++++++++++++<br>
>  src/qcam/assets/shader/NV_3_planes_f.glsl    | 33 ++++++++++++++++++++<br>
>  src/qcam/assets/shader/NV_vertex_shader.glsl | 16 ++++++++++<br>
>  src/qcam/assets/shader/shaders.qrc           |  9 ++++++<br>
>  src/qcam/meson.build                         |  1 +<br>
>  6 files changed, 123 insertions(+)<br>
>  create mode 100644 src/qcam/assets/shader/NV_2_planes_UV_f.glsl<br>
>  create mode 100644 src/qcam/assets/shader/NV_2_planes_VU_f.glsl<br>
>  create mode 100644 src/qcam/assets/shader/NV_3_planes_f.glsl<br>
>  create mode 100644 src/qcam/assets/shader/NV_vertex_shader.glsl<br>
>  create mode 100644 src/qcam/assets/shader/shaders.qrc<br>
> <br>
> diff --git a/src/qcam/assets/shader/NV_2_planes_UV_f.glsl b/src/qcam/assets/shader/NV_2_planes_UV_f.glsl<br>
> new file mode 100644<br>
> index 0000000..80478c5<br>
> --- /dev/null<br>
> +++ b/src/qcam/assets/shader/NV_2_planes_UV_f.glsl<br>
> @@ -0,0 +1,32 @@<br>
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */<br>
> +/*<br>
> + * Copyright (C) 2020, Linaro<br>
> + *<br>
> + * NV_2_planes_UV_f.glsl - Fragment shader code for NV12, NV16 and NV24 formats<br>
> + */<br>
> +<br>
> +#ifdef GL_ES<br>
> +precision mediump float;<br>
> +#endif<br>
> +<br>
> +varying vec2 textureOut;<br>
> +uniform sampler2D tex_y;<br>
> +uniform sampler2D tex_u;<br>
> +<br>
> +void main(void)<br>
> +{<br>
> +     vec3 yuv;<br>
> +     vec3 rgb;<br>
> +     mat3 yuv2rgb_bt601_mat = mat3(<br>
> +                                   vec3(1.164,  1.164, 1.164),<br>
> +                                   vec3(0.000, -0.392, 2.017),<br>
> +                                   vec3(1.596, -0.813, 0.000)<br>
> +                              );<br>
<br>
Would this be more readable ?<br>
<br>
        mat3 yuv2rgb_bt601_mat = mat3(<br>
                vec3(1.164,  1.164, 1.164),<br>
                vec3(0.000, -0.392, 2.017),<br>
                vec3(1.596, -0.813, 0.000)<br>
        );<br>
<br>
Apart from that,<br>
<br>
Reviewed-by: Laurent Pinchart <<a href="mailto:laurent.pinchart@ideasonboard.com" target="_blank" rel="noreferrer">laurent.pinchart@ideasonboard.com</a>><br>
<br>
If you're fine with this change I'll handle it when applying the series,<br>
no need for a v7 just for this.<br></blockquote></div></div><div dir="auto">Sure. Please go ahead.</div><div dir="auto"><br></div><div dir="auto">Thanks,</div><div dir="auto">Show</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
> +<br>
> +     yuv.x = texture2D(tex_y, textureOut).r - 0.063;<br>
> +     yuv.y = texture2D(tex_u, textureOut).r - 0.500;<br>
> +     yuv.z = texture2D(tex_u, textureOut).g - 0.500;<br>
> +<br>
> +     rgb = yuv2rgb_bt601_mat * yuv;<br>
> +     gl_FragColor = vec4(rgb, 1.0);<br>
> +}<br>
> diff --git a/src/qcam/assets/shader/NV_2_planes_VU_f.glsl b/src/qcam/assets/shader/NV_2_planes_VU_f.glsl<br>
> new file mode 100644<br>
> index 0000000..3794be8<br>
> --- /dev/null<br>
> +++ b/src/qcam/assets/shader/NV_2_planes_VU_f.glsl<br>
> @@ -0,0 +1,32 @@<br>
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */<br>
> +/*<br>
> + * Copyright (C) 2020, Linaro<br>
> + *<br>
> + * NV_2_planes_VU_f.glsl - Fragment shader code for NV21, NV61 and NV42 formats<br>
> + */<br>
> +<br>
> +#ifdef GL_ES<br>
> +precision mediump float;<br>
> +#endif<br>
> +<br>
> +varying vec2 textureOut;<br>
> +uniform sampler2D tex_y;<br>
> +uniform sampler2D tex_u;<br>
> +<br>
> +void main(void)<br>
> +{<br>
> +     vec3 yuv;<br>
> +     vec3 rgb;<br>
> +     mat3 yuv2rgb_bt601_mat = mat3(<br>
> +                                   vec3(1.164,  1.164, 1.164),<br>
> +                                   vec3(0.000, -0.392, 2.017),<br>
> +                                   vec3(1.596, -0.813, 0.000)<br>
> +                              );<br>
> +<br>
> +     yuv.x = texture2D(tex_y, textureOut).r - 0.063;<br>
> +     yuv.y = texture2D(tex_u, textureOut).g - 0.500;<br>
> +     yuv.z = texture2D(tex_u, textureOut).r - 0.500;<br>
> +<br>
> +     rgb = yuv2rgb_bt601_mat * yuv;<br>
> +     gl_FragColor = vec4(rgb, 1.0);<br>
> +}<br>
> diff --git a/src/qcam/assets/shader/NV_3_planes_f.glsl b/src/qcam/assets/shader/NV_3_planes_f.glsl<br>
> new file mode 100644<br>
> index 0000000..fca9b65<br>
> --- /dev/null<br>
> +++ b/src/qcam/assets/shader/NV_3_planes_f.glsl<br>
> @@ -0,0 +1,33 @@<br>
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */<br>
> +/*<br>
> + * Copyright (C) 2020, Linaro<br>
> + *<br>
> + * NV_3_planes_UV_f.glsl - Fragment shader code for YUV420 format<br>
> + */<br>
> +<br>
> +#ifdef GL_ES<br>
> +precision mediump float;<br>
> +#endif<br>
> +<br>
> +varying vec2 textureOut;<br>
> +uniform sampler2D tex_y;<br>
> +uniform sampler2D tex_u;<br>
> +uniform sampler2D tex_v;<br>
> +<br>
> +void main(void)<br>
> +{<br>
> +     vec3 yuv;<br>
> +     vec3 rgb;<br>
> +     mat3 yuv2rgb_bt601_mat = mat3(<br>
> +                                   vec3(1.164,  1.164, 1.164),<br>
> +                                   vec3(0.000, -0.392, 2.017),<br>
> +                                   vec3(1.596, -0.813, 0.000)<br>
> +                              );<br>
> +<br>
> +     yuv.x = texture2D(tex_y, textureOut).r - 0.063;<br>
> +     yuv.y = texture2D(tex_u, textureOut).r - 0.500;<br>
> +     yuv.z = texture2D(tex_v, textureOut).r - 0.500;<br>
> +<br>
> +     rgb = yuv2rgb_bt601_mat * yuv;<br>
> +     gl_FragColor = vec4(rgb, 1.0);<br>
> +}<br>
> diff --git a/src/qcam/assets/shader/NV_vertex_shader.glsl b/src/qcam/assets/shader/NV_vertex_shader.glsl<br>
> new file mode 100644<br>
> index 0000000..12e791e<br>
> --- /dev/null<br>
> +++ b/src/qcam/assets/shader/NV_vertex_shader.glsl<br>
> @@ -0,0 +1,16 @@<br>
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */<br>
> +/*<br>
> + * Copyright (C) 2020, Linaro<br>
> + *<br>
> + * NV_vertex_shader.glsl - Vertex shader code for NV family<br>
> + */<br>
> +<br>
> +attribute vec4 vertexIn;<br>
> +attribute vec2 textureIn;<br>
> +varying vec2 textureOut;<br>
> +<br>
> +void main(void)<br>
> +{<br>
> +     gl_Position = vertexIn;<br>
> +     textureOut = textureIn;<br>
> +}<br>
> diff --git a/src/qcam/assets/shader/shaders.qrc b/src/qcam/assets/shader/shaders.qrc<br>
> new file mode 100644<br>
> index 0000000..33eab27<br>
> --- /dev/null<br>
> +++ b/src/qcam/assets/shader/shaders.qrc<br>
> @@ -0,0 +1,9 @@<br>
> +<!-- SPDX-License-Identifier: LGPL-2.1-or-later --><br>
> +<!DOCTYPE RCC><RCC version="1.0"><br>
> +<qresource><br>
> +<file>./NV_vertex_shader.glsl</file><br>
> +<file>./NV_2_planes_UV_f.glsl</file><br>
> +<file>./NV_2_planes_VU_f.glsl</file><br>
> +<file>./NV_3_planes_f.glsl</file><br>
> +</qresource><br>
> +</RCC><br>
> diff --git a/src/qcam/meson.build b/src/qcam/meson.build<br>
> index 6ea886a..e0c6f26 100644<br>
> --- a/src/qcam/meson.build<br>
> +++ b/src/qcam/meson.build<br>
> @@ -16,6 +16,7 @@ qcam_moc_headers = files([<br>
>  <br>
>  qcam_resources = files([<br>
>      'assets/feathericons/feathericons.qrc',<br>
> +    'assets/shader/shaders.qrc'<br>
>  ])<br>
>  <br>
>  qt5 = import('qt5')<br>
<br>
-- <br>
Regards,<br>
<br>
Laurent Pinchart<br>
</blockquote></div></div></div>