diff --git a/index.src.html b/index.src.html index bc949bb8..6b68d0d9 100644 --- a/index.src.html +++ b/index.src.html @@ -4795,29 +4795,34 @@ When invoked, run these steps: 1. If |init| is not [=valid ImageDecoderInit=], throw a {{TypeError}}. - 2. Let |d| be a new {{ImageDecoder}} object. In the steps below, all + 2. If |init|.{{ImageDecoderInit/transfer}} contains more than one reference + to the same {{ArrayBuffer}}, then throw a {{DataCloneError}} {{DOMException}}. + 3. For each |transferable| in |init|.{{ImageDecoderInit/transfer}}: + 1. If {{platform object/[[Detached]]}} internal slot is `true`, + then throw a {{DataCloneError}} {{DOMException}}. + 4. Let |d| be a new {{ImageDecoder}} object. In the steps below, all mentions of {{ImageDecoder}} members apply to |d| unless stated otherwise. - 3. Assign a new [=queue=] to {{ImageDecoder/[[control message queue]]}}. - 4. Assign `false` to {{ImageDecoder/[[message queue blocked]]}}. - 5. Assign the result of starting a new [=parallel queue=] to + 5. Assign a new [=queue=] to {{ImageDecoder/[[control message queue]]}}. + 6. Assign `false` to {{ImageDecoder/[[message queue blocked]]}}. + 7. Assign the result of starting a new [=parallel queue=] to {{ImageDecoder/[[codec work queue]]}}. - 6. Assign {{ImageDecoder/[[ImageTrackList]]}} a new {{ImageTrackList}} + 8. Assign {{ImageDecoder/[[ImageTrackList]]}} a new {{ImageTrackList}} initialized as follows: 1. Assign a new [=list=] to {{ImageTrackList/[[track list]]}}. 2. Assign `-1` to {{ImageTrackList/[[selected index]]}}. - 7. Assign {{ImageDecoderInit/type}} to {{ImageDecoder/[[type]]}}. - 8. Assign `null` to {{ImageDecoder/[[codec implementation]]}}. - 9. If `init.preferAnimation` [=map/exists=], assign `init.preferAnimation` + 9. Assign {{ImageDecoderInit/type}} to {{ImageDecoder/[[type]]}}. + 10. Assign `null` to {{ImageDecoder/[[codec implementation]]}}. + 11. If `init.preferAnimation` [=map/exists=], assign `init.preferAnimation` to the {{ImageDecoder/[[prefer animation]]}} internal slot. Otherwise, assign 'null' to {{ImageDecoder/[[prefer animation]]}} internal slot. - 10. Assign a new [=list=] to {{ImageDecoder/[[pending decode promises]]}}. - 11. Assign `-1` to {{ImageDecoder/[[internal selected track index]]}}. - 12. Assign `false` to {{ImageDecoder/[[tracks established]]}}. - 13. Assign `false` to {{ImageDecoder/[[closed]]}}. - 14. Assign a new [=map=] to {{ImageDecoder/[[progressive frame + 12. Assign a new [=list=] to {{ImageDecoder/[[pending decode promises]]}}. + 13. Assign `-1` to {{ImageDecoder/[[internal selected track index]]}}. + 14. Assign `false` to {{ImageDecoder/[[tracks established]]}}. + 15. Assign `false` to {{ImageDecoder/[[closed]]}}. + 16. Assign a new [=map=] to {{ImageDecoder/[[progressive frame generations]]}}. - 15. If |init|'s {{ImageDecoderInit/data}} member is of type + 17. If |init|'s {{ImageDecoderInit/data}} member is of type {{ReadableStream}}: 1. Assign a new [=list=] to {{ImageDecoder/[[encoded data]]}}. 2. Assign `false` to {{ImageDecoder/[[complete]]}} @@ -4828,16 +4833,25 @@ {{ImageDecoderInit/data}}. 6. In parallel, perform the [=Fetch Stream Data Loop=] on |d| with |reader|. - 16. Otherwise: + 18. Otherwise: 1. Assert that `init.data` is of type {{BufferSource}}. - 2. Assign a copy of `init.data` to {{ImageDecoder/[[encoded data]]}}. - 3. Assign `true` to {{ImageDecoder/[[complete]]}}. - 4. Reslove {{ImageDecoder/[[completed promise]]}}. - 5. Queue a control message to [=configure the image decoder=] with + 2. If |init|.{{ImageDecoderInit/transfer}} contains an {{ArrayBuffer}} + referenced by |init|.{{ImageDecoderInit/data}} the User Agent + MAY choose to: + 1. Let {{ImageDecoder/[[encoded data]]}} reference bytes in |data| + representing an encoded image. + 3. Otherwise: + 1. Assign a copy of `init.data` to {{ImageDecoder/[[encoded data]]}}. + 4. Assign `true` to {{ImageDecoder/[[complete]]}}. + 5. Resolve {{ImageDecoder/[[completed promise]]}}. + 6. Queue a control message to [=configure the image decoder=] with |init|. - 6. Queue a control message to [=decode track metadata=]. - 7. [=Process the control message queue=]. - 17. return |d|. + 7. Queue a control message to [=decode track metadata=]. + 8. [=Process the control message queue=]. + 19. For each |transferable| in |init|.{{ImageDecoderInit/transfer}}: + 1. Perform [DetachArrayBuffer](https://tc39.es/ecma262/#sec-detacharraybuffer) + on |transferable| + 20. return |d|. [=Running a control message=] to configure the image decoder means running these steps: @@ -5263,6 +5277,7 @@ [EnforceRange] unsigned long desiredWidth; [EnforceRange] unsigned long desiredHeight; boolean preferAnimation; + sequence transfer = []; };