[Libva] [PATCH 2/9] render: extract out yuv->rgb coefs

Lionel Landwerlin lionel.g.landwerlin at intel.com
Wed Nov 4 06:54:12 PST 2015


Oh, thanks.

On 04/11/15 00:21, Zhao Yakui wrote:
> On 11/04/2015 12:56 AM, Lionel Landwerlin wrote:
>
> The gen8_render.c/gen9_render.c also include the yuv->RGB coeffs.
> Please also add it.
>
> Thanks
>    Yakui
>> ---
>>   src/Makefile.am      |  2 ++
>>   src/i965_render.c    | 32 +++++------------------
>>   src/i965_yuv_coefs.c | 73 
>> ++++++++++++++++++++++++++++++++++++++++++++++++++++
>>   src/i965_yuv_coefs.h | 36 ++++++++++++++++++++++++++
>>   4 files changed, 117 insertions(+), 26 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/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__ */
>
>



More information about the Libva mailing list