@@ -261,39 +261,28 @@ dds_sensor_proxy::find_profile( sid_index sidx, realdds::dds_motion_stream_profi
261261}
262262
263263
264- void dds_sensor_proxy::open ( const stream_profiles & profiles )
264+ realdds::dds_stream_profiles dds_sensor_proxy::find_dds_profiles ( const librealsense:: stream_profiles & source_profiles ) const
265265{
266- _formats_converter.prepare_to_convert ( profiles );
267- _active_converted_profiles = profiles;
268- const auto & source_profiles = _formats_converter.get_active_source_profiles ();
269- // TODO - register processing block options?
270-
271266 realdds::dds_stream_profiles realdds_profiles;
272267 for ( size_t i = 0 ; i < source_profiles.size (); ++i )
273268 {
274269 auto & sp = source_profiles[i];
275270 sid_index sidx ( sp->get_unique_id (), sp->get_stream_index () );
276271 if ( auto const vsp = As< video_stream_profile >( sp ) )
277272 {
278- auto video_profile = find_profile (
279- sidx,
280- realdds::dds_video_stream_profile ( sp->get_framerate (),
281- realdds::dds_video_encoding::from_rs2 ( sp->get_format () ),
282- vsp->get_width (),
283- vsp->get_height () ) );
273+ auto video_profile = find_profile ( sidx,
274+ realdds::dds_video_stream_profile ( sp->get_framerate (),
275+ realdds::dds_video_encoding::from_rs2 ( sp->get_format () ),
276+ vsp->get_width (),
277+ vsp->get_height () ) );
284278 if ( video_profile )
285- {
286279 realdds_profiles.push_back ( video_profile );
287- calculate_bandwidth ( vsp );
288- }
289280 else
290281 LOG_ERROR ( " no profile found in stream for rs2 profile " << vsp );
291282 }
292283 else if ( Is< motion_stream_profile >( sp ) )
293284 {
294- auto motion_profile = find_profile (
295- sidx,
296- realdds::dds_motion_stream_profile ( source_profiles[i]->get_framerate () ) );
285+ auto motion_profile = find_profile ( sidx, realdds::dds_motion_stream_profile ( source_profiles[i]->get_framerate () ) );
297286 if ( motion_profile )
298287 realdds_profiles.push_back ( motion_profile );
299288 else
@@ -305,23 +294,38 @@ void dds_sensor_proxy::open( const stream_profiles & profiles )
305294 }
306295 }
307296
297+ return realdds_profiles;
298+ }
299+
300+ void dds_sensor_proxy::open ( const stream_profiles & profiles )
301+ {
302+ _formats_converter.prepare_to_convert ( profiles );
303+ _active_converted_profiles = profiles;
304+ const auto & source_profiles = _formats_converter.get_active_source_profiles ();
305+ // TODO - register processing block options?
306+
307+ for ( size_t i = 0 ; i < source_profiles.size (); ++i )
308+ if ( auto const vsp = As< video_stream_profile >( source_profiles[i] ) )
309+ log_bandwidth ( vsp );
310+
308311 try
309312 {
313+ software_sensor::open ( source_profiles ); // Call before send to device to check SDK conditions (not open/streaming/etc...)
310314 if ( source_profiles.size () > 0 )
311315 {
316+ realdds::dds_stream_profiles realdds_profiles = find_dds_profiles ( source_profiles );
312317 _dev->open ( realdds_profiles );
313318 }
314-
315- software_sensor::open ( source_profiles );
316319 }
317320 catch ( realdds::dds_runtime_error const & e )
318321 {
322+ software_sensor::close ();
319323 throw invalid_value_exception ( e.what () );
320324 }
321325}
322326
323327
324- void dds_sensor_proxy::calculate_bandwidth ( const std::shared_ptr< video_stream_profile > & vsp )
328+ void dds_sensor_proxy::log_bandwidth ( const std::shared_ptr< video_stream_profile > & vsp ) const
325329{
326330 size_t width = vsp->get_width ();
327331 size_t height = vsp->get_height ();
@@ -632,8 +636,19 @@ void dds_sensor_proxy::stop()
632636
633637void dds_sensor_proxy::close ()
634638{
635- software_sensor::close ();
636- _active_converted_profiles.clear ();
639+ const auto & source_profiles = _formats_converter.get_active_source_profiles ();
640+ realdds::dds_stream_profiles realdds_profiles = find_dds_profiles ( source_profiles );
641+
642+ try
643+ {
644+ software_sensor::close ();
645+ _dev->close ( realdds_profiles );
646+ _active_converted_profiles.clear ();
647+ }
648+ catch ( realdds::dds_runtime_error const & e )
649+ {
650+ throw invalid_value_exception ( e.what () );
651+ }
637652}
638653
639654
0 commit comments