You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
5.2 KiB
154 lines
5.2 KiB
# License: Apache 2.0. See LICENSE file in root directory.
|
|
# Copyright(c) 2020 Intel Corporation. All Rights Reserved.
|
|
|
|
#test:device D400* !D457
|
|
|
|
import platform
|
|
import pyrealsense2 as rs
|
|
from rspy import test
|
|
from rspy import log
|
|
import time
|
|
|
|
dev = test.find_first_device_or_exit()
|
|
depth_sensor = dev.first_depth_sensor()
|
|
color_sensor = dev.first_color_sensor()
|
|
product_line = dev.get_info(rs.camera_info.product_line)
|
|
|
|
previous_depth_frame_number = -1
|
|
previous_color_frame_number = -1
|
|
after_set_option = False
|
|
|
|
|
|
def get_allowed_drops():
|
|
global after_set_option
|
|
# On Linux, there is a known issue (RS5-7148) where up to 4 frame drops can occur
|
|
# sequentially after setting control values during streaming... on Windows this
|
|
# does not occur.
|
|
if platform.system() == 'Linux' and after_set_option:
|
|
return 4
|
|
# Our KPI is to prevent sequential frame drops, therefore single frame drop is allowed.
|
|
return 1
|
|
|
|
def set_new_value(sensor, option, value):
|
|
global after_set_option
|
|
after_set_option = True
|
|
sensor.set_option(option, value)
|
|
time.sleep(0.5) # collect frames
|
|
after_set_option = False
|
|
|
|
|
|
def check_depth_frame_drops(frame):
|
|
global previous_depth_frame_number
|
|
allowed_drops = get_allowed_drops()
|
|
is_d400 = 0
|
|
if product_line == "D400":
|
|
is_d400 = 1
|
|
test.check_frame_drops(frame, previous_depth_frame_number, allowed_drops, is_d400)
|
|
previous_depth_frame_number = frame.get_frame_number()
|
|
|
|
|
|
def check_color_frame_drops(frame):
|
|
global previous_color_frame_number
|
|
allowed_drops = get_allowed_drops()
|
|
test.check_frame_drops(frame, previous_color_frame_number, allowed_drops)
|
|
previous_color_frame_number = frame.get_frame_number()
|
|
|
|
|
|
# Use a profile that's common to all cameras
|
|
depth_profile = next(p for p in
|
|
depth_sensor.profiles if p.fps() == 30
|
|
and p.stream_type() == rs.stream.depth
|
|
and p.format() == rs.format.z16
|
|
and p.as_video_stream_profile().width() == 640
|
|
and p.as_video_stream_profile().height() == 480)
|
|
|
|
color_profile = next(p for p in color_sensor.profiles if p.fps() == 30
|
|
and p.stream_type() == rs.stream.color
|
|
and p.format() == rs.format.yuyv
|
|
and p.as_video_stream_profile().width() == 640
|
|
and p.as_video_stream_profile().height() == 480)
|
|
|
|
depth_sensor.open(depth_profile)
|
|
depth_sensor.start(check_depth_frame_drops)
|
|
color_sensor.open(color_profile)
|
|
color_sensor.start(check_color_frame_drops)
|
|
|
|
#############################################################################################
|
|
# Test #1
|
|
|
|
laser_power = rs.option.laser_power
|
|
current_laser_control = 10
|
|
|
|
test.start("Checking for frame drops when setting laser power several times")
|
|
|
|
for i in range(1,5):
|
|
new_value = current_laser_control + 10*i
|
|
set_new_value(depth_sensor, laser_power, new_value)
|
|
|
|
test.finish()
|
|
|
|
# reset everything back
|
|
if depth_sensor.supports(rs.option.visual_preset):
|
|
if product_line == "D400":
|
|
depth_sensor.set_option(rs.option.visual_preset, int(rs.rs400_visual_preset.default))
|
|
|
|
|
|
#############################################################################################
|
|
|
|
options_to_ignore = []
|
|
|
|
# ignore reasons:
|
|
# visual_preset --> frame drops are expected during visual_preset change
|
|
# inter_cam_sync_mode --> frame drops are expected during inter_cam_sync_mode change
|
|
# emitter_frequency --> Not allowed to be set during streaming
|
|
# auto_exposure_mode --> Not allowed to be set during streaming
|
|
if product_line == "D400":
|
|
options_to_ignore = [rs.option.visual_preset, rs.option.inter_cam_sync_mode, rs.option.emitter_frequency, rs.option.auto_exposure_mode]
|
|
|
|
def test_option_changes(sensor):
|
|
global options_to_ignore
|
|
options = sensor.get_supported_options()
|
|
for option in options:
|
|
try:
|
|
if option in options_to_ignore:
|
|
continue
|
|
if sensor.is_option_read_only(option):
|
|
continue
|
|
old_value = sensor.get_option(option)
|
|
range = sensor.get_option_range(option)
|
|
new_value = range.min
|
|
if old_value == new_value:
|
|
new_value = range.max
|
|
if not log.d(str(option), old_value, '->', new_value):
|
|
test.info(str(option), new_value, persistent=True)
|
|
set_new_value(sensor, option, new_value)
|
|
sensor.set_option(option, old_value)
|
|
except:
|
|
test.unexpected_exception()
|
|
break
|
|
finally:
|
|
test.reset_info(persistent=True)
|
|
|
|
|
|
#############################################################################################
|
|
time.sleep(0.5) # jic
|
|
test.start("Checking frame drops when setting options on depth")
|
|
test_option_changes(depth_sensor)
|
|
test.finish()
|
|
|
|
#############################################################################################
|
|
time.sleep(0.5) # jic
|
|
test.start("Checking frame drops when setting options on color")
|
|
test_option_changes( color_sensor )
|
|
test.finish()
|
|
|
|
|
|
#############################################################################################
|
|
depth_sensor.stop()
|
|
depth_sensor.close()
|
|
|
|
color_sensor.stop()
|
|
color_sensor.close()
|
|
|
|
test.print_results_and_exit()
|