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.
		
		
		
		
		
			
		
			
				
					
					
						
							79 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							79 lines
						
					
					
						
							2.6 KiB
						
					
					
				// License: Apache 2.0. See LICENSE file in root directory.
 | 
						|
// Copyright(c) 2017 Intel Corporation. All Rights Reserved.
 | 
						|
 | 
						|
namespace Intel.RealSense
 | 
						|
{
 | 
						|
    using System;
 | 
						|
    using System.Collections.Generic;
 | 
						|
    using System.Linq;
 | 
						|
    using System.Runtime.InteropServices;
 | 
						|
 | 
						|
    public class Syncer : ProcessingBlock
 | 
						|
    {
 | 
						|
        private static IntPtr Create()
 | 
						|
        {
 | 
						|
            object error;
 | 
						|
            return NativeMethods.rs2_create_sync_processing_block(out error);
 | 
						|
        }
 | 
						|
 | 
						|
        internal Syncer(IntPtr ptr)
 | 
						|
            : base(ptr)
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Initializes a new instance of the <see cref="Syncer"/> class.
 | 
						|
        /// <para>
 | 
						|
        /// This block accepts arbitrary frames and outputs composite frames of best matches.
 | 
						|
        /// Some frames may be released within the syncer if they are waiting for match for too long.
 | 
						|
        /// Syncronization is done (mostly) based on timestamps so good hardware timestamps are a pre-condition.
 | 
						|
        /// </para>
 | 
						|
        /// </summary>
 | 
						|
        public Syncer()
 | 
						|
            : base(Create())
 | 
						|
        {
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// This method is used to pass frame into a processing block
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="f">frame to process</param>
 | 
						|
        public void SubmitFrame(Frame f)
 | 
						|
        {
 | 
						|
            object error;
 | 
						|
            NativeMethods.rs2_frame_add_ref(f.Handle, out error);
 | 
						|
            NativeMethods.rs2_process_frame(Handle, f.Handle, out error);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Wait until new frame becomes available in the queue and dequeue it
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="timeout_ms">max time in milliseconds to wait until an exception will be thrown</param>
 | 
						|
        /// <returns>dequeued frame</returns>
 | 
						|
        public FrameSet WaitForFrames(uint timeout_ms = 5000)
 | 
						|
        {
 | 
						|
            object error;
 | 
						|
            var ptr = NativeMethods.rs2_wait_for_frame(Queue.Handle, timeout_ms, out error);
 | 
						|
            return FrameSet.Create(ptr);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Poll if a new frame is available and dequeue if it is
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="result">dequeued frame</param>
 | 
						|
        /// <returns>true if new frame was stored to <paramref name="result"/></returns>
 | 
						|
        public bool PollForFrames(out FrameSet result)
 | 
						|
        {
 | 
						|
            object error;
 | 
						|
            IntPtr ptr;
 | 
						|
            if (NativeMethods.rs2_poll_for_frame(Queue.Handle, out ptr, out error) > 0)
 | 
						|
            {
 | 
						|
                result = FrameSet.Create(ptr);
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
 | 
						|
            result = null;
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |