From c93232ed830b3ece866f4b620365869fca602751 Mon Sep 17 00:00:00 2001 From: Pradip De Date: Wed, 3 Jun 2026 11:25:32 -0700 Subject: [PATCH 1/2] Make minimum frame rate configurable in Python WebRTC/AVSM tests - Add `--min-frame-rate` command-line argument to the test runner (default: 30). - Update `MatterTestConfig` to store `min_frame_rate`. - Update all Python test scripts and helper classes that had hardcoded `minFrameRate=15` to use `self.matter_test_config.min_frame_rate` instead. - This allows users to customize the minimum frame rate used during video stream allocation. --- src/python_testing/TC_AVSMTestBase.py | 2 +- src/python_testing/TC_AVSM_2_11.py | 2 +- src/python_testing/TC_AVSM_2_13.py | 4 ++-- src/python_testing/TC_AVSM_2_18.py | 2 +- src/python_testing/TC_AVSM_2_7.py | 18 +++++++++--------- .../TC_AVSM_VideoStreamsPersistence.py | 2 +- src/python_testing/TC_AVSUMTestBase.py | 2 +- src/python_testing/TC_PAVSTTestBase.py | 2 +- src/python_testing/TC_WEBRTCPTestBase.py | 2 +- src/python_testing/TC_WEBRTC_1_5.py | 2 +- src/python_testing/TC_WEBRTC_Utils.py | 2 +- .../matter/testing/matter_test_config.py | 1 + .../matter/testing/runner.py | 3 +++ 13 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/python_testing/TC_AVSMTestBase.py b/src/python_testing/TC_AVSMTestBase.py index f9618ecc252ded..a922f5c4e48303 100644 --- a/src/python_testing/TC_AVSMTestBase.py +++ b/src/python_testing/TC_AVSMTestBase.py @@ -210,7 +210,7 @@ async def precondition_one_allocated_video_stream(self, streamUsage: Globals.Enu videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=streamUsage, videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( diff --git a/src/python_testing/TC_AVSM_2_11.py b/src/python_testing/TC_AVSM_2_11.py index 7d788e5bdd0b49..103bf717dbfd77 100644 --- a/src/python_testing/TC_AVSM_2_11.py +++ b/src/python_testing/TC_AVSM_2_11.py @@ -263,7 +263,7 @@ async def test_TC_AVSM_2_11(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( diff --git a/src/python_testing/TC_AVSM_2_13.py b/src/python_testing/TC_AVSM_2_13.py index 015ca23cab6172..1876c36c201cc1 100644 --- a/src/python_testing/TC_AVSM_2_13.py +++ b/src/python_testing/TC_AVSM_2_13.py @@ -188,7 +188,7 @@ async def test_TC_AVSM_2_13(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportResolution, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -222,7 +222,7 @@ async def test_TC_AVSM_2_13(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportResolution, maxResolution=cluster.Structs.VideoResolutionStruct( diff --git a/src/python_testing/TC_AVSM_2_18.py b/src/python_testing/TC_AVSM_2_18.py index 727c74181b0cb2..4e197658d136f7 100644 --- a/src/python_testing/TC_AVSM_2_18.py +++ b/src/python_testing/TC_AVSM_2_18.py @@ -137,7 +137,7 @@ async def test_TC_AVSM_2_18(self): min_resolution = min_viewport_resolution min_bit_rate = trade_off_point.minBitRate max_bit_rate = trade_off_point.minBitRate - min_frame_rate = min(15, video_sensor_params.maxFPS) + min_frame_rate = min(self.matter_test_config.min_frame_rate, video_sensor_params.maxFPS) max_frame_rate = video_sensor_params.maxFPS key_frame_interval = 4000 diff --git a/src/python_testing/TC_AVSM_2_7.py b/src/python_testing/TC_AVSM_2_7.py index 929c21d0e0bb86..4762f914b6b4ba 100644 --- a/src/python_testing/TC_AVSM_2_7.py +++ b/src/python_testing/TC_AVSM_2_7.py @@ -259,7 +259,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -293,7 +293,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -370,7 +370,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=outOfConstraintStreamUsage, videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -403,7 +403,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=notSupportedStreamUsage, videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -486,7 +486,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -513,7 +513,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -540,7 +540,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -567,7 +567,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=10, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -594,7 +594,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS + 10, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( diff --git a/src/python_testing/TC_AVSM_VideoStreamsPersistence.py b/src/python_testing/TC_AVSM_VideoStreamsPersistence.py index ebac30f3c07194..773061cd630359 100644 --- a/src/python_testing/TC_AVSM_VideoStreamsPersistence.py +++ b/src/python_testing/TC_AVSM_VideoStreamsPersistence.py @@ -197,7 +197,7 @@ async def test_TC_AVSM_VideoStreamsPersistence(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( diff --git a/src/python_testing/TC_AVSUMTestBase.py b/src/python_testing/TC_AVSUMTestBase.py index 11013bcfcc509e..9662cb91cba70f 100644 --- a/src/python_testing/TC_AVSUMTestBase.py +++ b/src/python_testing/TC_AVSUMTestBase.py @@ -265,7 +265,7 @@ async def video_stream_allocate_command(self, endpoint, expected_status: Status response = await self.send_single_cmd(cmd=Clusters.CameraAvStreamManagement.Commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=Clusters.CameraAvStreamManagement.Structs.VideoResolutionStruct(width=aVideoSensorParams.sensorWidth, diff --git a/src/python_testing/TC_PAVSTTestBase.py b/src/python_testing/TC_PAVSTTestBase.py index 0c3d07d78346e4..af1d1a10db94e0 100644 --- a/src/python_testing/TC_PAVSTTestBase.py +++ b/src/python_testing/TC_PAVSTTestBase.py @@ -137,7 +137,7 @@ async def allocate_one_video_stream(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewport, maxResolution=cluster.Structs.VideoResolutionStruct( diff --git a/src/python_testing/TC_WEBRTCPTestBase.py b/src/python_testing/TC_WEBRTCPTestBase.py index 68022549f74854..fa3dbb8f90df3b 100644 --- a/src/python_testing/TC_WEBRTCPTestBase.py +++ b/src/python_testing/TC_WEBRTCPTestBase.py @@ -138,7 +138,7 @@ async def allocate_one_video_stream(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=Globals.Enums.StreamUsageEnum.kLiveView, videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( diff --git a/src/python_testing/TC_WEBRTC_1_5.py b/src/python_testing/TC_WEBRTC_1_5.py index d7e762a3951a93..8fa7733980664c 100644 --- a/src/python_testing/TC_WEBRTC_1_5.py +++ b/src/python_testing/TC_WEBRTC_1_5.py @@ -185,7 +185,7 @@ async def allocate_video_stream(self, endpoint): cmd=CameraAvStreamManagement.Commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=CameraAvStreamManagement.Structs.VideoResolutionStruct( diff --git a/src/python_testing/TC_WEBRTC_Utils.py b/src/python_testing/TC_WEBRTC_Utils.py index 922c65ca325f3f..e6cb83414b6997 100644 --- a/src/python_testing/TC_WEBRTC_Utils.py +++ b/src/python_testing/TC_WEBRTC_Utils.py @@ -91,7 +91,7 @@ async def allocate_video_stream(self, endpoint, devCtrl=None, node_id=None): cmd=CameraAvStreamManagement.Commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(15, aVideoSensorParams.maxFPS), + minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=CameraAvStreamManagement.Structs.VideoResolutionStruct( diff --git a/src/python_testing/matter_testing_infrastructure/matter/testing/matter_test_config.py b/src/python_testing/matter_testing_infrastructure/matter/testing/matter_test_config.py index e12fc988a2828f..23a746a8c6e4b2 100644 --- a/src/python_testing/matter_testing_infrastructure/matter/testing/matter_test_config.py +++ b/src/python_testing/matter_testing_infrastructure/matter/testing/matter_test_config.py @@ -102,3 +102,4 @@ class MatterTestConfig: # Debug mode to capture attribute dump at end of test modules debug: bool = False + min_frame_rate: int = 30 diff --git a/src/python_testing/matter_testing_infrastructure/matter/testing/runner.py b/src/python_testing/matter_testing_infrastructure/matter/testing/runner.py index 0deaf89bbcdd21..6def4895d9996c 100644 --- a/src/python_testing/matter_testing_infrastructure/matter/testing/runner.py +++ b/src/python_testing/matter_testing_infrastructure/matter/testing/runner.py @@ -789,6 +789,7 @@ def convert_args_to_matter_config(args: argparse.Namespace): config.endpoint = args.endpoint # This can be None, the get_endpoint function allows the tests to supply a default config.restart_flag_file = args.restart_flag_file config.debug = args.debug + config.min_frame_rate = args.min_frame_rate # Map CLI arg to the current config field name used by tests config.pipe_name = args.app_pipe @@ -975,6 +976,8 @@ def parse_matter_test_args(argv: Optional[list[str]] = None): help="The full path of the file to use to signal a restart to the app") basic_group.add_argument('--debug', action="store_true", default=False, help="Run the script in debug mode. This is needed to capture attribute dump at end of test modules if there are problems found during testing.") + basic_group.add_argument('--min-frame-rate', type=int, default=30, + help='Minimum frame rate for video stream allocation (default: 30)') basic_group.add_argument('--timeout', type=int, help="Test timeout in seconds") basic_group.add_argument("--PICS", help="PICS file path", type=str) From c4a7f72b12a7e5123d65352807738b9c0843c770 Mon Sep 17 00:00:00 2001 From: Pradip De Date: Wed, 3 Jun 2026 13:45:56 -0700 Subject: [PATCH 2/2] Address review comments - Make the minFrameRate an int-arg instead of a top level argument in testing/runner.py. - Update TC_AVSM_VideoStreamsPersistence.py to use the same parameter to check when the allocated streams are read back. --- src/python_testing/TC_AVSMTestBase.py | 2 +- src/python_testing/TC_AVSM_2_11.py | 2 +- src/python_testing/TC_AVSM_2_13.py | 4 ++-- src/python_testing/TC_AVSM_2_18.py | 2 +- src/python_testing/TC_AVSM_2_7.py | 22 +++++++++---------- .../TC_AVSM_VideoStreamsPersistence.py | 4 ++-- src/python_testing/TC_AVSUMTestBase.py | 2 +- src/python_testing/TC_PAVSTTestBase.py | 2 +- src/python_testing/TC_WEBRTCPTestBase.py | 2 +- src/python_testing/TC_WEBRTC_1_5.py | 2 +- src/python_testing/TC_WEBRTC_Utils.py | 2 +- .../matter/testing/matter_test_config.py | 1 - .../matter/testing/runner.py | 3 --- 13 files changed, 23 insertions(+), 27 deletions(-) diff --git a/src/python_testing/TC_AVSMTestBase.py b/src/python_testing/TC_AVSMTestBase.py index a922f5c4e48303..ec2e8d8638e900 100644 --- a/src/python_testing/TC_AVSMTestBase.py +++ b/src/python_testing/TC_AVSMTestBase.py @@ -210,7 +210,7 @@ async def precondition_one_allocated_video_stream(self, streamUsage: Globals.Enu videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=streamUsage, videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( diff --git a/src/python_testing/TC_AVSM_2_11.py b/src/python_testing/TC_AVSM_2_11.py index 103bf717dbfd77..7ac952069b582c 100644 --- a/src/python_testing/TC_AVSM_2_11.py +++ b/src/python_testing/TC_AVSM_2_11.py @@ -263,7 +263,7 @@ async def test_TC_AVSM_2_11(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( diff --git a/src/python_testing/TC_AVSM_2_13.py b/src/python_testing/TC_AVSM_2_13.py index 1876c36c201cc1..ad18121b3b9670 100644 --- a/src/python_testing/TC_AVSM_2_13.py +++ b/src/python_testing/TC_AVSM_2_13.py @@ -188,7 +188,7 @@ async def test_TC_AVSM_2_13(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportResolution, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -222,7 +222,7 @@ async def test_TC_AVSM_2_13(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportResolution, maxResolution=cluster.Structs.VideoResolutionStruct( diff --git a/src/python_testing/TC_AVSM_2_18.py b/src/python_testing/TC_AVSM_2_18.py index 4e197658d136f7..9ee474f3e2748b 100644 --- a/src/python_testing/TC_AVSM_2_18.py +++ b/src/python_testing/TC_AVSM_2_18.py @@ -137,7 +137,7 @@ async def test_TC_AVSM_2_18(self): min_resolution = min_viewport_resolution min_bit_rate = trade_off_point.minBitRate max_bit_rate = trade_off_point.minBitRate - min_frame_rate = min(self.matter_test_config.min_frame_rate, video_sensor_params.maxFPS) + min_frame_rate = min(self.user_params.get("minFrameRate", 30), video_sensor_params.maxFPS) max_frame_rate = video_sensor_params.maxFPS key_frame_interval = 4000 diff --git a/src/python_testing/TC_AVSM_2_7.py b/src/python_testing/TC_AVSM_2_7.py index 4762f914b6b4ba..e0f6abc405288e 100644 --- a/src/python_testing/TC_AVSM_2_7.py +++ b/src/python_testing/TC_AVSM_2_7.py @@ -259,7 +259,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -293,7 +293,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -370,7 +370,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=outOfConstraintStreamUsage, videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -403,7 +403,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=notSupportedStreamUsage, videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -486,7 +486,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -513,7 +513,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -540,7 +540,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -567,7 +567,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=10, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -594,7 +594,7 @@ async def test_TC_AVSM_2_7(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS + 10, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -638,8 +638,8 @@ async def test_TC_AVSM_2_7(self): asserts.fail("Allocated video streams not cleared") # start initial frame rate range low and gradually increase - minFrameRateConfig = 15 - maxFrameRateConfig = 30 + minFrameRateConfig = self.user_params.get("minFrameRate", 30) + maxFrameRateConfig = minFrameRateConfig + 15 # Try and allocate up to maxConcurrentEncoders. If all these streams are # successfully allocated, the next one should hit a resource exhausted # error. diff --git a/src/python_testing/TC_AVSM_VideoStreamsPersistence.py b/src/python_testing/TC_AVSM_VideoStreamsPersistence.py index 773061cd630359..3c216cf4fc0fd9 100644 --- a/src/python_testing/TC_AVSM_VideoStreamsPersistence.py +++ b/src/python_testing/TC_AVSM_VideoStreamsPersistence.py @@ -197,7 +197,7 @@ async def test_TC_AVSM_VideoStreamsPersistence(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( @@ -290,7 +290,7 @@ async def test_TC_AVSM_VideoStreamsPersistence(self): asserts.assert_equal(aAllocatedVideoStreams[0].videoCodec, aRateDistortionTradeOffPoints[0].codec, "Video codec does not match") asserts.assert_equal(aAllocatedVideoStreams[0].minFrameRate, - min(15, aVideoSensorParams.maxFPS), + min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), "MinFrameRate does not match") asserts.assert_equal(aAllocatedVideoStreams[0].maxFrameRate, aVideoSensorParams.maxFPS, "MaxFrameRate does not match") diff --git a/src/python_testing/TC_AVSUMTestBase.py b/src/python_testing/TC_AVSUMTestBase.py index 9662cb91cba70f..cd2cb98dc04732 100644 --- a/src/python_testing/TC_AVSUMTestBase.py +++ b/src/python_testing/TC_AVSUMTestBase.py @@ -265,7 +265,7 @@ async def video_stream_allocate_command(self, endpoint, expected_status: Status response = await self.send_single_cmd(cmd=Clusters.CameraAvStreamManagement.Commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=Clusters.CameraAvStreamManagement.Structs.VideoResolutionStruct(width=aVideoSensorParams.sensorWidth, diff --git a/src/python_testing/TC_PAVSTTestBase.py b/src/python_testing/TC_PAVSTTestBase.py index af1d1a10db94e0..7c106be5f04c2a 100644 --- a/src/python_testing/TC_PAVSTTestBase.py +++ b/src/python_testing/TC_PAVSTTestBase.py @@ -137,7 +137,7 @@ async def allocate_one_video_stream(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewport, maxResolution=cluster.Structs.VideoResolutionStruct( diff --git a/src/python_testing/TC_WEBRTCPTestBase.py b/src/python_testing/TC_WEBRTCPTestBase.py index fa3dbb8f90df3b..c2043b6208a2b6 100644 --- a/src/python_testing/TC_WEBRTCPTestBase.py +++ b/src/python_testing/TC_WEBRTCPTestBase.py @@ -138,7 +138,7 @@ async def allocate_one_video_stream(self): videoStreamAllocateCmd = commands.VideoStreamAllocate( streamUsage=Globals.Enums.StreamUsageEnum.kLiveView, videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=cluster.Structs.VideoResolutionStruct( diff --git a/src/python_testing/TC_WEBRTC_1_5.py b/src/python_testing/TC_WEBRTC_1_5.py index 8fa7733980664c..1878396ac5a62d 100644 --- a/src/python_testing/TC_WEBRTC_1_5.py +++ b/src/python_testing/TC_WEBRTC_1_5.py @@ -185,7 +185,7 @@ async def allocate_video_stream(self, endpoint): cmd=CameraAvStreamManagement.Commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=CameraAvStreamManagement.Structs.VideoResolutionStruct( diff --git a/src/python_testing/TC_WEBRTC_Utils.py b/src/python_testing/TC_WEBRTC_Utils.py index e6cb83414b6997..deefd573c91546 100644 --- a/src/python_testing/TC_WEBRTC_Utils.py +++ b/src/python_testing/TC_WEBRTC_Utils.py @@ -91,7 +91,7 @@ async def allocate_video_stream(self, endpoint, devCtrl=None, node_id=None): cmd=CameraAvStreamManagement.Commands.VideoStreamAllocate( streamUsage=aStreamUsagePriorities[0], videoCodec=aRateDistortionTradeOffPoints[0].codec, - minFrameRate=min(self.matter_test_config.min_frame_rate, aVideoSensorParams.maxFPS), + minFrameRate=min(self.user_params.get("minFrameRate", 30), aVideoSensorParams.maxFPS), maxFrameRate=aVideoSensorParams.maxFPS, minResolution=aMinViewportRes, maxResolution=CameraAvStreamManagement.Structs.VideoResolutionStruct( diff --git a/src/python_testing/matter_testing_infrastructure/matter/testing/matter_test_config.py b/src/python_testing/matter_testing_infrastructure/matter/testing/matter_test_config.py index 23a746a8c6e4b2..e12fc988a2828f 100644 --- a/src/python_testing/matter_testing_infrastructure/matter/testing/matter_test_config.py +++ b/src/python_testing/matter_testing_infrastructure/matter/testing/matter_test_config.py @@ -102,4 +102,3 @@ class MatterTestConfig: # Debug mode to capture attribute dump at end of test modules debug: bool = False - min_frame_rate: int = 30 diff --git a/src/python_testing/matter_testing_infrastructure/matter/testing/runner.py b/src/python_testing/matter_testing_infrastructure/matter/testing/runner.py index 6def4895d9996c..0deaf89bbcdd21 100644 --- a/src/python_testing/matter_testing_infrastructure/matter/testing/runner.py +++ b/src/python_testing/matter_testing_infrastructure/matter/testing/runner.py @@ -789,7 +789,6 @@ def convert_args_to_matter_config(args: argparse.Namespace): config.endpoint = args.endpoint # This can be None, the get_endpoint function allows the tests to supply a default config.restart_flag_file = args.restart_flag_file config.debug = args.debug - config.min_frame_rate = args.min_frame_rate # Map CLI arg to the current config field name used by tests config.pipe_name = args.app_pipe @@ -976,8 +975,6 @@ def parse_matter_test_args(argv: Optional[list[str]] = None): help="The full path of the file to use to signal a restart to the app") basic_group.add_argument('--debug', action="store_true", default=False, help="Run the script in debug mode. This is needed to capture attribute dump at end of test modules if there are problems found during testing.") - basic_group.add_argument('--min-frame-rate', type=int, default=30, - help='Minimum frame rate for video stream allocation (default: 30)') basic_group.add_argument('--timeout', type=int, help="Test timeout in seconds") basic_group.add_argument("--PICS", help="PICS file path", type=str)