Wren a web browser where WebAssembly runs everything, JavaScript included

Module webcodecs_image

WebCodecs ImageDecoder (src/page/bindings_image_decoder.odin, native/js/runtime/web_webcodecs_image.c). The decode is native: the host decodes the encoded bytes once with src/images (every frame composed) and wraps each frame as a VideoFrame. The engine holds the ImageDecoder wrapper, builds the ImageDecoderInit dictionary, resolves decode()'s and completed's promises, and exposes the ImageTrackList / ImageTrack. One track (the primary image) is exposed.

Exposed to: Window, Worker. Source: api/webcodecs_image.widl.

Odin: import "wren:webcodecs".

Types

handle ImageDecoder : Object

Checked by the browser on every call (lookup_ImageDecoder).

handle ImageTrackList : Object

Checked by the browser on every call (lookup_ImageTrackList).

handle ImageTrack : Object

Checked by the browser on every call (lookup_ImageTrack).

Functions

ImageDecoder_create

ImageDecoder ImageDecoder_create(bytes data, string mime, bool prefer_animation) raises

new ImageDecoder({data, type, ...}): data is the encoded bytes (a BufferSource; the engine also reads a Blob or a ReadableStream to bytes first), mime the type option. Quota past the image limits / page memory, Type for empty data, Not_Supported when WebCodecs is off.

Raises: returns an Error (see web).

Host: ImageDecoder_create :: proc(c: ^Call, data: []u8, mime: string, prefer_animation: bool) -> (u64, Api_Error)

ImageDecoder_isTypeSupported

bool ImageDecoder_isTypeSupported(string mime)

ImageDecoder.isTypeSupported(type): honest — true only for a format we decode (not SVG).

Host: ImageDecoder_isTypeSupported :: proc(c: ^Call, mime: string) -> bool

ImageDecoder_type

string ImageDecoder_type(ImageDecoder decoder)

decoder.type.

Host: ImageDecoder_type :: proc(c: ^Call, decoder: Api_ImageDecoder) -> string

ImageDecoder_complete

bool ImageDecoder_complete(ImageDecoder decoder)

decoder.complete: the bytes are all available (always true for a BufferSource / Blob).

Host: ImageDecoder_complete :: proc(c: ^Call, decoder: Api_ImageDecoder) -> bool

ImageDecoder_frameCount

u32 ImageDecoder_frameCount(ImageDecoder decoder)

The decoded frame count (0 before a successful decode).

Host: ImageDecoder_frameCount :: proc(c: ^Call, decoder: Api_ImageDecoder) -> u32

ImageDecoder_decode

VideoFrame ImageDecoder_decode(ImageDecoder decoder, u32 frame_index) raises

decoder.decode({frameIndex}): the frame wrapped as a VideoFrame (the engine wraps it in the ImageDecodeResult and the promise). Range when frameIndex is past the frame count, Encoding when the image cannot be decoded, Invalid_State when the decoder is closed.

Raises: returns an Error (see web).

Host: ImageDecoder_decode :: proc(c: ^Call, decoder: Api_ImageDecoder, frame_index: u32) -> (u64, Api_Error)

ImageDecoder_reset

void ImageDecoder_reset(ImageDecoder decoder)

decoder.reset() / close().

Host: ImageDecoder_reset :: proc(c: ^Call, decoder: Api_ImageDecoder)

ImageDecoder_close

void ImageDecoder_close(ImageDecoder decoder)

Host: ImageDecoder_close :: proc(c: ^Call, decoder: Api_ImageDecoder)

ImageDecoder_tracks

ImageTrackList ImageDecoder_tracks(ImageDecoder decoder)

decoder.tracks: the ImageTrackList (made on first access).

Host: ImageDecoder_tracks :: proc(c: ^Call, decoder: Api_ImageDecoder) -> u64

ImageTrackList_length

u32 ImageTrackList_length(ImageTrackList list)

Host: ImageTrackList_length :: proc(c: ^Call, list: Api_ImageTrackList) -> u32

ImageTrackList_item

ImageTrack ImageTrackList_item(ImageTrackList list, u32 index) raises

list[index]: Not_Found past the end (one track).

Raises: returns an Error (see web).

Host: ImageTrackList_item :: proc(c: ^Call, list: Api_ImageTrackList, index: u32) -> (u64, Api_Error)

ImageTrackList_selectedIndex

i32 ImageTrackList_selectedIndex(ImageTrackList list)

list.selectedIndex: -1 when none / not decoded yet.

Host: ImageTrackList_selectedIndex :: proc(c: ^Call, list: Api_ImageTrackList) -> i32

ImageTrack_animated

bool ImageTrack_animated(ImageTrack track)

Host: ImageTrack_animated :: proc(c: ^Call, track: Api_ImageTrack) -> bool

ImageTrack_frameCount

u32 ImageTrack_frameCount(ImageTrack track)

Host: ImageTrack_frameCount :: proc(c: ^Call, track: Api_ImageTrack) -> u32

ImageTrack_repetitionCount

i32 ImageTrack_repetitionCount(ImageTrack track)

track.repetitionCount: 0 play once, -1 the engine maps to Infinity (loops forever), else the repeat count.

Host: ImageTrack_repetitionCount :: proc(c: ^Call, track: Api_ImageTrack) -> i32

ImageTrack_selected

bool ImageTrack_selected(ImageTrack track)

Host: ImageTrack_selected :: proc(c: ^Call, track: Api_ImageTrack) -> bool

Edit this page on GitHub