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.
190 lines
5.8 KiB
190 lines
5.8 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;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Runtime.InteropServices;
|
|
using Base;
|
|
|
|
/// <summary>
|
|
/// Class to store the profile of stream
|
|
/// </summary>
|
|
public class StreamProfile : Base.PooledObject
|
|
{
|
|
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
|
internal static readonly Base.Deleter StreamProfileReleaser = NativeMethods.rs2_delete_stream_profile;
|
|
|
|
internal override void Initialize()
|
|
{
|
|
object error;
|
|
NativeMethods.rs2_get_stream_profile_data(Handle, out stream, out format, out index, out uniqueId, out framerate, out error);
|
|
IsDefault = NativeMethods.rs2_is_stream_profile_default(Handle, out error) > 0;
|
|
}
|
|
|
|
internal StreamProfile(IntPtr ptr)
|
|
: base(ptr, null)
|
|
{
|
|
this.Initialize();
|
|
}
|
|
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing)
|
|
{
|
|
if (clone != null)
|
|
{
|
|
clone.Dispose();
|
|
clone = null;
|
|
}
|
|
}
|
|
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
|
private Stream stream;
|
|
|
|
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
|
private Format format;
|
|
|
|
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
|
private int framerate;
|
|
|
|
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
|
private int index;
|
|
|
|
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
|
private int uniqueId;
|
|
|
|
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
|
internal DeleterHandle clone;
|
|
|
|
/// <summary>
|
|
/// Gets the stream type of the profile
|
|
/// </summary>
|
|
public Stream Stream
|
|
{
|
|
get { return stream; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the binary data format of the profile
|
|
/// </summary>
|
|
public Format Format
|
|
{
|
|
get { return format; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the expected rate for data frames to arrive, meaning expected number of frames per second
|
|
/// </summary>
|
|
public int Framerate
|
|
{
|
|
get { return framerate; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the stream index the input profile in case there are multiple streams of the same type
|
|
/// </summary>
|
|
public int Index
|
|
{
|
|
get { return index; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the identifier for the stream profile, unique within the application
|
|
/// </summary>
|
|
public int UniqueID
|
|
{
|
|
get { return uniqueId; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets a value indicating whether the profile is recommended for the sensor
|
|
/// <para>
|
|
/// This is an optional hint we offer to suggest profiles with best performance-quality tradeof
|
|
/// </para>
|
|
/// </summary>
|
|
public bool IsDefault { get; private set; }
|
|
|
|
public bool IsCloned => clone?.IsInvalid == false;
|
|
|
|
/// <summary>
|
|
/// Gets the extrinsics from this profile to the other
|
|
/// </summary>
|
|
/// <param name="other">target stream profile</param>
|
|
/// <returns>extrinsics from this to target</returns>
|
|
public Extrinsics GetExtrinsicsTo(StreamProfile other)
|
|
{
|
|
object error;
|
|
Extrinsics extrinsics;
|
|
NativeMethods.rs2_get_extrinsics(Handle, other.Handle, out extrinsics, out error);
|
|
return extrinsics;
|
|
}
|
|
|
|
public void RegisterExtrinsicsTo(StreamProfile other, Extrinsics extrinsics)
|
|
{
|
|
object error;
|
|
NativeMethods.rs2_register_extrinsics(Handle, other.Handle, extrinsics, out error);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Clone the current profile and change the type, index and format to input parameters
|
|
/// </summary>
|
|
/// <param name="type">will change the stream type from the cloned profile.</param>
|
|
/// <param name="index">will change the stream index from the cloned profile.</param>
|
|
/// <param name="format">will change the stream format from the cloned profile.</param>
|
|
/// <returns>the cloned stream profile.</returns>
|
|
public StreamProfile Clone(Stream type, int index, Format format)
|
|
{
|
|
object error;
|
|
var ptr = NativeMethods.rs2_clone_stream_profile(Handle, type, index, format, out error);
|
|
var p = StreamProfile.Create(ptr);
|
|
p.clone = new DeleterHandle(ptr, StreamProfileReleaser);
|
|
return p;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Try to extend stream profile to an extension type
|
|
/// </summary>
|
|
/// <param name="e">extension type</param>
|
|
/// <returns>true if profile is extendable to specified extension</returns>
|
|
public bool Is(Extension e)
|
|
{
|
|
object error;
|
|
return NativeMethods.rs2_stream_profile_is(Handle, e, out error) > 0;
|
|
}
|
|
|
|
public T As<T>()
|
|
where T : StreamProfile
|
|
{
|
|
return Create<T>(Handle);
|
|
}
|
|
|
|
public T Cast<T>()
|
|
where T : StreamProfile
|
|
{
|
|
using (this)
|
|
{
|
|
return Create<T>(Handle);
|
|
}
|
|
}
|
|
|
|
internal static T Create<T>(IntPtr ptr)
|
|
where T : StreamProfile
|
|
{
|
|
return ObjectPool.Get<T>(ptr);
|
|
}
|
|
|
|
internal static StreamProfile Create(IntPtr ptr)
|
|
{
|
|
return Create<StreamProfile>(ptr);
|
|
}
|
|
}
|
|
}
|