Re: [codec] requirements #12 (closed): bit-exact vs. bit-compatible?

Jean-Marc Valin <jean-marc.valin@octasic.com> Wed, 26 January 2011 04:54 UTC

Return-Path: <jean-marc.valin@octasic.com>
X-Original-To: codec@core3.amsl.com
Delivered-To: codec@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 238943A689B for <codec@core3.amsl.com>; Tue, 25 Jan 2011 20:54:25 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.516
X-Spam-Level:
X-Spam-Status: No, score=-1.516 tagged_above=-999 required=5 tests=[AWL=-1.083, BAYES_00=-2.599, FF_IHOPE_YOU_SINK=2.166]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 7J-DoLoAyyJO for <codec@core3.amsl.com>; Tue, 25 Jan 2011 20:54:23 -0800 (PST)
Received: from relais.videotron.ca (relais.videotron.ca [24.201.245.36]) by core3.amsl.com (Postfix) with ESMTP id 20D163A68FD for <codec@ietf.org>; Tue, 25 Jan 2011 20:54:22 -0800 (PST)
MIME-version: 1.0
Content-transfer-encoding: 8bit
Content-type: text/plain; charset="windows-1252"; format="flowed"
Received: from [192.168.1.14] ([70.81.109.112]) by vl-mo-mrz24.ip.videotron.ca (Sun Java(tm) System Messaging Server 6.3-8.01 (built Dec 16 2008; 32bit)) with ESMTP id <0LFM00CMY5QYJQ40@vl-mo-mrz24.ip.videotron.ca> for codec@ietf.org; Tue, 25 Jan 2011 23:56:59 -0500 (EST)
Message-id: <4D3FA971.4010902@octasic.com>
Date: Tue, 25 Jan 2011 23:56:17 -0500
From: Jean-Marc Valin <jean-marc.valin@octasic.com>
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101208 Thunderbird/3.1.7
To: Stephan Wenger <stewe@stewe.org>
References: <C964DB85.26AB1%stewe@stewe.org>
In-reply-to: <C964DB85.26AB1%stewe@stewe.org>
Cc: "codec@ietf.org" <codec@ietf.org>, Stephen Botzko <stephen.botzko@gmail.com>
Subject: Re: [codec] requirements #12 (closed): bit-exact vs. bit-compatible?
X-BeenThere: codec@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Codec WG <codec.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/codec>, <mailto:codec-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/codec>
List-Post: <mailto:codec@ietf.org>
List-Help: <mailto:codec-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/codec>, <mailto:codec-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 26 Jan 2011 04:54:25 -0000

On 11-01-25 10:59 PM, Stephan Wenger wrote:
> But please add language in the requirement doc to the extent that there
> MUST be a conformance spec for each candidate codec that allows to
> automatically determine the conformance of a codec implementation.  Absent
> this spec, the IPR statements received are meaningless.

IIRC, the guidelines already say that we need a conformance test.

> My preference would be to have that conformance spec in the same document
> as the codec, so to make citations in IPR statements easy and to avoid a
> charter-update.

Agreed. We really want the conformance tool in the same document as the 
codec itself.

Cheers,

	Jean-Marc

> Stephan
>
>
> On 1.25.2011 18:24 , "Raymond (Juin-Hwey) Chen"<rchen@broadcom.com>  wrote:
>
>> My opinion is that we should not require bit-exactness.  There are many
>> examples of previous codec
>> standards that did not require bit-exactness, including both
>> royalty-bearing codecs (such as MPEG)
>> and royalty-free codecs (such as our BroadVoice/BV16/BV32), so I don't
>> see any real reason why we
>> can't follow that same route.
>>
>> I can see at least two important advantages for not requiring
>> bit-exactness:
>> (1) it allows future innovations to improve the performance of the codec
>> without breaking the bit-
>> stream compatibility, and
>> (2) it allows the codec implementers the greatest flexibility in
>> implementing the codecs in ways
>> that are most efficient for the particular hardware or processor
>> architecture they have.
>> Having a bit-exact standard will kill both.
>>
>> The main drawback of a non-bit-exact standard is that the verification of
>> the conformance of codec
>> implementations is not as straightforward as with a bit-exact standard.
>> However, I don't think
>> that is a show stopper or even a difficult problem.  There are many
>> possible ways to do software-
>> based objective measurements to verify that a candidate codec
>> implementation is likely to sound
>> essentially indistinguishable from the output of the reference codec.  We
>> had previously measured
>> the SNRs and PESQ scores of a large number of test files using the
>> reference codec and candidate
>> codec and examined the statistical distribution of the differences in the
>> scores.  Jean-Marc just
>> posted a nice little Matlab code that built upon psychoacoustic modeling,
>> NMR, averages, outliers
>> checking, etc.  Koen also mentioned another tool.  Even if these tools
>> and methodologies are not
>> perfect yet, with some additional tuning of their algorithms and
>> parameters, it is really not that
>> difficult to come up with objective, software-based verification methods
>> that will give you a high
>> level of confidence whether a candidate codec will sound at least as good
>> as the reference codec
>> (or perhaps better if improvements are made).
>>
>> I like Jean-Marc's idea of having both a floating-point reference codec
>> and a fixed-point
>> reference codec. For people who don't want to run the risk of degrading
>> audio quality through
>> their own fixed-point algorithm conversion, they can just implement the
>> fixed-point reference
>> codec in a bit-exact manner.  For people who want to implement the codec
>> in floating-point (e.g.
>> on computers), the easiest way is just to use the floating-point
>> reference code as is.  In both
>> cases, the conformance verification will be quite easy.
>>
>> Raymond
>>
>> -----Original Message-----
>> From: codec-bounces@ietf.org [mailto:codec-bounces@ietf.org] On Behalf Of
>> Jean-Marc Valin
>> Sent: Tuesday, January 25, 2011 12:58 PM
>> To: Koen Vos
>> Cc: codec@ietf.org; Stephen Botzko
>> Subject: Re: [codec] requirements #12 (closed): bit-exact vs.
>> bit-compatible?
>>
>> My preference actually goes with using both fixed-point and floating
>> point.
>> That way, implementers of floating-point decoder can compare with the
>> float
>> version and implementers of the fixed-point decoder can compare with the
>> fixed-point version.
>>
>> This is not unheard of either, if you look at the reference implementation
>> of the 3GPP(2?) EVRC codec, the distribution includes two sets of output
>> vectors. One is for a fixed-point implementation that uses 31-bit
>> precision
>> in the multiplications and the other one is for 32-bit precision. You just
>> choose whatever is more efficient for your DSP and use the appropriate
>> testvectors for testing.
>>
>>         Jean-Marc
>>
>> On 11-01-25 03:37 PM, Koen Vos wrote:
>>> A similar tool is in the code in silk\test\signalCompare.c.  It's based
>>> on LPC, and measures the SNR in a partially-whitened domain.  For music
>>> the critical-band approach of Jean-Marc's tool may work better, not sure.
>>>
>>> One question is about what implementation should be the reference for
>>> compliance testing: floating-point or fixed-point?
>>>
>>> A fixed-point reference allows for bit-exact implementations, which is
>>> nice.  And fixed-point reference implementations are the norm in speech
>>> coding.
>>> However, CELT's floating-point implementation has a larger dynamic
>>> range than the fixed-point version, and is thus arguable better.  A
>>> fixed-point reference could not test this extra dynamic range.
>>>
>>> Any suggestions?
>>> koen.
>>>
>>>
>>> ----- Original Message -----
>>> From: "Jean-Marc Valin"<jean-marc.valin@octasic.com>
>>> To: "Stephen Botzko"<stephen.botzko@gmail.com>
>>> Cc: codec@ietf.org
>>> Sent: Tuesday, January 25, 2011 8:29:25 AM
>>> Subject: Re: [codec] requirements #12 (closed): bit-exact vs.
>>> bit-compatible?
>>>
>>> Just to give an idea of what I'm talking about in terms of compliance
>>> test,
>>> here's a tool I just wrote that could be used for testing. There may
>>> need
>>> to be a bit of refining and playing with the thresholds, but the main
>>> idea
>>> is there:
>>>
>>> http://jmvalin.ca/misc_stuff/compare.m
>>>
>>> It works with Octave, and is likely very easy to get to work with
>>> Matlab.
>>> Any comments?
>>>
>>>        Jean-Marc
>>>
>>> On 11-01-25 10:57 AM, Jean-Marc Valin wrote:
>>>> Hi Stephen,
>>>>
>>>> The reference implementation includes both floating-point and
>>>> fixed-point,
>>>> so I'm not sure it's a good idea to say that one is "better" than the
>>>> other. As for IEEE 754-2008, as far as I know it is not a "bit-exact"
>>>> standard either when it comes to some operations (e.g. transcendental
>>>> function) and even for other operations, most compilers I know of are
>>>> not
>>>> strict IEEE-754 (at least by default) because of issues such as the x86
>>>> extended precision operations.
>>>>
>>>> Regarding MPEG bit-streams, I'm not sure where to get confirmation, but
>>>> this is what Wikipedia has to say about MPEG-1 Layer 3:
>>>>
>>>>
>>>> "Decoding, on the other hand, is carefully defined in the standard.
>>>> Most
>>>> decoders are "bitstream compliant", which means that the decompressed
>>>> output – that they produce from a given MP3 file – will be the
>>>> same, within
>>>> a specified degree of rounding tolerance, as the output specified
>>>> mathematically in the ISO/IEC standard document (ISO/IEC 11172-3).
>>>> Therefore, comparison of decoders is usually based on how
>>>> computationally
>>>> efficient they are (i.e., how much memory or CPU time they use in the
>>>> decoding process)."
>>>>
>>>>
>>>> That implies a standard based on "infinite precision", with a degree of
>>>> tolerance for different implementations.
>>>>
>>>> Cheers,
>>>>
>>>> Jean-Marc
>>>>
>>>> On 11-01-25 10:42 AM, Stephen Botzko wrote:
>>>>> It seems to me that the reference encoder and decoder will be bit
>>>>> exact for
>>>>> a given floating point format, correct? So one could specify IEEE
>>>>> 754-2008
>>>>> when bit exactness is needed in the reference (for instance regression
>>>>> testing), but not require it for compliance.
>>>>>
>>>>> Folks who are modifying the reference encoder or decoder algorithms
>>>>> are "on
>>>>> their own" as far as audio quality is concerned. Though I agree with
>>>>> Stephan that we need to address compliance (when exactly does a
>>>>> ported or
>>>>> otherwise modified encoder/decoder become non-compliant?).
>>>>>
>>>>> Stephen Botzko
>>>>>
>>>>> On Tue, Jan 25, 2011 at 9:34 AM, Roman Shpount<roman@telurix.com
>>>>> <mailto:roman@telurix.com>>   wrote:
>>>>>
>>>>> One more concern that I have related to bit exactness is codec
>>>>> regression testing. One can produce a non-bit-exact encoder that
>>>>> produces reasonable results for a reference decoder, but if paired
>>>>> with
>>>>> a modified, non-bit-exact decoder will produce significant audio
>>>>> artifacts. Since neither decoder or encoder are bit exact we will need
>>>>> to have a test procedure that will validate that both encoder or
>>>>> decoder will not break any standard compliant and non-bit-exact
>>>>> encoders or decoders. Not really sure how this can be done.
>>>>>
>>>>> I might be wrong, but I think MPEG decoders are bit exact and encoders
>>>>> are not.
>>>>> _____________
>>>>> Roman Shpount
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Jan 25, 2011 at 12:03 AM, Jean-Marc Valin<jmvalin@jmvalin.ca
>>>>> <mailto:jmvalin@jmvalin.ca>>   wrote:
>>>>>
>>>>> Hi Stephan,
>>>>>
>>>>> I understand your concern and I'd be interested if you have
>>>>> alternative ways of handling the licensing to avoid any issue. It's
>>>>> not like this is a unique situation. As far as I know, most (all?)
>>>>> MPEG codecs have similar non-bit exact definitions. I have also
>>>>> heard that they also require some IPR licensing...
>>>>>
>>>>> In general the issue of bit-exactness has been discussed and so far
>>>>> I don't recall many arguing in favor of a bit-exact definition.
>>>>> Most of the concerns that have been expressed are solved by
>>>>> considering that non-bitexact does not mean you cannot be bit-exact
>>>>> with the reference encoder. It merely means that you don't *have*
>>>>> to. So regardless of how conformance is defined exactly, one always
>>>>> has the option of being bit-exact with the reference
>>>>> implementation, which obviously guarantees compliance.
>>>>>
>>>>> As for language mentioning compliance, I believe it belongs more to
>>>>> the guidelines (it's not a requirement of the codec itself), which
>>>>> includes the following text:
>>>>>
>>>>> 4. To reduce the risk of bias towards certain CPU/DSP architectures,
>>>>> ideally the decoder specification should not require "bit-exact"
>>>>> conformance with the reference implementation. The output of a
>>>>> decoder implementation should only be "close enough" to the
>>>>> output of the reference decoder. A comparison tool should be
>>>>> provided along with the codec to verify objectively that the
>>>>> output of a decoder is likely to be perceptually
>>>>> indistinguishable from that of the reference decoder. However,
>>>>> an implementation may still wish to produce an output that is
>>>>> bit-exact with the reference implementation to simplify the
>>>>> testing procedure.
>>>>>
>>>>>
>>>>>
>>>>> Cheers,
>>>>>
>>>>> Jean-Marc
>>>>>
>>>>>
>>>>> On 11-01-24 11:02 PM, Stephan Wenger wrote:
>>>>>
>>>>> Hi all:
>>>>>
>>>>> Let me speak once more against this decision (if such a
>>>>> decision were
>>>>> really made; see the p.s.).
>>>>>
>>>>> There are currently three IPR disclosures against the codec
>>>>> draft and/or
>>>>> its predecessors. The Xiph disclosure is at this point a
>>>>> placeholder
>>>>> (Xiph folks: it's time to fix that!). However, the two other
>>>>> disclosures
>>>>> on file provide a patent grant only for necessary patent claims
>>>>> and only
>>>>> when the standard is practiced in full compliance. These terms (in
>>>>> various formulations) are quite common.
>>>>>
>>>>> In order to ensure one has a license (or can rely on a non-assert
>>>>> covenant), one has to ensure one meets the conditions set by the
>>>>> rightholder. On stuff such as reciprocity clauses this is
>>>>> simple. On
>>>>> compliance, it's not always easy.
>>>>>
>>>>> The traditional compliance test for a media codec is a
>>>>> stimulus-response
>>>>> test: you feed test vectors into the codec, and you get
>>>>> results. If the
>>>>> results match, you are in compliance, if not, you are not. Simple.
>>>>>
>>>>> Without bit exactness, the compliance criteria have to be defined
>>>>> differently. We can do so, and, indeed, I recall that this has been
>>>>> mentioned as one plan forward. However, I have seen zero
>>>>> activity in this
>>>>> direction, and I have also not seen any language that mentions
>>>>> this in the
>>>>> requirements draft. I think that the subject of compliance
>>>>> tests, at
>>>>> least in its most basic outline, needs to be documented in the
>>>>> requirements draft. The details can be taken care of elsewhere
>>>>> and later,
>>>>> but not too much later. It should be clear that a codec
>>>>> candidate (if
>>>>> there were more than one) needs to have compliance criteria
>>>>> defined before
>>>>> that codec candidate can become an RFC. Without that, the key
>>>>> goal of the
>>>>> WG, a reasonably freely practicable codec, is just not
>>>>> achievable in the
>>>>> current legal environment (which includes, in this case, the IPR
>>>>> disclosures on file).
>>>>>
>>>>> Of course, it would be sooooo much simpler if we would mandate
>>>>> a bit exact
>>>>> decoder... Is it really that restricting to require that?
>>>>>
>>>>> Stephan
>>>>>
>>>>> P.s.: for the IETF procedures newcomers: humms taken at
>>>>> meetings need to
>>>>> be confirmed on a mailing list, and consensus needs to be
>>>>> declared by the
>>>>> chairs. On this subject, I do recall mailing list discussions after
>>>>> Maastricht, but I do not recall that consensus was reached, yet
>>>>> alone
>>>>> declared. (Unfortunately, I currently don't have the time to go
>>>>> through
>>>>> the mailing list archives to verify my recollection; Sorry.)
>>>>>
>>>>>
>>>>>
>>>>> On 1.24.2011 16:45 , "codec issue tracker"<trac@tools.ietf.org
>>>>> <mailto:trac@tools.ietf.org>>   wrote:
>>>>>
>>>>> #12: bit-exact vs. bit-compatible?
>>>>>
>>>>> Changes (by gmaxwell@Ã… ):
>>>>>
>>>>> * status: new =>   closed
>>>>> * resolution: =>   worksforme
>>>>>
>>>>>
>>>>> Comment:
>>>>>
>>>>> http://www.ietf.org/proceedings/78/minutes/codec.txt
>>>>>
>>>>> "On the topic of bit exact. Consensus was bit exactness is
>>>>> not required."
>>>>>
>>>>> I believe this issue is already closed.
>>>>>
>>>>> --
>>>>>
>>>>> ------------------------------------+----------------------------------
>>>>> ---
>>>>> --
>>>>> Reporter: hoene@Ã… | Owner:
>>>>> Type: enhancement | Status: closed
>>>>> Priority: minor | Milestone:
>>>>> Component: requirements | Version:
>>>>> Severity: Active WG Document | Resolution: worksforme
>>>>> Keywords: |
>>>>>
>>>>> ------------------------------------+----------------------------------
>>>>> ---
>>>>> --
>>>>>
>>>>> Ticket
>>>>> URL:<http://trac.tools.ietf.org/wg/codec/trac/ticket/12#comment:1>
>>>>> codec<http://tools.ietf.org/codec/>
>>>>>
>>>>> _______________________________________________
>>>>> codec mailing list
>>>>> codec@ietf.org<mailto:codec@ietf.org>
>>>>> https://www.ietf.org/mailman/listinfo/codec
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> codec mailing list
>>>>> codec@ietf.org<mailto:codec@ietf.org>
>>>>> https://www.ietf.org/mailman/listinfo/codec
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> codec mailing list
>>>>> codec@ietf.org<mailto:codec@ietf.org>
>>>>> https://www.ietf.org/mailman/listinfo/codec
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> codec mailing list
>>>>> codec@ietf.org<mailto:codec@ietf.org>
>>>>> https://www.ietf.org/mailman/listinfo/codec
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> codec mailing list
>>>>> codec@ietf.org
>>>>> https://www.ietf.org/mailman/listinfo/codec
>>>>
>>>> _______________________________________________
>>>> codec mailing list
>>>> codec@ietf.org
>>>> https://www.ietf.org/mailman/listinfo/codec
>>>
>>> _______________________________________________
>>> codec mailing list
>>> codec@ietf.org
>>> https://www.ietf.org/mailman/listinfo/codec
>>
>> _______________________________________________
>> codec mailing list
>> codec@ietf.org
>> https://www.ietf.org/mailman/listinfo/codec
>>
>> _______________________________________________
>> codec mailing list
>> codec@ietf.org
>> https://www.ietf.org/mailman/listinfo/codec
>
>
> _______________________________________________
> codec mailing list
> codec@ietf.org
> https://www.ietf.org/mailman/listinfo/codec