forked from hopejr/grandiose
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
136 lines (120 loc) · 4.69 KB
/
index.js
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/* Copyright 2018 Streampunk Media Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
const path = require("path")
const addon = isSupportedPlatform()
? require('bindings')({
bindings: "grandiose",
module_root: path.resolve(__dirname)
})
: {
version () { return null },
isSupportedCPU () { return false },
initialize () { return null },
destroy () { return null },
send () { return null },
receive () { return null },
routing () { return null },
find: { apply () { return null } }
}
const NDI_LIB_FOURCC = (ch0, ch1, ch2, ch3) =>
(ch0.charCodeAt(0) | (ch1.charCodeAt(0) << 8) | (ch2.charCodeAt(0) << 16) | (ch3.charCodeAt(0) << 24))
const FOURCC_UYVY = NDI_LIB_FOURCC("U", "Y", "V", "Y")
const FOURCC_UYVA = NDI_LIB_FOURCC("U", "Y", "V", "A")
const FOURCC_P216 = NDI_LIB_FOURCC("P", "2", "1", "6")
const FOURCC_PA16 = NDI_LIB_FOURCC("P", "A", "1", "6")
const FOURCC_YV12 = NDI_LIB_FOURCC("Y", "V", "1", "2")
const FOURCC_I420 = NDI_LIB_FOURCC("I", "4", "2", "0")
const FOURCC_NV12 = NDI_LIB_FOURCC("N", "V", "1", "2")
const FOURCC_BGRA = NDI_LIB_FOURCC("B", "G", "R", "A")
const FOURCC_BGRX = NDI_LIB_FOURCC("B", "G", "R", "X")
const FOURCC_RGBA = NDI_LIB_FOURCC("R", "G", "B", "A")
const FOURCC_RGBX = NDI_LIB_FOURCC("R", "G", "B", "X")
const FOURCC_FLTp = NDI_LIB_FOURCC("F", "L", "T", "p")
class FourCC {
static UYVY = FOURCC_UYVY;
static UYVA = FOURCC_UYVA;
static P216 = FOURCC_P216;
static PA16 = FOURCC_PA16;
static YV12 = FOURCC_YV12;
static I420 = FOURCC_I420;
static NV12 = FOURCC_NV12;
static BGRA = FOURCC_BGRA;
static BGRX = FOURCC_BGRX;
static RGBA = FOURCC_RGBA;
static RGBX = FOURCC_RGBX;
static FLTp = FOURCC_FLTp;
}
class ColorFormat {
static BGRX_BGRA = 0; // No alpha channel: BGRX, Alpha channel: BGRA
static UYVY_BGRA = 1; // No alpha channel: UYVY, Alpha channel: BGRA
static RGBX_RGBA = 2; // No alpha channel: RGBX, Alpha channel: RGBA
static UYVY_RGBA = 3; // No alpha channel: UYVY, Alpha channel: RGBA
static Fastest = 100;
static Best = 101;
// On Windows there are some APIs that require bottom to top images in RGBA format. Specifying
// this format will return images in this format. The image data pointer will still point to the
// "top" of the image, althought he stride will be negative. You can get the "bottom" line of the image
// using : video_data.p_data + (video_data.yres - 1)*video_data.line_stride_in_bytes
static BGRX_BGRA_FLIPPED = 200;
}
class Bandwidth {
static MetadataOnly = -10; // Receive metadata.
static AudioOnly = 10; // Receive metadata, audio.
static Lowest = 0; // Receive metadata, audio, video at a lower bandwidth and resolution.
static Highest = 100; // Receive metadata, audio, video at full resolution.
}
class FrameType {
static Progressive = 1;
static Interlaced = 0;
static Field0 = 2;
static Field1 = 3;
}
class AudioFormat {
// Default NDI audio format
// Channels stored one after the other in each block - 32-bit floating point values
static Float32Separate = 0;
// Alternative NDI audio foramt
// Channels stored as channel-interleaved 32-bit floating point values
static Float32Interleaved = 1;
// Alternative NDI audio format
// Channels stored as channel-interleaved 16-bit integer values
static Int16Interleaved = 2;
}
let find = function (...args) {
if (args.length === 0) return addon.find();
if (Array.isArray(args[0].groups)) {
args[0].groups = args[0].groups.reduce((x, y) => x + ',' + y);
}
if (Array.isArray(args[0].extraIPs)) {
args[0].extraIPs = args[0].extraIPs.reduce((x, y) => x + ',' + y);
}
return addon.find.apply(null, args);
}
function isSupportedPlatform () {
return process.platform === 'darwin' || process.platform === 'linux' ||
(process.platform === 'win32' && ['ia32', 'x64'].includes(process.arch))
}
module.exports = {
version: addon.version,
isSupportedCPU: addon.isSupportedCPU,
initialize: addon.initialize,
destroy: addon.destroy,
find: find,
receive: addon.receive,
send: addon.send,
routing: addon.routing,
ColorFormat,
FrameType,
FourCC,
Bandwidth,
AudioFormat,
};