From 72489df3ca0cc9f324bf2446dc19c346cf332630 Mon Sep 17 00:00:00 2001 From: Yoshitomo Nakanishi Date: Mon, 13 Mar 2023 19:26:26 +0100 Subject: [PATCH] Swap the order of streaming loop operation and state modification operation --- cameleon/src/camera.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/cameleon/src/camera.rs b/cameleon/src/camera.rs index 5f1ca924..40679cca 100644 --- a/cameleon/src/camera.rs +++ b/cameleon/src/camera.rs @@ -303,16 +303,20 @@ impl Camera { return Err(StreamError::InStreaming.into()); } - // Enable streaimng. + // Lock TLParams to prevent changing parameters while streaming. + // Some camera models require this to obtain parameters for streaming. self.ctrl.enable_streaming()?; let mut ctxt = self.params_ctxt()?; expect_node!(&ctxt, "TLParamsLocked", as_integer).set_value(&mut ctxt, 1)?; - expect_node!(&ctxt, "AcquisitionStart", as_command).execute(&mut ctxt)?; // Start streaming loop. let (sender, receiver) = channel(cap, DEFAULT_BUFFER_CAP); self.strm.start_streaming_loop(sender, &mut self.ctrl)?; + // Enable streaming. + let mut ctxt = self.params_ctxt()?; + expect_node!(&ctxt, "AcquisitionStart", as_command).execute(&mut ctxt)?; + info!("start streaming successfully"); Ok(receiver) } @@ -358,14 +362,13 @@ impl Camera { return Ok(()); } - // Stop streaming loop. - self.strm.stop_streaming_loop()?; - // Disable streaming. let mut ctxt = self.params_ctxt()?; expect_node!(&ctxt, "AcquisitionStop", as_command).execute(&mut ctxt)?; expect_node!(&ctxt, "TLParamsLocked", as_integer).set_value(&mut ctxt, 0)?; self.ctrl.disable_streaming()?; + // Stop streaming loop. + self.strm.stop_streaming_loop()?; info!("stop streaming successfully"); Ok(())