Skip to content

Commit 7a476b8

Browse files
committed
Add ImageDecoderInit.transfer
1 parent a7ea132 commit 7a476b8

File tree

1 file changed

+37
-22
lines changed

1 file changed

+37
-22
lines changed

index.src.html

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4795,29 +4795,34 @@
47954795

47964796
When invoked, run these steps:
47974797
1. If |init| is not [=valid ImageDecoderInit=], throw a {{TypeError}}.
4798-
2. Let |d| be a new {{ImageDecoder}} object. In the steps below, all
4798+
2. If |init|.{{ImageDecoderInit/transfer}} contains more than one reference
4799+
to the same {{ArrayBuffer}}, then throw a {{DataCloneError}} {{DOMException}}.
4800+
3. For each |transferable| in |init|.{{ImageDecoderInit/transfer}}:
4801+
1. If {{platform object/[[Detached]]}} internal slot is `true`,
4802+
then throw a {{DataCloneError}} {{DOMException}}.
4803+
4. Let |d| be a new {{ImageDecoder}} object. In the steps below, all
47994804
mentions of {{ImageDecoder}} members apply to |d| unless stated
48004805
otherwise.
4801-
3. Assign a new [=queue=] to {{ImageDecoder/[[control message queue]]}}.
4802-
4. Assign `false` to {{ImageDecoder/[[message queue blocked]]}}.
4803-
5. Assign the result of starting a new [=parallel queue=] to
4806+
5. Assign a new [=queue=] to {{ImageDecoder/[[control message queue]]}}.
4807+
6. Assign `false` to {{ImageDecoder/[[message queue blocked]]}}.
4808+
7. Assign the result of starting a new [=parallel queue=] to
48044809
{{ImageDecoder/[[codec work queue]]}}.
4805-
6. Assign {{ImageDecoder/[[ImageTrackList]]}} a new {{ImageTrackList}}
4810+
8. Assign {{ImageDecoder/[[ImageTrackList]]}} a new {{ImageTrackList}}
48064811
initialized as follows:
48074812
1. Assign a new [=list=] to {{ImageTrackList/[[track list]]}}.
48084813
2. Assign `-1` to {{ImageTrackList/[[selected index]]}}.
4809-
7. Assign {{ImageDecoderInit/type}} to {{ImageDecoder/[[type]]}}.
4810-
8. Assign `null` to {{ImageDecoder/[[codec implementation]]}}.
4811-
9. If `init.preferAnimation` [=map/exists=], assign `init.preferAnimation`
4814+
9. Assign {{ImageDecoderInit/type}} to {{ImageDecoder/[[type]]}}.
4815+
10. Assign `null` to {{ImageDecoder/[[codec implementation]]}}.
4816+
11. If `init.preferAnimation` [=map/exists=], assign `init.preferAnimation`
48124817
to the {{ImageDecoder/[[prefer animation]]}} internal slot. Otherwise,
48134818
assign 'null' to {{ImageDecoder/[[prefer animation]]}} internal slot.
4814-
10. Assign a new [=list=] to {{ImageDecoder/[[pending decode promises]]}}.
4815-
11. Assign `-1` to {{ImageDecoder/[[internal selected track index]]}}.
4816-
12. Assign `false` to {{ImageDecoder/[[tracks established]]}}.
4817-
13. Assign `false` to {{ImageDecoder/[[closed]]}}.
4818-
14. Assign a new [=map=] to {{ImageDecoder/[[progressive frame
4819+
12. Assign a new [=list=] to {{ImageDecoder/[[pending decode promises]]}}.
4820+
13. Assign `-1` to {{ImageDecoder/[[internal selected track index]]}}.
4821+
14. Assign `false` to {{ImageDecoder/[[tracks established]]}}.
4822+
15. Assign `false` to {{ImageDecoder/[[closed]]}}.
4823+
16. Assign a new [=map=] to {{ImageDecoder/[[progressive frame
48194824
generations]]}}.
4820-
15. If |init|'s {{ImageDecoderInit/data}} member is of type
4825+
17. If |init|'s {{ImageDecoderInit/data}} member is of type
48214826
{{ReadableStream}}:
48224827
1. Assign a new [=list=] to {{ImageDecoder/[[encoded data]]}}.
48234828
2. Assign `false` to {{ImageDecoder/[[complete]]}}
@@ -4828,16 +4833,25 @@
48284833
{{ImageDecoderInit/data}}.
48294834
6. In parallel, perform the [=Fetch Stream Data Loop=] on |d| with
48304835
|reader|.
4831-
16. Otherwise:
4836+
18. Otherwise:
48324837
1. Assert that `init.data` is of type {{BufferSource}}.
4833-
2. Assign a copy of `init.data` to {{ImageDecoder/[[encoded data]]}}.
4834-
3. Assign `true` to {{ImageDecoder/[[complete]]}}.
4835-
4. Reslove {{ImageDecoder/[[completed promise]]}}.
4836-
5. Queue a control message to [=configure the image decoder=] with
4838+
2. If |init|.{{ImageDecoderInit/transfer}} contains an {{ArrayBuffer}}
4839+
referenced by |init|.{{ImageDecoderInit/data}} the User Agent
4840+
<em class="rfc2119">MAY</em> choose to:
4841+
1. Let {{ImageDecoder/[[encoded data]]}} reference bytes in |data|
4842+
representing an encoded image.
4843+
3. Otherwise:
4844+
1. Assign a copy of `init.data` to {{ImageDecoder/[[encoded data]]}}.
4845+
4. Assign `true` to {{ImageDecoder/[[complete]]}}.
4846+
5. Reslove {{ImageDecoder/[[completed promise]]}}.
4847+
6. Queue a control message to [=configure the image decoder=] with
48374848
|init|.
4838-
6. Queue a control message to [=decode track metadata=].
4839-
7. [=Process the control message queue=].
4840-
17. return |d|.
4849+
7. Queue a control message to [=decode track metadata=].
4850+
8. [=Process the control message queue=].
4851+
19. For each |transferable| in |init|.{{ImageDecoderInit/transfer}}:
4852+
1. Perform [DetachArrayBuffer](https://tc39.es/ecma262/#sec-detacharraybuffer)
4853+
on |transferable|
4854+
20. return |d|.
48414855

48424856
[=Running a control message=] to <dfn>configure the image decoder</dfn>
48434857
means running these steps:
@@ -5263,6 +5277,7 @@
52635277
[EnforceRange] unsigned long desiredWidth;
52645278
[EnforceRange] unsigned long desiredHeight;
52655279
boolean preferAnimation;
5280+
sequence<ArrayBuffer> transfer = [];
52665281
};
52675282
</xmp>
52685283
</pre>

0 commit comments

Comments
 (0)