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.

84 lines
2.8 KiB

# License: Apache 2.0. See LICENSE file in root directory.
# Copyright(c) 2023 Intel Corporation. All Rights Reserved.
#test:device D400*
#The test flow is a result of a fixed bug - viewer crashed when starting stream after finishing record session
import pyrealsense2 as rs, os, time, tempfile
from rspy import test
def find_default_profile():
default_profile = next(p for p in depth_sensor.profiles if p.is_default() and p.stream_type() == rs.stream.depth)
return default_profile
def restart_profile(default_profile):
"""
You can't use the same profile twice, but we need the same profile several times. So this function resets the
profiles with the given parameters to allow quick profile creation
"""
depth_profile = next( p for p in depth_sensor.profiles if p.fps() == default_profile.fps()
and p.stream_type() == rs.stream.depth
and p.format() == default_profile.format()
and p.as_video_stream_profile().width() == default_profile.as_video_stream_profile().width()
and p.as_video_stream_profile().height() == default_profile.as_video_stream_profile().height())
return depth_profile
def record(file_name, default_profile):
global depth_sensor
frame_queue = rs.frame_queue(10)
depth_profile = restart_profile(default_profile)
depth_sensor.open(depth_profile)
depth_sensor.start(frame_queue)
recorder = rs.recorder(file_name, dev)
time.sleep(3)
recorder.pause()
recorder = None
depth_sensor.stop()
depth_sensor.close()
def try_streaming(default_profile):
global depth_sensor
frame_queue = rs.frame_queue(10)
depth_profile = restart_profile(default_profile)
depth_sensor.open(depth_profile)
depth_sensor.start(frame_queue)
time.sleep(3)
depth_sensor.stop()
depth_sensor.close()
return frame_queue
def play_recording(default_profile):
global depth_sensor
ctx = rs.context()
playback = ctx.load_device(file_name)
depth_sensor = playback.first_depth_sensor()
frame_queue = try_streaming(default_profile)
test.check(frame_queue.poll_for_frame())
################################################################################################
with test.closure("Record, stream and playback using sensor interface with frame queue"):
temp_dir = tempfile.mkdtemp()
file_name = os.path.join(temp_dir, "recording.bag")
dev = test.find_first_device_or_exit()
depth_sensor = dev.first_depth_sensor()
default_profile = find_default_profile()
record(file_name, default_profile)
# after we finish recording we close the sensor and then open it again and try streaming
try_streaming(default_profile)
play_recording(default_profile)
################################################################################################
test.print_results_and_exit()