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

// 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;
}
}
}