@desklink/host 0.2.0 → 0.3.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.
Files changed (69) hide show
  1. package/NOTICE +23 -0
  2. package/README.md +78 -48
  3. package/bin/desklink-host.mjs +1 -1
  4. package/dist/bridge.d.ts +1 -0
  5. package/dist/bridge.d.ts.map +1 -1
  6. package/dist/bridge.js +12 -4
  7. package/dist/bridge.js.map +1 -1
  8. package/dist/engineProcess.d.ts.map +1 -1
  9. package/dist/engineProcess.js +1 -0
  10. package/dist/engineProcess.js.map +1 -1
  11. package/dist/protocol.d.ts +26 -0
  12. package/dist/protocol.d.ts.map +1 -1
  13. package/dist/protocol.js.map +1 -1
  14. package/dist/resolveEngine.d.ts +1 -1
  15. package/dist/resolveEngine.d.ts.map +1 -1
  16. package/dist/resolveEngine.js +22 -9
  17. package/dist/resolveEngine.js.map +1 -1
  18. package/docs/BOUNDARY.md +15 -7
  19. package/docs/PROTOCOL.md +150 -23
  20. package/engine/Cargo.lock +46 -1
  21. package/engine/Cargo.toml +12 -2
  22. package/engine/build.rs +28 -2
  23. package/engine/native/nvenc_shim.c +453 -0
  24. package/engine/native/vaapi_shim.c +727 -0
  25. package/engine/native/vpx_shim.c +54 -4
  26. package/engine/native/vt_shim.c +448 -0
  27. package/engine/src/capture.rs +75 -55
  28. package/engine/src/capture_mac.rs +24 -14
  29. package/engine/src/convert.rs +286 -61
  30. package/engine/src/encoder.rs +122 -13
  31. package/engine/src/h264.rs +188 -0
  32. package/engine/src/h264_nvenc.rs +308 -0
  33. package/engine/src/h264_openh264.rs +735 -0
  34. package/engine/src/h264_vaapi.rs +263 -0
  35. package/engine/src/h264_vt.rs +368 -0
  36. package/engine/src/mac.rs +6 -3
  37. package/engine/src/main.rs +22 -4
  38. package/engine/src/peer.rs +466 -28
  39. package/engine/src/protocol.rs +15 -2
  40. package/engine/src/session.rs +790 -93
  41. package/engine/src/x11.rs +210 -9
  42. package/engine/src/x11_mac.rs +12 -0
  43. package/engine/vendor/libva/COPYING +19 -0
  44. package/engine/vendor/libva/va/va.h +5450 -0
  45. package/engine/vendor/libva/va/va_dec_av1.h +695 -0
  46. package/engine/vendor/libva/va/va_dec_hevc.h +616 -0
  47. package/engine/vendor/libva/va/va_dec_jpeg.h +157 -0
  48. package/engine/vendor/libva/va/va_dec_vp8.h +249 -0
  49. package/engine/vendor/libva/va/va_dec_vp9.h +312 -0
  50. package/engine/vendor/libva/va/va_dec_vvc.h +688 -0
  51. package/engine/vendor/libva/va/va_drm.h +61 -0
  52. package/engine/vendor/libva/va/va_enc_av1.h +1010 -0
  53. package/engine/vendor/libva/va/va_enc_h264.h +659 -0
  54. package/engine/vendor/libva/va/va_enc_hevc.h +958 -0
  55. package/engine/vendor/libva/va/va_enc_jpeg.h +162 -0
  56. package/engine/vendor/libva/va/va_enc_mpeg2.h +308 -0
  57. package/engine/vendor/libva/va/va_enc_vp8.h +350 -0
  58. package/engine/vendor/libva/va/va_enc_vp9.h +639 -0
  59. package/engine/vendor/libva/va/va_fei.h +170 -0
  60. package/engine/vendor/libva/va/va_fei_h264.h +505 -0
  61. package/engine/vendor/libva/va/va_fei_hevc.h +254 -0
  62. package/engine/vendor/libva/va/va_prot.h +525 -0
  63. package/engine/vendor/libva/va/va_version.h +87 -0
  64. package/engine/vendor/libva/va/va_vpp.h +1590 -0
  65. package/engine/vendor/nv-codec-headers/LICENSE +24 -0
  66. package/engine/vendor/nv-codec-headers/README +7 -0
  67. package/engine/vendor/nv-codec-headers/include/ffnvcodec/nvEncodeAPI.h +3825 -0
  68. package/examples/reference-client.html +1 -1
  69. package/package.json +3 -2
@@ -23,6 +23,16 @@ mod encoder;
23
23
  #[cfg(all(target_os = "macos", desklink_vpx))]
24
24
  mod encoder;
25
25
  #[cfg(any(target_os = "linux", all(target_os = "macos", desklink_vpx)))]
26
+ mod h264;
27
+ #[cfg(target_os = "linux")]
28
+ mod h264_nvenc;
29
+ #[cfg(target_os = "linux")]
30
+ mod h264_openh264;
31
+ #[cfg(target_os = "linux")]
32
+ mod h264_vaapi;
33
+ #[cfg(all(target_os = "macos", desklink_vpx))]
34
+ mod h264_vt;
35
+ #[cfg(any(target_os = "linux", all(target_os = "macos", desklink_vpx)))]
26
36
  mod indicator;
27
37
  #[cfg(target_os = "linux")]
28
38
  mod input;
@@ -287,12 +297,19 @@ fn frame_shape(frame: &crate::convert::I420) -> u64 {
287
297
  async fn probe_portal(seconds: u64) -> Result<()> {
288
298
  let portal = portal::open(None).await?;
289
299
  eprintln!("portal source: {:?}", portal.source);
300
+ // The source's own size: a zero box converts nothing and reports no frames.
301
+ let (width, height) = crate::convert::fit(
302
+ portal.source.width.max(0) as usize,
303
+ portal.source.height.max(0) as usize,
304
+ usize::MAX,
305
+ usize::MAX,
306
+ );
290
307
 
291
308
  let (tx, rx) = std_mpsc::channel();
292
309
  let capture = capture::start(
293
310
  portal,
294
- 0,
295
- 0,
311
+ width,
312
+ height,
296
313
  30,
297
314
  Box::new(move |frame, seq, _raw| {
298
315
  let _ = tx.send((frame.width, frame.height, seq));
@@ -474,9 +491,9 @@ fn render_event(notice: session::Notice) -> Option<String> {
474
491
  "session.capture.stopped",
475
492
  serde_json::json!({ "sessionId": session_id, "reason": reason }),
476
493
  ),
477
- session::SessionEvent::Revoked { reason } => (
494
+ session::SessionEvent::Revoked { reason, code } => (
478
495
  "session.revoked",
479
- serde_json::json!({ "sessionId": session_id, "reason": reason }),
496
+ serde_json::json!({ "sessionId": session_id, "reason": reason, "code": code }),
480
497
  ),
481
498
  };
482
499
  serde_json::to_string(&Event {
@@ -538,6 +555,7 @@ async fn dispatch(
538
555
  ttl: params.ttl_seconds.map(Duration::from_secs),
539
556
  loopback_tcp: params.loopback_tcp,
540
557
  agent_indicator: params.agent_indicator,
558
+ local_frames: params.local_frames,
541
559
  ice_servers: params
542
560
  .ice_servers
543
561
  .into_iter()