-
Notifications
You must be signed in to change notification settings - Fork 139
/
Structs.cs
79 lines (71 loc) · 1.74 KB
/
Structs.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Runtime.InteropServices;
namespace Klak.Ndi.Interop {
// Packet type enumeration (equivalent to NDIlib_frame_type_e)
public enum FrameType
{
None = 0,
Video = 1,
Audio = 2,
Metadata = 3,
Error = 4,
StatusChange = 100
}
// FourCC values for video/audio frames
public enum FourCC
{
// Video
UYVY = 0x59565955,
UYVA = 0x41565955,
P216 = 0x36313250,
PA16 = 0x36314150,
YV12 = 0x32315659,
I420 = 0x30323449,
NV12 = 0x3231564E,
BGRA = 0x41524742,
BGRX = 0x58524742,
RGBA = 0x41424752,
RGBX = 0x58424752,
// Audio
FLTp = 0x70544c46
}
// Frame format enumeration (equivalent to NDIlib_frame_format_type_e)
public enum FrameFormat
{
Interleaved,
Progressive,
Field0,
Field1
}
// NDI source descriptor (equivalent to NDIlib_source_t)
[StructLayout(LayoutKind.Sequential)]
public struct Source
{
IntPtr _NdiName;
IntPtr _UrlAddress;
public string NdiName => Marshal.PtrToStringAnsi(_NdiName);
public string UrlAddress => Marshal.PtrToStringAnsi(_UrlAddress);
}
// Video frame descriptor (equivalent to NDILib_video_frame_v2_t)
[StructLayout(LayoutKind.Sequential)]
public struct VideoFrame
{
public int Width, Height;
public FourCC FourCC;
public int FrameRateN, FrameRateD;
public float AspectRatio;
public FrameFormat FrameFormat;
public long Timecode;
public IntPtr Data;
public int LineStride;
public IntPtr Metadata;
public long Timestamp;
}
// Tally data structure (equivalent to NDIlib_tally_t)
[StructLayout(LayoutKind.Sequential)]
public struct Tally
{
[MarshalAs(UnmanagedType.U1)] public bool OnProgram;
[MarshalAs(UnmanagedType.U1)] public bool OnPreview;
}
} // namespace Klak.Ndi.Interop