/*!
 * Copyright (c) 2026-present, Vanilagy and contributors
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at https://mozilla.org/MPL/2.0/.
 */
import { Demuxer } from '../demuxer.js';
import { Input } from '../input.js';
import { InputAudioTrackBacking } from '../input-track.js';
import { PacketRetrievalOptions } from '../media-sink.js';
import { MetadataTags, TrackDisposition } from '../metadata.js';
import { AsyncMutex } from '../misc.js';
import { EncodedPacket } from '../packet.js';
import { Reader } from '../reader.js';
import { OggCodecInfo } from './ogg-misc.js';
import { Page } from './ogg-reader.js';
type LogicalBitstream = {
    serialNumber: number;
    bosPage: Page;
    description: Uint8Array | null;
    numberOfChannels: number;
    sampleRate: number;
    codecInfo: OggCodecInfo;
    lastMetadataPacket: Packet | null;
};
type Packet = {
    data: Uint8Array;
    endPage: Page;
    endSegmentIndex: number;
};
export declare class OggDemuxer extends Demuxer {
    reader: Reader;
    metadataPromise: Promise<void> | null;
    bitstreams: LogicalBitstream[];
    trackBackings: OggAudioTrackBacking[];
    metadataTags: MetadataTags;
    constructor(input: Input);
    readMetadata(): Promise<void>;
    readVorbisMetadata(firstPacket: Packet, bitstream: LogicalBitstream): Promise<void>;
    readOpusMetadata(firstPacket: Packet, bitstream: LogicalBitstream): Promise<void>;
    readPacket(startPage: Page, startSegmentIndex: number): Promise<Packet | null>;
    findNextPacketStart(lastPacket: Packet): Promise<{
        startPage: Page;
        startSegmentIndex: number;
    } | null>;
    getMimeType(): Promise<string>;
    getTrackBackings(): Promise<OggAudioTrackBacking[]>;
    getMetadataTags(): Promise<MetadataTags>;
}
type EncodedPacketMetadata = {
    packet: Packet;
    timestampInSamples: number;
    durationInSamples: number;
    vorbisLastBlockSize: number | null;
    vorbisBlockSize: number | null;
};
declare class OggAudioTrackBacking implements InputAudioTrackBacking {
    bitstream: LogicalBitstream;
    demuxer: OggDemuxer;
    internalSampleRate: number;
    encodedPacketToMetadata: WeakMap<EncodedPacket, EncodedPacketMetadata>;
    sequentialScanCache: EncodedPacketMetadata[];
    sequentialScanMutex: AsyncMutex;
    constructor(bitstream: LogicalBitstream, demuxer: OggDemuxer);
    getType(): "audio";
    getId(): number;
    getNumber(): number;
    getNumberOfChannels(): number;
    getSampleRate(): number;
    getTimeResolution(): number;
    isRelativeToUnixEpoch(): boolean;
    getPairingMask(): bigint;
    getBitrate(): null;
    getAverageBitrate(): null;
    getDurationFromMetadata(): Promise<null>;
    getLiveRefreshInterval(): Promise<null>;
    getCodec(): "vorbis" | "opus" | null;
    getInternalCodecId(): null;
    getDecoderConfig(): Promise<AudioDecoderConfig | null>;
    getName(): null;
    getLanguageCode(): string;
    getDisposition(): TrackDisposition;
    granulePositionToTimestampInSamples(granulePosition: number): number;
    createEncodedPacketFromOggPacket(packet: Packet | null, additional: {
        timestampInSamples: number;
        vorbisLastBlocksize: number | null;
    }, options: PacketRetrievalOptions): EncodedPacket | null;
    getFirstPacket(options: PacketRetrievalOptions): Promise<EncodedPacket | null>;
    getNextPacket(prevPacket: EncodedPacket, options: PacketRetrievalOptions): Promise<EncodedPacket | null>;
    getPacket(timestamp: number, options: PacketRetrievalOptions): Promise<EncodedPacket | null>;
    getPacketSequential(timestamp: number, options: PacketRetrievalOptions): Promise<EncodedPacket | null>;
    getKeyPacket(timestamp: number, options: PacketRetrievalOptions): Promise<EncodedPacket | null>;
    getNextKeyPacket(packet: EncodedPacket, options: PacketRetrievalOptions): Promise<EncodedPacket | null>;
}
export {};
//# sourceMappingURL=ogg-demuxer.d.ts.map