@norskvideo/norsk-studio-built-ins 1.11.3 → 1.12.0-2025-01-27-b21c8c91

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.
Files changed (246) hide show
  1. package/README.md +16 -0
  2. package/client/info.js +1288 -788
  3. package/client/output.whep/styles.css +9 -0
  4. package/client/style.css +501 -863
  5. package/lib/index.js +1 -2
  6. package/lib/index.js.map +1 -1
  7. package/lib/info.js +5 -9
  8. package/lib/info.js.map +1 -1
  9. package/lib/input.rtmp/info.js +3 -2
  10. package/lib/input.rtmp/info.js.map +1 -1
  11. package/lib/input.rtmp/openApi.d.ts +133 -0
  12. package/lib/input.rtmp/openApi.js +3 -0
  13. package/lib/input.rtmp/openApi.js.map +1 -0
  14. package/lib/input.rtmp/runtime.d.ts +24 -5
  15. package/lib/input.rtmp/runtime.js +166 -60
  16. package/lib/input.rtmp/runtime.js.map +1 -1
  17. package/lib/input.rtmp/summary-view.d.ts +3 -5
  18. package/lib/input.rtmp/summary-view.js +26 -6
  19. package/lib/input.rtmp/summary-view.js.map +1 -1
  20. package/lib/input.rtmp/types.yaml +99 -0
  21. package/lib/input.silence/info.js +4 -3
  22. package/lib/input.silence/info.js.map +1 -1
  23. package/lib/input.srt-caller/info.js +7 -6
  24. package/lib/input.srt-caller/info.js.map +1 -1
  25. package/lib/input.srt-caller/runtime.d.ts +1 -1
  26. package/lib/input.srt-listener/info.js +8 -6
  27. package/lib/input.srt-listener/info.js.map +1 -1
  28. package/lib/input.srt-listener/openApi.d.ts +133 -0
  29. package/lib/input.srt-listener/openApi.js +3 -0
  30. package/lib/input.srt-listener/openApi.js.map +1 -0
  31. package/lib/input.srt-listener/runtime.d.ts +26 -6
  32. package/lib/input.srt-listener/runtime.js +168 -57
  33. package/lib/input.srt-listener/runtime.js.map +1 -1
  34. package/lib/input.srt-listener/summary-view.d.ts +3 -5
  35. package/lib/input.srt-listener/summary-view.js +28 -4
  36. package/lib/input.srt-listener/summary-view.js.map +1 -1
  37. package/lib/input.srt-listener/types.yaml +99 -0
  38. package/lib/input.udp-ts/info.d.ts +1 -1
  39. package/lib/input.udp-ts/info.js +6 -5
  40. package/lib/input.udp-ts/info.js.map +1 -1
  41. package/lib/input.udp-ts/runtime.d.ts +1 -1
  42. package/lib/input.videoTestCard/info.d.ts +1 -1
  43. package/lib/input.videoTestCard/info.js +15 -5
  44. package/lib/input.videoTestCard/info.js.map +1 -1
  45. package/lib/output.autoCmaf/form-views.js +2 -3
  46. package/lib/output.autoCmaf/form-views.js.map +1 -1
  47. package/lib/output.autoCmaf/info.d.ts +2 -2
  48. package/lib/output.autoCmaf/info.js +66 -8
  49. package/lib/output.autoCmaf/info.js.map +1 -1
  50. package/lib/output.autoCmaf/runtime.d.ts +29 -9
  51. package/lib/output.autoCmaf/runtime.js +198 -60
  52. package/lib/output.autoCmaf/runtime.js.map +1 -1
  53. package/lib/output.autoCmaf/summary.js +26 -1
  54. package/lib/output.autoCmaf/summary.js.map +1 -1
  55. package/lib/output.autoCmaf/types.d.ts +101 -0
  56. package/lib/output.autoCmaf/types.js +3 -0
  57. package/lib/output.autoCmaf/types.js.map +1 -0
  58. package/lib/output.autoCmaf/types.yaml +28 -0
  59. package/lib/output.preview/info.js +5 -3
  60. package/lib/output.preview/info.js.map +1 -1
  61. package/lib/output.preview/inline-view.d.ts +2 -4
  62. package/lib/output.preview/inline-view.js +8 -4
  63. package/lib/output.preview/inline-view.js.map +1 -1
  64. package/lib/output.preview/runtime.d.ts +4 -3
  65. package/lib/output.preview/runtime.js +29 -18
  66. package/lib/output.preview/runtime.js.map +1 -1
  67. package/lib/output.rtmp/info.js +2 -1
  68. package/lib/output.rtmp/info.js.map +1 -1
  69. package/lib/output.rtmp/inline-view.js +2 -2
  70. package/lib/output.rtmp/runtime.d.ts +2 -2
  71. package/lib/output.rtmp/runtime.js.map +1 -1
  72. package/lib/output.srt/info.d.ts +2 -2
  73. package/lib/output.srt/info.js +27 -6
  74. package/lib/output.srt/info.js.map +1 -1
  75. package/lib/output.srt/runtime.d.ts +30 -5
  76. package/lib/output.srt/runtime.js +139 -5
  77. package/lib/output.srt/runtime.js.map +1 -1
  78. package/lib/output.srt/types.d.ts +101 -0
  79. package/lib/output.srt/types.js +3 -0
  80. package/lib/output.srt/types.js.map +1 -0
  81. package/lib/output.srt/types.yaml +31 -0
  82. package/lib/output.statistics/info.js +3 -3
  83. package/lib/output.statistics/info.js.map +1 -1
  84. package/lib/output.statistics/inline-view.js +3 -2
  85. package/lib/output.statistics/inline-view.js.map +1 -1
  86. package/lib/output.statistics/runtime.d.ts +1 -1
  87. package/lib/output.statistics/runtime.js.map +1 -1
  88. package/lib/output.udpTs/info.d.ts +1 -1
  89. package/lib/output.udpTs/info.js +5 -4
  90. package/lib/output.udpTs/info.js.map +1 -1
  91. package/lib/output.udpTs/runtime.d.ts +1 -1
  92. package/lib/output.whep/info.d.ts +2 -2
  93. package/lib/output.whep/info.js +49 -1
  94. package/lib/output.whep/info.js.map +1 -1
  95. package/lib/output.whep/inline-view.d.ts +4 -0
  96. package/lib/output.whep/inline-view.js +24 -0
  97. package/lib/output.whep/inline-view.js.map +1 -0
  98. package/lib/output.whep/runtime.d.ts +26 -5
  99. package/lib/output.whep/runtime.js +64 -13
  100. package/lib/output.whep/runtime.js.map +1 -1
  101. package/lib/output.whep/types.d.ts +101 -0
  102. package/lib/output.whep/types.js +3 -0
  103. package/lib/output.whep/types.js.map +1 -0
  104. package/lib/output.whep/types.yaml +30 -0
  105. package/lib/processor.browserOverlay/info.d.ts +2 -2
  106. package/lib/processor.browserOverlay/info.js +57 -3
  107. package/lib/processor.browserOverlay/info.js.map +1 -1
  108. package/lib/processor.browserOverlay/inline-view.d.ts +6 -0
  109. package/lib/processor.browserOverlay/inline-view.js +8 -0
  110. package/lib/processor.browserOverlay/inline-view.js.map +1 -0
  111. package/lib/processor.browserOverlay/openApi.d.ts +174 -0
  112. package/lib/processor.browserOverlay/openApi.js +3 -0
  113. package/lib/processor.browserOverlay/openApi.js.map +1 -0
  114. package/lib/processor.browserOverlay/runtime.d.ts +40 -6
  115. package/lib/processor.browserOverlay/runtime.js +151 -23
  116. package/lib/processor.browserOverlay/runtime.js.map +1 -1
  117. package/lib/processor.browserOverlay/summary-view.d.ts +4 -0
  118. package/lib/processor.browserOverlay/summary-view.js +27 -0
  119. package/lib/processor.browserOverlay/summary-view.js.map +1 -0
  120. package/lib/processor.browserOverlay/types.yaml +65 -0
  121. package/lib/processor.cascadingSwitch/info.js +5 -4
  122. package/lib/processor.cascadingSwitch/info.js.map +1 -1
  123. package/lib/processor.cascadingSwitch/inline-view.js +3 -3
  124. package/lib/processor.cascadingSwitch/runtime.d.ts +1 -1
  125. package/lib/processor.cascadingSwitch/runtime.js +2 -2
  126. package/lib/processor.cascadingSwitch/runtime.js.map +1 -1
  127. package/lib/processor.fixedLadder/codec-editor.js +2 -2
  128. package/lib/processor.fixedLadder/codec-editor.js.map +1 -1
  129. package/lib/processor.fixedLadder/codec-view.js +2 -2
  130. package/lib/processor.fixedLadder/codec-view.js.map +1 -1
  131. package/lib/processor.fixedLadder/info.js +11 -9
  132. package/lib/processor.fixedLadder/info.js.map +1 -1
  133. package/lib/processor.fixedLadder/rung-view.js +2 -2
  134. package/lib/processor.fixedLadder/rung-view.js.map +1 -1
  135. package/lib/processor.onscreenGraphic/image-selection.d.ts +9 -0
  136. package/lib/{processor.dynamicBug/bug-selection.js → processor.onscreenGraphic/image-selection.js} +10 -10
  137. package/lib/processor.onscreenGraphic/image-selection.js.map +1 -0
  138. package/lib/processor.onscreenGraphic/info.d.ts +3 -0
  139. package/lib/{processor.dynamicBug → processor.onscreenGraphic}/info.js +24 -17
  140. package/lib/processor.onscreenGraphic/info.js.map +1 -0
  141. package/lib/processor.onscreenGraphic/runtime.d.ts +91 -0
  142. package/lib/processor.onscreenGraphic/runtime.js +503 -0
  143. package/lib/processor.onscreenGraphic/runtime.js.map +1 -0
  144. package/lib/processor.onscreenGraphic/summary-view.d.ts +4 -0
  145. package/lib/processor.onscreenGraphic/summary-view.js +343 -0
  146. package/lib/processor.onscreenGraphic/summary-view.js.map +1 -0
  147. package/lib/processor.onscreenGraphic/types.d.ts +271 -0
  148. package/lib/processor.onscreenGraphic/types.js +3 -0
  149. package/lib/processor.onscreenGraphic/types.js.map +1 -0
  150. package/lib/processor.onscreenGraphic/types.yaml +211 -0
  151. package/lib/processor.streamKeyOverride/info.d.ts +3 -0
  152. package/lib/processor.streamKeyOverride/info.js +150 -0
  153. package/lib/processor.streamKeyOverride/info.js.map +1 -0
  154. package/lib/processor.streamKeyOverride/runtime.d.ts +54 -0
  155. package/lib/processor.streamKeyOverride/runtime.js +226 -0
  156. package/lib/processor.streamKeyOverride/runtime.js.map +1 -0
  157. package/lib/shared/drm/axinom.d.ts +2 -0
  158. package/lib/shared/drm/axinom.js +120 -0
  159. package/lib/shared/drm/axinom.js.map +1 -0
  160. package/lib/shared/drm/cpix.d.ts +24 -0
  161. package/lib/shared/drm/cpix.js +97 -0
  162. package/lib/shared/drm/cpix.js.map +1 -0
  163. package/lib/shared/drm/ezdrm.d.ts +2 -0
  164. package/lib/shared/drm/ezdrm.js +26 -0
  165. package/lib/shared/drm/ezdrm.js.map +1 -0
  166. package/lib/shared/srt-form-views.js +1 -2
  167. package/lib/shared/srt-form-views.js.map +1 -1
  168. package/lib/shared/srt-socket-options.js +6 -6
  169. package/lib/shared/srt-socket-options.js.map +1 -1
  170. package/lib/shared/webrtcSettings.js +1 -2
  171. package/lib/shared/webrtcSettings.js.map +1 -1
  172. package/lib/test/auto-cmaf.js +25 -17
  173. package/lib/test/auto-cmaf.js.map +1 -1
  174. package/lib/test/browser-overlay.js +3 -2
  175. package/lib/test/browser-overlay.js.map +1 -1
  176. package/lib/test/{dynamic-bug.js → onscreen-graphic.js} +146 -114
  177. package/lib/test/onscreen-graphic.js.map +1 -0
  178. package/lib/test/preview.js +3 -3
  179. package/lib/test/preview.js.map +1 -1
  180. package/lib/test/rtmp-input.js +6 -3
  181. package/lib/test/rtmp-input.js.map +1 -1
  182. package/lib/test/srt-input-caller.js +5 -5
  183. package/lib/test/srt-input-caller.js.map +1 -1
  184. package/lib/test/srt-input-listener.js +99 -18
  185. package/lib/test/srt-input-listener.js.map +1 -1
  186. package/lib/test/srt-output.js +13 -5
  187. package/lib/test/srt-output.js.map +1 -1
  188. package/lib/test/udp-output.js +11 -4
  189. package/lib/test/udp-output.js.map +1 -1
  190. package/lib/test/udp-ts-input.js +2 -2
  191. package/lib/test/udp-ts-input.js.map +1 -1
  192. package/lib/test/whep-output.js +11 -5
  193. package/lib/test/whep-output.js.map +1 -1
  194. package/lib/{util.latency → util.stats.latency}/info.js +3 -2
  195. package/lib/util.stats.latency/info.js.map +1 -0
  196. package/lib/util.stats.latency/inline-view.js.map +1 -0
  197. package/lib/{util.latency → util.stats.latency}/runtime.d.ts +1 -1
  198. package/lib/{util.latency → util.stats.latency}/runtime.js +2 -2
  199. package/lib/util.stats.latency/runtime.js.map +1 -0
  200. package/lib/util.stats.latency/source-node-selection.js.map +1 -0
  201. package/package.json +12 -5
  202. package/lib/processor.dynamicBug/bug-selection.d.ts +0 -9
  203. package/lib/processor.dynamicBug/bug-selection.js.map +0 -1
  204. package/lib/processor.dynamicBug/info.d.ts +0 -3
  205. package/lib/processor.dynamicBug/info.js.map +0 -1
  206. package/lib/processor.dynamicBug/runtime.d.ts +0 -64
  207. package/lib/processor.dynamicBug/runtime.js +0 -304
  208. package/lib/processor.dynamicBug/runtime.js.map +0 -1
  209. package/lib/processor.dynamicBug/summary-view.d.ts +0 -4
  210. package/lib/processor.dynamicBug/summary-view.js +0 -60
  211. package/lib/processor.dynamicBug/summary-view.js.map +0 -1
  212. package/lib/processor.whisper-transcribe/info.d.ts +0 -3
  213. package/lib/processor.whisper-transcribe/info.js +0 -43
  214. package/lib/processor.whisper-transcribe/info.js.map +0 -1
  215. package/lib/processor.whisper-transcribe/runtime.d.ts +0 -29
  216. package/lib/processor.whisper-transcribe/runtime.js +0 -83
  217. package/lib/processor.whisper-transcribe/runtime.js.map +0 -1
  218. package/lib/test/dynamic-bug.js.map +0 -1
  219. package/lib/util.latency/info.js.map +0 -1
  220. package/lib/util.latency/inline-view.js.map +0 -1
  221. package/lib/util.latency/runtime.js.map +0 -1
  222. package/lib/util.latency/source-node-selection.js.map +0 -1
  223. package/lib/util.ma35d/info.d.ts +0 -3
  224. package/lib/util.ma35d/info.js +0 -78
  225. package/lib/util.ma35d/info.js.map +0 -1
  226. package/lib/util.ma35d/inline-view.d.ts +0 -6
  227. package/lib/util.ma35d/inline-view.js +0 -76
  228. package/lib/util.ma35d/inline-view.js.map +0 -1
  229. package/lib/util.ma35d/runtime.d.ts +0 -21
  230. package/lib/util.ma35d/runtime.js +0 -49
  231. package/lib/util.ma35d/runtime.js.map +0 -1
  232. package/lib/util.timestamps/info.d.ts +0 -5
  233. package/lib/util.timestamps/info.js +0 -86
  234. package/lib/util.timestamps/info.js.map +0 -1
  235. package/lib/util.timestamps/inline-view.d.ts +0 -6
  236. package/lib/util.timestamps/inline-view.js +0 -94
  237. package/lib/util.timestamps/inline-view.js.map +0 -1
  238. package/lib/util.timestamps/runtime.d.ts +0 -29
  239. package/lib/util.timestamps/runtime.js +0 -40
  240. package/lib/util.timestamps/runtime.js.map +0 -1
  241. /package/lib/test/{dynamic-bug.d.ts → onscreen-graphic.d.ts} +0 -0
  242. /package/lib/{util.latency → util.stats.latency}/info.d.ts +0 -0
  243. /package/lib/{util.latency → util.stats.latency}/inline-view.d.ts +0 -0
  244. /package/lib/{util.latency → util.stats.latency}/inline-view.js +0 -0
  245. /package/lib/{util.latency → util.stats.latency}/source-node-selection.d.ts +0 -0
  246. /package/lib/{util.latency → util.stats.latency}/source-node-selection.js +0 -0
@@ -0,0 +1,503 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OnscreenGraphic = void 0;
7
+ const norsk_sdk_1 = require("@norskvideo/norsk-sdk");
8
+ const runtime_types_1 = require("@norskvideo/norsk-studio/lib/extension/runtime-types");
9
+ const logging_1 = require("@norskvideo/norsk-studio/lib/server/logging");
10
+ const config_1 = require("@norskvideo/norsk-studio/lib/shared/config");
11
+ const util_1 = require("@norskvideo/norsk-studio/lib/shared/util");
12
+ const config_2 = __importDefault(require("@norskvideo/norsk-studio/lib/server/config"));
13
+ const util_2 = require("@norskvideo/norsk-studio/lib/runtime/util");
14
+ const promises_1 = __importDefault(require("fs/promises"));
15
+ const path_1 = __importDefault(require("path"));
16
+ const multer_1 = __importDefault(require("multer"));
17
+ const json_refs_1 = require("json-refs");
18
+ const yaml_1 = __importDefault(require("yaml"));
19
+ function coreInfo(path, op) {
20
+ return {
21
+ url: path,
22
+ summary: op.summary,
23
+ description: op.description,
24
+ requestBody: op.requestBody,
25
+ responses: op.responses,
26
+ };
27
+ }
28
+ function get(path, paths) {
29
+ return {
30
+ ...coreInfo(path, paths[path]['get']),
31
+ method: 'GET',
32
+ };
33
+ }
34
+ function post(path, paths) {
35
+ return {
36
+ ...coreInfo(path, paths[path]['post']),
37
+ method: 'POST',
38
+ };
39
+ }
40
+ function delete_(path, paths) {
41
+ return {
42
+ ...coreInfo(path, paths[path]['delete']),
43
+ method: 'DELETE',
44
+ };
45
+ }
46
+ function graphicsDir() {
47
+ return path_1.default.join(config_2.default.server.workingDir(), process.env.ONSCREENGRAPHIC_DIRECTORY ?? "graphics");
48
+ }
49
+ const extensions = [
50
+ "jpg", "jpeg", "jfif",
51
+ "png", "apng",
52
+ "gif",
53
+ "webp",
54
+ "tif", "tiff",
55
+ "tga",
56
+ "dds",
57
+ "bmp",
58
+ "ico",
59
+ "hdr",
60
+ "exr",
61
+ "pbm", "pam", "ppm", "pgm",
62
+ "ff",
63
+ "qoi",
64
+ "pcx",
65
+ ];
66
+ async function getGraphics() {
67
+ const files = await promises_1.default.readdir(graphicsDir());
68
+ const images = files.filter((f) => {
69
+ return extensions.some(extension => f.endsWith("." + extension));
70
+ });
71
+ return images;
72
+ }
73
+ function clamp(min, num, max) {
74
+ return num < min ? min : num > max ? max : num;
75
+ }
76
+ function resolveNamedPosition(position, videoWidth, videoHeight, imageWidth, imageHeight) {
77
+ const maxX = videoWidth - imageWidth;
78
+ const maxY = videoHeight - imageHeight;
79
+ if (position.type === 'coordinate') {
80
+ return { x: clamp(0, position.x, maxX), y: clamp(0, position.y, maxY) };
81
+ }
82
+ else if (position.type === 'percentage') {
83
+ return { x: maxX * clamp(0, position.x, 100) / 100, y: maxY * clamp(0, position.y, 100) / 100 };
84
+ }
85
+ else if (position.type === 'named') {
86
+ switch (position.position) {
87
+ case 'topleft':
88
+ return { x: 0, y: 0 };
89
+ case 'topright':
90
+ return { x: maxX, y: 0 };
91
+ case 'bottomleft':
92
+ return { x: 0, y: maxY };
93
+ case 'bottomright':
94
+ return { x: maxX, y: maxY };
95
+ case 'center':
96
+ return { x: maxX / 2, y: maxY / 2 };
97
+ default:
98
+ (0, util_1.assertUnreachable)(position.position);
99
+ }
100
+ }
101
+ else {
102
+ (0, util_1.assertUnreachable)(position);
103
+ }
104
+ }
105
+ class OnscreenGraphicDefinition {
106
+ async create(norsk, cfg, cb, runtime) {
107
+ const node = await OnscreenGraphic.create(norsk, cfg, runtime.updates);
108
+ cb(node);
109
+ }
110
+ async handleCommand(node, command) {
111
+ const commandType = command.type;
112
+ switch (commandType) {
113
+ case 'change-graphic':
114
+ await node.setupGraphic(command.file, command.position);
115
+ break;
116
+ default:
117
+ (0, util_1.assertUnreachable)(commandType);
118
+ }
119
+ }
120
+ async staticRoutes() {
121
+ const storage = multer_1.default.diskStorage({
122
+ destination: graphicsDir(),
123
+ filename: function (_req, file, cb) {
124
+ cb(null, path_1.default.basename(file.originalname));
125
+ }
126
+ });
127
+ const fileFilter = (req, file, cb) => {
128
+ void checkFileExists(file, cb);
129
+ };
130
+ const checkFileExists = async (file, cb) => {
131
+ try {
132
+ const existingGraphics = await getGraphics();
133
+ if (existingGraphics.includes(file.originalname)) {
134
+ cb(new Error('A graphic with this name already exists'));
135
+ }
136
+ else {
137
+ cb(null, true);
138
+ }
139
+ }
140
+ catch (error) {
141
+ cb(error);
142
+ }
143
+ };
144
+ const upload = (0, multer_1.default)({ storage, fileFilter });
145
+ const types = await promises_1.default.readFile(path_1.default.join(__dirname, 'types.yaml'));
146
+ const root = yaml_1.default.parse(types.toString());
147
+ const resolved = await (0, json_refs_1.resolveRefs)(root, {}).then((r) => r.resolved);
148
+ const paths = resolved.paths;
149
+ return [
150
+ {
151
+ ...get('/graphics', paths),
152
+ handler: (_) => (async (_req, res) => {
153
+ const images = await getGraphics();
154
+ res.json(images);
155
+ })
156
+ },
157
+ {
158
+ ...post('/graphics', paths),
159
+ handler: () => async (req, res) => {
160
+ const uploader = upload.single('file');
161
+ uploader(req, res, (err) => {
162
+ if (err) {
163
+ if (err.message === 'A graphic with this name already exists') {
164
+ return res.status(409).json({ error: err.message });
165
+ }
166
+ (0, logging_1.warninglog)("An error occured during upload", err);
167
+ return res.status(500).json({ error: 'File upload failed' });
168
+ }
169
+ res.status(204).send();
170
+ });
171
+ },
172
+ },
173
+ {
174
+ ...delete_('/graphic', paths),
175
+ handler: () => (async (req, res) => {
176
+ const filename = req.body.filename;
177
+ const filePath = path_1.default.join(graphicsDir(), filename);
178
+ try {
179
+ await promises_1.default.access(filePath);
180
+ await promises_1.default.unlink(filePath);
181
+ res.status(204).send();
182
+ }
183
+ catch (error) {
184
+ if (error.code === 'ENOENT') {
185
+ res.status(404).json({ error: 'Graphic not found' });
186
+ }
187
+ else {
188
+ (0, logging_1.warninglog)("Error deleting graphic", error);
189
+ res.status(500).json({ error: 'Failed to delete graphic' });
190
+ }
191
+ }
192
+ }),
193
+ }
194
+ ];
195
+ }
196
+ async instanceRoutes() {
197
+ const types = await promises_1.default.readFile(path_1.default.join(__dirname, 'types.yaml'));
198
+ const root = yaml_1.default.parse(types.toString());
199
+ const resolved = await (0, json_refs_1.resolveRefs)(root, {}).then((r) => r.resolved);
200
+ const paths = resolved.paths;
201
+ return [
202
+ {
203
+ ...get('/active-graphic', paths),
204
+ handler: ({ runtime }) => ((_req, res) => {
205
+ const latest = runtime.updates.latest();
206
+ if (latest.activeGraphic?.file && latest.activeGraphic?.position) {
207
+ res.json({
208
+ graphic: latest.activeGraphic.file,
209
+ position: latest.activeGraphic.position
210
+ });
211
+ }
212
+ else {
213
+ res.status(204).send();
214
+ }
215
+ }),
216
+ },
217
+ {
218
+ ...post('/active-graphic', paths),
219
+ handler: ({ runtime }) => (async (req, res) => {
220
+ if ((req.body.graphic || req.body.position)) {
221
+ if (req.body.position) {
222
+ const position = req.body.position;
223
+ if (position.type === 'coordinate') {
224
+ if (typeof position.x !== 'number' || typeof position.y !== 'number' ||
225
+ position.x < 0 || position.y < 0) {
226
+ res.status(400).json({
227
+ error: "Bad position",
228
+ details: "Coordinate position must have non-negative x and y values"
229
+ });
230
+ return;
231
+ }
232
+ }
233
+ else if (position.type === 'named') {
234
+ if (!['topleft', 'topright', 'bottomleft', 'bottomright', 'center'].includes(position.position)) {
235
+ res.status(400).json({
236
+ error: "Bad position",
237
+ details: "Named position must be one of: topleft, topright, bottomleft, bottomright, center"
238
+ });
239
+ return;
240
+ }
241
+ }
242
+ else {
243
+ res.status(400).json({
244
+ error: "Bad position",
245
+ details: "Position must specify either type 'coordinate' or 'named'"
246
+ });
247
+ return;
248
+ }
249
+ }
250
+ const images = await getGraphics();
251
+ if (!images.includes(req.body.graphic)) {
252
+ res.status(400).json({
253
+ error: "Unknown graphic",
254
+ details: req.body.graphic,
255
+ });
256
+ return;
257
+ }
258
+ }
259
+ runtime.updates.sendCommand({
260
+ type: 'change-graphic',
261
+ file: req.body.graphic,
262
+ position: req.body.position
263
+ });
264
+ res.status(204).send();
265
+ }),
266
+ },
267
+ {
268
+ ...delete_('/active-graphic', paths),
269
+ handler: ({ runtime }) => (async (_req, res) => {
270
+ runtime.updates.sendCommand({
271
+ type: 'change-graphic'
272
+ });
273
+ res.status(204).send();
274
+ }),
275
+ },
276
+ ];
277
+ }
278
+ }
279
+ exports.default = OnscreenGraphicDefinition;
280
+ class OnscreenGraphic {
281
+ id;
282
+ relatedMediaNodes = new runtime_types_1.RelatedMediaNodes();
283
+ contexts = new util_2.ContextPromiseControl(this.handleContext.bind(this));
284
+ norsk;
285
+ cfg;
286
+ graphic;
287
+ position;
288
+ videoSource;
289
+ composeNode;
290
+ imageSource;
291
+ oldImageSource;
292
+ activeImage = 0;
293
+ composeId = 0;
294
+ initialised;
295
+ updates;
296
+ currentVideo;
297
+ static async create(norsk, cfg, updates) {
298
+ const node = new OnscreenGraphic(norsk, cfg, updates);
299
+ await node.initialised;
300
+ return node;
301
+ }
302
+ constructor(norsk, cfg, updates) {
303
+ this.cfg = cfg;
304
+ this.id = cfg.id;
305
+ this.norsk = norsk;
306
+ this.updates = updates;
307
+ this.initialised = this.initialise();
308
+ }
309
+ async handleContext() {
310
+ const video = this.videoSource?.latestStreams()[0]?.metadata;
311
+ if (!video || !this.videoSource || video.message.case !== 'video') {
312
+ await this.composeNode?.close();
313
+ this.composeNode = undefined;
314
+ this.currentVideo = undefined;
315
+ this.doSubs();
316
+ this.updates.raiseEvent({ type: 'video-changed', currentVideo: undefined });
317
+ return;
318
+ }
319
+ else {
320
+ const nextVideo = video.message.value;
321
+ (0, logging_1.debuglog)("Creating compose for onscreen graphic", { id: this.id, metadata: nextVideo });
322
+ if (this.currentVideo) {
323
+ if (nextVideo.height !== this.currentVideo.height || nextVideo.width !== this.currentVideo.width) {
324
+ (0, logging_1.debuglog)("Closing compose node in onscreen graphic because of metadata change", { id: this.id, old: this.currentVideo, new: nextVideo });
325
+ await this.composeNode?.close();
326
+ this.currentVideo = undefined;
327
+ }
328
+ }
329
+ this.currentVideo = nextVideo;
330
+ this.updates.raiseEvent({ type: 'video-changed', currentVideo: this.currentVideo });
331
+ if (!this.composeNode) {
332
+ (0, logging_1.debuglog)("Creating compose node for onscreen graphic", { id: this.id, width: nextVideo.width, height: nextVideo.height });
333
+ const thisCompose = this.composeNode = await this.norsk.processor.transform.videoCompose({
334
+ onCreate: (n) => {
335
+ this.relatedMediaNodes.addOutput(n);
336
+ this.relatedMediaNodes.addInput(n);
337
+ },
338
+ onClose: () => {
339
+ this.relatedMediaNodes.removeOutput(thisCompose);
340
+ },
341
+ id: `${this.id}-compose-${this.composeId++}`,
342
+ referenceStream: 'video',
343
+ hardwareAcceleration: (0, config_1.contractHardwareAcceleration)(this.cfg.__global.hardware, ["nvidia", "quadra"]),
344
+ missingStreamBehaviour: 'drop_part',
345
+ outputResolution: {
346
+ width: nextVideo.width,
347
+ height: nextVideo.height
348
+ },
349
+ parts: [
350
+ this.videoPart(),
351
+ ]
352
+ });
353
+ this.doSubs();
354
+ }
355
+ if (this.imageSource || this.oldImageSource) {
356
+ const newImageStream = this.imageSource?.outputStreams[0];
357
+ const oldImageStream = this.oldImageSource?.outputStreams[0];
358
+ if (newImageStream && oldImageStream) {
359
+ this.doSubs();
360
+ this.composeNode?.updateConfig({
361
+ parts: [
362
+ this.videoPart(),
363
+ ]
364
+ });
365
+ (0, logging_1.debuglog)("Closing old image source for graphic", { id: this.id, oldNode: this.oldImageSource?.id, newNode: this.imageSource?.id });
366
+ void this.oldImageSource?.close();
367
+ this.oldImageSource = undefined;
368
+ await this.handleContext();
369
+ return;
370
+ }
371
+ if (newImageStream) {
372
+ this.doSubs(this.imageSource);
373
+ }
374
+ else if (oldImageStream) {
375
+ this.doSubs(this.oldImageSource);
376
+ }
377
+ const imageStream = newImageStream ?? oldImageStream;
378
+ if (imageStream && imageStream.message.case == 'video') {
379
+ if (newImageStream) {
380
+ this.updates.raiseEvent({ type: 'graphic-loaded', currentGraphic: imageStream.message.value });
381
+ }
382
+ this.composeNode?.updateConfig({
383
+ parts: [
384
+ this.videoPart(),
385
+ this.imagePart(this.position ?? { type: 'coordinate', x: 0, y: 0 })
386
+ ]
387
+ });
388
+ }
389
+ else {
390
+ this.doSubs();
391
+ this.composeNode?.updateConfig({
392
+ parts: [
393
+ this.videoPart(),
394
+ ]
395
+ });
396
+ }
397
+ }
398
+ }
399
+ }
400
+ doSubs(imageSource) {
401
+ if (!imageSource) {
402
+ (0, logging_1.debuglog)("Doing subscriptions for onscreen graphic without image source");
403
+ this.composeNode?.subscribeToPins(this.videoSource?.selectVideoToPin("video") || []);
404
+ }
405
+ else {
406
+ (0, logging_1.debuglog)("Doing subscriptions for onscreen graphic with image source", { id: this.id, image: imageSource.id });
407
+ this.composeNode?.subscribeToPins((this.videoSource?.selectVideoToPin("video") ?? []).concat([
408
+ { source: imageSource, sourceSelector: (0, norsk_sdk_1.videoToPin)("graphic") }
409
+ ]));
410
+ }
411
+ }
412
+ async setupGraphic(graphic, position) {
413
+ this.position = position;
414
+ if (!graphic || graphic === "") {
415
+ (0, logging_1.debuglog)("Clearing graphic", { id: this.id });
416
+ this.doSubs();
417
+ await this.imageSource?.close();
418
+ this.imageSource = undefined;
419
+ this.graphic = undefined;
420
+ this.position = undefined;
421
+ this.updates.raiseEvent({ type: 'graphic-changed' });
422
+ await this.contexts.schedule();
423
+ return;
424
+ }
425
+ else if (graphic !== this.graphic) {
426
+ (0, logging_1.debuglog)("Changing graphic", { id: this.id, graphic, position, fileName: path_1.default.join(graphicsDir(), graphic) });
427
+ this.graphic = graphic;
428
+ this.activeImage = this.activeImage + 1;
429
+ this.oldImageSource = this.imageSource;
430
+ this.imageSource = await this.norsk.input.fileImage({
431
+ id: `${this.id}-${this.activeImage}`,
432
+ sourceName: `${this.id}-graphic-${this.activeImage}`,
433
+ fileName: path_1.default.join(graphicsDir(), graphic)
434
+ });
435
+ this.setSources();
436
+ }
437
+ else {
438
+ (0, logging_1.debuglog)("Changing graphic position", { id: this.id, graphic, position });
439
+ this.position = position;
440
+ if (this.composeNode) {
441
+ this.composeNode.updateConfig({
442
+ parts: [
443
+ this.videoPart(),
444
+ this.imagePart(position ?? { type: 'coordinate', x: 0, y: 0 })
445
+ ]
446
+ });
447
+ }
448
+ await this.contexts.schedule();
449
+ }
450
+ this.updates.raiseEvent({ type: 'graphic-changed', file: graphic, position });
451
+ }
452
+ imagePart(position) {
453
+ const foo = {
454
+ id: "graphic",
455
+ zIndex: 1,
456
+ compose: (metadata, cfg) => {
457
+ const videoWidth = cfg.outputResolution.width;
458
+ const videoHeight = cfg.outputResolution.height;
459
+ const imageWidth = Math.min(videoWidth - 100, metadata.width);
460
+ const imageHeight = Math.min(videoHeight - 100, metadata.height);
461
+ const resolvedPos = resolveNamedPosition(position, videoWidth, videoHeight, imageWidth, imageHeight);
462
+ return {
463
+ sourceRect: { x: 0, y: 0, width: metadata.width, height: metadata.height },
464
+ destRect: {
465
+ x: resolvedPos.x,
466
+ y: resolvedPos.y,
467
+ width: imageWidth,
468
+ height: imageHeight
469
+ }
470
+ };
471
+ },
472
+ opacity: 1.0,
473
+ pin: "graphic"
474
+ };
475
+ return foo;
476
+ }
477
+ videoPart() {
478
+ return {
479
+ id: "video",
480
+ zIndex: 0,
481
+ compose: norsk_sdk_1.VideoComposeDefaults.fullscreen(),
482
+ opacity: 1.0,
483
+ pin: "video"
484
+ };
485
+ }
486
+ async initialise() {
487
+ await this.setupGraphic(this.cfg.initialGraphic, this.cfg.initialPosition);
488
+ }
489
+ subscribe(sources) {
490
+ this.videoSource = sources[0];
491
+ this.setSources();
492
+ }
493
+ setSources() {
494
+ const imageSources = [];
495
+ if (this.oldImageSource)
496
+ imageSources.push(this.oldImageSource);
497
+ if (this.imageSource)
498
+ imageSources.push(this.imageSource);
499
+ this.contexts.setSources(this.videoSource ? [this.videoSource] : [], imageSources);
500
+ }
501
+ }
502
+ exports.OnscreenGraphic = OnscreenGraphic;
503
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/processor.onscreenGraphic/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { OnscreenGraphicState, OnscreenGraphicConfig, OnscreenGraphicCommand } from "./runtime";
2
+ import { ViewProps } from "@norskvideo/norsk-studio/lib/extension/client-types";
3
+ declare function SummaryView({ state, sendCommand, urls, }: ViewProps<OnscreenGraphicConfig, OnscreenGraphicState, OnscreenGraphicCommand>): import("react/jsx-runtime").JSX.Element;
4
+ export default SummaryView;