ImageDecoder: decode() method
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Note: This feature is available in Dedicated Web Workers.
The decode() method of the ImageDecoder interface enqueues a control message to decode the frame of an image.
Syntax
decode()
decode(options)
Parameters
optionsOptional-
An object containing the following members:
frameIndexOptional-
An integer representing the index of the frame to decode. Defaults to
0(the first frame). completeFramesOnlyOptional-
A
booleandefaulting totrue. Whentrue, thePromisereturned by the method resolves only when the image is fully decoded. Whenfalse, the method will return a newPromisethat may resolve with a partially decoded image. The method can be called repeatedly untilresult.completeis true, with each step providing an image with the next available level of detail.
Return value
A promise that resolves with an object containing the following members:
image-
A
VideoFramecontaining the decoded image. complete-
A
boolean, iftrueindicates thatimagecontains the final full-detail output.
Exceptions
If an error occurs, the promise will resolve with following exception:
InvalidStateErrorDOMException-
Returned if any of the following conditions apply:
closeis true, meaningclose()has already been called.- The requested frame does not exist.
Examples
>Synchronous decoding of a completed image frame
The following example decodes the second frame (at index 1) and prints the resulting VideoFrame to the console.
let result = await imageDecoder.decode({ frameIndex: 1 });
console.log(result.image);
Partial decoding of a progressive image frame
The following example decodes the first frame repeatedly until its complete:
let complete = false;
while (!complete) {
// The promise returned by `decode()` will only resolve when a new
// level of detail is available or the frame is complete. I.e.,
// calling `decode()` in a loop like this won't needlessly spin.
let result = await imageDecoder.decode({ completeFramesOnly: false });
// Do something with `result.image`.
complete = result.complete;
}
Specifications
| Specification |
|---|
| WebCodecs> # dom-imagedecoder-decode> |