// SPDX-License-Identifier: GPL-2.0 /* * (C) COPYRIGHT 2019 ARM Limited. All rights reserved. * Author: James.Qian.Wang * */ #include "komeda_color_mgmt.h" /* 10bit precision YUV2RGB matrix */ static const s32 yuv2rgb_bt601_narrow[KOMEDA_N_YUV2RGB_COEFFS] = { 1192, 0, 1634, 1192, -401, -832, 1192, 2066, 0, 64, 512, 512 }; static const s32 yuv2rgb_bt601_wide[KOMEDA_N_YUV2RGB_COEFFS] = { 1024, 0, 1436, 1024, -352, -731, 1024, 1815, 0, 0, 512, 512 }; static const s32 yuv2rgb_bt709_narrow[KOMEDA_N_YUV2RGB_COEFFS] = { 1192, 0, 1836, 1192, -218, -546, 1192, 2163, 0, 64, 512, 512 }; static const s32 yuv2rgb_bt709_wide[KOMEDA_N_YUV2RGB_COEFFS] = { 1024, 0, 1613, 1024, -192, -479, 1024, 1900, 0, 0, 512, 512 }; static const s32 yuv2rgb_bt2020[KOMEDA_N_YUV2RGB_COEFFS] = { 1024, 0, 1476, 1024, -165, -572, 1024, 1884, 0, 0, 512, 512 }; const s32 *komeda_select_yuv2rgb_coeffs(u32 color_encoding, u32 color_range) { bool narrow = color_range == DRM_COLOR_YCBCR_LIMITED_RANGE; const s32 *coeffs; switch (color_encoding) { case DRM_COLOR_YCBCR_BT709: coeffs = narrow ? yuv2rgb_bt709_narrow : yuv2rgb_bt709_wide; break; case DRM_COLOR_YCBCR_BT601: coeffs = narrow ? yuv2rgb_bt601_narrow : yuv2rgb_bt601_wide; break; case DRM_COLOR_YCBCR_BT2020: coeffs = yuv2rgb_bt2020; break; default: coeffs = NULL; break; } return coeffs; }