Skip to content

Commit 249e328

Browse files
authored
Merge pull request #696 from Djuffin/id
Add ImageDecoderInit.transfer
2 parents a86fb92 + 4b6dac0 commit 249e328

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
@@ -4810,29 +4810,34 @@
48104810

48114811
When invoked, run these steps:
48124812
1. If |init| is not [=valid ImageDecoderInit=], throw a {{TypeError}}.
4813-
2. Let |d| be a new {{ImageDecoder}} object. In the steps below, all
4813+
2. If |init|.{{ImageDecoderInit/transfer}} contains more than one reference
4814+
to the same {{ArrayBuffer}}, then throw a {{DataCloneError}} {{DOMException}}.
4815+
3. For each |transferable| in |init|.{{ImageDecoderInit/transfer}}:
4816+
1. If {{platform object/[[Detached]]}} internal slot is `true`,
4817+
then throw a {{DataCloneError}} {{DOMException}}.
4818+
4. Let |d| be a new {{ImageDecoder}} object. In the steps below, all
48144819
mentions of {{ImageDecoder}} members apply to |d| unless stated
48154820
otherwise.
4816-
3. Assign a new [=queue=] to {{ImageDecoder/[[control message queue]]}}.
4817-
4. Assign `false` to {{ImageDecoder/[[message queue blocked]]}}.
4818-
5. Assign the result of starting a new [=parallel queue=] to
4821+
5. Assign a new [=queue=] to {{ImageDecoder/[[control message queue]]}}.
4822+
6. Assign `false` to {{ImageDecoder/[[message queue blocked]]}}.
4823+
7. Assign the result of starting a new [=parallel queue=] to
48194824
{{ImageDecoder/[[codec work queue]]}}.
4820-
6. Assign {{ImageDecoder/[[ImageTrackList]]}} a new {{ImageTrackList}}
4825+
8. Assign {{ImageDecoder/[[ImageTrackList]]}} a new {{ImageTrackList}}
48214826
initialized as follows:
48224827
1. Assign a new [=list=] to {{ImageTrackList/[[track list]]}}.
48234828
2. Assign `-1` to {{ImageTrackList/[[selected index]]}}.
4824-
7. Assign {{ImageDecoderInit/type}} to {{ImageDecoder/[[type]]}}.
4825-
8. Assign `null` to {{ImageDecoder/[[codec implementation]]}}.
4826-
9. If `init.preferAnimation` [=map/exists=], assign `init.preferAnimation`
4829+
9. Assign {{ImageDecoderInit/type}} to {{ImageDecoder/[[type]]}}.
4830+
10. Assign `null` to {{ImageDecoder/[[codec implementation]]}}.
4831+
11. If `init.preferAnimation` [=map/exists=], assign `init.preferAnimation`
48274832
to the {{ImageDecoder/[[prefer animation]]}} internal slot. Otherwise,
48284833
assign 'null' to {{ImageDecoder/[[prefer animation]]}} internal slot.
4829-
10. Assign a new [=list=] to {{ImageDecoder/[[pending decode promises]]}}.
4830-
11. Assign `-1` to {{ImageDecoder/[[internal selected track index]]}}.
4831-
12. Assign `false` to {{ImageDecoder/[[tracks established]]}}.
4832-
13. Assign `false` to {{ImageDecoder/[[closed]]}}.
4833-
14. Assign a new [=map=] to {{ImageDecoder/[[progressive frame
4834+
12. Assign a new [=list=] to {{ImageDecoder/[[pending decode promises]]}}.
4835+
13. Assign `-1` to {{ImageDecoder/[[internal selected track index]]}}.
4836+
14. Assign `false` to {{ImageDecoder/[[tracks established]]}}.
4837+
15. Assign `false` to {{ImageDecoder/[[closed]]}}.
4838+
16. Assign a new [=map=] to {{ImageDecoder/[[progressive frame
48344839
generations]]}}.
4835-
15. If |init|'s {{ImageDecoderInit/data}} member is of type
4840+
17. If |init|'s {{ImageDecoderInit/data}} member is of type
48364841
{{ReadableStream}}:
48374842
1. Assign a new [=list=] to {{ImageDecoder/[[encoded data]]}}.
48384843
2. Assign `false` to {{ImageDecoder/[[complete]]}}
@@ -4843,16 +4848,25 @@
48434848
{{ImageDecoderInit/data}}.
48444849
6. In parallel, perform the [=Fetch Stream Data Loop=] on |d| with
48454850
|reader|.
4846-
16. Otherwise:
4851+
18. Otherwise:
48474852
1. Assert that `init.data` is of type {{BufferSource}}.
4848-
2. Assign a copy of `init.data` to {{ImageDecoder/[[encoded data]]}}.
4849-
3. Assign `true` to {{ImageDecoder/[[complete]]}}.
4850-
4. Reslove {{ImageDecoder/[[completed promise]]}}.
4851-
5. Queue a control message to [=configure the image decoder=] with
4853+
2. If |init|.{{ImageDecoderInit/transfer}} contains an {{ArrayBuffer}}
4854+
referenced by |init|.{{ImageDecoderInit/data}} the User Agent
4855+
<em class="rfc2119">MAY</em> choose to:
4856+
1. Let {{ImageDecoder/[[encoded data]]}} reference bytes in |data|
4857+
representing an encoded image.
4858+
3. Otherwise:
4859+
1. Assign a copy of `init.data` to {{ImageDecoder/[[encoded data]]}}.
4860+
4. Assign `true` to {{ImageDecoder/[[complete]]}}.
4861+
5. Resolve {{ImageDecoder/[[completed promise]]}}.
4862+
6. Queue a control message to [=configure the image decoder=] with
48524863
|init|.
4853-
6. Queue a control message to [=decode track metadata=].
4854-
7. [=Process the control message queue=].
4855-
17. return |d|.
4864+
7. Queue a control message to [=decode track metadata=].
4865+
8. [=Process the control message queue=].
4866+
19. For each |transferable| in |init|.{{ImageDecoderInit/transfer}}:
4867+
1. Perform [DetachArrayBuffer](https://tc39.es/ecma262/#sec-detacharraybuffer)
4868+
on |transferable|
4869+
20. return |d|.
48564870

48574871
[=Running a control message=] to <dfn>configure the image decoder</dfn>
48584872
means running these steps:
@@ -5278,6 +5292,7 @@
52785292
[EnforceRange] unsigned long desiredWidth;
52795293
[EnforceRange] unsigned long desiredHeight;
52805294
boolean preferAnimation;
5295+
sequence<ArrayBuffer> transfer = [];
52815296
};
52825297
</xmp>
52835298
</pre>

0 commit comments

Comments
 (0)