grandi 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +21 -0
- package/README.md +402 -0
- package/binding.gyp +200 -0
- package/lib/.clang-format +297 -0
- package/lib/grandi.cc +96 -0
- package/lib/grandi_find.cc +365 -0
- package/lib/grandi_find.h +41 -0
- package/lib/grandi_receive.cc +1155 -0
- package/lib/grandi_receive.h +63 -0
- package/lib/grandi_routing.cc +460 -0
- package/lib/grandi_routing.h +37 -0
- package/lib/grandi_send.cc +960 -0
- package/lib/grandi_send.h +45 -0
- package/lib/grandi_util.cc +323 -0
- package/lib/grandi_util.h +137 -0
- package/package.json +84 -0
- package/prebuilds/darwin-arm64/grandi.node +0 -0
- package/prebuilds/darwin-arm64/libndi.dylib +0 -0
- package/prebuilds/darwin-x64/grandi.node +0 -0
- package/prebuilds/darwin-x64/libndi.dylib +0 -0
- package/prebuilds/linux-arm/grandi.node +0 -0
- package/prebuilds/linux-arm/libndi.so.6 +0 -0
- package/prebuilds/linux-arm64/grandi.node +0 -0
- package/prebuilds/linux-arm64/libndi.so.6 +0 -0
- package/prebuilds/linux-ia32/grandi.node +0 -0
- package/prebuilds/linux-ia32/libndi.so.6 +0 -0
- package/prebuilds/linux-x64/grandi.node +0 -0
- package/prebuilds/linux-x64/libndi.so.6 +0 -0
- package/prebuilds/win32-ia32/Processing.NDI.Lib.x86.dll +0 -0
- package/prebuilds/win32-ia32/grandi.node +0 -0
- package/prebuilds/win32-x64/Processing.NDI.Lib.x64.dll +0 -0
- package/prebuilds/win32-x64/grandi.node +0 -0
- package/scripts/preinstall.mjs +429 -0
- package/src/index.ts +141 -0
- package/src/node-gyp-build.d.ts +5 -0
- package/src/types.ts +228 -0
package/src/types.ts
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
export enum FrameType {
|
|
2
|
+
Interlaced = 0,
|
|
3
|
+
Progressive = 1,
|
|
4
|
+
Field0 = 2,
|
|
5
|
+
Field1 = 3,
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export enum ColorFormat {
|
|
9
|
+
BGRX_BGRA = 0,
|
|
10
|
+
UYVY_BGRA = 1,
|
|
11
|
+
RGBX_RGBA = 2,
|
|
12
|
+
UYVY_RGBA = 3,
|
|
13
|
+
Fastest = 100,
|
|
14
|
+
Best = 101,
|
|
15
|
+
BGRX_BGRA_FLIPPED = 200,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export enum AudioFormat {
|
|
19
|
+
Float32Separate = 0,
|
|
20
|
+
Float32Interleaved = 1,
|
|
21
|
+
Int16Interleaved = 2,
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export enum Bandwidth {
|
|
25
|
+
MetadataOnly = -10,
|
|
26
|
+
AudioOnly = 10,
|
|
27
|
+
Lowest = 0,
|
|
28
|
+
Highest = 100,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export enum FourCC {
|
|
32
|
+
UYVY = 1498831189,
|
|
33
|
+
UYVA = 1096178005,
|
|
34
|
+
P216 = 909193808,
|
|
35
|
+
PA16 = 909197648,
|
|
36
|
+
YV12 = 842094169,
|
|
37
|
+
I420 = 808596553,
|
|
38
|
+
NV12 = 842094158,
|
|
39
|
+
BGRA = 1095911234,
|
|
40
|
+
BGRX = 1481787202,
|
|
41
|
+
RGBA = 1094862674,
|
|
42
|
+
RGBX = 1480738642,
|
|
43
|
+
FLTp = 1884572742,
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export type PtpTimestamp = [number, number]; // [seconds, nanoseconds]
|
|
47
|
+
export type Timecode = bigint | number | PtpTimestamp;
|
|
48
|
+
|
|
49
|
+
export interface Source {
|
|
50
|
+
name: string;
|
|
51
|
+
urlAddress?: string;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface VideoFrame {
|
|
55
|
+
type?: "video";
|
|
56
|
+
xres: number;
|
|
57
|
+
yres: number;
|
|
58
|
+
frameRateN: number;
|
|
59
|
+
frameRateD: number;
|
|
60
|
+
pictureAspectRatio: number;
|
|
61
|
+
fourCC: FourCC;
|
|
62
|
+
frameFormatType: FrameType;
|
|
63
|
+
lineStrideBytes: number;
|
|
64
|
+
data: Buffer;
|
|
65
|
+
timecode?: Timecode;
|
|
66
|
+
timestamp?: PtpTimestamp;
|
|
67
|
+
metadata?: string;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface ReceivedVideoFrame extends VideoFrame {
|
|
71
|
+
type: "video";
|
|
72
|
+
timecode: PtpTimestamp;
|
|
73
|
+
timestamp: PtpTimestamp;
|
|
74
|
+
metadata?: string;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface AudioFrame {
|
|
78
|
+
type?: "audio";
|
|
79
|
+
sampleRate: number;
|
|
80
|
+
noChannels: number;
|
|
81
|
+
noSamples: number;
|
|
82
|
+
channelStrideBytes: number;
|
|
83
|
+
data: Buffer;
|
|
84
|
+
fourCC: FourCC;
|
|
85
|
+
timecode?: Timecode;
|
|
86
|
+
timestamp?: PtpTimestamp;
|
|
87
|
+
metadata?: string;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface ReceivedAudioFrame {
|
|
91
|
+
type: "audio";
|
|
92
|
+
audioFormat: AudioFormat;
|
|
93
|
+
referenceLevel?: number;
|
|
94
|
+
sampleRate: number;
|
|
95
|
+
channels: number;
|
|
96
|
+
samples: number;
|
|
97
|
+
channelStrideInBytes: number;
|
|
98
|
+
data: Buffer;
|
|
99
|
+
timecode: PtpTimestamp;
|
|
100
|
+
timestamp: PtpTimestamp;
|
|
101
|
+
metadata?: string;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export interface ReceivedMetadataFrame {
|
|
105
|
+
type: "metadata";
|
|
106
|
+
length: number;
|
|
107
|
+
timecode: PtpTimestamp;
|
|
108
|
+
timestamp: PtpTimestamp;
|
|
109
|
+
data: string;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export interface SourceChangeEvent {
|
|
113
|
+
type: "sourceChange";
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export interface StatusChangeEvent {
|
|
117
|
+
type: "statusChange";
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export type ReceiverDataFrame =
|
|
121
|
+
| ReceivedVideoFrame
|
|
122
|
+
| ReceivedAudioFrame
|
|
123
|
+
| ReceivedMetadataFrame
|
|
124
|
+
| SourceChangeEvent
|
|
125
|
+
| StatusChangeEvent;
|
|
126
|
+
|
|
127
|
+
export interface AudioReceiveOptions {
|
|
128
|
+
audioFormat?: AudioFormat;
|
|
129
|
+
referenceLevel?: number;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export interface Receiver {
|
|
133
|
+
embedded: unknown;
|
|
134
|
+
source: Source;
|
|
135
|
+
colorFormat: ColorFormat;
|
|
136
|
+
bandwidth: Bandwidth;
|
|
137
|
+
allowVideoFields: boolean;
|
|
138
|
+
name?: string;
|
|
139
|
+
video(timeoutMs?: number): Promise<ReceivedVideoFrame>;
|
|
140
|
+
audio(timeoutMs?: number): Promise<ReceivedAudioFrame>;
|
|
141
|
+
audio(
|
|
142
|
+
options: AudioReceiveOptions,
|
|
143
|
+
timeoutMs?: number,
|
|
144
|
+
): Promise<ReceivedAudioFrame>;
|
|
145
|
+
metadata(timeoutMs?: number): Promise<ReceivedMetadataFrame>;
|
|
146
|
+
data(timeoutMs?: number): Promise<ReceiverDataFrame>;
|
|
147
|
+
data(
|
|
148
|
+
options: AudioReceiveOptions,
|
|
149
|
+
timeoutMs?: number,
|
|
150
|
+
): Promise<ReceiverDataFrame>;
|
|
151
|
+
tally(state: ReceiverTallyState): boolean;
|
|
152
|
+
destroy(): boolean;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export interface ReceiverTallyState {
|
|
156
|
+
onProgram?: boolean;
|
|
157
|
+
onPreview?: boolean;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export interface SenderTally {
|
|
161
|
+
changed: boolean;
|
|
162
|
+
on_program: boolean;
|
|
163
|
+
on_preview: boolean;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export interface Sender {
|
|
167
|
+
embedded: unknown;
|
|
168
|
+
name: string;
|
|
169
|
+
groups?: string;
|
|
170
|
+
clockVideo: boolean;
|
|
171
|
+
clockAudio: boolean;
|
|
172
|
+
video(frame: VideoFrame): Promise<void>;
|
|
173
|
+
audio(frame: AudioFrame): Promise<void>;
|
|
174
|
+
connections(): number;
|
|
175
|
+
metadata(data: string): boolean;
|
|
176
|
+
tally(): SenderTally;
|
|
177
|
+
sourcename(): string;
|
|
178
|
+
destroy(): boolean;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export interface Routing {
|
|
182
|
+
embedded: unknown;
|
|
183
|
+
name?: string;
|
|
184
|
+
groups?: string;
|
|
185
|
+
destroy(): boolean;
|
|
186
|
+
change(source: Source): boolean;
|
|
187
|
+
clear(): boolean;
|
|
188
|
+
connections(): number;
|
|
189
|
+
sourcename(): string;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
export interface Finder {
|
|
193
|
+
sources(): Source[];
|
|
194
|
+
wait(timeoutMs?: number): boolean;
|
|
195
|
+
destroy(): boolean;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export interface FindOptions {
|
|
199
|
+
showLocalSources?: boolean;
|
|
200
|
+
groups?: string;
|
|
201
|
+
extraIPs?: string;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export interface ReceiveOptions {
|
|
205
|
+
source: Source;
|
|
206
|
+
colorFormat?: ColorFormat;
|
|
207
|
+
bandwidth?: Bandwidth;
|
|
208
|
+
allowVideoFields?: boolean;
|
|
209
|
+
name?: string;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export interface SendOptions {
|
|
213
|
+
name: string;
|
|
214
|
+
groups?: string;
|
|
215
|
+
clockVideo?: boolean;
|
|
216
|
+
clockAudio?: boolean;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export interface GrandiAddon {
|
|
220
|
+
version(): string;
|
|
221
|
+
isSupportedCPU(): boolean;
|
|
222
|
+
initialize(): boolean;
|
|
223
|
+
destroy(): boolean;
|
|
224
|
+
find(params: FindOptions): Promise<Finder>;
|
|
225
|
+
receive(params: ReceiveOptions): Promise<Receiver>;
|
|
226
|
+
send(params: SendOptions): Promise<Sender>;
|
|
227
|
+
routing(params: { name?: string; groups?: string }): Promise<Routing>;
|
|
228
|
+
}
|