Re: Proposed reply to WHATWG comments re: Float16Array + HTML Canvas

Reply posted at:

https://github.com/whatwg/html/issues/8708#issuecomment-1431592503

On Tue, Feb 14, 2023 at 2:00 AM Christopher Cameron <ccameron@google.com> wrote:
>
> RE changing to Uint8ClampedArray instead of Float32Array by default: I view this as fixing a bug in the proposal. Changing the type that is returned by a call sets up naive users of the API for A Bad Time in many ways.
>
> On Tue, Feb 14, 2023 at 1:24 AM Lars Borg <borg@adobe.com> wrote:
>>
>> In today's call there was a Q:
>> Q: Can float16 represent unsigned integers (such as video signals) accurately up to bit depth N?
>> A: Float16 can represent unsigned integers accurately up to bit depth 11, or 2047.
>>
>> Details:
>> In float16 the mantissa field is 10 bits long. The most significant mantissa bit is implied, not stored, and set to 1. The largest mantissa is thus x7FF = 2047 = 11 bits.
>>  A 12bit unsigned integer signal stored as float16 would lose the LSB for 1023 values in range x801 to xFFF, while values up to x800 would be stored losslessly.
>> This holds true whether the integer values are scaled to float with a divisor of 1, 2,... 2^N, or 2^N-1.
>> If the divisor is 2^N-1, the value must be rounded or truncated when converting back to integer.
>>
>> Lars
>>
>> -----Original Message-----
>> From: Pierre Lemieux <pal@sandflow.com <mailto:pal@sandflow.com>>
>> Date: Monday, February 13, 2023 at 1:16 PM
>> To: "public-colorweb@w3.org <mailto:public-colorweb@w3.org>" <public-colorweb@w3.org <mailto:public-colorweb@w3.org>>
>> Cc: Chris Needham <chris.needham@bbc.co.uk <mailto:chris.needham@bbc.co.uk>>, Christopher Cameron <ccameron@google.com <mailto:ccameron@google.com>>
>> Subject: Proposed reply to WHATWG comments re: Float16Array + HTML Canvas
>> Resent-From: <public-colorweb@w3.org <mailto:public-colorweb@w3.org>>
>> Resent-Date: Monday, February 13, 2023 at 1:16 PM
>>
>>
>> EXTERNAL: Use caution when clicking on links or opening attachments.
>>
>>
>>
>>
>> Good morning/evening,
>>
>>
>> Per our earlier call, below is the proposed response to the WHATWG
>> feedback, which I plan to post by 2023-02-14 COB unless objections are
>> raised.
>>
>>
>> Best,
>>
>>
>> -- Pierre
>>
>>
>> """
>> Can you confirm that the concern is with selecting Float32Array as the
>> default readback type? If so, we are considering using
>> Uint8ClampedArray as the default readback type instead, opening the
>> door for Float16Array and other types to be offered down the line.
>>
>>
>> We are also happy to support the Float16Array proposal in TC 39. Let
>> us know how to best coordinate the effort/proceed.
>>
>>
>> In the meantime, are there objections to supporting Float32Array as
>> one of the (non-default) readback types, while the Float16Array
>> proposal makes its way through the TC 39 process?
>> """
>>
>>
>>
>>
>>
>>
>> On Mon, Feb 13, 2023 at 12:28 PM Christopher Cameron
>> <ccameron@google.com <mailto:ccameron@google.com>> wrote:
>> >
>> > Alternative proposal: Make the default readback format always be Uint8ClampedArray.
>> >
>> > For color space, we had the default readback color space match the canvas' color space.
>> >
>> > The plus side that a naive getImageData-then-putImageData doesn't lose data.
>> > The minus side is that a naive application may assume all ImageDatas are sRGB, and get slightly-incorrect results.
>> >
>> > For the type, I think there's a strong case for Uint8ClampedArray being the universal default.
>> >
>> > The plus side is that a naive getImageData+putImageData doesn't lose data.
>> > The minus side is that a naive application will assume all ImageDatas are Uint8ClampedArray and just crash (or worse) when given data that floating point.
>> >
>> > The guiding principle is "make naive use of non-default canvases work reasonably". To think of it, defaulting to Float16Array is pretty dangerous, and breaks this principle.
>> >
>> > On Wed, Feb 8, 2023 at 10:08 PM Chris Needham <chris.needham@bbc.co.uk <mailto:chris.needham@bbc.co.uk>> wrote:
>> >>
>> >> Hi Pierre,
>> >>
>> >> > Is there a concrete timeline for Float16Array, which would cause the Color CG to revisit its recommendations?
>> >>
>> >> Can we answer this question rather than ask Anne?
>> >
>> >
>> > In some emails, someone said "maybe a year". So creating a dependency on Float16Array puts this project on ice for a year. And that's only if multiple browsers decide that float16 is worth staffing immediately (very unlikely).
>> >
>> > Of note is that WebGL and WebGPU can create floating point canvases today (well, almost today, for WebGL), and so it will be acceptable to leave this feature out of reach to "simpler" applications that use 2D canvas.
>> >
>> >
>> >>
>> >> Can we progress Float16Array within TC39? It's currently a stage 1 proposal: https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Ftc39%2Fproposals%2Fblob%2Fmain%2Fstage-1-proposals.md&data=05%7C01%7Cborg%40adobe.com%7C1ad998daefba43f9858a08db0e184a68%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C638119269715896653%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=NPqBbKS3BPkcUSoVfHfUG3qH%2BLLeHozVrSLZeISnF6Y%3D&reserved=0 <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Ftc39%2Fproposals%2Fblob%2Fmain%2Fstage-1-proposals.md&amp;data=05%7C01%7Cborg%40adobe.com%7C1ad998daefba43f9858a08db0e184a68%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C638119269715896653%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&amp;sdata=NPqBbKS3BPkcUSoVfHfUG3qH%2BLLeHozVrSLZeISnF6Y%3D&amp;reserved=0>
>> >>
>> >> See https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Ftc39.es%2Fprocess-document%2F&data=05%7C01%7Cborg%40adobe.com%7C1ad998daefba43f9858a08db0e184a68%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C638119269715896653%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=cO%2Bl9ZNMZQjQ604sd3TUwLgIZppehqnaxAQVPRvqPkI%3D&reserved=0 <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Ftc39.es%2Fprocess-document%2F&amp;data=05%7C01%7Cborg%40adobe.com%7C1ad998daefba43f9858a08db0e184a68%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C638119269715896653%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&amp;sdata=cO%2Bl9ZNMZQjQ604sd3TUwLgIZppehqnaxAQVPRvqPkI%3D&amp;reserved=0> for description of their process stages.
>> >>
>> >> Here's the last discussion in TC39, from 2017:
>> >>
>> >> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Ftc39%2Fnotes%2Fblob%2FHEAD%2Fmeetings%2F2017-05%2Fmay-23.md%2316ig-float16-on-typedarrays-dataview-mathhfround-for-stage-1&data=05%7C01%7Cborg%40adobe.com%7C1ad998daefba43f9858a08db0e184a68%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C638119269715896653%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=ZjJXIXO4oJNDwg57AJPpmbiZuPh8est%2Fix%2Bc9AvGoyM%3D&reserved=0 <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Ftc39%2Fnotes%2Fblob%2FHEAD%2Fmeetings%2F2017-05%2Fmay-23.md%2316ig-float16-on-typedarrays-dataview-mathhfround-for-stage-1&amp;data=05%7C01%7Cborg%40adobe.com%7C1ad998daefba43f9858a08db0e184a68%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C638119269715896653%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&amp;sdata=ZjJXIXO4oJNDwg57AJPpmbiZuPh8est%2Fix%2Bc9AvGoyM%3D&amp;reserved=0>
>> >>
>> >> and discission prior to that: https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fesdiscuss.org%2Ftopic%2Ffloat16array&data=05%7C01%7Cborg%40adobe.com%7C1ad998daefba43f9858a08db0e184a68%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C638119269715896653%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=uxJP5MclogKptNG4rLYdvhrF5RWpSuKjGyZAQF8p8zA%3D&reserved=0 <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fesdiscuss.org%2Ftopic%2Ffloat16array&amp;data=05%7C01%7Cborg%40adobe.com%7C1ad998daefba43f9858a08db0e184a68%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C638119269715896653%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&amp;sdata=uxJP5MclogKptNG4rLYdvhrF5RWpSuKjGyZAQF8p8zA%3D&amp;reserved=0>
>> >>
>> >> There were open questions, can we help answer them to move the proposal forward?
>> >>
>> >> Thanks,
>> >>
>> >> Chris
>> >>
>> >> -----Original Message-----
>> >> From: Pierre-Anthony Lemieux <pal@sandflow.com <mailto:pal@sandflow.com>>
>> >> Sent: 08 February 2023 18:59
>> >> To: public-colorweb@w3.org <mailto:public-colorweb@w3.org>
>> >> Subject: WHATWG comments re: Float16Array + HTML Canvas
>> >>
>> >> Good morning/evening,
>> >>
>> >> FYI. See the comment at [1].
>> >>
>> >> [1] https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fwhatwg%2Fhtml%2Fissues%2F8708%23issuecomment-1423026968&data=05%7C01%7Cborg%40adobe.com%7C1ad998daefba43f9858a08db0e184a68%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C638119269716052885%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=e9RJQV0LSpydxks9jCbge08HuieApEC9Kyd%2FSIlAm8I%3D&reserved=0 <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fwhatwg%2Fhtml%2Fissues%2F8708%23issuecomment-1423026968&amp;data=05%7C01%7Cborg%40adobe.com%7C1ad998daefba43f9858a08db0e184a68%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C638119269716052885%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&amp;sdata=e9RJQV0LSpydxks9jCbge08HuieApEC9Kyd%2FSIlAm8I%3D&amp;reserved=0>
>> >>
>> >> I suggest we reply.
>> >>
>> >> Below is a first pass at such a reply:
>> >>
>> >> """
>> >> - the objective is to achieve bit depth greater than 8 bit in Canvas, which is needed for native HDR imagery, among other things. This is needed today.
>> >>
>> >> - the suggestion to add support today for Float32Array today was with the understanding that support for Float16Array could not be added today because it required a change in JS
>> >>
>> >> Is there a concrete timeline for Float16Array, which would cause the Color CG to revisit its recommendations?
>> >> """
>> >>
>> >> Please provide feedback by Monday COB.
>> >>
>> >> Best,
>> >>
>> >> -- Pierre
>> >>
>>
>>
>>
>>

Received on Wednesday, 15 February 2023 15:56:12 UTC