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.
110 lines
4.9 KiB
110 lines
4.9 KiB
# License: Apache 2.0. See LICENSE file in root directory.
|
|
# Copyright(c) 2021 Intel Corporation. All Rights Reserved.
|
|
|
|
#test:device each(D400*)
|
|
|
|
import pyrealsense2 as rs
|
|
from rspy import test, log
|
|
|
|
def close_resources(sensor):
|
|
if len(sensor.get_active_streams()) > 0:
|
|
sensor.stop()
|
|
sensor.close()
|
|
|
|
color_options = [rs.option.backlight_compensation,
|
|
rs.option.brightness,
|
|
rs.option.contrast,
|
|
rs.option.gamma,
|
|
rs.option.hue,
|
|
rs.option.saturation,
|
|
rs.option.sharpness,
|
|
rs.option.enable_auto_white_balance,
|
|
rs.option.white_balance]
|
|
|
|
color_metadata = [rs.frame_metadata_value.backlight_compensation,
|
|
rs.frame_metadata_value.brightness,
|
|
rs.frame_metadata_value.contrast,
|
|
rs.frame_metadata_value.gamma,
|
|
rs.frame_metadata_value.hue,
|
|
rs.frame_metadata_value.saturation,
|
|
rs.frame_metadata_value.sharpness,
|
|
rs.frame_metadata_value.auto_white_balance_temperature,
|
|
rs.frame_metadata_value.manual_white_balance]
|
|
|
|
def check_option_and_metadata_values(option, metadata, value_to_set, frame):
|
|
changed = color_sensor.get_option(option)
|
|
test.check_equal(changed, value_to_set)
|
|
if frame.supports_frame_metadata(metadata):
|
|
changed_md = float( frame.get_frame_metadata(metadata) )
|
|
test.check_equal(changed_md, value_to_set)
|
|
else:
|
|
print("metadata " + repr(metadata) + " not supported")
|
|
|
|
#############################################################################################
|
|
test.start("checking color options")
|
|
# test scenario:
|
|
# for each option, set value, wait several frames, check value with get_option and get_frame_metadata
|
|
# values set for each option are min, max, and default values
|
|
ctx = rs.context()
|
|
dev = ctx.query_devices()[0]
|
|
|
|
try:
|
|
color_sensor = dev.first_color_sensor()
|
|
# Using a profile common to known cameras
|
|
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)
|
|
color_sensor.open(color_profile)
|
|
lrs_queue = rs.frame_queue(capacity=10, keep_frames=False)
|
|
color_sensor.start(lrs_queue)
|
|
|
|
iteration = 0
|
|
option_index = -1 # running over options
|
|
value_index = -1 # 0, 1, 2 for min, max, default
|
|
# number of frames to wait between set_option and checking metadata
|
|
# is set as 15 - the expected delay is ~120ms for Win and ~80-90ms for Linux
|
|
num_of_frames_to_wait = 15
|
|
while True:
|
|
try:
|
|
lrs_frame = lrs_queue.wait_for_frame(5000)
|
|
if iteration == 0:
|
|
option_index = option_index + 1
|
|
if option_index == len(color_options):
|
|
break
|
|
option = color_options[option_index]
|
|
if not color_sensor.supports(option):
|
|
continue
|
|
option_range = color_sensor.get_option_range(option)
|
|
metadata = color_metadata[option_index]
|
|
# the following if statement is needed because of some bug in FW - see DSO-17221
|
|
# to be removed after this bug is solved
|
|
if option == rs.option.white_balance:
|
|
log.d("iteration", iteration, "setting explicitly enable_auto_white_balance to OFF")
|
|
color_sensor.set_option(rs.option.enable_auto_white_balance, 0)
|
|
test.check_equal(color_sensor.get_option(rs.option.enable_auto_white_balance) , 0.0)
|
|
value_to_set = option_range.min
|
|
elif iteration == (num_of_frames_to_wait + 1):
|
|
value_to_set = option_range.max
|
|
elif iteration == 2 * (num_of_frames_to_wait + 1):
|
|
value_to_set = option_range.default
|
|
if iteration % (num_of_frames_to_wait + 1) == 0: # for iterations 0, 16, 32
|
|
log.d("iteration", iteration, "setting option:", option, "to", value_to_set)
|
|
color_sensor.set_option(option, value_to_set)
|
|
if (iteration + 1) % (num_of_frames_to_wait + 1) == 0: # for iterations 15, 31, 47
|
|
log.d("iteration", iteration, "checking MD:", metadata, "vs option:", option)
|
|
check_option_and_metadata_values(option, metadata, value_to_set, lrs_frame)
|
|
iteration = (iteration + 1) % (3 * (num_of_frames_to_wait + 1))
|
|
|
|
except:
|
|
test.unexpected_exception()
|
|
|
|
except:
|
|
print("The device found has no color sensor")
|
|
finally:
|
|
close_resources(color_sensor)
|
|
|
|
test.finish()
|
|
test.print_results_and_exit()
|