from UniTAP.common.color_info import ColorInfo class DscParameters: """ Class `DscParameters` describes all parameters necessary for formatting input image to DSC image. - Width of image `width`. - Height of image `height`. - Color format of image `color_format` type `ColorInfo.ColorFormat`. - BPC `bpc`. - BPP `bpp`. - Flag of is block prediction enabled `is_block_prediction_enabled`. - Horizontal slice number `horizontal_slice_number`. - Number of buffer bit depth `buffer_bit_depth`. - Vertical slice number `vertical_slice_number`. - Vertical slice size `vertical_slice_size`. - DSC major version `version_major`. - DSC minor version `version_minor`. """ def __init__(self, width: int = 1920, height: int = 1080, color_format: ColorInfo.ColorFormat = ColorInfo.ColorFormat.CF_RGB, bpc: int = 8, bpp: int = 128, is_block_prediction_enabled: bool = False, horizontal_slice_number: int = 8, buffer_bit_depth: int = 8, vertical_slice_number: int = 8, vertical_slice_size: int = 1, version_major: int = 1, version_minor: int = 2): self.__width = width self.__height = height self.__color_format = color_format self.__bpc = bpc self.__bpp = bpp self.__is_block_prediction_enabled = is_block_prediction_enabled self.__horizontal_slice_number = horizontal_slice_number self.__buffer_bit_depth = buffer_bit_depth self.__vertical_slice_number = vertical_slice_number self.__vertical_slice_size = vertical_slice_size self.__version_major = version_major self.__version_minor = version_minor @property def width(self) -> int: return self.__width @width.setter def width(self, width: int = 1920): if width <= 0: raise ValueError(f"Incorrect width of image. Must be more, than 0. Current value: {width}") self.__width = width @property def height(self) -> int: return self.__height @height.setter def height(self, height: int = 1080): if height <= 0: raise ValueError(f"Incorrect height of image. Must be more, than 0. Current value: {height}") self.__height = height @property def color_format(self) -> ColorInfo.ColorFormat: return self.__color_format @color_format.setter def color_format(self, color_format: ColorInfo.ColorFormat.CF_RGB): self.__color_format = color_format @property def bpc(self) -> int: return self.__bpc @bpc.setter def bpc(self, bpc: int = 8): if bpc <= 5: raise ValueError(f"Incorrect bpc of image. Must be more, than 5. Current value: {bpc}") self.__bpc = bpc @property def bpp(self) -> int: return self.__bpp @bpp.setter def bpp(self, bpp: int = 10): if bpp <= 0: raise ValueError(f"Incorrect bpp of image. Must be more, than 0. Current value: {bpp}") self.__bpp = bpp @property def is_block_prediction_enabled(self) -> bool: return self.__is_block_prediction_enabled @width.setter def width(self, is_block_prediction_enabled: bool = False): self.__is_block_prediction_enabled = is_block_prediction_enabled @property def horizontal_slice_number(self) -> int: return self.__horizontal_slice_number @horizontal_slice_number.setter def horizontal_slice_number(self, horizontal_slice_number: int = 1920): if horizontal_slice_number <= 0: raise ValueError(f"Incorrect horizontal_slice_number of image. Must be more, than 0. " f"Current value: {horizontal_slice_number}") self.__horizontal_slice_number = horizontal_slice_number @property def buffer_bit_depth(self) -> int: return self.__buffer_bit_depth @buffer_bit_depth.setter def buffer_bit_depth(self, buffer_bit_depth: int = 8): if buffer_bit_depth <= 0: raise ValueError(f"Incorrect buffer_bit_depth of image. Must be more, than 0. " f"Current value: {buffer_bit_depth}") self.__buffer_bit_depth = buffer_bit_depth @property def vertical_slice_number(self) -> int: return self.__vertical_slice_number @vertical_slice_number.setter def vertical_slice_number(self, vertical_slice_number: int = 8): if vertical_slice_number <= 0: raise ValueError(f"Incorrect vertical_slice_number of image. Must be more, than 0. " f"Current value: {vertical_slice_number}") self.__vertical_slice_number = vertical_slice_number @property def vertical_slice_size(self) -> int: return self.__vertical_slice_size @vertical_slice_size.setter def vertical_slice_size(self, vertical_slice_size: int = 1): if vertical_slice_size <= 0: raise ValueError(f"Incorrect vertical_slice_size of image. Must be more, than 0. " f"Current value: {vertical_slice_size}") self.__vertical_slice_size = vertical_slice_size @property def version_major(self) -> int: return self.__version_major @version_major.setter def version_major(self, version_major: int = 1): if version_major <= 0: raise ValueError(f"Incorrect version_major of image. Must be more, than 0. Current value: {version_major}") self.__version_major = version_major @property def version_minor(self) -> int: return self.__version_minor @version_minor.setter def version_minor(self, version_minor: int = 2): if version_minor <= 0: raise ValueError(f"Incorrect version_minor of image. Must be more, than 0. Current value: {version_minor}") self.__version_minor = version_minor