<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>