lgtm
On 11/04/2015 07:27 AM, Lionel Landwerlin wrote: > --- > src/Makefile.am | 2 ++ > src/gen8_render.c | 32 +++++------------------ > src/gen9_render.c | 32 +++++------------------ > src/i965_render.c | 32 +++++------------------ > src/i965_yuv_coefs.c | 73 > ++++++++++++++++++++++++++++++++++++++++++++++++++++ > src/i965_yuv_coefs.h | 36 ++++++++++++++++++++++++++ > 6 files changed, 131 insertions(+), 76 deletions(-) > create mode 100644 src/i965_yuv_coefs.c > create mode 100644 src/i965_yuv_coefs.h > > diff --git a/src/Makefile.am b/src/Makefile.am > index a170aee..f6db887 100755 > --- a/src/Makefile.am > +++ b/src/Makefile.am > @@ -84,6 +84,7 @@ source_c = \ > i965_media_mpeg2.c \ > i965_gpe_utils.c \ > i965_post_processing.c \ > + i965_yuv_coefs.c \ > gen8_post_processing.c \ > i965_render.c \ > i965_vpp_avs.c \ > @@ -128,6 +129,7 @@ source_h = \ > i965_render.h \ > i965_structs.h \ > i965_vpp_avs.h \ > + i965_yuv_coefs.h \ > intel_batchbuffer.h \ > intel_batchbuffer_dump.h\ > intel_compiler.h \ > diff --git a/src/gen8_render.c b/src/gen8_render.c > index 45d55ea..1bfe04c 100644 > --- a/src/gen8_render.c > +++ b/src/gen8_render.c > @@ -45,6 +45,7 @@ > #include "i965_defines.h" > #include "i965_drv_video.h" > #include "i965_structs.h" > +#include "i965_yuv_coefs.h" > > #include "i965_render.h" > > @@ -124,25 +125,6 @@ static struct i965_kernel render_kernels_gen8[] = { > #define URB_CS_ENTRIES 4 > #define URB_CS_ENTRY_SIZE 4 > > -static float yuv_to_rgb_bt601[3][4] = { > -{1.164, 0, 1.596, -0.06275,}, > -{1.164, -0.392, -0.813, -0.50196,}, > -{1.164, 2.017, 0, -0.50196,}, > -}; > - > -static float yuv_to_rgb_bt709[3][4] = { > -{1.164, 0, 1.793, -0.06275,}, > -{1.164, -0.213, -0.533, -0.50196,}, > -{1.164, 2.112, 0, -0.50196,}, > -}; > - > -static float yuv_to_rgb_smpte_240[3][4] = { > -{1.164, 0, 1.794, -0.06275,}, > -{1.164, -0.258, -0.5425, -0.50196,}, > -{1.164, 2.078, 0, -0.50196,}, > -}; > - > - > static void > gen8_render_set_surface_tiling(struct gen8_surface_state *ss, uint32_t > tiling) > { > @@ -784,6 +766,8 @@ gen8_render_upload_constants(VADriverContextP ctx, > float saturation = (float)i965->saturation_attrib->value / > DEFAULT_SATURATION; > float *yuv_to_rgb; > unsigned int color_flag; > + const float* yuv_coefs; > + size_t coefs_length; > > dri_bo_map(render_state->dynamic_state.bo, 1); > assert(render_state->dynamic_state.bo->virtual); > @@ -820,12 +804,10 @@ gen8_render_upload_constants(VADriverContextP ctx, > > color_flag = flags & VA_SRC_COLOR_MASK; > yuv_to_rgb = (float *)constant_buffer + 8; > - if (color_flag == VA_SRC_BT709) > - memcpy(yuv_to_rgb, yuv_to_rgb_bt709, sizeof(yuv_to_rgb_bt709)); > - else if (color_flag == VA_SRC_SMPTE_240) > - memcpy(yuv_to_rgb, yuv_to_rgb_smpte_240, > sizeof(yuv_to_rgb_smpte_240)); > - else > - memcpy(yuv_to_rgb, yuv_to_rgb_bt601, sizeof(yuv_to_rgb_bt601)); > + > + yuv_coefs = > i915_color_standard_to_coefs(i915_filter_to_color_standard(color_flag), > + &coefs_length); > + memcpy(yuv_to_rgb, yuv_coefs, coefs_length); > > dri_bo_unmap(render_state->dynamic_state.bo); > } > diff --git a/src/gen9_render.c b/src/gen9_render.c > index fa48243..b45543a 100644 > --- a/src/gen9_render.c > +++ b/src/gen9_render.c > @@ -45,6 +45,7 @@ > #include "i965_defines.h" > #include "i965_drv_video.h" > #include "i965_structs.h" > +#include "i965_yuv_coefs.h" > > #include "i965_render.h" > > @@ -118,25 +119,6 @@ static struct i965_kernel render_kernels_gen9[] = { > #define URB_CS_ENTRIES 4 > #define URB_CS_ENTRY_SIZE 4 > > -static float yuv_to_rgb_bt601[3][4] = { > -{1.164, 0, 1.596, -0.06275,}, > -{1.164, -0.392, -0.813, -0.50196,}, > -{1.164, 2.017, 0, -0.50196,}, > -}; > - > -static float yuv_to_rgb_bt709[3][4] = { > -{1.164, 0, 1.793, -0.06275,}, > -{1.164, -0.213, -0.533, -0.50196,}, > -{1.164, 2.112, 0, -0.50196,}, > -}; > - > -static float yuv_to_rgb_smpte_240[3][4] = { > -{1.164, 0, 1.794, -0.06275,}, > -{1.164, -0.258, -0.5425, -0.50196,}, > -{1.164, 2.078, 0, -0.50196,}, > -}; > - > - > static void > gen9_render_set_surface_tiling(struct gen8_surface_state *ss, uint32_t > tiling) > { > @@ -775,6 +757,8 @@ gen9_render_upload_constants(VADriverContextP ctx, > float saturation = (float)i965->saturation_attrib->value / > DEFAULT_SATURATION; > float *yuv_to_rgb; > unsigned int color_flag; > + const float* yuv_coefs; > + size_t coefs_length; > > dri_bo_map(render_state->dynamic_state.bo, 1); > assert(render_state->dynamic_state.bo->virtual); > @@ -811,12 +795,10 @@ gen9_render_upload_constants(VADriverContextP ctx, > > color_flag = flags & VA_SRC_COLOR_MASK; > yuv_to_rgb = (float *)constant_buffer + 8; > - if (color_flag == VA_SRC_BT709) > - memcpy(yuv_to_rgb, yuv_to_rgb_bt709, sizeof(yuv_to_rgb_bt709)); > - else if (color_flag == VA_SRC_SMPTE_240) > - memcpy(yuv_to_rgb, yuv_to_rgb_smpte_240, > sizeof(yuv_to_rgb_smpte_240)); > - else > - memcpy(yuv_to_rgb, yuv_to_rgb_bt601, sizeof(yuv_to_rgb_bt601)); > + > + yuv_coefs = > i915_color_standard_to_coefs(i915_filter_to_color_standard(color_flag), > + &coefs_length); > + memcpy(yuv_to_rgb, yuv_coefs, coefs_length); > > dri_bo_unmap(render_state->dynamic_state.bo); > } > diff --git a/src/i965_render.c b/src/i965_render.c > index f941d1b..2e24353 100644 > --- a/src/i965_render.c > +++ b/src/i965_render.c > @@ -44,6 +44,7 @@ > #include "i965_defines.h" > #include "i965_drv_video.h" > #include "i965_structs.h" > +#include "i965_yuv_coefs.h" > > #include "i965_render.h" > > @@ -311,24 +312,6 @@ static struct i965_kernel render_kernels_gen7_haswell[] > = { > #define URB_CS_ENTRIES 4 > #define URB_CS_ENTRY_SIZE 4 > > -static float yuv_to_rgb_bt601[3][4] = { > -{1.164, 0, 1.596, -0.06275,}, > -{1.164, -0.392, -0.813, -0.50196,}, > -{1.164, 2.017, 0, -0.50196,}, > -}; > - > -static float yuv_to_rgb_bt709[3][4] = { > -{1.164, 0, 1.793, -0.06275,}, > -{1.164, -0.213, -0.533, -0.50196,}, > -{1.164, 2.112, 0, -0.50196,}, > -}; > - > -static float yuv_to_rgb_smpte_240[3][4] = { > -{1.164, 0, 1.794, -0.06275,}, > -{1.164, -0.258, -0.5425, -0.50196,}, > -{1.164, 2.078, 0, -0.50196,}, > -}; > - > static void > i965_render_vs_unit(VADriverContextP ctx) > { > @@ -1094,7 +1077,8 @@ i965_render_upload_constants(VADriverContextP ctx, > float hue = (float)i965->hue_attrib->value / 180 * PI; > float saturation = (float)i965->saturation_attrib->value / > DEFAULT_SATURATION; > float *yuv_to_rgb; > - unsigned int color_flag; > + const float* yuv_coefs; > + size_t coefs_length; > > dri_bo_map(render_state->curbe.bo, 1); > assert(render_state->curbe.bo->virtual); > @@ -1125,14 +1109,10 @@ i965_render_upload_constants(VADriverContextP ctx, > *color_balance_base++ = cos(hue) * contrast * saturation; > *color_balance_base++ = sin(hue) * contrast * saturation; > > - color_flag = flags & VA_SRC_COLOR_MASK; > yuv_to_rgb = (float *)constant_buffer + 8; > - if (color_flag == VA_SRC_BT709) > - memcpy(yuv_to_rgb, yuv_to_rgb_bt709, sizeof(yuv_to_rgb_bt709)); > - else if (color_flag == VA_SRC_SMPTE_240) > - memcpy(yuv_to_rgb, yuv_to_rgb_smpte_240, > sizeof(yuv_to_rgb_smpte_240)); > - else > - memcpy(yuv_to_rgb, yuv_to_rgb_bt601, sizeof(yuv_to_rgb_bt601)); > + yuv_coefs = > i915_color_standard_to_coefs(i915_filter_to_color_standard(flags & > VA_SRC_COLOR_MASK), > + &coefs_length); > + memcpy(yuv_to_rgb, yuv_coefs, coefs_length); > > dri_bo_unmap(render_state->curbe.bo); > } > diff --git a/src/i965_yuv_coefs.c b/src/i965_yuv_coefs.c > new file mode 100644 > index 0000000..db817b4 > --- /dev/null > +++ b/src/i965_yuv_coefs.c > @@ -0,0 +1,73 @@ > +/* > + * Copyright © 2015 Intel Corporation > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the > + * "Software"), to deal in the Software without restriction, including > + * without limitation the rights to use, copy, modify, merge, publish, > + * distribute, sub license, and/or sell copies of the Software, and to > + * permit persons to whom the Software is furnished to do so, subject to > + * the following conditions: > + * > + * The above copyright notice and this permission notice (including the > + * next paragraph) shall be included in all copies or substantial portions > + * of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS > + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. > + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR > + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, > + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE > + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. > + */ > + > +#include "i965_yuv_coefs.h" > + > +static const float yuv_to_rgb_bt601[] = { > + 1.164, 0, 1.596, -0.06275, > + 1.164, -0.392, -0.813, -0.50196, > + 1.164, 2.017, 0, -0.50196, > +}; > + > +static const float yuv_to_rgb_bt709[] = { > + 1.164, 0, 1.793, -0.06275, > + 1.164, -0.213, -0.533, -0.50196, > + 1.164, 2.112, 0, -0.50196, > +}; > + > +static const float yuv_to_rgb_smpte_240[] = { > + 1.164, 0, 1.794, -0.06275, > + 1.164, -0.258, -0.5425, -0.50196, > + 1.164, 2.078, 0, -0.50196, > +}; > + > +VAProcColorStandardType i915_filter_to_color_standard (unsigned int filter) { > + switch (filter & VA_SRC_COLOR_MASK) { > + case VA_SRC_BT601: > + return VAProcColorStandardBT601; > + case VA_SRC_BT709: > + return VAProcColorStandardBT709; > + case VA_SRC_SMPTE_240: > + return VAProcColorStandardSMPTE240M; > + default: > + return VAProcColorStandardBT601; > + } > +} > + > +const float *i915_color_standard_to_coefs (VAProcColorStandardType standard, > size_t *length) { > + switch (standard) { > + case VAProcColorStandardBT601: > + *length = sizeof(yuv_to_rgb_bt601); > + return yuv_to_rgb_bt601; > + case VAProcColorStandardBT709: > + *length = sizeof(yuv_to_rgb_bt709); > + return yuv_to_rgb_bt709; > + case VAProcColorStandardSMPTE240M: > + *length = sizeof(yuv_to_rgb_smpte_240); > + return yuv_to_rgb_smpte_240; > + default: > + *length = sizeof(yuv_to_rgb_bt601); > + return yuv_to_rgb_bt601; > + } > +} > diff --git a/src/i965_yuv_coefs.h b/src/i965_yuv_coefs.h > new file mode 100644 > index 0000000..f58f903 > --- /dev/null > +++ b/src/i965_yuv_coefs.h > @@ -0,0 +1,36 @@ > +/* > + * Copyright © 2015 Intel Corporation > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the > + * "Software"), to deal in the Software without restriction, including > + * without limitation the rights to use, copy, modify, merge, publish, > + * distribute, sub license, and/or sell copies of the Software, and to > + * permit persons to whom the Software is furnished to do so, subject to > + * the following conditions: > + * > + * The above copyright notice and this permission notice (including the > + * next paragraph) shall be included in all copies or substantial portions > + * of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS > + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. > + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR > + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, > + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE > + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. > + */ > + > +#ifndef __I965_YUV_COEFS_H__ > +#define __I965_YUV_COEFS_H__ > + > +#include "sysdeps.h" > + > +#include <va/va.h> > +#include <va/va_vpp.h> > + > +VAProcColorStandardType i915_filter_to_color_standard (unsigned int filter); > +const float *i915_color_standard_to_coefs (VAProcColorStandardType standard, > size_t *length); > + > +#endif /* __I965_YUV_COEFS_H__ */ > _______________________________________________ Libva mailing list Libva@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libva