53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
|
|
from .timing import Timing
|
||
|
|
from .color_info import ColorInfo
|
||
|
|
|
||
|
|
|
||
|
|
class VideoMode:
|
||
|
|
|
||
|
|
"""
|
||
|
|
|
||
|
|
Class `VideoMode` combines information about `Timing` and `ColorInfo`.
|
||
|
|
|
||
|
|
"""
|
||
|
|
|
||
|
|
def __init__(self, timing: Timing = Timing(), color_info: ColorInfo = ColorInfo()):
|
||
|
|
self.timing = timing
|
||
|
|
self.color_info = color_info
|
||
|
|
|
||
|
|
def __str__(self):
|
||
|
|
return f"{self.timing.frame_rate / 1000:03} " \
|
||
|
|
f"{self.timing.htotal} {self.timing.hstart} " \
|
||
|
|
f"{self.timing.hactive} {self.timing.hswidth:+} " \
|
||
|
|
f"{self.timing.vtotal} {self.timing.vstart} " \
|
||
|
|
f"{self.timing.vactive} {self.timing.vswidth:+} " \
|
||
|
|
f"{self.color_info.color_format.name}/" \
|
||
|
|
f"{self.color_info.colorimetry.name}/" \
|
||
|
|
f"{self.color_info.dynamic_range.name} {self.color_info.bpc}"
|
||
|
|
|
||
|
|
def __eq__(self, other):
|
||
|
|
return self.timing == other.timing and self.color_info == other.color_info
|
||
|
|
|
||
|
|
def is_valid(self) -> bool:
|
||
|
|
"""
|
||
|
|
|
||
|
|
Check that `Timing` and `ColorInfo` of Video mode is valid.
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
object of bool type - Video mode valid or not
|
||
|
|
"""
|
||
|
|
return self.timing.is_valid() and self.color_info.is_valid()
|
||
|
|
|
||
|
|
@property
|
||
|
|
def bit_rate(self) -> float:
|
||
|
|
"""
|
||
|
|
|
||
|
|
Returns calculated bit rate required for this video mode in Gbps. 0 if video mode is not valid
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
object of float type
|
||
|
|
"""
|
||
|
|
if self.is_valid():
|
||
|
|
return round(self.timing.pixel_clock * self.color_info.bpp / 1000.0, 3)
|
||
|
|
else:
|
||
|
|
return 0.0
|