This commit is contained in:
Devaev Maxim 2021-02-06 21:17:08 +03:00
parent 3de55653fa
commit 30bc03fa39
3 changed files with 34 additions and 14 deletions

View File

@ -201,7 +201,19 @@ def _patch_raw(raw_config: Dict) -> None:
if max_fps is not None:
if not isinstance(streamer_config.get("desired_fps"), dict):
streamer_config["desired_fps"] = {}
streamer_config["desired_fps"] = {"max": max_fps}
streamer_config["desired_fps"]["max"] = max_fps
del streamer_config["max_fps"]
resolution = streamer_config.get("resolution")
if resolution is not None and not isinstance(resolution, dict):
streamer_config["resolution"] = {"default": resolution}
available_resolutions = streamer_config.get("available_resolutions")
if available_resolutions is not None:
if not isinstance(streamer_config.get("resolution"), dict):
streamer_config["resolution"] = {}
streamer_config["resolution"]["available"] = available_resolutions
del streamer_config["available_resolutions"]
def _patch_dynamic( # pylint: disable=too-many-locals
@ -372,9 +384,16 @@ def _get_config_scheme() -> Dict:
"shutdown_delay": Option(10.0, type=valid_float_f01),
"state_poll": Option(1.0, type=valid_float_f01),
"quality": Option(80, type=_make_ifarg(valid_stream_quality, 0)),
"resolution": Option("", type=_make_ifarg(valid_stream_resolution, "")),
"available_resolutions": Option([], type=functools.partial(valid_string_list, subval=valid_stream_resolution)),
"quality": Option(80, type=_make_ifarg(valid_stream_quality, 0)),
"resolution": {
"default": Option("", type=_make_ifarg(valid_stream_resolution, ""), unpack_as="resolution"),
"available": Option(
[],
type=functools.partial(valid_string_list, subval=valid_stream_resolution),
unpack_as="available_resolutions",
),
},
"desired_fps": {
"default": Option(30, type=valid_stream_fps, unpack_as="desired_fps"),

View File

@ -68,7 +68,8 @@ def main(argv: Optional[List[str]]=None) -> None:
hid = get_hid_class(config.hid.type)(**hid_kwargs)
streamer = Streamer(
**config.streamer._unpack(ignore=["forever", "desired_fps", "h264_bitrate", "h264_gop"]),
**config.streamer._unpack(ignore=["forever", "desired_fps", "resolution", "h264_bitrate", "h264_gop"]),
**config.streamer.resolution._unpack(),
**config.streamer.desired_fps._unpack(),
**config.streamer.h264_bitrate._unpack(),
**config.streamer.h264_gop._unpack(),

View File

@ -76,19 +76,19 @@ class _StreamerParams:
desired_fps_max: int,
h264_bitrate: int,
h264_min_bitrate: int,
h264_max_bitrate: int,
h264_bitrate_min: int,
h264_bitrate_max: int,
h264_gop: int,
h264_min_gop: int,
h264_max_gop: int,
h264_gop_min: int,
h264_gop_max: int,
) -> None:
self.__has_quality = bool(quality)
self.__has_resolution = bool(resolution)
self.__has_h264 = bool(h264_bitrate)
self.__params: Dict = {self.__DESIRED_FPS: min(desired_fps, desired_fps_min)}
self.__params: Dict = {self.__DESIRED_FPS: min(max(desired_fps, desired_fps_min), desired_fps_max)}
self.__limits: Dict = {self.__DESIRED_FPS: {"min": desired_fps_min, "max": desired_fps_max}}
if self.__has_quality:
@ -99,10 +99,10 @@ class _StreamerParams:
self.__limits[self.__AVAILABLE_RESOLUTIONS] = available_resolutions
if self.__has_h264:
self.__params[self.__H264_BITRATE] = min(max(h264_bitrate, h264_min_bitrate), h264_max_bitrate)
self.__limits[self.__H264_BITRATE] = {"min": h264_min_bitrate, "max": h264_max_bitrate}
self.__params[self.__H264_GOP] = min(max(h264_gop, h264_min_gop), h264_max_gop)
self.__limits[self.__H264_GOP] = {"min": h264_min_gop, "max": h264_max_gop}
self.__params[self.__H264_BITRATE] = min(max(h264_bitrate, h264_bitrate_min), h264_bitrate_max)
self.__limits[self.__H264_BITRATE] = {"min": h264_bitrate_min, "max": h264_bitrate_max}
self.__params[self.__H264_GOP] = min(max(h264_gop, h264_gop_min), h264_gop_max)
self.__limits[self.__H264_GOP] = {"min": h264_gop_min, "max": h264_gop_max}
def get_features(self) -> Dict:
return {