Re: [codec] draft-ietf-codec-oggopus and "album" gain

Ian Nartowicz <> Wed, 27 August 2014 14:30 UTC

Return-Path: <>
Received: from localhost ( []) by (Postfix) with ESMTP id 8A8531A06CC for <>; Wed, 27 Aug 2014 07:30:49 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001] autolearn=ham
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id EDkSv85XyjCs for <>; Wed, 27 Aug 2014 07:30:46 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id BA4A11A06DB for <>; Wed, 27 Aug 2014 07:30:45 -0700 (PDT)
Received: from crunchbang ([]) by know-smtprelay-2-imp with bizsmtp id jqWj1o01F1pcAUZ01qWkzR; Wed, 27 Aug 2014 15:30:44 +0100
X-Originating-IP: []
X-Spam: 0
X-Authority: v=2.1 cv=MI/umapl c=1 sm=1 tr=0 a=bYNBYWS+Sj0o/bRbN9Xjqw==:117 a=bYNBYWS+Sj0o/bRbN9Xjqw==:17 a=KEKbkQfv9EEA:10 a=ud0LK1MCnV8A:10 a=RoPK8JaNmp0A:10 a=kj9zAlcOel0A:10 a=hU221NPEAAAA:8 a=gh7d8CtTAAAA:8 a=A_2ddQx5bAP0ifLQ_iMA:9 a=82cMei_0jNFtWA2O:21 a=txzQMHKmgxJcD2zG:21 a=CjuIK1q_8ugA:10 a=clUD5SDhlIcA:10
Date: Wed, 27 Aug 2014 15:30:43 +0100
From: Ian Nartowicz <>
Message-ID: <20140827153043.2ff5e031@crunchbang>
In-Reply-To: <>
References: <20140813222201.54fe7910@crunchbang> <> <20140816040140.GA31682@hex.shelbyville.oz> <>
X-Mailer: Claws Mail 3.10.1 (GTK+ 2.24.10; i486-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit
Subject: Re: [codec] draft-ietf-codec-oggopus and "album" gain
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Codec WG <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Wed, 27 Aug 2014 14:30:49 -0000

On Mon, 25 Aug 2014 16:11:21 -0700
Ralph Giles <> wrote:

>On 2014-08-15 9:01 PM, Ron wrote:
>> So the patch applied for this part is now:
>>> - If an encoder wishes to use R128 normalization, and the output gain is not
>>> - otherwise constrained or specified, the encoder SHOULD write the R128 gain
>>> - into the 'output gain' field and store a tag containing
>>> "R128_TRACK_GAIN=0".
>>> - That is, it should assume that by default tools will respect the 'output
>>> gain'
>>> - field, and not the comment tag.
>I agree this part is confusing. I think it's too terse to offer good
>>>   If a tool modifies the ID header's 'output gain' field, it MUST also
>>> update or remove the R128_TRACK_GAIN and R128_ALBUM_GAIN comment tags if
>>> present.
>This seems helpful in avoiding broken files.
>>> + An encoder should assume that by default tools will respect the 'output
>>> gain'
>>> + field, and not the comment tag.
>I read this as a non-normative should. Would it be better:
>"By default, implementations of this specification MUST respect the
>'output gain' field, but MAY NOT respect the comments. Encoder authors
>are advised to take this into account. For example, to produce R128
>normalized files it's more reliable for post-processing application to
>update the 'output gain' field and write a comment 'R128_TRACK_GAIN=0'
>than to put the normalized value directly in the comment."
>This removes the normative suggestion of 'should' while maintaining the
>suggestion and rationale.
> -r

This seems like a step backwards to me.  That MUST is a requirement
that wasn't present before.  An earlier statement is "Virtually all players
and media frameworks should apply it by default.", which I think is the
appropriate guidance.

>I'd be inclined to drop the "By default" there, unless we're going
>to expand on what the exceptions to the 'default' might be.

I agree with Ron that saying "By default" and "MUST" in the same sentence is
confusing, but I think the solution is not to say MUST.  There are exceptions
to the default.  Trying to specify them all here would seem an impossible feat
of guesswork, but since they exist then MUST is too strong.

>Is there a reason we shouldn't just have two examples?
Possibly, but if you start down that path you need more than two examples.
Either tag or both may be present, with or without a pre-existing output gain

The intention of this change, after much discussion, was specifically not to
constrain how an encoder should split an R128 gain between the output gain
field and the tags.  Hence: advice rather than normative language.  Part of the
reason is quickly apparent in the discussion of whether to place the track gain
or album gain in the output gain field, and the answer was not to specify.