W3C home > Mailing lists > Public > public-audio@w3.org > October to December 2012

Re: Mutability of the decodeAudioData argument

From: Chris Rogers <crogers@google.com>
Date: Sun, 25 Nov 2012 20:52:45 -0800
Message-ID: <CA+EzO0=sYD_Dh06m_mHmfHC6VDr1ow5gHPXts3fkqgjkkp1pqA@mail.gmail.com>
To: robert@ocallahan.org
Cc: Ehsan Akhgari <ehsan.akhgari@gmail.com>, public-audio@w3.org
On Thu, Nov 22, 2012 at 2:37 PM, Robert O'Callahan <robert@ocallahan.org>wrote:

> On Tue, Nov 20, 2012 at 2:43 PM, Chris Rogers <crogers@google.com> wrote:
>> On Mon, Nov 19, 2012 at 5:10 PM, Ehsan Akhgari <ehsan.akhgari@gmail.com>wrote:
>>> Continuing from the discussion that roc started about the mutability of
>>> AudioBuffers, we also need to specify what should happen if the author
>>> tries to modify the ArrayBuffer argument of decodeAudioData.  If we want to
>>> allow mutability, then the implementation either has to copy the buffer
>>> eagerly or apply some kind of a copy on write mechanism on top of it, both
>>> of which can be expensive for big buffers.
>>> Another approach which might make sense would be to neuter the
>>> ArrayBuffer so that the author cannot access the contents of the
>>> ArrayBuffer after starting a decode operation.
>>  I assume you mean neuter the buffer to be read-only, since writing to
>> the ArrayBuffer in the main JS thread *while* the decoding is currently
>> underway is what we're worried about?
> "Neutering the buffer to be read-only" isn't currently defined or
> implemented anywhere, though.
> Instead of messing around with neutering, I also think that an
>> implementation can simply make a temporary copy during the time it's
>> decoding the data.  It can then release this copy of the undecoded data as
>> soon as the decoding process has finished.  This way the memory-hit is
>> temporary and is typically for a very short period of time.
> Don't you want to avoid having to copy the data?

First of all we need to determine if it's even necessary to worry about
potential raciness with modifying the ArrayBuffer *while* it's being
decoded.  At worst, I think it basically amounts to the JS code corrupting
the data so that it would simply result in a decoding error.  This is not
that much different from some JS code writing random bytes into the
ArrayBuffer before the decode operation is started.  In either case, it's a
pretty strange thing to do and a developer shouldn't be surprised if that
results in a decoding error.

> Is there a problem with neutering the buffer?

If it were neutered, I'm foreseeing problems where developers keep the
ArrayBuffer of undecoded audio data around and call decodeAudioData() a
second time and it would fail.  It seems like there would be legitimate
cases where it would be desirable to be able to re-decode if the originally
decoded AudioBuffer is no longer available, has been garbage collected, etc.

> Rob
> --
> Jesus called them together and said, “You know that the rulers of the
> Gentiles lord it over them, and their high officials exercise authority
> over them. Not so with you. Instead, whoever wants to become great among
> you must be your servant, and whoever wants to be first must be your
> slave — just as the Son of Man did not come to be served, but to serve,
> and to give his life as a ransom for many.” [Matthew 20:25-28]
Received on Monday, 26 November 2012 04:53:13 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 19:03:14 UTC