import { z } from 'zod';
import { type InferProvider } from './capability-definition.js';
import type { HwAccelBackend } from '../interfaces/addon.js';
import { DecoderSessionConfigSchema } from '../interfaces/stream-broker.js';
/**
 * Operator-facing hwaccel selection — wins over `probedBestHwaccel`
 * when concrete; `'auto'` defers to the session's local resolver
 * (`ctx.kernel.hwaccel`) which probes the host. Shared across every
 * decoder addon (node-av, ffmpeg, …) so UI + settings + sessions all
 * speak the same vocabulary.
 */
export type HwAccelChoice = 'auto' | 'none' | HwAccelBackend;
/**
 * Stable UI option list for the `hwaccel` setting. Decoder addons
 * reuse this for `globalSettingsSchema()` so the dropdown is
 * identical everywhere. Order: auto → off → common backends by
 * platform affinity (macOS, NVIDIA, Intel/AMD, Windows, Linux).
 */
export declare const HWACCEL_OPTIONS: ReadonlyArray<{
    value: HwAccelChoice;
    label: string;
}>;
/**
 * Shared shape of a decoder addon's global settings. Every decoder
 * owns its own instance (node-av, ffmpeg, future backends) — they
 * don't share a store, but they share this config shape.
 */
export interface DecoderHwAccelConfig {
    readonly hwaccel: HwAccelChoice;
    readonly probedBestHwaccel: string;
}
export declare const DEFAULT_DECODER_HWACCEL_CONFIG: DecoderHwAccelConfig;
export declare const decoderCapability: {
    readonly name: "decoder";
    readonly scope: "system";
    readonly mode: "singleton";
    readonly methods: {
        readonly supportsCodec: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            codec: z.ZodString;
        }, z.core.$strip>, z.ZodBoolean, import("./capability-definition.js").CapabilityMethodKind>;
        readonly getInfo: import("./capability-definition.js").CapabilityMethodSchema<z.ZodVoid, z.ZodObject<{
            id: z.ZodString;
            name: z.ZodString;
            isPullMode: z.ZodOptional<z.ZodBoolean>;
            priority: z.ZodOptional<z.ZodNumber>;
        }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
        readonly createSession: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            codec: z.ZodString;
            maxFps: z.ZodDefault<z.ZodNumber>;
            outputFormat: z.ZodDefault<z.ZodEnum<{
                jpeg: "jpeg";
                rgb: "rgb";
                bgr: "bgr";
                yuv420: "yuv420";
                gray: "gray";
            }>>;
            scale: z.ZodDefault<z.ZodNumber>;
            width: z.ZodOptional<z.ZodNumber>;
            height: z.ZodOptional<z.ZodNumber>;
            deviceId: z.ZodOptional<z.ZodNumber>;
            tag: z.ZodOptional<z.ZodString>;
        }, z.core.$strip>, z.ZodObject<{
            sessionId: z.ZodString;
            nodeId: z.ZodString;
        }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
        readonly destroySession: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            sessionId: z.ZodString;
        }, z.core.$strip>, z.ZodVoid, import("./capability-definition.js").CapabilityMethodKind>;
        readonly pushPacket: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            sessionId: z.ZodString;
            packet: z.ZodObject<{
                type: z.ZodEnum<{
                    audio: "audio";
                    video: "video";
                }>;
                data: z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>;
                pts: z.ZodNumber;
                dts: z.ZodNumber;
                keyframe: z.ZodBoolean;
                codec: z.ZodString;
            }, z.core.$strip>;
        }, z.core.$strip>, z.ZodVoid, import("./capability-definition.js").CapabilityMethodKind>;
        readonly openStream: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            sessionId: z.ZodString;
            url: z.ZodString;
        }, z.core.$strip>, z.ZodVoid, import("./capability-definition.js").CapabilityMethodKind>;
        readonly pullFrames: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            sessionId: z.ZodString;
            maxCount: z.ZodDefault<z.ZodNumber>;
        }, z.core.$strip>, z.ZodArray<z.ZodObject<{
            data: z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>;
            width: z.ZodNumber;
            height: z.ZodNumber;
            format: z.ZodEnum<{
                jpeg: "jpeg";
                rgb: "rgb";
                bgr: "bgr";
                yuv420: "yuv420";
                gray: "gray";
            }>;
            timestamp: z.ZodNumber;
        }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
        readonly updateConfig: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            sessionId: z.ZodString;
            config: z.ZodObject<{
                codec: z.ZodOptional<z.ZodString>;
                maxFps: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
                outputFormat: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
                    jpeg: "jpeg";
                    rgb: "rgb";
                    bgr: "bgr";
                    yuv420: "yuv420";
                    gray: "gray";
                }>>>;
                scale: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
                width: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
                height: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
                deviceId: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
                tag: z.ZodOptional<z.ZodOptional<z.ZodString>>;
            }, z.core.$strip>;
        }, z.core.$strip>, z.ZodVoid, import("./capability-definition.js").CapabilityMethodKind>;
        readonly getStats: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            sessionId: z.ZodString;
        }, z.core.$strip>, z.ZodObject<{
            inputFps: z.ZodNumber;
            outputFps: z.ZodNumber;
            avgDecodeTimeMs: z.ZodNumber;
            droppedFrames: z.ZodNumber;
        }, z.core.$strip>, import("./capability-definition.js").CapabilityMethodKind>;
        readonly listActiveSessions: import("./capability-definition.js").CapabilityMethodSchema<z.ZodVoid, z.ZodReadonly<z.ZodArray<z.ZodObject<{
            sessionId: z.ZodString;
            codec: z.ZodString;
            outputFormat: z.ZodString;
            createdAtMs: z.ZodNumber;
        }, z.core.$strip>>>, import("./capability-definition.js").CapabilityMethodKind>;
        /**
         * Re-run the host platform-probe for the decoder's hwaccel backend
         * and write the detected value into the addon's own global
         * settings (`probedBestHwaccel`). Replaces the legacy per-agent
         * `pipeline-orchestrator.reprobeAgentHwAccel` — each decoder addon
         * now owns its own probe.
         *
         * Returns the backend the probe picked (`'none'` = software-only
         * host, otherwise one of `HwAccelBackend`). The operator's
         * `hwaccel` setting (auto / none / backend) is not touched; only
         * the `probedBestHwaccel` hint.
         */
        readonly reprobeHwaccel: import("./capability-definition.js").CapabilityMethodSchema<z.ZodVoid, z.ZodObject<{
            backend: z.ZodString;
        }, z.core.$strip>, "mutation">;
    };
};
export type IDecoderCapProvider = InferProvider<typeof decoderCapability>;
/**
 * Pure cap-only view of the decoder provider.
 *
 * For the in-process interface with live `createSession()`, `id`, `name`,
 * `priority`, `isPullMode` fields, consumers should import
 * `IDecoderProvider` from `@camstack/types/interfaces/decoder` — that
 * remains the canonical in-process contract the broker + tests depend
 * on. The live `createSession()` + session object cannot cross process
 * boundaries and will need a session-id based cap API (Phase 4, decoder
 * forkable work) — tracked separately, not in scope for session 5
 * Sprint A.
 *
 * Prior to session 5 this alias used to extend the inferred cap type
 * with the live fields, creating a hybrid interface. No consumer ever
 * referenced `IDecoderProviderV2` — the broker, tests, and addon
 * implementations all imported `IDecoderProvider` directly. The
 * extension was therefore dead code and is removed here.
 */
export { DecoderSessionConfigSchema };
//# sourceMappingURL=decoder.cap.d.ts.map