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.
191 lines
7.8 KiB
191 lines
7.8 KiB
2 months ago
|
# License: Apache 2.0. See LICENSE file in root directory.
|
||
|
# Copyright(c) 2023 Intel Corporation. All Rights Reserved.
|
||
|
|
||
|
import pyrealsense2 as rs
|
||
|
from rspy import log, test
|
||
|
import sw
|
||
|
|
||
|
|
||
|
def frame_metadata_values():
|
||
|
return [rs.frame_metadata_value.__getattribute__( rs.frame_metadata_value, k )
|
||
|
for k, v in rs.frame_metadata_value.__dict__.items()
|
||
|
if str(v).startswith('frame_metadata_value.')]
|
||
|
|
||
|
|
||
|
#############################################################################################
|
||
|
#
|
||
|
test.start( "Nothing supported by default" )
|
||
|
try:
|
||
|
with sw.sensor( "Stereo Module" ) as sensor:
|
||
|
depth = sensor.video_stream( "Depth", rs.stream.depth, rs.format.z16 )
|
||
|
#ir = sensor.video_stream( "Infrared", rs.stream.infrared, rs.format.y8 )
|
||
|
sensor.start( depth )
|
||
|
|
||
|
# Publish a frame
|
||
|
f = sensor.publish( depth.frame() )
|
||
|
|
||
|
for md in frame_metadata_values():
|
||
|
test.check_false( f.supports_frame_metadata( md ))
|
||
|
except:
|
||
|
test.unexpected_exception()
|
||
|
test.finish()
|
||
|
#
|
||
|
#############################################################################################
|
||
|
#
|
||
|
test.start( "Set one value" )
|
||
|
try:
|
||
|
with sw.sensor( "Stereo Module" ) as sensor:
|
||
|
depth = sensor.video_stream( "Depth", rs.stream.depth, rs.format.z16 )
|
||
|
sensor.start( depth )
|
||
|
|
||
|
# Metadata is set on the sensor, not the software frame
|
||
|
sensor.set( rs.frame_metadata_value.white_balance, 0xbaad )
|
||
|
|
||
|
# Publish the frame
|
||
|
f = sensor.publish( depth.frame() )
|
||
|
|
||
|
# Frame should have received the metadata from the sensor
|
||
|
test.check( f.supports_frame_metadata( rs.frame_metadata_value.white_balance ))
|
||
|
test.check_equal( f.get_frame_metadata( rs.frame_metadata_value.white_balance ), 0xbaad )
|
||
|
except:
|
||
|
test.unexpected_exception()
|
||
|
test.finish()
|
||
|
#
|
||
|
#############################################################################################
|
||
|
#
|
||
|
test.start( "Post-frame metadata does not affect frame" )
|
||
|
try:
|
||
|
with sw.sensor( "Stereo Module" ) as sensor:
|
||
|
depth = sensor.video_stream( "Depth", rs.stream.depth, rs.format.z16 )
|
||
|
sensor.start( depth )
|
||
|
|
||
|
sensor.set( rs.frame_metadata_value.white_balance, 0xbaad )
|
||
|
|
||
|
f = sensor.publish( depth.frame() )
|
||
|
|
||
|
sensor.set( rs.frame_metadata_value.white_balance, 0xf00d )
|
||
|
|
||
|
test.check_equal( f.get_frame_metadata( rs.frame_metadata_value.white_balance ), 0xbaad )
|
||
|
except:
|
||
|
test.unexpected_exception()
|
||
|
test.finish()
|
||
|
#
|
||
|
#############################################################################################
|
||
|
#
|
||
|
test.start( "Metadata is kept from frame to frame" )
|
||
|
try:
|
||
|
with sw.sensor( "Stereo Module" ) as sensor:
|
||
|
depth = sensor.video_stream( "Depth", rs.stream.depth, rs.format.z16 )
|
||
|
sensor.start( depth )
|
||
|
|
||
|
sensor.set( rs.frame_metadata_value.white_balance, 0xbaad )
|
||
|
f1 = sensor.publish( depth.frame() )
|
||
|
test.check_equal( f1.get_frame_metadata( rs.frame_metadata_value.white_balance ), 0xbaad )
|
||
|
|
||
|
f2 = sensor.publish( depth.frame() )
|
||
|
test.check_equal( f2.get_frame_metadata( rs.frame_metadata_value.white_balance ), 0xbaad )
|
||
|
|
||
|
except:
|
||
|
test.unexpected_exception()
|
||
|
test.finish()
|
||
|
#
|
||
|
#############################################################################################
|
||
|
#
|
||
|
test.start( "Prev frame does not pick up new data from new frame" )
|
||
|
try:
|
||
|
with sw.sensor( "Stereo Module" ) as sensor:
|
||
|
depth = sensor.video_stream( "Depth", rs.stream.depth, rs.format.z16 )
|
||
|
sensor.start( depth )
|
||
|
|
||
|
sensor.set( rs.frame_metadata_value.white_balance, 0xbaad )
|
||
|
f1 = sensor.publish( depth.frame() )
|
||
|
|
||
|
sensor.set( rs.frame_metadata_value.actual_fps, 0xf00d )
|
||
|
f2 = sensor.publish( depth.frame() )
|
||
|
|
||
|
test.check_equal( f2.get_frame_metadata( rs.frame_metadata_value.white_balance ), 0xbaad )
|
||
|
test.check_equal( f2.get_frame_metadata( rs.frame_metadata_value.actual_fps ), 0xf00d )
|
||
|
|
||
|
test.check_false( f1.supports_frame_metadata( rs.frame_metadata_value.actual_fps ))
|
||
|
except:
|
||
|
test.unexpected_exception()
|
||
|
test.finish()
|
||
|
#
|
||
|
#############################################################################################
|
||
|
#
|
||
|
test.start( "Multiple streams per sensor should share metadata" )
|
||
|
try:
|
||
|
with sw.sensor( "Stereo Module" ) as sensor:
|
||
|
depth = sensor.video_stream( "Depth", rs.stream.depth, rs.format.z16 )
|
||
|
ir = sensor.video_stream( "Infrared", rs.stream.infrared, rs.format.y8 )
|
||
|
sensor.start( depth, ir )
|
||
|
|
||
|
sensor.set( rs.frame_metadata_value.white_balance, 0xbaad )
|
||
|
d1 = sensor.publish( depth.frame() )
|
||
|
|
||
|
sensor.set( rs.frame_metadata_value.actual_fps, 0xf00d )
|
||
|
ir1 = sensor.publish( ir.frame() )
|
||
|
|
||
|
sensor.set( rs.frame_metadata_value.saturation, 0x1eaf )
|
||
|
d2 = sensor.publish( depth.frame() )
|
||
|
|
||
|
sensor.set( rs.frame_metadata_value.contrast, 0xfee1 )
|
||
|
ir2 = sensor.publish( ir.frame() )
|
||
|
|
||
|
sensor.set( rs.frame_metadata_value.contrast, 0x600d )
|
||
|
d3 = sensor.publish( depth.frame() )
|
||
|
ir3 = sensor.publish( ir.frame() )
|
||
|
|
||
|
test.check_equal( d1.get_frame_metadata( rs.frame_metadata_value.white_balance ), 0xbaad )
|
||
|
test.check( ir1.supports_frame_metadata( rs.frame_metadata_value.white_balance ))
|
||
|
test.check_equal( d2.get_frame_metadata( rs.frame_metadata_value.actual_fps ), 0xf00d )
|
||
|
test.check_equal( ir2.get_frame_metadata( rs.frame_metadata_value.saturation ), 0x1eaf )
|
||
|
test.check_equal( ir2.get_frame_metadata( rs.frame_metadata_value.contrast ), 0xfee1 )
|
||
|
test.check_equal( d3.get_frame_metadata( rs.frame_metadata_value.contrast ), 0x600d )
|
||
|
test.check_equal( ir3.get_frame_metadata( rs.frame_metadata_value.contrast ), 0x600d )
|
||
|
except:
|
||
|
test.unexpected_exception()
|
||
|
test.finish()
|
||
|
#
|
||
|
#############################################################################################
|
||
|
#
|
||
|
test.start( "Two sensors, intermixed frames" )
|
||
|
try:
|
||
|
with sw.sensor( "Stereo Module" ) as stereo:
|
||
|
depth = stereo.video_stream( "Depth", rs.stream.depth, rs.format.z16 )
|
||
|
stereo.start( depth )
|
||
|
with sw.sensor( "RGB Camera" ) as rgb:
|
||
|
color = sensor.video_stream( "Color", rs.stream.color, rs.format.yuyv )
|
||
|
rgb.start( color )
|
||
|
|
||
|
stereo.set( rs.frame_metadata_value.white_balance, 0xbaad )
|
||
|
d1 = stereo.publish( depth.frame() )
|
||
|
test.check_equal( d1.get_frame_metadata( rs.frame_metadata_value.white_balance ), 0xbaad )
|
||
|
|
||
|
rgb.set( rs.frame_metadata_value.actual_fps, 0xf00d )
|
||
|
stereo.set( rs.frame_metadata_value.actual_fps, 0xbaad )
|
||
|
c1 = rgb.publish( color.frame() )
|
||
|
test.check_false( d1.supports_frame_metadata( rs.frame_metadata_value.actual_fps ))
|
||
|
test.check_false( c1.supports_frame_metadata( rs.frame_metadata_value.white_balance ))
|
||
|
test.check_equal( c1.get_frame_metadata( rs.frame_metadata_value.actual_fps ), 0xf00d )
|
||
|
|
||
|
stereo.set( rs.frame_metadata_value.saturation, 0x1eaf )
|
||
|
rgb.set( rs.frame_metadata_value.saturation, 0xfeed )
|
||
|
d2 = stereo.publish( depth.frame() )
|
||
|
test.check_false( c1.supports_frame_metadata( rs.frame_metadata_value.saturation ))
|
||
|
test.check_equal( d2.get_frame_metadata( rs.frame_metadata_value.saturation ), 0x1eaf )
|
||
|
|
||
|
stereo.set( rs.frame_metadata_value.contrast, 0xdeaf )
|
||
|
rgb.set( rs.frame_metadata_value.sharpness, 0xface )
|
||
|
d3 = stereo.publish( depth.frame() )
|
||
|
c2 = rgb.publish( color.frame() )
|
||
|
test.check_false( c2.supports_frame_metadata( rs.frame_metadata_value.contrast ))
|
||
|
test.check_false( d3.supports_frame_metadata( rs.frame_metadata_value.sharpness ))
|
||
|
except:
|
||
|
test.unexpected_exception()
|
||
|
test.finish()
|
||
|
#
|
||
|
#############################################################################################
|
||
|
test.print_results_and_exit()
|
||
|
|