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) raisesnew 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) raisesdecoder.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) raiseslist[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