import { BoolDecoder } from './bool-decoder'; import type { VP8FrameHeader } from '../types'; export declare function parseVP8Header(data: Uint8Array): ParsedVP8Header; /** * VP8 keyframe header parser — 1:1 port of libwebp's `VP8GetHeaders`, * `ParseSegmentHeader`, `ParseFilterHeader`, `ParsePartitions`, * `VP8ParseQuant`, and `VP8ParseProba` (src/dec/vp8_dec.c §9 + §13.5). * * Field order for a keyframe: * * 1. Frame tag (3 bytes uncompressed): keyframe?, profile, * show_frame?, partition_length. * 2. Start code (3 bytes uncompressed): 0x9D 0x01 0x2A. * 3. Width/height + scales (4 bytes uncompressed). * 4. Bool-coded first partition begins: * a. color_space (1 bit) * b. clamp_type (1 bit) * c. Segment header (variable) * d. Filter header (variable, includes simple/level/sharpness/lf-delta) * e. Partition table (2 bits log2_nparts + size headers if >1) * f. Quantiser (7 bits + 5 deltas) * g. update_proba bit (consumed and ignored on keyframes) * h. Coefficient-probability update loop (4×8×3×11 entries) * i. mb_no_skip_coef (1 bit) + prob_skip_false (8 bits if set) * * After this, mode info begins on the same first-partition bool decoder * (one MB at a time, `VP8ParseIntraModeRow`). */ /** A single segment's quant/filter override. */ export declare interface VP8Segment { quantiser: number filterStrength: number } export declare interface VP8SegmentHeader { useSegment: boolean updateMap: boolean absoluteDelta: boolean segments: VP8Segment[] segmentTreeProbs: Uint8Array } export declare interface VP8FilterHeader { simple: boolean level: number sharpness: number useLfDelta: boolean refLfDelta: Int8Array modeLfDelta: Int8Array filterType: 0 | 1 | 2 } /** Per-segment dequantisation matrices, populated by `VP8ParseQuant`. */ export declare interface VP8QuantMatrix { y1: [number, number] y2: [number, number] uv: [number, number] uvQuant: number } export declare interface ParsedVP8Header { frame: VP8FrameHeader numPartitions: number partitionsOffset: number colorSpace: number clampType: number segmentation: VP8SegmentHeader filter: VP8FilterHeader quant: VP8QuantMatrix[] bool: BoolDecoder probSkipFalse: number | null coefProbs: Uint8Array }