138 lines
4.2 KiB
Python
138 lines
4.2 KiB
Python
|
|
from UniTAP.common import ColorInfo
|
||
|
|
|
||
|
|
|
||
|
|
def get_vm_color_format(vsc_sdp_db16: int) -> ColorInfo.ColorFormat:
|
||
|
|
color_format_value = vsc_sdp_db16 >> 4 & 0xf
|
||
|
|
|
||
|
|
if color_format_value == 0:
|
||
|
|
return ColorInfo.ColorFormat.CF_RGB
|
||
|
|
elif color_format_value == 1:
|
||
|
|
return ColorInfo.ColorFormat.CF_YCbCr_444
|
||
|
|
elif color_format_value == 2:
|
||
|
|
return ColorInfo.ColorFormat.CF_YCbCr_422
|
||
|
|
elif color_format_value == 3:
|
||
|
|
return ColorInfo.ColorFormat.CF_YCbCr_420
|
||
|
|
elif color_format_value == 4:
|
||
|
|
return ColorInfo.ColorFormat.CF_Y_ONLY
|
||
|
|
elif color_format_value == 5:
|
||
|
|
return ColorInfo.ColorFormat.CF_RAW
|
||
|
|
else:
|
||
|
|
return ColorInfo.ColorFormat.CF_UNKNOWN
|
||
|
|
|
||
|
|
|
||
|
|
def get_vm_colorimetry(vsc_sdp_db16: int) -> ColorInfo.Colorimetry:
|
||
|
|
color_format_value = vsc_sdp_db16 >> 4 & 0xf
|
||
|
|
colorimetry_value = vsc_sdp_db16 & 0xf
|
||
|
|
|
||
|
|
if color_format_value == 0:
|
||
|
|
if colorimetry_value == 0:
|
||
|
|
return ColorInfo.Colorimetry.CM_sRGB
|
||
|
|
elif colorimetry_value == 1:
|
||
|
|
return ColorInfo.Colorimetry.CM_RGB_WIDE_GAMUT_FIX
|
||
|
|
elif colorimetry_value == 2:
|
||
|
|
return ColorInfo.Colorimetry.CM_RGB_WIDE_GAMUT_FLT
|
||
|
|
elif colorimetry_value == 3:
|
||
|
|
return ColorInfo.Colorimetry.CM_AdobeRGB
|
||
|
|
elif colorimetry_value == 4:
|
||
|
|
return ColorInfo.Colorimetry.CM_DCI_P3
|
||
|
|
elif colorimetry_value == 5:
|
||
|
|
return ColorInfo.Colorimetry.CM_CUSTOM_COLOR_PROFILE
|
||
|
|
elif colorimetry_value == 6:
|
||
|
|
return ColorInfo.Colorimetry.CM_ITUR_BT2020_RGB
|
||
|
|
else:
|
||
|
|
return ColorInfo.Colorimetry.CM_RESERVED
|
||
|
|
|
||
|
|
elif color_format_value in [1, 2, 3]:
|
||
|
|
if colorimetry_value == 0:
|
||
|
|
return ColorInfo.Colorimetry.CM_ITUR_BT601
|
||
|
|
elif colorimetry_value == 1:
|
||
|
|
return ColorInfo.Colorimetry.CM_ITUR_BT709
|
||
|
|
elif colorimetry_value == 2:
|
||
|
|
return ColorInfo.Colorimetry.CM_xvYCC601
|
||
|
|
elif colorimetry_value == 3:
|
||
|
|
return ColorInfo.Colorimetry.CM_xvYCC709
|
||
|
|
elif colorimetry_value == 4:
|
||
|
|
return ColorInfo.Colorimetry.CM_sYCC601
|
||
|
|
elif colorimetry_value == 5:
|
||
|
|
return ColorInfo.Colorimetry.CM_opYCC601
|
||
|
|
elif colorimetry_value == 6:
|
||
|
|
return ColorInfo.Colorimetry.CM_ITUR_BT2020_YcCbcCrc
|
||
|
|
elif colorimetry_value == 7:
|
||
|
|
return ColorInfo.Colorimetry.CM_ITUR_BT2020_YCbCr
|
||
|
|
else:
|
||
|
|
return ColorInfo.Colorimetry.CM_RESERVED
|
||
|
|
|
||
|
|
elif color_format_value == 4:
|
||
|
|
if colorimetry_value == 0:
|
||
|
|
return ColorInfo.Colorimetry.CM_DCI_P3
|
||
|
|
else:
|
||
|
|
return ColorInfo.Colorimetry.CM_RESERVED
|
||
|
|
|
||
|
|
elif color_format_value == 5:
|
||
|
|
if colorimetry_value == 0:
|
||
|
|
return ColorInfo.Colorimetry.CM_CUSTOM_COLOR_PROFILE
|
||
|
|
else:
|
||
|
|
return ColorInfo.Colorimetry.CM_RESERVED
|
||
|
|
|
||
|
|
else:
|
||
|
|
return ColorInfo.Colorimetry.CM_RESERVED
|
||
|
|
|
||
|
|
|
||
|
|
def get_vm_bpc(vsc_sdp_db16: int, vsc_sdp_db17: int) -> int:
|
||
|
|
color_format_value = vsc_sdp_db16 >> 4 & 0xf
|
||
|
|
bpc_value = vsc_sdp_db17 & 0x7
|
||
|
|
|
||
|
|
if color_format_value == 0:
|
||
|
|
if bpc_value == 0:
|
||
|
|
return 6
|
||
|
|
elif bpc_value == 1:
|
||
|
|
return 8
|
||
|
|
elif bpc_value == 2:
|
||
|
|
return 10
|
||
|
|
elif bpc_value == 3:
|
||
|
|
return 12
|
||
|
|
elif bpc_value == 4:
|
||
|
|
return 16
|
||
|
|
else:
|
||
|
|
return 0
|
||
|
|
|
||
|
|
elif color_format_value in [1, 2, 3, 4]:
|
||
|
|
if bpc_value == 1:
|
||
|
|
return 8
|
||
|
|
elif bpc_value == 2:
|
||
|
|
return 10
|
||
|
|
elif bpc_value == 3:
|
||
|
|
return 12
|
||
|
|
elif bpc_value == 4:
|
||
|
|
return 16
|
||
|
|
else:
|
||
|
|
return 0
|
||
|
|
|
||
|
|
elif color_format_value == 5:
|
||
|
|
if bpc_value == 1:
|
||
|
|
return 6
|
||
|
|
elif bpc_value == 2:
|
||
|
|
return 7
|
||
|
|
elif bpc_value == 3:
|
||
|
|
return 8
|
||
|
|
elif bpc_value == 4:
|
||
|
|
return 10
|
||
|
|
elif bpc_value == 5:
|
||
|
|
return 12
|
||
|
|
elif bpc_value == 6:
|
||
|
|
return 14
|
||
|
|
elif bpc_value == 7:
|
||
|
|
return 16
|
||
|
|
else:
|
||
|
|
return 0
|
||
|
|
|
||
|
|
else:
|
||
|
|
return 0
|
||
|
|
|
||
|
|
|
||
|
|
def get_vm_dynamic_range(vsc_sdp_db17: int) -> ColorInfo.DynamicRange:
|
||
|
|
if vsc_sdp_db17 >> 7 & 1:
|
||
|
|
return ColorInfo.DynamicRange.DR_CTA
|
||
|
|
else:
|
||
|
|
return ColorInfo.DynamicRange.DR_VESA
|