@camstack/types 1.2.214 → 1.2.216

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.
@@ -59,6 +59,7 @@ function buildInputArgs(input, decodeHwAccel) {
59
59
  if (input.extraArgs?.length) args.push(...input.extraArgs);
60
60
  if (input.analyzeDurationUs !== void 0) args.push("-analyzeduration", String(input.analyzeDurationUs));
61
61
  if (input.probeSizeBytes !== void 0) args.push("-probesize", String(input.probeSizeBytes));
62
+ if (input.lowDelay === true) args.push("-flags", "low_delay");
62
63
  if (input.fflags?.length) for (const flag of input.fflags) args.push("-fflags", flag);
63
64
  if (input.rtspTransport) args.push("-rtsp_transport", input.rtspTransport);
64
65
  args.push("-i", input.url);
@@ -59,6 +59,7 @@ function buildInputArgs(input, decodeHwAccel) {
59
59
  if (input.extraArgs?.length) args.push(...input.extraArgs);
60
60
  if (input.analyzeDurationUs !== void 0) args.push("-analyzeduration", String(input.analyzeDurationUs));
61
61
  if (input.probeSizeBytes !== void 0) args.push("-probesize", String(input.probeSizeBytes));
62
+ if (input.lowDelay === true) args.push("-flags", "low_delay");
62
63
  if (input.fflags?.length) for (const flag of input.fflags) args.push("-fflags", flag);
63
64
  if (input.rtspTransport) args.push("-rtsp_transport", input.rtspTransport);
64
65
  args.push("-i", input.url);
@@ -66,6 +66,25 @@ export declare const ptzAutotrackCapability: {
66
66
  readonly scope: "device";
67
67
  readonly deviceNative: true;
68
68
  readonly mode: "singleton";
69
+ /**
70
+ * Two kinds of provider behind one name, the same shape `snapshot` and
71
+ * `doorbell` use:
72
+ *
73
+ * - **Native**: the camera's own firmware autotrack, registered per device by
74
+ * the driver when the probe says it exists (Reolink: yes; Hikvision:
75
+ * model-dependent).
76
+ * - **Wrapper**: the emulated implementation (`@camstack/system`'s `autotrack` builtin),
77
+ * which follows a subject with `ptz.move` pulses driven by the detection
78
+ * pipeline. `defaultActive: false` — the operator binds it per camera in
79
+ * the bindings UI, exactly as `virtual-doorbell` is bound.
80
+ *
81
+ * The binding chooses WHICH implementation answers; `setEnabled` stays the
82
+ * one switch for the function either way. A camera never has both driving its
83
+ * head, which is the whole reason this is not a second cap with a second
84
+ * toggle (D62, D520).
85
+ */
86
+ readonly kind: "wrapper";
87
+ readonly defaultActive: false;
69
88
  readonly deviceTypes: readonly [DeviceType.Camera];
70
89
  readonly deviceConfig: {
71
90
  readonly ui: {
@@ -53,6 +53,21 @@ export interface FfmpegInputPlan {
53
53
  */
54
54
  readonly analyzeDurationUs?: number;
55
55
  readonly probeSizeBytes?: number;
56
+ /**
57
+ * `-flags low_delay` on this INPUT.
58
+ *
59
+ * ffmpeg's h264 decoder reorders its output to undo B-frame ordering, so it
60
+ * holds each frame until it knows nothing following will precede it. On a
61
+ * stream encoded without B-frames there is nothing to reorder and the wait
62
+ * buys nothing — it is latency added at every hop that decodes, and a
63
+ * composite decodes one per tile.
64
+ *
65
+ * Ask for it only where the producer is known to emit no B-frames (the hub's
66
+ * own restreams, an encoder we configured with `-tune zerolatency`). On an
67
+ * arbitrary camera it is not wrong, just not always free: a stream that DOES
68
+ * reorder will decode out of order.
69
+ */
70
+ readonly lowDelay?: boolean;
56
71
  /** Caller-supplied input options (an `EncodeProfile.inputArgs`, probe flags). */
57
72
  readonly extraArgs?: readonly string[];
58
73
  }
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_sleep = require("./sleep-VlZxDyXq.js");
3
3
  const require_event_category = require("./event-category-BVfsrBYA.js");
4
- const require_canonical_hash = require("./canonical-hash-CZ2JqJc3.js");
4
+ const require_canonical_hash = require("./canonical-hash-BxuA6beb.js");
5
5
  const require_enums = require("./enums.js");
6
6
  const require_err_msg = require("./err-msg-COpsHMw2.js");
7
7
  let zod = require("zod");
@@ -35444,6 +35444,25 @@ var ptzAutotrackCapability = {
35444
35444
  scope: "device",
35445
35445
  deviceNative: true,
35446
35446
  mode: "singleton",
35447
+ /**
35448
+ * Two kinds of provider behind one name, the same shape `snapshot` and
35449
+ * `doorbell` use:
35450
+ *
35451
+ * - **Native**: the camera's own firmware autotrack, registered per device by
35452
+ * the driver when the probe says it exists (Reolink: yes; Hikvision:
35453
+ * model-dependent).
35454
+ * - **Wrapper**: the emulated implementation (`@camstack/system`'s `autotrack` builtin),
35455
+ * which follows a subject with `ptz.move` pulses driven by the detection
35456
+ * pipeline. `defaultActive: false` — the operator binds it per camera in
35457
+ * the bindings UI, exactly as `virtual-doorbell` is bound.
35458
+ *
35459
+ * The binding chooses WHICH implementation answers; `setEnabled` stays the
35460
+ * one switch for the function either way. A camera never has both driving its
35461
+ * head, which is the whole reason this is not a second cap with a second
35462
+ * toggle (D62, D520).
35463
+ */
35464
+ kind: "wrapper",
35465
+ defaultActive: false,
35447
35466
  deviceTypes: [require_sleep.DeviceType.Camera],
35448
35467
  deviceConfig: { ui: {
35449
35468
  kind: "widget",
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { $ as CAM_PROFILE_ORDER, A as DeviceType, At as isEvent, B as systemMethod, Bt as isAudioChunkFormat, C as customAction, Ct as SHARE_VIEW_KINDS, D as ChargingStatus, Dt as createDurableState, E as deviceCustomAction, Et as normalizeAddonInitResult, F as event, Ft as hydrateSchema, G as ReadinessRegistry, H as nodePin, I as expandCapMethods, It as resolveHydratedFieldValue, J as readinessKey, K as ReadinessTimeoutError, L as isDeviceConfigCap, Lt as AUDIO_CHUNK_FORMATS, M as DEFAULT_RUNTIME_STATE_DURABILITY, Mt as WELL_KNOWN_TAB_MAP, N as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Nt as collectHydratedFieldEntries, O as DeviceFeature, Ot as createEvent, P as DEVICE_STATUS_METHOD, Pt as collectHydratedFieldValues, Q as BrokerStatusSchema, R as method, Rt as audioChunkBytesPerSample, S as DEVICE_CHILDREN_BATCH_MAX, St as DATAPLANE_SECRET_HEADER, T as describeCustomActions, Tt as BaseAddon, U as readNodePin, V as CAP_NODE_PIN_CONTEXT_KEY, W as toNodeId, X as AudioChunkFormatSchema, Y as scopeKey, Z as BrokerStatsSchema, _ as createMirrorSource, _t as SubscribeFramesResultSchema, a as asJsonObject, at as DecodedFrameSchema, b as deviceOpsCapability, bt as parseProfileBrokerId, c as parseJsonArray, ct as FrameHandleSchema, d as BOOT_RECOVERY_BACKOFF_MS, dt as ProfileSlotStatusSchema, et as CamProfileSchema, f as DEVICE_SCOPED_CAPS, ft as StreamSourceEntrySchema, g as createLazyTrpcSource, gt as SubscribeFramesInputSchema, h as createEventBusSliceSource, ht as SubscribeAudioChunksResultSchema, i as asJsonArray, it as DecodedAudioChunkSchema, j as adminUiCapability, jt as WELL_KNOWN_TABS, k as DeviceRole, kt as emitReadiness, l as parseJsonObject, lt as ProfileRtspEntrySchema, m as createDeviceProxy, mt as SubscribeAudioChunksInputSchema, n as sleepCancellable, nt as CamStreamResolutionSchema, o as asNumber, ot as EncodedPacketSchema, p as isDeviceScopedCap, pt as StreamSourceSchema, q as emitDownForOwnedCaps, r as asBoolean, rt as CameraStreamSchema, s as asString, st as FrameHandleFormatSchema, t as sleep, tt as CamStreamKindSchema, u as parseJsonUnknown, ut as ProfileSlotSchema, v as createSliceHandle, vt as makeProfileBrokerId, w as defineCustomActions, wt as DisposerChain, x as viewerUiCapability, xt as selectAssignedProfileSlots, y as RawStateResultSchema, yt as makeSourceBrokerId, z as resolveCapMount, zt as expandAudioChunkToF32le } from "./sleep-GU_us3DG.mjs";
2
2
  import { t as EventCategory } from "./event-category-BVDXG4tB.mjs";
3
- import { a as buildAudioArgs, c as buildVideoArgs, d as logBannerArgs, f as pickVideoEncoder, i as audioPlanFromEncodeProfile, l as invocationFromEncodeProfile, n as Fmp4BoxSplitter, o as buildFfmpegArgs, p as resolveStreamMaps, r as AUDIO_PRESETS, s as buildInputArgs, t as canonicalHash, u as isSoftwareDecode } from "./canonical-hash-DBkl8q6V.mjs";
3
+ import { a as buildAudioArgs, c as buildVideoArgs, d as logBannerArgs, f as pickVideoEncoder, i as audioPlanFromEncodeProfile, l as invocationFromEncodeProfile, n as Fmp4BoxSplitter, o as buildFfmpegArgs, p as resolveStreamMaps, r as AUDIO_PRESETS, s as buildInputArgs, t as canonicalHash, u as isSoftwareDecode } from "./canonical-hash-biq7T_dN.mjs";
4
4
  import { EventSourceType } from "./enums.mjs";
5
5
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
6
6
  import { z } from "zod";
@@ -35443,6 +35443,25 @@ var ptzAutotrackCapability = {
35443
35443
  scope: "device",
35444
35444
  deviceNative: true,
35445
35445
  mode: "singleton",
35446
+ /**
35447
+ * Two kinds of provider behind one name, the same shape `snapshot` and
35448
+ * `doorbell` use:
35449
+ *
35450
+ * - **Native**: the camera's own firmware autotrack, registered per device by
35451
+ * the driver when the probe says it exists (Reolink: yes; Hikvision:
35452
+ * model-dependent).
35453
+ * - **Wrapper**: the emulated implementation (`@camstack/system`'s `autotrack` builtin),
35454
+ * which follows a subject with `ptz.move` pulses driven by the detection
35455
+ * pipeline. `defaultActive: false` — the operator binds it per camera in
35456
+ * the bindings UI, exactly as `virtual-doorbell` is bound.
35457
+ *
35458
+ * The binding chooses WHICH implementation answers; `setEnabled` stays the
35459
+ * one switch for the function either way. A camera never has both driving its
35460
+ * head, which is the whole reason this is not a second cap with a second
35461
+ * toggle (D62, D520).
35462
+ */
35463
+ kind: "wrapper",
35464
+ defaultActive: false,
35446
35465
  deviceTypes: [DeviceType.Camera],
35447
35466
  deviceConfig: { ui: {
35448
35467
  kind: "widget",
package/dist/node.js CHANGED
@@ -21,7 +21,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
21
  enumerable: true
22
22
  }) : target, mod));
23
23
  //#endregion
24
- const require_canonical_hash = require("./canonical-hash-CZ2JqJc3.js");
24
+ const require_canonical_hash = require("./canonical-hash-BxuA6beb.js");
25
25
  const require_err_msg = require("./err-msg-COpsHMw2.js");
26
26
  let node_crypto = require("node:crypto");
27
27
  let node_fs = require("node:fs");
package/dist/node.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { n as Fmp4BoxSplitter, o as buildFfmpegArgs, t as canonicalHash, u as isSoftwareDecode } from "./canonical-hash-DBkl8q6V.mjs";
1
+ import { n as Fmp4BoxSplitter, o as buildFfmpegArgs, t as canonicalHash, u as isSoftwareDecode } from "./canonical-hash-biq7T_dN.mjs";
2
2
  import { t as errMsg } from "./err-msg-IQTHeDzc.mjs";
3
3
  import { createHash, createHmac, randomUUID, timingSafeEqual } from "node:crypto";
4
4
  import * as fs from "node:fs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.2.214",
3
+ "version": "1.2.216",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",