From nobody Sun Feb 26 18:42:56 2023
Return-Path: <spencerdawkins.ietf@gmail.com>
X-Original-To: cellar@ietfa.amsl.com
Delivered-To: cellar@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1])
 by ietfa.amsl.com (Postfix) with ESMTP id 4D536C151B16
 for <cellar@ietfa.amsl.com>; Sun, 26 Feb 2023 18:42:55 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.086
X-Spam-Level: 
X-Spam-Status: No, score=-0.086 tagged_above=-999 required=5
 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
 DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001,
 RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01,
 URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001,
 URI_DOTEDU=1.999] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key)
 header.d=gmail.com
Received: from mail.ietf.org ([50.223.129.194])
 by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id nCTuS9bl1iQl for <cellar@ietfa.amsl.com>;
 Sun, 26 Feb 2023 18:42:50 -0800 (PST)
Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com
 [IPv6:2607:f8b0:4864:20::102a])
 (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)
 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
 (No client certificate requested)
 by ietfa.amsl.com (Postfix) with ESMTPS id 9E458C14F721
 for <cellar@ietf.org>; Sun, 26 Feb 2023 18:42:50 -0800 (PST)
Received: by mail-pj1-x102a.google.com with SMTP id
 x20-20020a17090a8a9400b00233ba727724so10458217pjn.1
 for <cellar@ietf.org>; Sun, 26 Feb 2023 18:42:50 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 
 h=to:subject:message-id:date:from:mime-version:from:to:cc:subject
 :date:message-id:reply-to;
 bh=BuBezTGja85O5Ig9o6l/a7jlXQh3HKdcdWMMjzsNoSQ=;
 b=Fu+wmoqeuXsH6G8IgWXx5GMlT8XJw+mANE5b44IoreAJVTQ14RGqAlQKZJfnxlPT/C
 n4kWnPYz9OB1AZKPn9m9rJ4HMDywSVujDfQ8bGCw/l9boboTjAhOKQ+/1s0L9/xPm7yk
 QZXa+eXZpTJDbJFN5cYo3lR9tdckSiSZSglQuCIf/C8nuImiLF2mVsee9nV22vGpMk+c
 a2+gKtPdEZb1BuS038n4LWZPQQzlKjqo8lhaHL/PBd5azJ5Ulyah1WPQamsutXQyUxjN
 vwBhnDtXfCW4GCXBMeX1/4cbFyQ1HkdwF0XW0pMiY07de/XN5r2/MFWogLFEbxVet5sV
 o9yw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=to:subject:message-id:date:from:mime-version:x-gm-message-state
 :from:to:cc:subject:date:message-id:reply-to;
 bh=BuBezTGja85O5Ig9o6l/a7jlXQh3HKdcdWMMjzsNoSQ=;
 b=TV3OMKQJCdBNwjChKLpyprp3vPFDZwUYRNgjVGrAOhlmbr9Ql6cjxptF7IrQsHmzNw
 aehKW5hJ4yeVTUlLQik1vCiVU0qVyRlimuw/KfedPI7Vr8TTzMKt3ffGMtnr0IVu8CXQ
 3Ap5rpJNz61LotW9ITyIAeYlDRt6Z1+0WjNQFUg3IY4voQMYxrgp2zIkiuOwtfiMP9tI
 d1H2q/tFG2YzX8YGCUwPDg7mkhW+T8rS5Da8ylCnKrcnLXLjoe4LJEEZPG2lvn9uSbC+
 uYY8pRTEbVBNTGi6Ty08N75TJIzfHM+0/9MBkQ2Vna2Qvo6Uk9jQnJ0xSE3youF/J/pd
 zbsg==
X-Gm-Message-State: AO0yUKXCXwKukorWhLiDOAxZ3vxWi2Z53sxlv/x29nmEObqTSfiDq7lG
 yYXKQJiVHLiNy8aETM5sX5wcv8xerXwaxvh1G+GjBn8Pc5S5Kg==
X-Google-Smtp-Source: AK7set98PxnbcTDs3NqTccSoXTqHcn9qR2Kk9qalIs/l3u0NAPUaBpWY6+fQ8qqLCPR+Az+rmY2Lcm/ObUk6xjZ+ir0=
X-Received: by 2002:a17:90a:dd8d:b0:230:3b84:9169 with SMTP id
 l13-20020a17090add8d00b002303b849169mr4108174pjv.2.1677465768953; Sun, 26 Feb
 2023 18:42:48 -0800 (PST)
MIME-Version: 1.0
From: Spencer Dawkins at IETF <spencerdawkins.ietf@gmail.com>
Date: Sun, 26 Feb 2023 20:42:21 -0600
Message-ID: <CAKKJt-fp4Xf5uoM9TOC6T1azCgCD0AGA-LbH4X03w0ot1CAPvA@mail.gmail.com>
To: Codec Encoding for LossLess Archiving and Realtime transmission
 <cellar@ietf.org>
Content-Type: multipart/alternative; boundary="000000000000480d7705f5a56f73"
Archived-At: <https://mailarchive.ietf.org/arch/msg/cellar/gYqVZiws52oA38zSrqw5yXEj_TA>
Subject: [Cellar] My notes on
 https://datatracker.ietf.org/doc/draft-ietf-cellar-flac/
X-BeenThere: cellar@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: Codec Encoding for LossLess Archiving and Realtime transmission
 <cellar.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/cellar>,
 <mailto:cellar-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/cellar/>
List-Post: <mailto:cellar@ietf.org>
List-Help: <mailto:cellar-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/cellar>,
 <mailto:cellar-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 27 Feb 2023 02:42:55 -0000

--000000000000480d7705f5a56f73
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Dear Cellar,

I'm still working my way through
https://datatracker.ietf.org/doc/draft-ietf-cellar-flac/. I still need to
read the Appendices, but I wanted to pass along my notes so far.

In general, I like the document. I do have questions, especially about the
use of BCP14 terminology, and some suggestions for readability, but this
should get discussion started.

I expect to have the reviews of the appendices done by tomorrow at close of
business, my time.

Best,

Spencer
-----------

I have a couple of comments on the abstract.

Abstract

   This document defines the Free Lossless Audio Codec (FLAC) format.

   FLAC is designed to reduce the amount of computer storage space

   needed to store digital audio signals without needing to remove

   information in doing so (i.e. lossless).

I might say, "without losing information in doing so (i.e. lossless)."

   FLAC is free in the sense

   that its specification is open, its reference implementation is open-

   source and it is not encumbered by any known patent.

This ^^^^ might all be true, but I'd suggest removing at least "and it is
not encumbered by any known patent". The IETF tries not to make statements
about whether a technology is encumbered - the first question a reviewer
would ask, is "any patent known to whom?", and it would get worse from
there.

   Compared to

   other lossless (audio) coding formats, FLAC is a format with low

   complexity and can be coded to and from with little computing

   resources.  Decoding of FLAC has seen many independent

   implementations on many different platforms, and both encoding and

   decoding can be implemented without needing floating-point

   arithmetic.

1.  Introduction

   The coding methods provided by the FLAC format work best on PCM audio

   signals of which the samples have a signed representation and are

   centered around zero.  Audio signals in which samples have an

   unsigned representation must be transformed to a signed

   representation as described in this document in order to achieve

   reasonable compression.  The FLAC format is not suited to compress

   audio that is not PCM.

Given ^^^^, do you need to say this? Is there a meaningful difference
between "not suited for" and "cannone be compressed"?

   Pulse-density modulated audio, e.g.  DSD,

   cannot be compressed by FLAC.

2.  Notation and Conventions

In this next paragraph, I'd suggest replacing "may be" with "are". "May"
tends to be used in describing protocol operations in the IETF, and these
are statements of fact.

   Values expressed as u(n) represent unsigned big-endian integer using

   n bits.  Values expressed as s(n) represent signed big-endian integer

   using n bits, signed two's complement. n may be expressed as an

   equation using * (multiplication), / (division), + (addition), or -

   (subtraction).  An inclusive range of the number of bits expressed

   may be represented with an ellipsis, such as u(m...n).  The name of a

   value followed by an asterisk * indicates zero or more occurrences of

   the value.  The name of a value followed by a plus sign + indicates

   one or more occurrences of the value.

3.  Acknowledgments

This section is very nice. We would ordinarily put an acknowledgement
section at the end of a document, so, in this case, it would be after IANA
Considerations.

The RFC Editor folks may ask you to move the URLs in this section to
Informative References, and use reference tags to link the people to the
work they did.

   FLAC owes much to the many people who have advanced the audio

   compression field so freely.  For instance:

   *  A.  J.  Robinson (https://web.archive.org/web/20160315141134/

      http://mi.eng.cam.ac.uk/~ajr/) for his work on Shorten; his paper

      ([robinson-tr156]) is a good starting point on some of the basic

      methods used by FLAC.  FLAC trivially extends and improves the

      fixed predictors, LPC coefficient quantization, and Rice coding

      used in Shorten.

   *  S.  W.  Golomb

      (https://web.archive.org/web/20040215005354/http://csi.usc.edu/

      faculty/golomb.html) and Robert F.  Rice; their universal codes

      are used by FLAC's entropy coder.

   *  N.  Levinson and J.  Durbin; the reference encoder uses an

      algorithm developed and refined by them for determining the LPC

      coefficients from the autocorrelation coefficients.

   *  And of course, Claude Shannon (https://en.wikipedia.org/wiki/

      Claude_Shannon)

   The FLAC format, the FLAC reference implementation and this document

   were originally developed by Josh Coalson.  While many others have

   contributed since, this original effort is deeply appreciated.

4.  Definitions

   *  *Subframe*: An encoded subblock.  All subframes within a frame

      code for the same number of samples.  A subframe MAY correspond to

I'd suggest "might correspond".

      a subblock, else it corresponds to either the addition or

      subtraction of two subblocks, see section on interchannel

      decorrelation (#interchannel-decorrelation).

   *  *Linear predictor*: a predictor using linear prediction

      (https://en.wikipedia.org/wiki/Linear_prediction).  This is also

I'd create a reference for this URL, and include it as Informative.

      called *linear predictive coding (LPC)*. With a linear predictor

      each prediction is a linear combination of past samples, hence the

      name.  A linear predictor has a causal discrete-time finite

      impulse response (https://en.wikipedia.org/wiki/

      Finite_impulse_response).

I'd create a reference for this URL, and include it as Informative.

   *  *Rice code*: A variable-length code

      (https://en.wikipedia.org/wiki/Variable-length_code) which

I'd create a reference for this URL, and include it as Informative.

      compresses data by making use of the observation that, after using

      an effective predictor, most residual samples are closer to zero

      than the original samples, while still allowing for a small part

      of the samples to be much larger.

5.  Conceptual overview

   Similar to many audio coders, a FLAC file is encoded following the

I'd suggest "many other audio coders" (other than FLAC, right?)

   steps below.  On decoding a FLAC file, these steps are undone in

   reverse order, i.e. from bottom to top.

   *  Blocking (see section on Blocking (#blocking)).  The input is

      split up into many contiguous blocks.  With FLAC, the blocks MAY

      vary in size.  The optimal size of the block is usually affected

So, what you say is true, but I'd suggest saying "Because FLAC blocks can
vary in size, a FLAC decoder MUST be able to decode variable-sized blocks",
so that the weak permission of MAY for an encoder is reflected in a strong
requirement of MUST for the decoder. I'm assuming this is mandatory for
decoders, unless it's OK for decoders to fail to decode conformant FLAC
blocks.

(if you want to say "MAY vary in size", I won't argue =F0=9F=99=82)

      by many factors, including the sample rate, spectral

      characteristics over time, etc.  However, as finding the optimal

      block size arrangement is a rather complex problem, the FLAC

      format allows for a constant block size throughout a stream as

      well.

   *  Prediction (see section on Prediction (#prediction)).  To remove

      redundancy in a signal, a predictor is stored for each subblock or

      its transformation as formed in the previous step.  A predictor

      consists of a simple mathematical description that can be used, as

      the name implies, to predict a certain sample from the samples

      that preceded it.  As this prediction is rarely exact, the error

      of this prediction is passed to the next stage.  The predictor of

      each subblock is completely independent from other subblocks.

      Since the methods of prediction are known to both the encoder and

      decoder, only the parameters of the predictor need be included in

      the compressed stream.  In case no usable predictor can be found

      for a certain subblock, the signal is stored instead of compressed

Meta-comment - the phrase "in case" appears about 20 times in this
document. I think this should be "if", throughout.

This may be super clear to those skilled in the art, but I wonder if it
would be clearer if it said, "the uncompressed signal is stored and the
next stage is skipped"

      and the next stage is skipped.

   *  Residual Coding (See section on Residual Coding (#residual-

      coding)).  As the predictor does not describe the signal exactly,

      the difference between the original signal and the predicted

      signal (called the error or residual signal) MUST be coded

Is this "MUST" a statement of reality ("if you don't code the error
losslessly, the signal cannot be decoded without losing information"), or
an actual requirement for the implementation?

If the latter, perhaps "MUST be coded losslessly in order to recover the
original signal without loss".

      losslessly.  If the predictor is effective, the residual signal

      will require fewer bits per sample than the original signal.  FLAC

      uses Rice coding, a subset of Golomb coding, with either 4-bit or

      5-bit parameters to code the residual signal.

5.1.  Blocking

   The size used for blocking the audio data has a direct effect on the

   compression ratio.  If the block size is too small, the resulting

   large number of frames mean that excess bits will be wasted on frame

   headers.  If the block size is too large, the characteristics of the

   signal may vary so much that the encoder will be unable to find a

   good predictor.  In order to simplify encoder/decoder design, FLAC

   imposes a minimum block size of 16 samples, and a maximum block size

   of 65535 samples.  This range covers the optimal size for all of the

   audio data FLAC supports.

Is there a reference that could be included for the last statement here? ^

5.3.  Prediction

   A FLAC encoder is free in selecting which method is used to model the

   input, with the following exceptions:

   *  When the samples that need to be stored do not all have the same

      value (i.e. the signal is not constant), a constant subframe MUST

      NOT be used,

My experience has been that if you're saying "this is a bad idea", it's
better to explain the consequences ("using a constant subframe when the
input signal is not constant, will result in very compact and inaccurate
decoded streams"). If you're saying "MUST NOT be used", a decoder MUST
detect that you're violating a MUST requirement, and the decoder's behavior
would be undefined.

Which are you saying?

   *  When an encoder is unable to find a fixed or linear predictor of

      which all residual samples are representable in 32-bit signed

      integers as stated in section coded residual (#coded-residual), a

      verbatim subframe MUST be used.

I have a similar comment here: are you saying "this is what a wise encoder
would do", or are you saying "the decoder MUST detect that the encoder is
violating a MUST protocol requirement and <do something, perhaps just
discarding the subframe"?

   For more information on fixed and linear predictors, see

   [HPL-1999-144] and [robinson-tr156].

5.4.  Residual Coding

   In case a subframe uses a predictor to approximate the audio signal,

   a residual needs to be stored to 'correct' the approximation to the

I'd suggest "is stored".

   exact value.  When an effective predictor is used, the average

   numerical value of the residual samples is smaller than that of the

   samples before prediction.  While having smaller values on average,

   it is possible a few 'outlier' residual samples are much larger than

   any of the original samples.  Sometimes these outliers even exceed

   the range the bit depth of the original audio offers.

   Quite often the optimal Rice parameter varies over the course of a

   subframe.  To accommodate this, the residual can be split up into

   partitions, where each partition has its own Rice parameter.  To keep

   overhead and complexity low, the number of partitions used in a

   subframe is limited to powers of two.

I'd suggest "MUST be a power of two".

6.  Format principles

   FLAC has no format version information, but it does contain reserved

   space in several places.  Future versions of the format MAY use this

   reserved space safely without breaking the format of older streams.

   Older decoders MAY choose to abort decoding or skip data encoded with

   newer methods.  Apart from reserved patterns, the format specifies

I'd suggest "data encoded using methods they do not recognize".

   invalid patterns in certain places, meaning that the patterns MUST

   NOT appear in any valid bitstream, in any prior, present, or future

   versions of the format.  These invalid patterns are usually used to

   make the synchronization mechanism more robust.

I need some help here, please. I searched the document for occurrences of
the word "invalid", and found three or four occurrences in tables that said
something like "this value is invalid", and one or two more that said
"these values are invalid", in text, not in tables.

Are those occurrences the patterns that you're referencing in "the patterns
MUST NOT appear in any valid bitstream, in any prior, present, or future
versions of the format"?

In any event, it would be helpful to the reader if you had a table that
said "these are patterns are invalid", and if it makes sense to include a
forward reference to someplace in the document that explains where each
pattern might occur, that would also be helpful.

A separate comment - I'd suggest "in any future version of the format". You
can't have a MUST requirement that controls what's happened in the past. Is
this document describing the present version of the format?

   All numbers used in a FLAC bitstream MUST be integers, there are no

   floating-point representations.  All numbers MUST be big-endian

   coded, except the field length used in Vorbis comments, which MUST be

   little-endian coded.  All numbers MUST be unsigned except linear

   predictor coefficients, the linear prediction shift and numbers which

   directly represent samples, which MUST be signed.  None of these

   restrictions apply to application metadata blocks or to Vorbis

   comment field contents.

These ^^^^ MUSTs aren't really MUSTs. They are "MUST, except when". Does it
make sense to have a decoder check for them, and take action when they are
violated? Or are these statements of fact ("All numbers will be big-endian
encoded, except the field length used in Vorbis comments, which will be
little-endian coded.")

Also - this is the first occurrence of "Vorbis" in the document. Could you
add a reference for this?

7.  Format lay-out

   Since a decoder MAY start decoding in the middle of a stream, there

   MUST be a method to determine the start of a frame.  A 15-bit sync

These ^^^^ are almost certainly statements of fact. I'd suggest something
like "In order to allow a decoder to start decoding in the middle of a
stream, a 15-bit sync code begins each frame".

   code begins each frame.  The sync code will not appear anywhere else

   in the frame header.  However, since it MAY appear in the subframes,

   the decoder has two other ways of ensuring a correct sync.  The first

   is to check that the rest of the frame header contains no invalid

   data.  Even this is not foolproof since valid header patterns can

   still occur within the subframes.  The decoder's final check is to

   generate an 8-bit CRC of the frame header and compare this to the CRC

   stored at the end of the frame header.

   Also, since a decoder MAY start decoding at an arbitrary frame in the

   stream, each frame header MUST contain some basic information about

   the stream because the decoder MAY not have access to the STREAMINFO

Same suggestion as before - these are statements of fact. I'd suggest "In
order to allow a decoder to start decoding at an arbitrary frame in the
stream, each frame header contains some basic information about the stream,
in the event that the decoder does not have access to the STREAMINFO
metadata block at the start of the stream."

   metadata block at the start of the stream.  This information includes

   sample rate, bits per sample, number of channels, etc.  Since the

   frame header is pure overhead, it has a direct effect on the

   compression ratio.  To keep the frame header as small as possible,

   FLAC uses lookup tables for the most commonly used values for frame

   properties.  When a certain property has a value that is not covered

   by the lookup table, the decoder is directed to find the value of

   that property (for example the sample rate) at the end of the frame

   header or in the streaminfo metadata block.  In case a frame header

   refers to the streaminfo metadata block, the file is not

   'streamable', see section format subset (#format-subset) for details.

   In this way, the file is streamable and the frame header size small

   for all of the most common forms of audio data.

8.  Format subset

   *  The sample rate bits (#sample-rate-bits) in the frame header MUST

      be 0b0001-0b1110, i.e. the frame header MUST NOT refer to the

      streaminfo metadata block to find the sample rate.

   *  The bits depth bits (#bit-depth-bits) in the frame header MUST be

      0b001-0b111, i.e. the frame header MUST NOT refer to the

      streaminfo metadata block to find the bit depth.

On these two bullets ^^^^, is "to find" the best wording? I wonder if these
bullets should say "to describe" instead.

9.2.  Streaminfo

   The minimum block size is excluding the last block of a FLAC file,

   which may be smaller.  If the minimum block size is equal to the

   maximum block size, the file contains a fixed block size stream.

   Note that in case of a stream with a variable block size, the actual

   maximum block size MAY be smaller than the maximum block size listed

   in the streaminfo block, and the actual smallest block size excluding

   the last block MAY be larger than the minimum block size listed in

   the streaminfo block.  This is because the encoder has to write these

   fields before receiving any input audio data, and cannot know

   beforehand what block sizes it will use, only between what bounds

   these will be chosen.

^^^^ This explanation seems important enough to make it clearer. If I
understand correctly, these aren't "minimum and maximum block sizes",
they're "minimum and maximum block size bounds". Would it be useful, and
not excessively painful, to make that terminology change?

   The MD5 signature is made by performing an MD5 transformation on the

   samples of all channels interleaved, represented in signed, little-

   endian form.  This interleaving is on a per-sample basis, so for a

   stereo file this means first the first sample of the first channel,

   then the first sample of the second channel, then the second sample

   of the first channel etc.  Before performing the MD5 transformation,

This text ^^^^ is accurate, but I can't understand it without reading it
out loud, with appropriate pauses. Would a picture of the samples being
interleaved before the MD5 transformation help?

   all samples must be byte-aligned.  So, in case the bit depth is not a

   whole number of bytes, additional zero bits are inserted at the most-

   significant position until each sample representation is a whole

   number of bytes.

9.4.  Application

   The application metadata block is for use by third-party

   applications.  The only mandatory field is a 32-bit identifier, much

   like a FourCC but not restricted to ASCII characters.  An ID registry

"FourCC" isn't defined in the document, but is there a reference that you
could include?

   is being maintained at https://xiph.org/flac/id.html

   (https://xiph.org/flac/id.html).

9.6.  Vorbis comment

   Note that the Vorbis comment as used in Vorbis allows for on the

   order of 2^64 bytes of data whereas the FLAC metadata block is

   limited to 2^24 bytes.  Given the stated purpose of Vorbis comments,

   i.e. human-readable textual information, this limit is unlikely to be

My suggestion would be "the FLAC metadata limit is unlikely to be
restrictive".

   restrictive.  Also note that the 32-bit field lengths are coded

   little-endian, as opposed to the usual big-endian coding of fixed-

   length integers in the rest of the FLAC format.

9.6.2.  Channel mask

   Besides fields containing information about the work itself, one

   field is defined for technical reasons, of which the field name is

   WAVEFORMATEXTENSIBLE_CHANNEL_MASK.  This field contains information

   on which channels the file contains.  Use of this field is

   RECOMMENDED in case these differ from the channels defined in the

   section channels bits (#channels-bits).

I have a question here - if this field doesn't match the section channel
bits, which one is assumed to be correct? I would have guessed that if the
channel mask is present, it is assumed to be correct, but I am guessing.

9.7.  Cuesheet

   If the media catalog number is less than 128 bytes long, it SHOULD be

   right-padded with NUL characters.  For CD-DA, this is a thirteen

   digit number, followed by 115 NUL bytes.

Why is this ^^^^ a SHOULD? Is this for legacy support, or support of
incorrect implementations, or something else?

9.7.1.  Cuesheet track

   A track number of 0 is not allowed to avoid conflicting with the CD-

I would suggest "is not allowed, because the CD-DA spec reserves this for
the lead-in".

   DA spec, which reserves this for the lead-in.  For CD-DA the number

   MUST be 1-99, or 170 for the lead-out; for non-CD-DA, the track

   number MUST be 255 for the lead-out.  It is RECOMMENDED to start with

   track 1 and increase sequentially.  Track numbers MUST be unique

   within a cuesheet.

9.8.  Picture

   The following table contains all defined picture types.  Values other

   than those listed in the table are reserved and SHOULD NOT be used.

If values other than those listed in the table are used, what if anything
should the decoder do? Is there a MUST requirement that a decoder must
check for the SHOULD NOT values, and handle them appropriately, or simply
not crash?

   There MAY only be one each of picture type 1 and 2 in a file.  In

   general practice, many FLAC playback devices and software display the

   contents of a picture metadata block with picture type 3 (front

   cover) during playback, if present.

10.1.2.  Sample rate bits

   The next 4 bits, referred to as the sample rate bits, contain the

   sample rate of the audio according to the following table.  In case

   the sample rate bits code for an uncommon sample rate, this is stored

   after the uncommon block size or after the coded number in case no

Nit: I'd suggest "if no uncommon block size was used". I see other
occurrences of "in case" in the document, so I'll ask that you look at
those occurrences as well.

   uncommon block size was used.  See section uncommon sample rate

   (#uncommon-sample-rate).

10.1.3.  Channels bits

   The next 4 bits (the first 4 bits of the fourth byte of each frame),

"(the first 4 bits of the fourth byte of each frame)" seems very helpful.
Would it make sense to add this guidance at the beginning of each of the
sections that begin with "the next 4 bits"?

   referred to as the channels bits, code for both the number of

   channels of the audio as well as any stereo decorrelation used

   according to the following table.

10.1.4.  Bit depth bits

   The next 3 bits code for the bit depth of the audio according to the

   following table.

Is this saying "The next 3 bits encode the bit depth"?

10.2.2.  Wasted bits per sample

   The wasted bits-per-sample flag in a subframe header is set to 1 if a

   certain number of least-significant bits of all samples in the

I'm confused - what is the "certain number"? Is this (I'm guessing) a
number that might vary between audio file types?

   current subframe are zero.  If this is the case, the number of wasted

   bits-per-sample (k) minus 1 follows the flag in an unary encoding.

   For example, if k is 3, 0b001 follows.  If k =3D 0, the wasted bits-

   per-sample flag is 0 and no unary coded k follows.

   In case k is not equal to 0, samples are coded ignoring k least-

   significant bits.  For example, if the preceding frame header

   specified a sample size of 16 bits per sample and k is 3, samples in

   the subframe are coded as 13 bits per sample.  A decoder MUST add k

   least-significant zero bits by shifting left (padding) after decoding

   a subframe sample.  In case the frame has left/side, right/side or

   mid/side stereo, padding MUST happen to a sample before it is used to

Is this "a decoder MUST perform padding before constructing a left or right
sample"?

   reconstruct a left or right sample.

10.2.5.  Fixed predictor subframe

   As a predictor makes use of samples preceding the sample that is

   predicted, it can only be used when enough such samples are known.

I'd suggest "enough samples" here.

   As each subframe in FLAC is coded completely independent, the first

I'd suggest "coded completely independently".

   few samples in each subframe cannot be predicted.  Therefore, a

   number of so-called warm-up samples equal to the predictor order is

   stored.  These are stored unencoded, bypassing the predictor and

   residual coding stage.  See section on Constant subframe (#constant-

   subframe) on how samples are stored unencoded.  The table below

   defines how a fixed predictor subframe appears in the bitstream.

   To encode a signal with a fixed predictor, each sample has the

   corresponding prediction subtracted and sent to the residual coder.

   To decode a signal with a fixed predictor, first the residual has to

   be decoded, after which for each sample the prediction can be added.

I'd suggest "the residual is decoded, and then the prediction can be added
for each sample".

I have the same comment about Section 10.2.6 below.

   This means that decoding MUST be a sequential process within a

   subframe, as for each sample, enough fully decoded previous samples

   are needed to calculate the prediction.

10.2.7.3.  Residual sample value limit

   All residual samples values MUST be representable in the range

   offered by a 32-bit integer, signed one's complement.  Equivalently,

   all residual sample values MUST fall in the range offered by a 32-bit

   integer signed two's complement excluding the most negative possible

   value of that range.  This means residual sample values MUST NOT have

   an absolute value equal to or larger then 2 to the power 31.  A FLAC

I'd suggest "equal to, or larger than, 2 to the power 31". You might also
say "larger than 2 ** 31" here, I think.

   encoder MUST make sure of this.  In case a FLAC encoder is, for a

   certain subframe, unable to find a suitable predictor of which all

   residual samples fall within said range, it MUST default to writing a

   verbatim subframe.  The appendix numerical considerations

   (#numerical-considerations) explains in which circumstances residual

   samples are already implicitly representable in said range and thus

   an additional check is not needed.

10.3.  Frame footer

   Following the last subframe is the frame footer.  If the last

   subframe is not byte aligned (i.e. the bits required to store all

   subframes put together are not divisible by 8), zero bits are added

   until byte alignment is reached.  Following this is a 16-bit CRC,

^^^^ I think this is "Following the last subframe is the frame footer.  If
the last subframe is not byte aligned (i.e. the number of bits required to
store all subframes put together is not divisible by 8), zero bits are
added until byte alignment is reached."

   initialized with 0, with polynomial x^16 + x^15 + x^2 + x^0.  This

   CRC covers the whole frame excluding the 16-bit CRC, including the

   sync code.

11.1.  Ogg mapping

   In case an audio stream is encoded where audio properties (sample

   rate, number of channels or bit depth) change at some point in the

   stream, this should be dealt with by finishing encoding of the

   current Ogg stream and starting a new Ogg stream concatenated to the

   previous one.  This is called chaining in Ogg. See the Ogg

   specification for details.

I know you provided a reference for Ogg on first use, but suggest repeating
it here, for the less careful readers.

11.3.  ISO Base Media File Format (MP4) mapping

   The full encapsulation definition of FLAC audio in MP4 files was

   deemed too extensive to include in this document.  A definition

   document can be found at

   https://github.com/xiph/flac/blob/master/doc/isoflac.txt

   (https://github.com/xiph/flac/blob/master/doc/isoflac.txt) This

This might be clearer if it said "The definitions document is summarized
here."

   document is summarized here.

13.  Security Considerations

   Implementations of the FLAC codec need to take appropriate security

   considerations into account.  Those related to denial of service are

   outlined in Section 2.1 of [RFC4732].  It is extremely important for

   the decoder to be robust against malicious payloads.  Malicious

   payloads MUST NOT cause the decoder to overrun its allocated memory

   or to take an excessive amount of resources to decode.  An overrun in

I understand the use of the word "malicious" here, but would it be correct
to say "payloads that do not conform to this specification MUST NOT cause
..."? It seems that the problem is that the payload might cause
unsuspicious implementations to misbehave, from a security perspective, not
that the payload is **intended** to cause unsuspicious implementations to
misbehave.

   allocated memory could lead to arbitrary code execution by an

   attacker.  The same applies to the encoder, even though problems in

   encoders are typically rarer.  Malicious audio streams MUST NOT cause

   the encoder to misbehave because this would allow an attacker to

   attack transcoding gateways.

   As with all compression algorithms, both encoding and decoding can

   produce an output much larger than the input.  In case of decoding,

   the most extreme possible case of this is a frame with eight constant

   subframes of block size 65535 and coding for 32-bit PCM.  This frame

   is only 49 byte in size, but codes for more than 2 megabyte of

   uncompressed PCM data.  For encoding, it is possible to have an even

   larger size increase, although such behavior is generally considered

   faulty.  This happens if the encoder chooses a rice parameter that

   does not fit with the residual that has to be encoded.  In such a

   case, very long unary coded symbols can appear, in the most extreme

   case more than 4 gigabyte per sample.  It is RECOMMENDED decoder and

"RECOMMENDED" is a BCP14 synonym for "SHOULD". Are there any reasons that
decoder and encoder implementations ought not take these precautions? If
not, I'd suggest MUST, but this might be better as "Decoder and encoder
implementors are advised to take precautions".

   encoder implementations take precautions to prevent excessive

   resource utilization in such cases.

   When metadata is handled, it is RECOMMENDED to either thoroughly test

   handling of extreme cases or impose reasonable limits beyond the

Again, is there a reason why implementors ought not to do these things? If
not, I'd suggest MUST, or alternatively "implementors are advised", as in
the previous comment.

   limits of this specification document.  For example, a single Vorbis

   comment metadata block can contain millions of valid fields.  It is

   unlikely such a limit is ever reached except in a potentially

   malicious file.  Likewise the media type and description of a picture

   metadata block can be millions of characters long, despite there

   being no reasonable use of such contents.  One possible use case for

   very long character strings is in lyrics, which can be stored in

   Vorbis comment metadata block fields.

   Various kinds of metadata blocks contain length fields or fields

   counts.  While reading a block following these lengths or counts, a

   decoder MUST make sure higher-level lengths or counts (most

   importantly the length field of the metadata block itself) are not

   exceeded.  As some of these length fields code string lengths, memory

   for which must be allocated, it is RECOMMENDED to first verify that

Again, is there a reason implementations ought not to do this? If not, I'd
suggest MUST, or alternatively, "implementors are advised".

   block is valid before allocating memory based on its contents.

   Seeking in a FLAC stream that is not in a container relies on the

   coded number in frame headers and optionally a seektable metadata

   block.  It is RECOMMENDED to employ thorough sanity checks on whether

Again, same comment about RECOMMENDED here.

   a found coded number or seekpoint is at all possible.  Without these

   checks, seeking might get stuck in an infinite loop when numbers in

   frames are non-consecutive or otherwise invalid, which could be used

   in denial of service attacks.

   It is RECOMMENDED to employ fuzz testing combined with different

Again, same comment about RECOMMENDED here.

   sanitizers on FLAC decoders to find security problems.  To improve

   efficiency of this process, a decoder SHOULD, on decoding, ignore the

Again, same comment about SHOULD here.

   results of CRC checks during fuzz testing.

   See the FLAC decoder testbench (https://wiki.hydrogenaud.io/

   index.php?title=3DFLAC_decoder_testbench) for a non-exhaustive list of

   FLAC files with extreme configurations which lead to crashes or

   reboots on some known implementations.

   None of the content carried in FLAC is intended to be executable.

Is this a requirement that decoders MUST NOT execute it?

14.  IANA Considerations

14.1.  Media type registration

   The following information serves as the registration form for the

   "audio/flac" media type.  This media type is applicable for FLAC

   audio packaged in its native container.  FLAC audio packaged in

   another container will take on the media type of its container, for

   example audio/ogg when packaged in an Ogg container or video/mp4 when

   packaged in a MP4 container alongside a video track.

   Type name: audio

   Subtype name: flac

   Required parameters: none

   Optional parameters: none

   Encoding considerations: as per this document

   Security considerations: see section 12

   Interoperability considerations: no known concerns

   Published specification: THISRFC

   Applications that use this media type: ffmpeg, apache, firefox

   Fragment identifier considerations: none

   Additional information:

     Deprecated alias names for this type: audio/x-flac

     Magic number(s): fLaC

     File extension(s): flac

     Macintosh file type code(s): none

   Person & email address to contact for further information: IETF CELLAR W=
G

   Intended usage: COMMON

   Restrictions on usage: N/A

   Author: IETF CELLAR WG

   Change controller: IESG

   Provisional registration? (standards tree only): NO

15.  Normative References

   [I-D.ietf-cellar-matroska]

              Lhomme, S., Bunkus, M., and D. Rice, "Matroska Media

              Container Format Specifications", Work in Progress,

              Internet-Draft, draft-ietf-cellar-matroska-14, 1 October

              2022, <https://www.ietf.org/archive/id/draft-ietf-cellar-

              matroska-14.txt>.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate

              Requirement Levels", BCP 14, RFC 2119,

              DOI 10.17487/RFC2119, March 1997,

              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC4732]  Handley, M., Ed., Rescorla, E., Ed., and IAB, "Internet

              Denial-of-Service Considerations", RFC 4732,

              DOI 10.17487/RFC4732, December 2006,

              <https://www.rfc-editor.org/info/rfc4732>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC

              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,

              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

16.  Informative References

   [HPL-1999-144]

              Hans, M. and RW. Schafer, "Lossless Compression of Digital

              Audio", DOI 10.1109/79.939834, November 1999,

              <https://www.hpl.hp.com/techreports/1999/HPL-

              1999-144.pdf>.

   [IEC.60908.1999]

              International Electrotechnical Commission, "Audio

              recording - Compact disc digital audio system",

              IEC International standard 60908 second edition, 1999.

   [ISRC-handbook]

              "International Standard Recording Code (ISRC) Handbook,

              4th edition", 2021, <https://www.ifpi.org/isrc_handbook/>.

   [RFC3533]  Pfeiffer, S., "The Ogg Encapsulation Format Version 0",

              RFC 3533, DOI 10.17487/RFC3533, May 2003,

              <https://www.rfc-editor.org/info/rfc3533>.

   [RFC5334]  Goncalves, I., Pfeiffer, S., and C. Montgomery, "Ogg Media

              Types", RFC 5334, DOI 10.17487/RFC5334, September 2008,

              <https://www.rfc-editor.org/info/rfc5334>.

   [RFC6716]  Valin, JM., Vos, K., and T. Terriberry, "Definition of the

              Opus Audio Codec", RFC 6716, DOI 10.17487/RFC6716,

              September 2012, <https://www.rfc-editor.org/info/rfc6716>.

   [RFC7942]  Sheffer, Y. and A. Farrel, "Improving Awareness of Running

              Code: The Implementation Status Section", BCP 205,

              RFC 7942, DOI 10.17487/RFC7942, July 2016,

              <https://www.rfc-editor.org/info/rfc7942>.

   [robinson-tr156]

              Robinson, T., "SHORTEN: Simple lossless and near-lossless

              waveform compression", December 1994,

              <https://mi.eng.cam.ac.uk/reports/abstracts/

              robinson_tr156.html>.

--000000000000480d7705f5a56f73
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Dear Cellar,<div><br></div><div>I&#39;m still working my w=
ay through=C2=A0<a href=3D"https://datatracker.ietf.org/doc/draft-ietf-cell=
ar-flac/">https://datatracker.ietf.org/doc/draft-ietf-cellar-flac/</a>. I s=
till need to read the Appendices, but I wanted to pass along my notes so fa=
r.=C2=A0</div><div><br></div><div>In general, I like the document. I do hav=
e questions, especially about the use of BCP14 terminology, and some sugges=
tions for readability, but this should=C2=A0get discussion started.=C2=A0</=
div><div><br></div><div>I expect to have the reviews of the appendices done=
 by tomorrow at close of business, my time.</div><div><br></div><div>Best,<=
/div><div><br></div><div>Spencer</div><div>-----------</div><div><span id=
=3D"gmail-docs-internal-guid-dc629574-7fff-bcaf-a16c-3c2ee92be499"><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">I have a coupl=
e of comments on the abstract.</span></p><br><p dir=3D"ltr" style=3D"line-h=
eight:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;=
font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:trans=
parent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-=
align:baseline;white-space:pre-wrap">Abstract</span></p><br><p dir=3D"ltr" =
style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"=
font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgro=
und-color:transparent;font-variant-numeric:normal;font-variant-east-asian:n=
ormal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0This =
document defines the Free Lossless Audio Codec (FLAC) format.</span></p><p =
dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><sp=
an style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,=
0,0);background-color:transparent;font-variant-numeric:normal;font-variant-=
east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=
=A0=C2=A0FLAC is designed to reduce the amount of computer storage space</s=
pan></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bott=
om:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;c=
olor:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;fo=
nt-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=
=C2=A0=C2=A0=C2=A0needed to store digital audio signals without needing to =
remove</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;ma=
rgin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier Ne=
w&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:=
normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:p=
re-wrap">=C2=A0=C2=A0=C2=A0information in doing so (i.e. lossless).=C2=A0=
=C2=A0</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0p=
t;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courie=
r New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-nume=
ric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-spa=
ce:pre-wrap">I might say, &quot;without losing information in doing so (i.e=
. lossless).&quot;</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;m=
argin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:=
&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-=
variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseli=
ne;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0FLAC is free in the sense</span>=
</p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0=
pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color=
:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-v=
ariant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0that its specification is open, its reference implementation=
 is open-</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt=
;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier=
 New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numer=
ic:normal;font-variant-east-asian:normal;vertical-align:baseline;white-spac=
e:pre-wrap">=C2=A0=C2=A0=C2=A0source and it is not encumbered by any known =
patent.=C2=A0=C2=A0</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;=
margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family=
:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font=
-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:basel=
ine;white-space:pre-wrap">This ^^^^ might all be true, but I&#39;d suggest =
removing at least &quot;and it is not encumbered by any known patent&quot;.=
 The IETF tries not to make statements about whether a technology is encumb=
ered - the first question a reviewer would ask, is &quot;any patent known t=
o whom?&quot;, and it would get worse from there.=C2=A0</span></p><br><p di=
r=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span=
 style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,=
0);background-color:transparent;font-variant-numeric:normal;font-variant-ea=
st-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0Compared to</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin=
-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot=
;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varia=
nt-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;wh=
ite-space:pre-wrap">=C2=A0=C2=A0=C2=A0other lossless (audio) coding formats=
, FLAC is a format with low</span></p><p dir=3D"ltr" style=3D"line-height:1=
.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fa=
mily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;=
font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:b=
aseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0complexity and can be coded=
 to and from with little computing</span></p><p dir=3D"ltr" style=3D"line-h=
eight:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;=
font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:trans=
parent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-=
align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0resources.=C2=A0 Dec=
oding of FLAC has seen many independent</span></p><p dir=3D"ltr" style=3D"l=
ine-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:=
10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:=
transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vert=
ical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0implementations=
 on many different platforms, and both encoding and</span></p><p dir=3D"ltr=
" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0d=
ecoding can be implemented without needing floating-point</span></p><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0arithmetic.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;ma=
rgin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&=
quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-v=
ariant-numeric:normal;font-variant-east-asian:normal;vertical-align:baselin=
e;white-space:pre-wrap">1.=C2=A0 Introduction</span></p><br><p dir=3D"ltr" =
style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"=
font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgro=
und-color:transparent;font-variant-numeric:normal;font-variant-east-asian:n=
ormal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0The c=
oding methods provided by the FLAC format work best on PCM audio</span></p>=
<p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt">=
<span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb=
(0,0,0);background-color:transparent;font-variant-numeric:normal;font-varia=
nt-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=
=C2=A0=C2=A0signals of which the samples have a signed representation and a=
re</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin=
-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&qu=
ot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:norm=
al;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-w=
rap">=C2=A0=C2=A0=C2=A0centered around zero.=C2=A0 Audio signals in which s=
amples have an</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-to=
p:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Co=
urier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-=
numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white=
-space:pre-wrap">=C2=A0=C2=A0=C2=A0unsigned representation must be transfor=
med to a signed</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-t=
op:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;C=
ourier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant=
-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whit=
e-space:pre-wrap">=C2=A0=C2=A0=C2=A0representation as described in this doc=
ument in order to achieve</span></p><p dir=3D"ltr" style=3D"line-height:1.3=
8;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fami=
ly:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fo=
nt-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:bas=
eline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0reasonable compression.=C2=A0=
 The FLAC format is not suited to compress</span></p><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0audio that=
 is not PCM.=C2=A0=C2=A0</span></p><br><p dir=3D"ltr" style=3D"line-height:=
1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-f=
amily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent=
;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:=
baseline;white-space:pre-wrap">Given ^^^^, do you need to say this? Is ther=
e a meaningful difference between &quot;not suited for&quot; and &quot;cann=
one be compressed&quot;?=C2=A0</span></p><br><p dir=3D"ltr" style=3D"line-h=
eight:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;=
font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:trans=
parent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-=
align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Pulse-density modula=
ted audio, e.g.=C2=A0 DSD,</span></p><p dir=3D"ltr" style=3D"line-height:1.=
38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fam=
ily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;f=
ont-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:ba=
seline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0cannot be compressed by FLAC=
.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;mar=
gin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New=
&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:n=
ormal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pr=
e-wrap">2.=C2=A0 Notation and Conventions</span></p><br><p dir=3D"ltr" styl=
e=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font=
-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-=
color:transparent;font-variant-numeric:normal;font-variant-east-asian:norma=
l;vertical-align:baseline;white-space:pre-wrap">In this next paragraph, I&#=
39;d suggest replacing &quot;may be&quot; with &quot;are&quot;. &quot;May&q=
uot; tends to be used in describing protocol operations in the IETF, and th=
ese are statements of fact.=C2=A0</span></p><br><p dir=3D"ltr" style=3D"lin=
e-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10=
pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:tr=
ansparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertic=
al-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Values expressed =
as u(n) represent unsigned big-endian integer using</span></p><p dir=3D"ltr=
" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0n=
 bits.=C2=A0 Values expressed as s(n) represent signed big-endian integer</=
span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bot=
tom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;=
color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;f=
ont-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"=
>=C2=A0=C2=A0=C2=A0using n bits, signed two&#39;s complement. n may be expr=
essed as an</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0=
pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Couri=
er New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-num=
eric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-sp=
ace:pre-wrap">=C2=A0=C2=A0=C2=A0equation using * (multiplication), / (divis=
ion), + (addition), or -</span></p><p dir=3D"ltr" style=3D"line-height:1.38=
;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-famil=
y:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fon=
t-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:base=
line;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0(subtraction).=C2=A0 An inclus=
ive range of the number of bits expressed</span></p><p dir=3D"ltr" style=3D=
"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-siz=
e:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-colo=
r:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ve=
rtical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0may be repres=
ented with an ellipsis, such as u(m...n).=C2=A0 The name of a</span></p><p =
dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><sp=
an style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,=
0,0);background-color:transparent;font-variant-numeric:normal;font-variant-=
east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=
=A0=C2=A0value followed by an asterisk * indicates zero or more occurrences=
 of</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margi=
n-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&q=
uot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:nor=
mal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-=
wrap">=C2=A0=C2=A0=C2=A0the value.=C2=A0 The name of a value followed by a =
plus sign + indicates</span></p><p dir=3D"ltr" style=3D"line-height:1.38;ma=
rgin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&=
quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-v=
ariant-numeric:normal;font-variant-east-asian:normal;vertical-align:baselin=
e;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0one or more occurrences of the va=
lue.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;=
margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier =
New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeri=
c:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space=
:pre-wrap">3.=C2=A0 Acknowledgments</span></p><br><p dir=3D"ltr" style=3D"l=
ine-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:=
10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:=
transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vert=
ical-align:baseline;white-space:pre-wrap">This section is very nice. We wou=
ld ordinarily put an acknowledgement section at the end of a document, so, =
in this case, it would be after IANA Considerations.=C2=A0</span></p><br><p=
 dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><s=
pan style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0=
,0,0);background-color:transparent;font-variant-numeric:normal;font-variant=
-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">The RFC Ed=
itor folks may ask you to move the URLs in this section to Informative Refe=
rences, and use reference tags to link the people to the work they did.=C2=
=A0</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;m=
argin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier N=
ew&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric=
:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:=
pre-wrap">=C2=A0=C2=A0=C2=A0FLAC owes much to the many people who have adva=
nced the audio</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-to=
p:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Co=
urier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-=
numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white=
-space:pre-wrap">=C2=A0=C2=A0=C2=A0compression field so freely.=C2=A0 For i=
nstance:</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:=
0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cour=
ier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-nu=
meric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-s=
pace:pre-wrap">=C2=A0=C2=A0=C2=A0*=C2=A0 A.=C2=A0 J.=C2=A0 Robinson (<a hre=
f=3D"https://web.archive.org/web/20160315141134/">https://web.archive.org/w=
eb/20160315141134/</a></span></p><p dir=3D"ltr" style=3D"line-height:1.38;m=
argin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:=
&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-=
variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseli=
ne;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0<a href=3D"htt=
p://mi.eng.cam.ac.uk/~ajr/">http://mi.eng.cam.ac.uk/~ajr/</a>) for his work=
 on Shorten; his paper</span></p><p dir=3D"ltr" style=3D"line-height:1.38;m=
argin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:=
&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-=
variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseli=
ne;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0([robinson-tr1=
56]) is a good starting point on some of the basic</span></p><p dir=3D"ltr"=
 style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D=
"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgr=
ound-color:transparent;font-variant-numeric:normal;font-variant-east-asian:=
normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0methods used by FLAC.=C2=A0 FLAC trivially extends and impro=
ves the</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;m=
argin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier N=
ew&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric=
:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:=
pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0fixed predictors, LPC coeffic=
ient quantization, and Rice coding</span></p><p dir=3D"ltr" style=3D"line-h=
eight:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;=
font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:trans=
parent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-=
align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0us=
ed in Shorten.</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-to=
p:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Co=
urier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-=
numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white=
-space:pre-wrap">=C2=A0=C2=A0=C2=A0*=C2=A0 S.=C2=A0 W.=C2=A0 Golomb</span><=
/p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0p=
t"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:=
rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-va=
riant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0(<a href=3D"https://web.archive.org/web/20=
040215005354/http://csi.usc.edu/">https://web.archive.org/web/2004021500535=
4/http://csi.usc.edu/</a></span></p><p dir=3D"ltr" style=3D"line-height:1.3=
8;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fami=
ly:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fo=
nt-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:bas=
eline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0faculty/gol=
omb.html) and Robert F.=C2=A0 Rice; their universal codes</span></p><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0are used by FLAC&#39;s entropy coder.</span></p><p =
dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><sp=
an style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,=
0,0);background-color:transparent;font-variant-numeric:normal;font-variant-=
east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=
=A0=C2=A0*=C2=A0 N.=C2=A0 Levinson and J.=C2=A0 Durbin; the reference encod=
er uses an</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0p=
t;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courie=
r New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-nume=
ric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-spa=
ce:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0algorithm developed and re=
fined by them for determining the LPC</span></p><p dir=3D"ltr" style=3D"lin=
e-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10=
pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:tr=
ansparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertic=
al-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0coefficients from the autocorrelation coefficients.</span></p><p dir=3D"=
ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span styl=
e=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);ba=
ckground-color:transparent;font-variant-numeric:normal;font-variant-east-as=
ian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=
*=C2=A0 And of course, Claude Shannon (<a href=3D"https://en.wikipedia.org/=
wiki/">https://en.wikipedia.org/wiki/</a></span></p><p dir=3D"ltr" style=3D=
"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-siz=
e:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-colo=
r:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ve=
rtical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0Claude_Shannon)</span></p><br><p dir=3D"ltr" style=3D"line-height:1.3=
8;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fami=
ly:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fo=
nt-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:bas=
eline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0The FLAC format, the FLAC ref=
erence implementation and this document</span></p><p dir=3D"ltr" style=3D"l=
ine-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:=
10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:=
transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vert=
ical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0were originally=
 developed by Josh Coalson.=C2=A0 While many others have</span></p><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0contributed since, this original effort is deeply appreciated.</span>=
</p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bott=
om:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;c=
olor:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;fo=
nt-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=
4.=C2=A0 Definitions</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38=
;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-famil=
y:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fon=
t-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:base=
line;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0*=C2=A0 *Subframe*: An encoded=
 subblock.=C2=A0 All subframes within a frame</span></p><p dir=3D"ltr" styl=
e=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font=
-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-=
color:transparent;font-variant-numeric:normal;font-variant-east-asian:norma=
l;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0code for the same number of samples.=C2=A0 A subframe MAY correspo=
nd to</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt=
;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier=
 New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numer=
ic:normal;font-variant-east-asian:normal;vertical-align:baseline;white-spac=
e:pre-wrap">I&#39;d suggest &quot;might correspond&quot;.</span></p><br><p =
dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><sp=
an style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,=
0,0);background-color:transparent;font-variant-numeric:normal;font-variant-=
east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0a subblock, else it corresponds to either the ad=
dition or</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt=
;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier=
 New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numer=
ic:normal;font-variant-east-asian:normal;vertical-align:baseline;white-spac=
e:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0subtraction of two subblock=
s, see section on interchannel</span></p><p dir=3D"ltr" style=3D"line-heigh=
t:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font=
-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpare=
nt;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-alig=
n:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0decorr=
elation (#interchannel-decorrelation).</span></p><br><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0*=C2=A0 *L=
inear predictor*: a predictor using linear prediction</span></p><p dir=3D"l=
tr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0(<a href=3D"https://en.wikipedia.org/wiki/Linear_predicti=
on">https://en.wikipedia.org/wiki/Linear_prediction</a>).=C2=A0 This is als=
o</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;mar=
gin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New=
&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:n=
ormal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pr=
e-wrap">I&#39;d create a reference for this URL, and include it as Informat=
ive.=C2=A0</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-to=
p:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Co=
urier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-=
numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white=
-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0called *linear predict=
ive coding (LPC)*. With a linear predictor</span></p><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0each prediction is a linear combination of past samples, hence the=
</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-b=
ottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot=
;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal=
;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wra=
p">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0name.=C2=A0 A linear predictor has a=
 causal discrete-time finite</span></p><p dir=3D"ltr" style=3D"line-height:=
1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-f=
amily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent=
;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:=
baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0impulse =
response (<a href=3D"https://en.wikipedia.org/wiki/">https://en.wikipedia.o=
rg/wiki/</a></span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:=
0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cour=
ier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-nu=
meric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-s=
pace:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Finite_impulse_response)=
.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;mar=
gin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New=
&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:n=
ormal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pr=
e-wrap">I&#39;d create a reference for this URL, and include it as Informat=
ive.=C2=A0</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-to=
p:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Co=
urier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-=
numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white=
-space:pre-wrap">=C2=A0=C2=A0=C2=A0*=C2=A0 *Rice code*: A variable-length c=
ode</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margi=
n-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&q=
uot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:nor=
mal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-=
wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0(<a href=3D"https://en.wikipedia.=
org/wiki/Variable-length_code">https://en.wikipedia.org/wiki/Variable-lengt=
h_code</a>) which</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;ma=
rgin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&=
quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-v=
ariant-numeric:normal;font-variant-east-asian:normal;vertical-align:baselin=
e;white-space:pre-wrap">I&#39;d create a reference for this URL, and includ=
e it as Informative.=C2=A0</span></p><br><p dir=3D"ltr" style=3D"line-heigh=
t:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font=
-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpare=
nt;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-alig=
n:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0compre=
sses data by making use of the observation that, after using</span></p><p d=
ir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><spa=
n style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0=
,0);background-color:transparent;font-variant-numeric:normal;font-variant-e=
ast-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0an effective predictor, most residual samples are c=
loser to zero</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top=
:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cou=
rier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-n=
umeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-=
space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0than the original sampl=
es, while still allowing for a small part</span></p><p dir=3D"ltr" style=3D=
"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-siz=
e:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-colo=
r:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ve=
rtical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0of the samples to be much larger.</span></p><br><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">5.=C2=A0 Conceptual overview=
</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&=
quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:no=
rmal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre=
-wrap">=C2=A0=C2=A0=C2=A0Similar to many audio coders, a FLAC file is encod=
ed following the</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;mar=
gin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&q=
uot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-va=
riant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline=
;white-space:pre-wrap">I&#39;d suggest &quot;many other audio coders&quot; =
(other than FLAC, right?)</span></p><br><p dir=3D"ltr" style=3D"line-height=
:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-=
family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparen=
t;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align=
:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0steps below.=C2=A0 On dec=
oding a FLAC file, these steps are undone in</span></p><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0reverse or=
der, i.e. from bottom to top.</span></p><br><p dir=3D"ltr" style=3D"line-he=
ight:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;f=
ont-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transp=
arent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-a=
lign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0*=C2=A0 Blocking (see=
 section on Blocking (#blocking)).=C2=A0 The input is</span></p><p dir=3D"l=
tr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0split up into many contiguous blocks.=C2=A0 With FLAC, th=
e blocks MAY</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:=
0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cour=
ier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-nu=
meric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-s=
pace:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0vary in size.=C2=A0 The =
optimal size of the block is usually affected</span></p><br><p dir=3D"ltr" =
style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"=
font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgro=
und-color:transparent;font-variant-numeric:normal;font-variant-east-asian:n=
ormal;vertical-align:baseline;white-space:pre-wrap">So, what you say is tru=
e, but I&#39;d suggest saying &quot;Because FLAC blocks can vary in size, a=
 FLAC decoder MUST be able to decode variable-sized blocks&quot;, so that t=
he weak permission of MAY for an encoder is reflected in a strong requireme=
nt of MUST for the decoder. I&#39;m assuming this is mandatory for decoders=
, unless it&#39;s OK for decoders to fail to decode conformant FLAC blocks.=
</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&=
quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:no=
rmal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre=
-wrap">(if you want to say &quot;MAY vary in size&quot;, I won&#39;t argue =
=F0=9F=99=82)</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin=
-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot=
;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varia=
nt-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;wh=
ite-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0by many factors, in=
cluding the sample rate, spectral</span></p><p dir=3D"ltr" style=3D"line-he=
ight:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;f=
ont-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transp=
arent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-a=
lign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0cha=
racteristics over time, etc.=C2=A0 However, as finding the optimal</span></=
p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt=
"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:r=
gb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0block size arrangement is a rather complex pr=
oblem, the FLAC</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-t=
op:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;C=
ourier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant=
-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whit=
e-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0format allows for a c=
onstant block size throughout a stream as</span></p><p dir=3D"ltr" style=3D=
"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-siz=
e:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-colo=
r:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ve=
rtical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0well.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-t=
op:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;C=
ourier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant=
-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whit=
e-space:pre-wrap">=C2=A0=C2=A0=C2=A0*=C2=A0 Prediction (see section on Pred=
iction (#prediction)).=C2=A0 To remove</span></p><p dir=3D"ltr" style=3D"li=
ne-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:1=
0pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:t=
ransparent;font-variant-numeric:normal;font-variant-east-asian:normal;verti=
cal-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0redundancy in a signal, a predictor is stored for each subblock or</span=
></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:=
0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;colo=
r:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-=
variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0its transformation as formed in the previo=
us step.=C2=A0 A predictor</span></p><p dir=3D"ltr" style=3D"line-height:1.=
38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fam=
ily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;f=
ont-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:ba=
seline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0consists o=
f a simple mathematical description that can be used, as</span></p><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0the name implies, to predict a certain sample from =
the samples</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0=
pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Couri=
er New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-num=
eric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-sp=
ace:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0that preceded it.=C2=A0 A=
s this prediction is rarely exact, the error</span></p><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0of this prediction is passed to the next stage.=C2=A0 The predicto=
r of</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&=
quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:no=
rmal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre=
-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0each subblock is completely inde=
pendent from other subblocks.</span></p><p dir=3D"ltr" style=3D"line-height=
:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-=
family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparen=
t;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align=
:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Since t=
he methods of prediction are known to both the encoder and</span></p><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0decoder, only the parameters of the predictor need =
be included in</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-to=
p:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Co=
urier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-=
numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white=
-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0the compressed stream.=
=C2=A0 In case no usable predictor can be found</span></p><p dir=3D"ltr" st=
yle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fo=
nt-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgroun=
d-color:transparent;font-variant-numeric:normal;font-variant-east-asian:nor=
mal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0for a certain subblock, the signal is stored instead of compres=
sed</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;m=
argin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier N=
ew&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric=
:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:=
pre-wrap">Meta-comment - the phrase &quot;in case&quot; appears about 20 ti=
mes in this document. I think this should be &quot;if&quot;, throughout.=C2=
=A0</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;m=
argin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier N=
ew&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric=
:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:=
pre-wrap">This may be super clear to those skilled in the art, but I wonder=
 if it would be clearer if it said, &quot;the uncompressed signal is stored=
 and the next stage is skipped&quot;</span></p><br><p dir=3D"ltr" style=3D"=
line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size=
:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color=
:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ver=
tical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0and the next stage is skipped.</span></p><br><p dir=3D"ltr" style=3D"=
line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size=
:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color=
:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ver=
tical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0*=C2=A0 Residu=
al Coding (See section on Residual Coding (#residual-</span></p><p dir=3D"l=
tr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0coding)).=C2=A0 As the predictor does not describe the si=
gnal exactly,</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top=
:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cou=
rier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-n=
umeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-=
space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0the difference between =
the original signal and the predicted</span></p><p dir=3D"ltr" style=3D"lin=
e-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10=
pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:tr=
ansparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertic=
al-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0signal (called the error or residual signal) MUST be coded</span></p><br=
><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"=
><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rg=
b(0,0,0);background-color:transparent;font-variant-numeric:normal;font-vari=
ant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">Is this=
 &quot;MUST&quot; a statement of reality (&quot;if you don&#39;t code the e=
rror losslessly, the signal cannot be decoded without losing information&qu=
ot;), or an actual requirement for the implementation?=C2=A0</span></p><br>=
<p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt">=
<span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb=
(0,0,0);background-color:transparent;font-variant-numeric:normal;font-varia=
nt-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">If the l=
atter, perhaps &quot;MUST be coded losslessly in order to recover the origi=
nal signal without loss&quot;.=C2=A0</span></p><br><p dir=3D"ltr" style=3D"=
line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size=
:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color=
:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ver=
tical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0losslessly.=C2=A0 If the predictor is effective, the residual signal<=
/span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bo=
ttom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;=
;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;=
font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap=
">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0will require fewer bits per sample th=
an the original signal.=C2=A0 FLAC</span></p><p dir=3D"ltr" style=3D"line-h=
eight:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;=
font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:trans=
parent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-=
align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0us=
es Rice coding, a subset of Golomb coding, with either 4-bit or</span></p><=
p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><=
span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(=
0,0,0);background-color:transparent;font-variant-numeric:normal;font-varian=
t-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A05-bit parameters to code the residual signal.</s=
pan></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-=
bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quo=
t;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:norma=
l;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wr=
ap">5.1.=C2=A0 Blocking</span></p><br><p dir=3D"ltr" style=3D"line-height:1=
.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fa=
mily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;=
font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:b=
aseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0The size used for blocking =
the audio data has a direct effect on the</span></p><p dir=3D"ltr" style=3D=
"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-siz=
e:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-colo=
r:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ve=
rtical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0compression r=
atio.=C2=A0 If the block size is too small, the resulting</span></p><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0large number of frames mean that excess bits will be wasted on frame<=
/span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bo=
ttom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;=
;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;=
font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap=
">=C2=A0=C2=A0=C2=A0headers.=C2=A0 If the block size is too large, the char=
acteristics of the</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margi=
n-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quo=
t;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-vari=
ant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;w=
hite-space:pre-wrap">=C2=A0=C2=A0=C2=A0signal may vary so much that the enc=
oder will be unable to find a</span></p><p dir=3D"ltr" style=3D"line-height=
:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-=
family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparen=
t;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align=
:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0good predictor.=C2=A0 In =
order to simplify encoder/decoder design, FLAC</span></p><p dir=3D"ltr" sty=
le=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fon=
t-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background=
-color:transparent;font-variant-numeric:normal;font-variant-east-asian:norm=
al;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0imposes =
a minimum block size of 16 samples, and a maximum block size</span></p><p d=
ir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><spa=
n style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0=
,0);background-color:transparent;font-variant-numeric:normal;font-variant-e=
ast-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0of 65535 samples.=C2=A0 This range covers the optimal size for all of=
 the</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&=
quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:no=
rmal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre=
-wrap">=C2=A0=C2=A0=C2=A0audio data FLAC supports.</span></p><br><p dir=3D"=
ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span styl=
e=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);ba=
ckground-color:transparent;font-variant-numeric:normal;font-variant-east-as=
ian:normal;vertical-align:baseline;white-space:pre-wrap">Is there a referen=
ce that could be included for the last statement here? ^</span></p><br><p d=
ir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><spa=
n style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0=
,0);background-color:transparent;font-variant-numeric:normal;font-variant-e=
ast-asian:normal;vertical-align:baseline;white-space:pre-wrap">5.3.=C2=A0 P=
rediction</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top=
:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cou=
rier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-n=
umeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-=
space:pre-wrap">=C2=A0=C2=A0=C2=A0A FLAC encoder is free in selecting which=
 method is used to model the</span></p><p dir=3D"ltr" style=3D"line-height:=
1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-f=
amily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent=
;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:=
baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0input, with the following =
exceptions:</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-t=
op:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;C=
ourier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant=
-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whit=
e-space:pre-wrap">=C2=A0=C2=A0=C2=A0*=C2=A0 When the samples that need to b=
e stored do not all have the same</span></p><p dir=3D"ltr" style=3D"line-he=
ight:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;f=
ont-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transp=
arent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-a=
lign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0val=
ue (i.e. the signal is not constant), a constant subframe MUST</span></p><p=
 dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><s=
pan style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0=
,0,0);background-color:transparent;font-variant-numeric:normal;font-variant=
-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0NOT be used,</span></p><br><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">My experience has been that =
if you&#39;re saying &quot;this is a bad idea&quot;, it&#39;s better to exp=
lain the consequences (&quot;using a constant subframe when the input signa=
l is not constant, will result in very compact and inaccurate decoded strea=
ms&quot;). If you&#39;re saying &quot;MUST NOT be used&quot;, a decoder MUS=
T detect that you&#39;re violating a MUST requirement, and the decoder&#39;=
s behavior would be undefined.=C2=A0</span></p><br><p dir=3D"ltr" style=3D"=
line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size=
:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color=
:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ver=
tical-align:baseline;white-space:pre-wrap">Which are you saying?=C2=A0</spa=
n></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bo=
ttom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;=
;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;=
font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap=
">=C2=A0=C2=A0=C2=A0*=C2=A0 When an encoder is unable to find a fixed or li=
near predictor of</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin=
-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot=
;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varia=
nt-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;wh=
ite-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0which all residual =
samples are representable in 32-bit signed</span></p><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0integers as stated in section coded residual (#coded-residual), a<=
/span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bo=
ttom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;=
;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;=
font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap=
">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0verbatim subframe MUST be used.</span=
></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bot=
tom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;=
color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;f=
ont-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"=
>I have a similar comment here: are you saying &quot;this is what a wise en=
coder would do&quot;, or are you saying &quot;the decoder MUST detect that =
the encoder is violating a MUST protocol requirement and &lt;do something, =
perhaps just discarding the subframe&quot;?</span></p><br><p dir=3D"ltr" st=
yle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fo=
nt-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgroun=
d-color:transparent;font-variant-numeric:normal;font-variant-east-asian:nor=
mal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0For mor=
e information on fixed and linear predictors, see</span></p><p dir=3D"ltr" =
style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"=
font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgro=
und-color:transparent;font-variant-numeric:normal;font-variant-east-asian:n=
ormal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0[HPL-=
1999-144] and [robinson-tr156].</span></p><br><p dir=3D"ltr" style=3D"line-=
height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt=
;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:tran=
sparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical=
-align:baseline;white-space:pre-wrap">5.4.=C2=A0 Residual Coding</span></p>=
<br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0=
pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color=
:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-v=
ariant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0In case a subframe uses a predictor to approximate the audio=
 signal,</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;=
margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier =
New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeri=
c:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space=
:pre-wrap">=C2=A0=C2=A0=C2=A0a residual needs to be stored to &#39;correct&=
#39; the approximation to the</span></p><br><p dir=3D"ltr" style=3D"line-he=
ight:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;f=
ont-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transp=
arent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-a=
lign:baseline;white-space:pre-wrap">I&#39;d suggest &quot;is stored&quot;.<=
/span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margi=
n-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&q=
uot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:nor=
mal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-=
wrap">=C2=A0=C2=A0=C2=A0exact value.=C2=A0 When an effective predictor is u=
sed, the average</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-=
top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;=
Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varian=
t-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whi=
te-space:pre-wrap">=C2=A0=C2=A0=C2=A0numerical value of the residual sample=
s is smaller than that of the</span></p><p dir=3D"ltr" style=3D"line-height=
:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-=
family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparen=
t;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align=
:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0samples before prediction=
.=C2=A0 While having smaller values on average,</span></p><p dir=3D"ltr" st=
yle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fo=
nt-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgroun=
d-color:transparent;font-variant-numeric:normal;font-variant-east-asian:nor=
mal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0it is p=
ossible a few &#39;outlier&#39; residual samples are much larger than</span=
></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:=
0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;colo=
r:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-=
variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0any of the original samples.=C2=A0 Sometimes these outliers =
even exceed</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0=
pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Couri=
er New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-num=
eric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-sp=
ace:pre-wrap">=C2=A0=C2=A0=C2=A0the range the bit depth of the original aud=
io offers.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-to=
p:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Co=
urier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-=
numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white=
-space:pre-wrap">=C2=A0=C2=A0=C2=A0Quite often the optimal Rice parameter v=
aries over the course of a</span></p><p dir=3D"ltr" style=3D"line-height:1.=
38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fam=
ily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;f=
ont-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:ba=
seline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0subframe.=C2=A0 To accommoda=
te this, the residual can be split up into</span></p><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0partitions=
, where each partition has its own Rice parameter.=C2=A0 To keep</span></p>=
<p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt">=
<span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb=
(0,0,0);background-color:transparent;font-variant-numeric:normal;font-varia=
nt-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=
=C2=A0=C2=A0overhead and complexity low, the number of partitions used in a=
</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-b=
ottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot=
;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal=
;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wra=
p">=C2=A0=C2=A0=C2=A0subframe is limited to powers of two.</span></p><br><p=
 dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><s=
pan style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0=
,0,0);background-color:transparent;font-variant-numeric:normal;font-variant=
-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">I&#39;d su=
ggest &quot;MUST be a power of two&quot;.=C2=A0</span></p><br><p dir=3D"ltr=
" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">6.=C2=A0 Format pri=
nciples</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0=
pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Couri=
er New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-num=
eric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-sp=
ace:pre-wrap">=C2=A0=C2=A0=C2=A0FLAC has no format version information, but=
 it does contain reserved</span></p><p dir=3D"ltr" style=3D"line-height:1.3=
8;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fami=
ly:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fo=
nt-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:bas=
eline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0space in several places.=C2=
=A0 Future versions of the format MAY use this</span></p><p dir=3D"ltr" sty=
le=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fon=
t-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background=
-color:transparent;font-variant-numeric:normal;font-variant-east-asian:norm=
al;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0reserved=
 space safely without breaking the format of older streams.</span></p><p di=
r=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span=
 style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,=
0);background-color:transparent;font-variant-numeric:normal;font-variant-ea=
st-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0Older decoders MAY choose to abort decoding or skip data encoded with=
</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-b=
ottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot=
;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal=
;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wra=
p">=C2=A0=C2=A0=C2=A0newer methods.=C2=A0 Apart from reserved patterns, the=
 format specifies</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;ma=
rgin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&=
quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-v=
ariant-numeric:normal;font-variant-east-asian:normal;vertical-align:baselin=
e;white-space:pre-wrap">I&#39;d suggest &quot;data encoded using methods th=
ey do not recognize&quot;.=C2=A0</span></p><br><p dir=3D"ltr" style=3D"line=
-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10p=
t;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:tra=
nsparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertica=
l-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0invalid patterns i=
n certain places, meaning that the patterns MUST</span></p><p dir=3D"ltr" s=
tyle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"f=
ont-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgrou=
nd-color:transparent;font-variant-numeric:normal;font-variant-east-asian:no=
rmal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0NOT ap=
pear in any valid bitstream, in any prior, present, or future</span></p><p =
dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><sp=
an style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,=
0,0);background-color:transparent;font-variant-numeric:normal;font-variant-=
east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=
=A0=C2=A0versions of the format.=C2=A0 These invalid patterns are usually u=
sed to</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;ma=
rgin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier Ne=
w&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:=
normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:p=
re-wrap">=C2=A0=C2=A0=C2=A0make the synchronization mechanism more robust.<=
/span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margi=
n-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&q=
uot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:nor=
mal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-=
wrap">I need some help here, please. I searched the document for occurrence=
s of the word &quot;invalid&quot;, and found three or four occurrences in t=
ables that said something like &quot;this value is invalid&quot;, and one o=
r two more that said &quot;these values are invalid&quot;, in text, not in =
tables.=C2=A0</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin=
-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot=
;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varia=
nt-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;wh=
ite-space:pre-wrap">Are those occurrences the patterns that you&#39;re refe=
rencing in &quot;the patterns MUST NOT appear in any valid bitstream, in an=
y prior, present, or future versions of the format&quot;?</span></p><br><p =
dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><sp=
an style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,=
0,0);background-color:transparent;font-variant-numeric:normal;font-variant-=
east-asian:normal;vertical-align:baseline;white-space:pre-wrap">In any even=
t, it would be helpful to the reader if you had a table that said &quot;the=
se are patterns are invalid&quot;, and if it makes sense to include a forwa=
rd reference to someplace in the document that explains where each pattern =
might occur, that would also be helpful.=C2=A0</span></p><br><p dir=3D"ltr"=
 style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D=
"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgr=
ound-color:transparent;font-variant-numeric:normal;font-variant-east-asian:=
normal;vertical-align:baseline;white-space:pre-wrap">A separate comment - I=
&#39;d suggest &quot;in any future version of the format&quot;. You can&#39=
;t have a MUST requirement that controls what&#39;s happened in the past. I=
s this document describing the present version of the format?=C2=A0</span><=
/p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-botto=
m:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;co=
lor:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;fon=
t-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=
=C2=A0=C2=A0=C2=A0All numbers used in a FLAC bitstream MUST be integers, th=
ere are no</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0p=
t;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courie=
r New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-nume=
ric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-spa=
ce:pre-wrap">=C2=A0=C2=A0=C2=A0floating-point representations.=C2=A0 All nu=
mbers MUST be big-endian</span></p><p dir=3D"ltr" style=3D"line-height:1.38=
;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-famil=
y:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fon=
t-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:base=
line;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0coded, except the field length=
 used in Vorbis comments, which MUST be</span></p><p dir=3D"ltr" style=3D"l=
ine-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:=
10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:=
transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vert=
ical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0little-endian c=
oded.=C2=A0 All numbers MUST be unsigned except linear</span></p><p dir=3D"=
ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span styl=
e=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);ba=
ckground-color:transparent;font-variant-numeric:normal;font-variant-east-as=
ian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=
predictor coefficients, the linear prediction shift and numbers which</span=
></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:=
0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;colo=
r:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-=
variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0directly represent samples, which MUST be signed.=C2=A0 None=
 of these</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt=
;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier=
 New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numer=
ic:normal;font-variant-east-asian:normal;vertical-align:baseline;white-spac=
e:pre-wrap">=C2=A0=C2=A0=C2=A0restrictions apply to application metadata bl=
ocks or to Vorbis</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin=
-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot=
;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varia=
nt-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;wh=
ite-space:pre-wrap">=C2=A0=C2=A0=C2=A0comment field contents.</span></p><br=
><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"=
><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rg=
b(0,0,0);background-color:transparent;font-variant-numeric:normal;font-vari=
ant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">These ^=
^^^ MUSTs aren&#39;t really MUSTs. They are &quot;MUST, except when&quot;. =
Does it make sense to have a decoder check for them, and take action when t=
hey are violated? Or are these statements of fact (&quot;All numbers will b=
e big-endian encoded, except the field length used in Vorbis comments, whic=
h will be little-endian coded.&quot;)</span></p><br><p dir=3D"ltr" style=3D=
"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-siz=
e:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-colo=
r:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ve=
rtical-align:baseline;white-space:pre-wrap">Also - this is the first occurr=
ence of &quot;Vorbis&quot; in the document. Could you add a reference for t=
his?</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;=
margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier =
New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeri=
c:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space=
:pre-wrap">7.=C2=A0 Format lay-out</span></p><br><p dir=3D"ltr" style=3D"li=
ne-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:1=
0pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:t=
ransparent;font-variant-numeric:normal;font-variant-east-asian:normal;verti=
cal-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Since a decoder =
MAY start decoding in the middle of a stream, there</span></p><p dir=3D"ltr=
" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0M=
UST be a method to determine the start of a frame.=C2=A0 A 15-bit sync</spa=
n></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bo=
ttom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;=
;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;=
font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap=
">These ^^^^ are almost certainly statements of fact. I&#39;d suggest somet=
hing like &quot;In order to allow a decoder to start decoding in the middle=
 of a stream, a 15-bit sync code begins each frame&quot;.=C2=A0</span></p><=
br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0p=
t"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:=
rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-va=
riant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0code begins each frame.=C2=A0 The sync code will not appear =
anywhere else</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top=
:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cou=
rier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-n=
umeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-=
space:pre-wrap">=C2=A0=C2=A0=C2=A0in the frame header.=C2=A0 However, since=
 it MAY appear in the subframes,</span></p><p dir=3D"ltr" style=3D"line-hei=
ght:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fo=
nt-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpa=
rent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-al=
ign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0the decoder has two ot=
her ways of ensuring a correct sync.=C2=A0 The first</span></p><p dir=3D"lt=
r" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0i=
s to check that the rest of the frame header contains no invalid</span></p>=
<p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt">=
<span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb=
(0,0,0);background-color:transparent;font-variant-numeric:normal;font-varia=
nt-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=
=C2=A0=C2=A0data.=C2=A0 Even this is not foolproof since valid header patte=
rns can</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;m=
argin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier N=
ew&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric=
:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:=
pre-wrap">=C2=A0=C2=A0=C2=A0still occur within the subframes.=C2=A0 The dec=
oder&#39;s final check is to</span></p><p dir=3D"ltr" style=3D"line-height:=
1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-f=
amily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent=
;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:=
baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0generate an 8-bit CRC of t=
he frame header and compare this to the CRC</span></p><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0stored at =
the end of the frame header.</span></p><br><p dir=3D"ltr" style=3D"line-hei=
ght:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fo=
nt-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpa=
rent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-al=
ign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Also, since a decoder =
MAY start decoding at an arbitrary frame in the</span></p><p dir=3D"ltr" st=
yle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fo=
nt-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgroun=
d-color:transparent;font-variant-numeric:normal;font-variant-east-asian:nor=
mal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0stream,=
 each frame header MUST contain some basic information about</span></p><p d=
ir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><spa=
n style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0=
,0);background-color:transparent;font-variant-numeric:normal;font-variant-e=
ast-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0the stream because the decoder MAY not have access to the STREAMINFO<=
/span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margi=
n-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&q=
uot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:nor=
mal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-=
wrap">Same suggestion as before - these are statements of fact. I&#39;d sug=
gest &quot;In order to allow a decoder to start decoding at an arbitrary fr=
ame in the stream, each frame header contains some basic information about =
the stream, in the event that the decoder does not have access to the STREA=
MINFO metadata block at the start of the stream.&quot;</span></p><br><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0metadata block at the start of the stream.=C2=A0 This information inc=
ludes</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;mar=
gin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New=
&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:n=
ormal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pr=
e-wrap">=C2=A0=C2=A0=C2=A0sample rate, bits per sample, number of channels,=
 etc.=C2=A0 Since the</span></p><p dir=3D"ltr" style=3D"line-height:1.38;ma=
rgin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&=
quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-v=
ariant-numeric:normal;font-variant-east-asian:normal;vertical-align:baselin=
e;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0frame header is pure overhead, it=
 has a direct effect on the</span></p><p dir=3D"ltr" style=3D"line-height:1=
.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fa=
mily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;=
font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:b=
aseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0compression ratio.=C2=A0 To=
 keep the frame header as small as possible,</span></p><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0FLAC uses =
lookup tables for the most commonly used values for frame</span></p><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0properties.=C2=A0 When a certain property has a value that is not cov=
ered</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&=
quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:no=
rmal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre=
-wrap">=C2=A0=C2=A0=C2=A0by the lookup table, the decoder is directed to fi=
nd the value of</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-t=
op:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;C=
ourier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant=
-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whit=
e-space:pre-wrap">=C2=A0=C2=A0=C2=A0that property (for example the sample r=
ate) at the end of the frame</span></p><p dir=3D"ltr" style=3D"line-height:=
1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-f=
amily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent=
;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:=
baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0header or in the streaminf=
o metadata block.=C2=A0 In case a frame header</span></p><p dir=3D"ltr" sty=
le=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fon=
t-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background=
-color:transparent;font-variant-numeric:normal;font-variant-east-asian:norm=
al;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0refers t=
o the streaminfo metadata block, the file is not</span></p><p dir=3D"ltr" s=
tyle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"f=
ont-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgrou=
nd-color:transparent;font-variant-numeric:normal;font-variant-east-asian:no=
rmal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0&#39;s=
treamable&#39;, see section format subset (#format-subset) for details.</sp=
an></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-botto=
m:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;co=
lor:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;fon=
t-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=
=C2=A0=C2=A0=C2=A0In this way, the file is streamable and the frame header =
size small</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0p=
t;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courie=
r New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-nume=
ric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-spa=
ce:pre-wrap">=C2=A0=C2=A0=C2=A0for all of the most common forms of audio da=
ta.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;m=
argin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier N=
ew&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric=
:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:=
pre-wrap">8.=C2=A0 Format subset</span></p><br><p dir=3D"ltr" style=3D"line=
-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10p=
t;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:tra=
nsparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertica=
l-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0*=C2=A0 The sample=
 rate bits (#sample-rate-bits) in the frame header MUST</span></p><p dir=3D=
"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span sty=
le=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);b=
ackground-color:transparent;font-variant-numeric:normal;font-variant-east-a=
sian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0be 0b0001-0b1110, i.e. the frame header MUST NOT refer=
 to the</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;m=
argin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier N=
ew&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric=
:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:=
pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0streaminfo metadata block to =
find the sample rate.</span></p><p dir=3D"ltr" style=3D"line-height:1.38;ma=
rgin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&=
quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-v=
ariant-numeric:normal;font-variant-east-asian:normal;vertical-align:baselin=
e;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0*=C2=A0 The bits depth bits (#bit=
-depth-bits) in the frame header MUST be</span></p><p dir=3D"ltr" style=3D"=
line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size=
:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color=
:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ver=
tical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A00b001-0b111, i.e. the frame header MUST NOT refer to the</span></p><p=
 dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><s=
pan style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0=
,0,0);background-color:transparent;font-variant-numeric:normal;font-variant=
-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0streaminfo metadata block to find the bit depth.=
</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&=
quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:no=
rmal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre=
-wrap">On these two bullets ^^^^, is &quot;to find&quot; the best wording? =
I wonder if these bullets should say &quot;to describe&quot; instead.=C2=A0=
</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&=
quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:no=
rmal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre=
-wrap">9.2.=C2=A0 Streaminfo</span></p><br><p dir=3D"ltr" style=3D"line-hei=
ght:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fo=
nt-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpa=
rent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-al=
ign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0The minimum block size=
 is excluding the last block of a FLAC file,</span></p><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0which may =
be smaller.=C2=A0 If the minimum block size is equal to the</span></p><p di=
r=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span=
 style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,=
0);background-color:transparent;font-variant-numeric:normal;font-variant-ea=
st-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0maximum block size, the file contains a fixed block size stream.</spa=
n></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom=
:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;col=
or:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font=
-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=
=C2=A0=C2=A0=C2=A0Note that in case of a stream with a variable block size,=
 the actual</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0=
pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Couri=
er New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-num=
eric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-sp=
ace:pre-wrap">=C2=A0=C2=A0=C2=A0maximum block size MAY be smaller than the =
maximum block size listed</span></p><p dir=3D"ltr" style=3D"line-height:1.3=
8;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fami=
ly:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fo=
nt-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:bas=
eline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0in the streaminfo block, and =
the actual smallest block size excluding</span></p><p dir=3D"ltr" style=3D"=
line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size=
:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color=
:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ver=
tical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0the last block=
 MAY be larger than the minimum block size listed in</span></p><p dir=3D"lt=
r" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0t=
he streaminfo block.=C2=A0 This is because the encoder has to write these</=
span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bot=
tom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;=
color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;f=
ont-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"=
>=C2=A0=C2=A0=C2=A0fields before receiving any input audio data, and cannot=
 know</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;mar=
gin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New=
&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:n=
ormal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pr=
e-wrap">=C2=A0=C2=A0=C2=A0beforehand what block sizes it will use, only bet=
ween what bounds</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-=
top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;=
Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varian=
t-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whi=
te-space:pre-wrap">=C2=A0=C2=A0=C2=A0these will be chosen.</span></p><br><p=
 dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><s=
pan style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0=
,0,0);background-color:transparent;font-variant-numeric:normal;font-variant=
-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">^^^^ This =
explanation seems important enough to make it clearer. If I understand corr=
ectly, these aren&#39;t &quot;minimum and maximum block sizes&quot;, they&#=
39;re &quot;minimum and maximum block size bounds&quot;. Would it be useful=
, and not excessively painful, to make that terminology change?</span></p><=
br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0p=
t"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:=
rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-va=
riant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0The MD5 signature is made by performing an MD5 transformatio=
n on the</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;=
margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier =
New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeri=
c:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space=
:pre-wrap">=C2=A0=C2=A0=C2=A0samples of all channels interleaved, represent=
ed in signed, little-</span></p><p dir=3D"ltr" style=3D"line-height:1.38;ma=
rgin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&=
quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-v=
ariant-numeric:normal;font-variant-east-asian:normal;vertical-align:baselin=
e;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0endian form.=C2=A0 This interleav=
ing is on a per-sample basis, so for a</span></p><p dir=3D"ltr" style=3D"li=
ne-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:1=
0pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:t=
ransparent;font-variant-numeric:normal;font-variant-east-asian:normal;verti=
cal-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0stereo file this=
 means first the first sample of the first channel,</span></p><p dir=3D"ltr=
" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0t=
hen the first sample of the second channel, then the second sample</span></=
p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt=
"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:r=
gb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=
=C2=A0=C2=A0of the first channel etc.=C2=A0 Before performing the MD5 trans=
formation,</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-to=
p:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Co=
urier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-=
numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white=
-space:pre-wrap">This text ^^^^ is accurate, but I can&#39;t understand it =
without reading it out loud, with appropriate pauses. Would a picture of th=
e samples being interleaved before the MD5 transformation help?=C2=A0</span=
></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bot=
tom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;=
color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;f=
ont-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"=
>=C2=A0=C2=A0=C2=A0all samples must be byte-aligned.=C2=A0 So, in case the =
bit depth is not a</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margi=
n-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quo=
t;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-vari=
ant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;w=
hite-space:pre-wrap">=C2=A0=C2=A0=C2=A0whole number of bytes, additional ze=
ro bits are inserted at the most-</span></p><p dir=3D"ltr" style=3D"line-he=
ight:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;f=
ont-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transp=
arent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-a=
lign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0significant position =
until each sample representation is a whole</span></p><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0number of =
bytes.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0p=
t;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courie=
r New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-nume=
ric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-spa=
ce:pre-wrap">9.4.=C2=A0 Application</span></p><br><p dir=3D"ltr" style=3D"l=
ine-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:=
10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:=
transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vert=
ical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0The application=
 metadata block is for use by third-party</span></p><p dir=3D"ltr" style=3D=
"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-siz=
e:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-colo=
r:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ve=
rtical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0applications.=
=C2=A0 The only mandatory field is a 32-bit identifier, much</span></p><p d=
ir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><spa=
n style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0=
,0);background-color:transparent;font-variant-numeric:normal;font-variant-e=
ast-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0like a FourCC but not restricted to ASCII characters.=C2=A0 An ID reg=
istry</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt=
;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier=
 New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numer=
ic:normal;font-variant-east-asian:normal;vertical-align:baseline;white-spac=
e:pre-wrap">&quot;FourCC&quot; isn&#39;t defined in the document, but is th=
ere a reference that you could include?=C2=A0</span></p><br><p dir=3D"ltr" =
style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"=
font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgro=
und-color:transparent;font-variant-numeric:normal;font-variant-east-asian:n=
ormal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0is be=
ing maintained at <a href=3D"https://xiph.org/flac/id.html">https://xiph.or=
g/flac/id.html</a></span></p><p dir=3D"ltr" style=3D"line-height:1.38;margi=
n-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quo=
t;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-vari=
ant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;w=
hite-space:pre-wrap">=C2=A0=C2=A0=C2=A0(<a href=3D"https://xiph.org/flac/id=
.html">https://xiph.org/flac/id.html</a>).</span></p><br><p dir=3D"ltr" sty=
le=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fon=
t-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background=
-color:transparent;font-variant-numeric:normal;font-variant-east-asian:norm=
al;vertical-align:baseline;white-space:pre-wrap">9.6.=C2=A0 Vorbis comment<=
/span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margi=
n-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&q=
uot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:nor=
mal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-=
wrap">=C2=A0=C2=A0=C2=A0Note that the Vorbis comment as used in Vorbis allo=
ws for on the</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top=
:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cou=
rier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-n=
umeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-=
space:pre-wrap">=C2=A0=C2=A0=C2=A0order of 2^64 bytes of data whereas the F=
LAC metadata block is</span></p><p dir=3D"ltr" style=3D"line-height:1.38;ma=
rgin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&=
quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-v=
ariant-numeric:normal;font-variant-east-asian:normal;vertical-align:baselin=
e;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0limited to 2^24 bytes.=C2=A0 Give=
n the stated purpose of Vorbis comments,</span></p><p dir=3D"ltr" style=3D"=
line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size=
:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color=
:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ver=
tical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0i.e. human-rea=
dable textual information, this limit is unlikely to be</span></p><br><p di=
r=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span=
 style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,=
0);background-color:transparent;font-variant-numeric:normal;font-variant-ea=
st-asian:normal;vertical-align:baseline;white-space:pre-wrap">My suggestion=
 would be &quot;the FLAC metadata limit is unlikely to be restrictive&quot;=
.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;mar=
gin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New=
&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:n=
ormal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pr=
e-wrap">=C2=A0=C2=A0=C2=A0restrictive.=C2=A0 Also note that the 32-bit fiel=
d lengths are coded</span></p><p dir=3D"ltr" style=3D"line-height:1.38;marg=
in-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&qu=
ot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-var=
iant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;=
white-space:pre-wrap">=C2=A0=C2=A0=C2=A0little-endian, as opposed to the us=
ual big-endian coding of fixed-</span></p><p dir=3D"ltr" style=3D"line-heig=
ht:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fon=
t-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpar=
ent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-ali=
gn:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0length integers in the =
rest of the FLAC format.</span></p><br><p dir=3D"ltr" style=3D"line-height:=
1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-f=
amily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent=
;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:=
baseline;white-space:pre-wrap">9.6.2.=C2=A0 Channel mask</span></p><br><p d=
ir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><spa=
n style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0=
,0);background-color:transparent;font-variant-numeric:normal;font-variant-e=
ast-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0Besides fields containing information about the work itself, one</spa=
n></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom=
:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;col=
or:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font=
-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=
=C2=A0=C2=A0=C2=A0field is defined for technical reasons, of which the fiel=
d name is</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt=
;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier=
 New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numer=
ic:normal;font-variant-east-asian:normal;vertical-align:baseline;white-spac=
e:pre-wrap">=C2=A0=C2=A0=C2=A0WAVEFORMATEXTENSIBLE_CHANNEL_MASK.=C2=A0 This=
 field contains information</span></p><p dir=3D"ltr" style=3D"line-height:1=
.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fa=
mily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;=
font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:b=
aseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0on which channels the file =
contains.=C2=A0 Use of this field is</span></p><p dir=3D"ltr" style=3D"line=
-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10p=
t;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:tra=
nsparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertica=
l-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0RECOMMENDED in cas=
e these differ from the channels defined in the</span></p><p dir=3D"ltr" st=
yle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fo=
nt-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgroun=
d-color:transparent;font-variant-numeric:normal;font-variant-east-asian:nor=
mal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0section=
 channels bits (#channels-bits).</span></p><br><p dir=3D"ltr" style=3D"line=
-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10p=
t;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:tra=
nsparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertica=
l-align:baseline;white-space:pre-wrap">I have a question here - if this fie=
ld doesn&#39;t match the section channel bits, which one is assumed to be c=
orrect? I would have guessed that if the channel mask is present, it is ass=
umed to be correct, but I am guessing.=C2=A0</span></p><br><p dir=3D"ltr" s=
tyle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"f=
ont-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgrou=
nd-color:transparent;font-variant-numeric:normal;font-variant-east-asian:no=
rmal;vertical-align:baseline;white-space:pre-wrap">9.7.=C2=A0 Cuesheet</spa=
n></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bo=
ttom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;=
;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;=
font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap=
">=C2=A0=C2=A0=C2=A0If the media catalog number is less than 128 bytes long=
, it SHOULD be</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-to=
p:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Co=
urier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-=
numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white=
-space:pre-wrap">=C2=A0=C2=A0=C2=A0right-padded with NUL characters.=C2=A0 =
For CD-DA, this is a thirteen</span></p><p dir=3D"ltr" style=3D"line-height=
:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-=
family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparen=
t;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align=
:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0digit number, followed by=
 115 NUL bytes.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;marg=
in-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&qu=
ot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-var=
iant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;=
white-space:pre-wrap">Why is this ^^^^ a SHOULD? Is this for legacy support=
, or support of incorrect implementations, or something else?</span></p><br=
><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"=
><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rg=
b(0,0,0);background-color:transparent;font-variant-numeric:normal;font-vari=
ant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">9.7.1.=
=C2=A0 Cuesheet track</span></p><br><p dir=3D"ltr" style=3D"line-height:1.3=
8;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fami=
ly:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fo=
nt-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:bas=
eline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0A track number of 0 is not al=
lowed to avoid conflicting with the CD-</span></p><br><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">I would suggest &quot;is not=
 allowed, because the CD-DA spec reserves this for the lead-in&quot;.</span=
></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bot=
tom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;=
color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;f=
ont-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"=
>=C2=A0=C2=A0=C2=A0DA spec, which reserves this for the lead-in.=C2=A0 For =
CD-DA the number</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-=
top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;=
Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varian=
t-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whi=
te-space:pre-wrap">=C2=A0=C2=A0=C2=A0MUST be 1-99, or 170 for the lead-out;=
 for non-CD-DA, the track</span></p><p dir=3D"ltr" style=3D"line-height:1.3=
8;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fami=
ly:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fo=
nt-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:bas=
eline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0number MUST be 255 for the le=
ad-out.=C2=A0 It is RECOMMENDED to start with</span></p><p dir=3D"ltr" styl=
e=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font=
-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-=
color:transparent;font-variant-numeric:normal;font-variant-east-asian:norma=
l;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0track 1 a=
nd increase sequentially.=C2=A0 Track numbers MUST be unique</span></p><p d=
ir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><spa=
n style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0=
,0);background-color:transparent;font-variant-numeric:normal;font-variant-e=
ast-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0within a cuesheet.</span></p><br><p dir=3D"ltr" style=3D"line-height:=
1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-f=
amily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent=
;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:=
baseline;white-space:pre-wrap">9.8.=C2=A0 Picture</span></p><br><p dir=3D"l=
tr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0T=
he following table contains all defined picture types.=C2=A0 Values other</=
span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bot=
tom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;=
color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;f=
ont-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"=
>=C2=A0=C2=A0=C2=A0than those listed in the table are reserved and SHOULD N=
OT be used.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-t=
op:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;C=
ourier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant=
-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whit=
e-space:pre-wrap">If values other than those listed in the table are used, =
what if anything should the decoder do? Is there a MUST requirement that a =
decoder must check for the SHOULD NOT values, and handle them appropriately=
, or simply not crash?</span></p><br><p dir=3D"ltr" style=3D"line-height:1.=
38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fam=
ily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;f=
ont-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:ba=
seline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0There MAY only be one each o=
f picture type 1 and 2 in a file.=C2=A0 In</span></p><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0general pr=
actice, many FLAC playback devices and software display the</span></p><p di=
r=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span=
 style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,=
0);background-color:transparent;font-variant-numeric:normal;font-variant-ea=
st-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0contents of a picture metadata block with picture type 3 (front</span=
></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:=
0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;colo=
r:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-=
variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0cover) during playback, if present.</span></p><br><p dir=3D"=
ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span styl=
e=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);ba=
ckground-color:transparent;font-variant-numeric:normal;font-variant-east-as=
ian:normal;vertical-align:baseline;white-space:pre-wrap">10.1.2.=C2=A0 Samp=
le rate bits</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-=
top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;=
Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varian=
t-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whi=
te-space:pre-wrap">=C2=A0=C2=A0=C2=A0The next 4 bits, referred to as the sa=
mple rate bits, contain the</span></p><p dir=3D"ltr" style=3D"line-height:1=
.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fa=
mily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;=
font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:b=
aseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0sample rate of the audio ac=
cording to the following table.=C2=A0 In case</span></p><p dir=3D"ltr" styl=
e=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font=
-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-=
color:transparent;font-variant-numeric:normal;font-variant-east-asian:norma=
l;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0the sampl=
e rate bits code for an uncommon sample rate, this is stored</span></p><p d=
ir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><spa=
n style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0=
,0);background-color:transparent;font-variant-numeric:normal;font-variant-e=
ast-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0after the uncommon block size or after the coded number in case no</s=
pan></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-=
bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quo=
t;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:norma=
l;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wr=
ap">Nit: I&#39;d suggest &quot;if no uncommon block size was used&quot;. I =
see other occurrences of &quot;in case&quot; in the document, so I&#39;ll a=
sk that you look at those occurrences as well.=C2=A0</span></p><br><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0uncommon block size was used.=C2=A0 See section uncommon sample rate<=
/span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bo=
ttom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;=
;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;=
font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap=
">=C2=A0=C2=A0=C2=A0(#uncommon-sample-rate).</span></p><br><p dir=3D"ltr" s=
tyle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"f=
ont-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgrou=
nd-color:transparent;font-variant-numeric:normal;font-variant-east-asian:no=
rmal;vertical-align:baseline;white-space:pre-wrap">10.1.3.=C2=A0 Channels b=
its</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;m=
argin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier N=
ew&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric=
:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:=
pre-wrap">=C2=A0=C2=A0=C2=A0The next 4 bits (the first 4 bits of the fourth=
 byte of each frame),</span></p><br><p dir=3D"ltr" style=3D"line-height:1.3=
8;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fami=
ly:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fo=
nt-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:bas=
eline;white-space:pre-wrap">&quot;(the first 4 bits of the fourth byte of e=
ach frame)&quot; seems very helpful. Would it make sense to add this guidan=
ce at the beginning of each of the sections that begin with &quot;the next =
4 bits&quot;?</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin=
-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot=
;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varia=
nt-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;wh=
ite-space:pre-wrap">=C2=A0=C2=A0=C2=A0referred to as the channels bits, cod=
e for both the number of</span></p><p dir=3D"ltr" style=3D"line-height:1.38=
;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-famil=
y:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fon=
t-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:base=
line;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0channels of the audio as well =
as any stereo decorrelation used</span></p><p dir=3D"ltr" style=3D"line-hei=
ght:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fo=
nt-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpa=
rent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-al=
ign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0according to the follo=
wing table.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-t=
op:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;C=
ourier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant=
-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whit=
e-space:pre-wrap">10.1.4.=C2=A0 Bit depth bits</span></p><br><p dir=3D"ltr"=
 style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D=
"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgr=
ound-color:transparent;font-variant-numeric:normal;font-variant-east-asian:=
normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0The =
next 3 bits code for the bit depth of the audio according to the</span></p>=
<p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt">=
<span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb=
(0,0,0);background-color:transparent;font-variant-numeric:normal;font-varia=
nt-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=
=C2=A0=C2=A0following table.</span></p><br><p dir=3D"ltr" style=3D"line-hei=
ght:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fo=
nt-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpa=
rent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-al=
ign:baseline;white-space:pre-wrap">Is this saying &quot;The next 3 bits enc=
ode the bit depth&quot;?</span></p><br><p dir=3D"ltr" style=3D"line-height:=
1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-f=
amily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent=
;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:=
baseline;white-space:pre-wrap">10.2.2.=C2=A0 Wasted bits per sample</span><=
/p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-botto=
m:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;co=
lor:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;fon=
t-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=
=C2=A0=C2=A0=C2=A0The wasted bits-per-sample flag in a subframe header is s=
et to 1 if a</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:=
0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cour=
ier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-nu=
meric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-s=
pace:pre-wrap">=C2=A0=C2=A0=C2=A0certain number of least-significant bits o=
f all samples in the</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38=
;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-famil=
y:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fon=
t-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:base=
line;white-space:pre-wrap">I&#39;m confused - what is the &quot;certain num=
ber&quot;? Is this (I&#39;m guessing) a number that might vary between audi=
o file types?</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin=
-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot=
;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varia=
nt-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;wh=
ite-space:pre-wrap">=C2=A0=C2=A0=C2=A0current subframe are zero.=C2=A0 If t=
his is the case, the number of wasted</span></p><p dir=3D"ltr" style=3D"lin=
e-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10=
pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:tr=
ansparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertic=
al-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0bits-per-sample (=
k) minus 1 follows the flag in an unary encoding.</span></p><p dir=3D"ltr" =
style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"=
font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgro=
und-color:transparent;font-variant-numeric:normal;font-variant-east-asian:n=
ormal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0For e=
xample, if k is 3, 0b001 follows.=C2=A0 If k =3D 0, the wasted bits-</span>=
</p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0=
pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color=
:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-v=
ariant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0per-sample flag is 0 and no unary coded k follows.</span></p=
><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:=
0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;colo=
r:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-=
variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0In case k is not equal to 0, samples are coded ignoring k le=
ast-</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&=
quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:no=
rmal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre=
-wrap">=C2=A0=C2=A0=C2=A0significant bits.=C2=A0 For example, if the preced=
ing frame header</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-=
top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;=
Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varian=
t-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whi=
te-space:pre-wrap">=C2=A0=C2=A0=C2=A0specified a sample size of 16 bits per=
 sample and k is 3, samples in</span></p><p dir=3D"ltr" style=3D"line-heigh=
t:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font=
-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpare=
nt;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-alig=
n:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0the subframe are coded a=
s 13 bits per sample.=C2=A0 A decoder MUST add k</span></p><p dir=3D"ltr" s=
tyle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"f=
ont-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgrou=
nd-color:transparent;font-variant-numeric:normal;font-variant-east-asian:no=
rmal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0least-=
significant zero bits by shifting left (padding) after decoding</span></p><=
p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><=
span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(=
0,0,0);background-color:transparent;font-variant-numeric:normal;font-varian=
t-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=
=A0=C2=A0a subframe sample.=C2=A0 In case the frame has left/side, right/si=
de or</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;mar=
gin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New=
&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:n=
ormal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pr=
e-wrap">=C2=A0=C2=A0=C2=A0mid/side stereo, padding MUST happen to a sample =
before it is used to</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38=
;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-famil=
y:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fon=
t-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:base=
line;white-space:pre-wrap">Is this &quot;a decoder MUST perform padding bef=
ore constructing a left or right sample&quot;?</span></p><br><p dir=3D"ltr"=
 style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D=
"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgr=
ound-color:transparent;font-variant-numeric:normal;font-variant-east-asian:=
normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0reco=
nstruct a left or right sample.</span></p><br><p dir=3D"ltr" style=3D"line-=
height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt=
;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:tran=
sparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical=
-align:baseline;white-space:pre-wrap">10.2.5.=C2=A0 Fixed predictor subfram=
e</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;mar=
gin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New=
&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:n=
ormal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pr=
e-wrap">=C2=A0=C2=A0=C2=A0As a predictor makes use of samples preceding the=
 sample that is</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-t=
op:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;C=
ourier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant=
-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whit=
e-space:pre-wrap">=C2=A0=C2=A0=C2=A0predicted, it can only be used when eno=
ugh such samples are known.</span></p><br><p dir=3D"ltr" style=3D"line-heig=
ht:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fon=
t-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpar=
ent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-ali=
gn:baseline;white-space:pre-wrap">I&#39;d suggest &quot;enough samples&quot=
; here.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0=
pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Couri=
er New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-num=
eric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-sp=
ace:pre-wrap">=C2=A0=C2=A0=C2=A0As each subframe in FLAC is coded completel=
y independent, the first</span></p><br><p dir=3D"ltr" style=3D"line-height:=
1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-f=
amily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent=
;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:=
baseline;white-space:pre-wrap">I&#39;d suggest &quot;coded completely indep=
endently&quot;.=C2=A0</span></p><br><p dir=3D"ltr" style=3D"line-height:1.3=
8;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fami=
ly:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fo=
nt-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:bas=
eline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0few samples in each subframe =
cannot be predicted.=C2=A0 Therefore, a</span></p><p dir=3D"ltr" style=3D"l=
ine-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:=
10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:=
transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vert=
ical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0number of so-ca=
lled warm-up samples equal to the predictor order is</span></p><p dir=3D"lt=
r" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0s=
tored.=C2=A0 These are stored unencoded, bypassing the predictor and</span>=
</p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0=
pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color=
:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-v=
ariant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0residual coding stage.=C2=A0 See section on Constant subfram=
e (#constant-</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top=
:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cou=
rier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-n=
umeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-=
space:pre-wrap">=C2=A0=C2=A0=C2=A0subframe) on how samples are stored unenc=
oded.=C2=A0 The table below</span></p><p dir=3D"ltr" style=3D"line-height:1=
.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fa=
mily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;=
font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:b=
aseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0defines how a fixed predict=
or subframe appears in the bitstream.</span></p><br><p dir=3D"ltr" style=3D=
"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-siz=
e:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-colo=
r:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ve=
rtical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0To encode a s=
ignal with a fixed predictor, each sample has the</span></p><p dir=3D"ltr" =
style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"=
font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgro=
und-color:transparent;font-variant-numeric:normal;font-variant-east-asian:n=
ormal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0corre=
sponding prediction subtracted and sent to the residual coder.</span></p><p=
 dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><s=
pan style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0=
,0,0);background-color:transparent;font-variant-numeric:normal;font-variant=
-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=
=A0=C2=A0To decode a signal with a fixed predictor, first the residual has =
to</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin=
-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&qu=
ot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:norm=
al;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-w=
rap">=C2=A0=C2=A0=C2=A0be decoded, after which for each sample the predicti=
on can be added.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;mar=
gin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&q=
uot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-va=
riant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline=
;white-space:pre-wrap">I&#39;d suggest &quot;the residual is decoded, and t=
hen the prediction can be added for each sample&quot;.=C2=A0</span></p><br>=
<p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt">=
<span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb=
(0,0,0);background-color:transparent;font-variant-numeric:normal;font-varia=
nt-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">I have t=
he same comment about Section 10.2.6 below.</span></p><br><p dir=3D"ltr" st=
yle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fo=
nt-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgroun=
d-color:transparent;font-variant-numeric:normal;font-variant-east-asian:nor=
mal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0This me=
ans that decoding MUST be a sequential process within a</span></p><p dir=3D=
"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span sty=
le=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);b=
ackground-color:transparent;font-variant-numeric:normal;font-variant-east-a=
sian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=
=A0subframe, as for each sample, enough fully decoded previous samples</spa=
n></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom=
:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;col=
or:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font=
-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=
=C2=A0=C2=A0=C2=A0are needed to calculate the prediction.</span></p><br><p =
dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><sp=
an style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,=
0,0);background-color:transparent;font-variant-numeric:normal;font-variant-=
east-asian:normal;vertical-align:baseline;white-space:pre-wrap">10.2.7.3.=
=C2=A0 Residual sample value limit</span></p><br><p dir=3D"ltr" style=3D"li=
ne-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:1=
0pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:t=
ransparent;font-variant-numeric:normal;font-variant-east-asian:normal;verti=
cal-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0All residual sam=
ples values MUST be representable in the range</span></p><p dir=3D"ltr" sty=
le=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fon=
t-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background=
-color:transparent;font-variant-numeric:normal;font-variant-east-asian:norm=
al;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0offered =
by a 32-bit integer, signed one&#39;s complement.=C2=A0 Equivalently,</span=
></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:=
0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;colo=
r:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-=
variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0all residual sample values MUST fall in the range offered by=
 a 32-bit</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt=
;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier=
 New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numer=
ic:normal;font-variant-east-asian:normal;vertical-align:baseline;white-spac=
e:pre-wrap">=C2=A0=C2=A0=C2=A0integer signed two&#39;s complement excluding=
 the most negative possible</span></p><p dir=3D"ltr" style=3D"line-height:1=
.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fa=
mily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;=
font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:b=
aseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0value of that range.=C2=A0 =
This means residual sample values MUST NOT have</span></p><p dir=3D"ltr" st=
yle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fo=
nt-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgroun=
d-color:transparent;font-variant-numeric:normal;font-variant-east-asian:nor=
mal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0an abso=
lute value equal to or larger then 2 to the power 31.=C2=A0 A FLAC</span></=
p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom=
:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;col=
or:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font=
-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">I&=
#39;d suggest &quot;equal to, or larger than, 2 to the power 31&quot;. You =
might also say &quot;larger than 2 ** 31&quot; here, I think.=C2=A0</span><=
/p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-botto=
m:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;co=
lor:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;fon=
t-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=
=C2=A0=C2=A0=C2=A0encoder MUST make sure of this.=C2=A0 In case a FLAC enco=
der is, for a</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top=
:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cou=
rier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-n=
umeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-=
space:pre-wrap">=C2=A0=C2=A0=C2=A0certain subframe, unable to find a suitab=
le predictor of which all</span></p><p dir=3D"ltr" style=3D"line-height:1.3=
8;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fami=
ly:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fo=
nt-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:bas=
eline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0residual samples fall within =
said range, it MUST default to writing a</span></p><p dir=3D"ltr" style=3D"=
line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size=
:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color=
:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ver=
tical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0verbatim subfr=
ame.=C2=A0 The appendix numerical considerations</span></p><p dir=3D"ltr" s=
tyle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"f=
ont-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgrou=
nd-color:transparent;font-variant-numeric:normal;font-variant-east-asian:no=
rmal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0(#nume=
rical-considerations) explains in which circumstances residual</span></p><p=
 dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><s=
pan style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0=
,0,0);background-color:transparent;font-variant-numeric:normal;font-variant=
-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=
=A0=C2=A0samples are already implicitly representable in said range and thu=
s</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-=
bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quo=
t;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:norma=
l;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wr=
ap">=C2=A0=C2=A0=C2=A0an additional check is not needed.</span></p><br><p d=
ir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><spa=
n style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0=
,0);background-color:transparent;font-variant-numeric:normal;font-variant-e=
ast-asian:normal;vertical-align:baseline;white-space:pre-wrap">10.3.=C2=A0 =
Frame footer</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-=
top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;=
Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varian=
t-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whi=
te-space:pre-wrap">=C2=A0=C2=A0=C2=A0Following the last subframe is the fra=
me footer.=C2=A0 If the last</span></p><p dir=3D"ltr" style=3D"line-height:=
1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-f=
amily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent=
;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:=
baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0subframe is not byte align=
ed (i.e. the bits required to store all</span></p><p dir=3D"ltr" style=3D"l=
ine-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:=
10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:=
transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vert=
ical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0subframes put t=
ogether are not divisible by 8), zero bits are added</span></p><p dir=3D"lt=
r" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0u=
ntil byte alignment is reached.=C2=A0 Following this is a 16-bit CRC,</span=
></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bot=
tom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;=
color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;f=
ont-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"=
>^^^^ I think this is &quot;Following the last subframe is the frame footer=
.=C2=A0 If the last subframe is not byte aligned (i.e. the number of bits r=
equired to store all subframes put together is not divisible by 8), zero bi=
ts are added until byte alignment is reached.&quot;</span></p><br><p dir=3D=
"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span sty=
le=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);b=
ackground-color:transparent;font-variant-numeric:normal;font-variant-east-a=
sian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=
=A0initialized with 0, with polynomial x^16 + x^15 + x^2 + x^0.=C2=A0 This<=
/span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bo=
ttom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;=
;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;=
font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap=
">=C2=A0=C2=A0=C2=A0CRC covers the whole frame excluding the 16-bit CRC, in=
cluding the</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0=
pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Couri=
er New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-num=
eric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-sp=
ace:pre-wrap">=C2=A0=C2=A0=C2=A0sync code.</span></p><br><p dir=3D"ltr" sty=
le=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fon=
t-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background=
-color:transparent;font-variant-numeric:normal;font-variant-east-asian:norm=
al;vertical-align:baseline;white-space:pre-wrap">11.1.=C2=A0 Ogg mapping</s=
pan></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-=
bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quo=
t;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:norma=
l;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wr=
ap">=C2=A0=C2=A0=C2=A0In case an audio stream is encoded where audio proper=
ties (sample</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:=
0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cour=
ier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-nu=
meric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-s=
pace:pre-wrap">=C2=A0=C2=A0=C2=A0rate, number of channels or bit depth) cha=
nge at some point in the</span></p><p dir=3D"ltr" style=3D"line-height:1.38=
;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-famil=
y:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fon=
t-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:base=
line;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0stream, this should be dealt w=
ith by finishing encoding of the</span></p><p dir=3D"ltr" style=3D"line-hei=
ght:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fo=
nt-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpa=
rent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-al=
ign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0current Ogg stream and=
 starting a new Ogg stream concatenated to the</span></p><p dir=3D"ltr" sty=
le=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fon=
t-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background=
-color:transparent;font-variant-numeric:normal;font-variant-east-asian:norm=
al;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0previous=
 one.=C2=A0 This is called chaining in Ogg. See the Ogg</span></p><p dir=3D=
"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span sty=
le=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);b=
ackground-color:transparent;font-variant-numeric:normal;font-variant-east-a=
sian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=
=A0specification for details.</span></p><br><p dir=3D"ltr" style=3D"line-he=
ight:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;f=
ont-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transp=
arent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-a=
lign:baseline;white-space:pre-wrap">I know you provided a reference for Ogg=
 on first use, but suggest repeating it here, for the less careful readers.=
=C2=A0</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0p=
t;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courie=
r New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-nume=
ric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-spa=
ce:pre-wrap">11.3.=C2=A0 ISO Base Media File Format (MP4) mapping</span></p=
><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:=
0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;colo=
r:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-=
variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0The full encapsulation definition of FLAC audio in MP4 files=
 was</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&=
quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:no=
rmal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre=
-wrap">=C2=A0=C2=A0=C2=A0deemed too extensive to include in this document.=
=C2=A0 A definition</span></p><p dir=3D"ltr" style=3D"line-height:1.38;marg=
in-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&qu=
ot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-var=
iant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;=
white-space:pre-wrap">=C2=A0=C2=A0=C2=A0document can be found at</span></p>=
<p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt">=
<span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb=
(0,0,0);background-color:transparent;font-variant-numeric:normal;font-varia=
nt-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=
=C2=A0=C2=A0<a href=3D"https://github.com/xiph/flac/blob/master/doc/isoflac=
.txt">https://github.com/xiph/flac/blob/master/doc/isoflac.txt</a></span></=
p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt=
"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:r=
gb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=
=C2=A0=C2=A0(<a href=3D"https://github.com/xiph/flac/blob/master/doc/isofla=
c.txt">https://github.com/xiph/flac/blob/master/doc/isoflac.txt</a>) This</=
span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin=
-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&qu=
ot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:norm=
al;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-w=
rap">This might be clearer if it said &quot;The definitions document is sum=
marized here.&quot;</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;=
margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family=
:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font=
-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:basel=
ine;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0document is summarized here.</s=
pan></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-=
bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quo=
t;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:norma=
l;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wr=
ap">13.=C2=A0 Security Considerations</span></p><br><p dir=3D"ltr" style=3D=
"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-siz=
e:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-colo=
r:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ve=
rtical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Implementatio=
ns of the FLAC codec need to take appropriate security</span></p><p dir=3D"=
ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span styl=
e=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);ba=
ckground-color:transparent;font-variant-numeric:normal;font-variant-east-as=
ian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=
considerations into account.=C2=A0 Those related to denial of service are</=
span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bot=
tom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;=
color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;f=
ont-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"=
>=C2=A0=C2=A0=C2=A0outlined in Section 2.1 of [RFC4732].=C2=A0 It is extrem=
ely important for</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin=
-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot=
;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varia=
nt-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;wh=
ite-space:pre-wrap">=C2=A0=C2=A0=C2=A0the decoder to be robust against mali=
cious payloads.=C2=A0 Malicious</span></p><p dir=3D"ltr" style=3D"line-heig=
ht:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fon=
t-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpar=
ent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-ali=
gn:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0payloads MUST NOT cause=
 the decoder to overrun its allocated memory</span></p><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0or to take=
 an excessive amount of resources to decode.=C2=A0 An overrun in</span></p>=
<br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0=
pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color=
:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-v=
ariant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">I un=
derstand the use of the word &quot;malicious&quot; here, but would it be co=
rrect to say &quot;payloads that do not conform to this specification MUST =
NOT cause ...&quot;? It seems that the problem is that the payload might ca=
use unsuspicious implementations to misbehave, from a security perspective,=
 not that the payload is **intended** to cause unsuspicious implementations=
 to misbehave.=C2=A0</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38=
;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-famil=
y:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fon=
t-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:base=
line;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0allocated memory could lead to=
 arbitrary code execution by an</span></p><p dir=3D"ltr" style=3D"line-heig=
ht:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fon=
t-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpar=
ent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-ali=
gn:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0attacker.=C2=A0 The sam=
e applies to the encoder, even though problems in</span></p><p dir=3D"ltr" =
style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"=
font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgro=
und-color:transparent;font-variant-numeric:normal;font-variant-east-asian:n=
ormal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0encod=
ers are typically rarer.=C2=A0 Malicious audio streams MUST NOT cause</span=
></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:=
0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;colo=
r:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-=
variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0the encoder to misbehave because this would allow an attacke=
r to</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&=
quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:no=
rmal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre=
-wrap">=C2=A0=C2=A0=C2=A0attack transcoding gateways.</span></p><br><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0As with all compression algorithms, both encoding and decoding can</s=
pan></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bott=
om:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;c=
olor:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;fo=
nt-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=
=C2=A0=C2=A0=C2=A0produce an output much larger than the input.=C2=A0 In ca=
se of decoding,</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-t=
op:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;C=
ourier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant=
-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whit=
e-space:pre-wrap">=C2=A0=C2=A0=C2=A0the most extreme possible case of this =
is a frame with eight constant</span></p><p dir=3D"ltr" style=3D"line-heigh=
t:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font=
-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpare=
nt;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-alig=
n:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0subframes of block size =
65535 and coding for 32-bit PCM.=C2=A0 This frame</span></p><p dir=3D"ltr" =
style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"=
font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgro=
und-color:transparent;font-variant-numeric:normal;font-variant-east-asian:n=
ormal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0is on=
ly 49 byte in size, but codes for more than 2 megabyte of</span></p><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0uncompressed PCM data.=C2=A0 For encoding, it is possible to have an =
even</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&=
quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:no=
rmal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre=
-wrap">=C2=A0=C2=A0=C2=A0larger size increase, although such behavior is ge=
nerally considered</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margi=
n-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quo=
t;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-vari=
ant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;w=
hite-space:pre-wrap">=C2=A0=C2=A0=C2=A0faulty.=C2=A0 This happens if the en=
coder chooses a rice parameter that</span></p><p dir=3D"ltr" style=3D"line-=
height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt=
;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:tran=
sparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical=
-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0does not fit with t=
he residual that has to be encoded.=C2=A0 In such a</span></p><p dir=3D"ltr=
" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0c=
ase, very long unary coded symbols can appear, in the most extreme</span></=
p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt=
"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:r=
gb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=
=C2=A0=C2=A0case more than 4 gigabyte per sample.=C2=A0 It is RECOMMENDED d=
ecoder and</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-to=
p:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Co=
urier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-=
numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white=
-space:pre-wrap">&quot;RECOMMENDED&quot; is a BCP14 synonym for &quot;SHOUL=
D&quot;. Are there any reasons that decoder and encoder implementations oug=
ht not take these precautions? If not, I&#39;d suggest MUST, but this might=
 be better as &quot;Decoder and encoder implementors are advised to take pr=
ecautions&quot;.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;mar=
gin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&q=
uot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-va=
riant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline=
;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0encoder implementations take preca=
utions to prevent excessive</span></p><p dir=3D"ltr" style=3D"line-height:1=
.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fa=
mily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;=
font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:b=
aseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0resource utilization in suc=
h cases.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:=
0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cour=
ier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-nu=
meric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-s=
pace:pre-wrap">=C2=A0=C2=A0=C2=A0When metadata is handled, it is RECOMMENDE=
D to either thoroughly test</span></p><p dir=3D"ltr" style=3D"line-height:1=
.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fa=
mily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;=
font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:b=
aseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0handling of extreme cases o=
r impose reasonable limits beyond the</span></p><br><p dir=3D"ltr" style=3D=
"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-siz=
e:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-colo=
r:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ve=
rtical-align:baseline;white-space:pre-wrap">Again, is there a reason why im=
plementors ought not to do these things? If not, I&#39;d suggest MUST, or a=
lternatively &quot;implementors are advised&quot;, as in the previous comme=
nt.=C2=A0</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top=
:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cou=
rier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-n=
umeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-=
space:pre-wrap">=C2=A0=C2=A0=C2=A0limits of this specification document.=C2=
=A0 For example, a single Vorbis</span></p><p dir=3D"ltr" style=3D"line-hei=
ght:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fo=
nt-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpa=
rent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-al=
ign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0comment metadata block=
 can contain millions of valid fields.=C2=A0 It is</span></p><p dir=3D"ltr"=
 style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D=
"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgr=
ound-color:transparent;font-variant-numeric:normal;font-variant-east-asian:=
normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0unli=
kely such a limit is ever reached except in a potentially</span></p><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0malicious file.=C2=A0 Likewise the media type and description of a pi=
cture</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;mar=
gin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New=
&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:n=
ormal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pr=
e-wrap">=C2=A0=C2=A0=C2=A0metadata block can be millions of characters long=
, despite there</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-t=
op:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;C=
ourier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant=
-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whit=
e-space:pre-wrap">=C2=A0=C2=A0=C2=A0being no reasonable use of such content=
s.=C2=A0 One possible use case for</span></p><p dir=3D"ltr" style=3D"line-h=
eight:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;=
font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:trans=
parent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-=
align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0very long character =
strings is in lyrics, which can be stored in</span></p><p dir=3D"ltr" style=
=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-=
size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-c=
olor:transparent;font-variant-numeric:normal;font-variant-east-asian:normal=
;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Vorbis com=
ment metadata block fields.</span></p><br><p dir=3D"ltr" style=3D"line-heig=
ht:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fon=
t-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpar=
ent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-ali=
gn:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Various kinds of metada=
ta blocks contain length fields or fields</span></p><p dir=3D"ltr" style=3D=
"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-siz=
e:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-colo=
r:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ve=
rtical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0counts.=C2=A0=
 While reading a block following these lengths or counts, a</span></p><p di=
r=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span=
 style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,=
0);background-color:transparent;font-variant-numeric:normal;font-variant-ea=
st-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0decoder MUST make sure higher-level lengths or counts (most</span></p=
><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"=
><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rg=
b(0,0,0);background-color:transparent;font-variant-numeric:normal;font-vari=
ant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=
=C2=A0=C2=A0importantly the length field of the metadata block itself) are =
not</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margi=
n-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&q=
uot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:nor=
mal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-=
wrap">=C2=A0=C2=A0=C2=A0exceeded.=C2=A0 As some of these length fields code=
 string lengths, memory</span></p><p dir=3D"ltr" style=3D"line-height:1.38;=
margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family=
:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font=
-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:basel=
ine;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0for which must be allocated, it=
 is RECOMMENDED to first verify that</span></p><br><p dir=3D"ltr" style=3D"=
line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size=
:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color=
:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ver=
tical-align:baseline;white-space:pre-wrap">Again, is there a reason impleme=
ntations ought not to do this? If not, I&#39;d suggest MUST, or alternative=
ly, &quot;implementors are advised&quot;.</span></p><br><p dir=3D"ltr" styl=
e=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font=
-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-=
color:transparent;font-variant-numeric:normal;font-variant-east-asian:norma=
l;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0block is =
valid before allocating memory based on its contents.</span></p><br><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0Seeking in a FLAC stream that is not in a container relies on the</sp=
an></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-botto=
m:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;co=
lor:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;fon=
t-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=
=C2=A0=C2=A0=C2=A0coded number in frame headers and optionally a seektable =
metadata</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;=
margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier =
New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeri=
c:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space=
:pre-wrap">=C2=A0=C2=A0=C2=A0block.=C2=A0 It is RECOMMENDED to employ thoro=
ugh sanity checks on whether</span></p><br><p dir=3D"ltr" style=3D"line-hei=
ght:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fo=
nt-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpa=
rent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-al=
ign:baseline;white-space:pre-wrap">Again, same comment about RECOMMENDED he=
re.=C2=A0</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top=
:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Cou=
rier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-n=
umeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-=
space:pre-wrap">=C2=A0=C2=A0=C2=A0a found coded number or seekpoint is at a=
ll possible.=C2=A0 Without these</span></p><p dir=3D"ltr" style=3D"line-hei=
ght:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fo=
nt-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpa=
rent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-al=
ign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0checks, seeking might =
get stuck in an infinite loop when numbers in</span></p><p dir=3D"ltr" styl=
e=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font=
-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-=
color:transparent;font-variant-numeric:normal;font-variant-east-asian:norma=
l;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0frames ar=
e non-consecutive or otherwise invalid, which could be used</span></p><p di=
r=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span=
 style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,=
0);background-color:transparent;font-variant-numeric:normal;font-variant-ea=
st-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0in denial of service attacks.</span></p><br><p dir=3D"ltr" style=3D"l=
ine-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:=
10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:=
transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vert=
ical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0It is RECOMMEND=
ED to employ fuzz testing combined with different</span></p><br><p dir=3D"l=
tr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">Again, same comment=
 about RECOMMENDED here.</span></p><br><p dir=3D"ltr" style=3D"line-height:=
1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-f=
amily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent=
;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:=
baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0sanitizers on FLAC decoder=
s to find security problems.=C2=A0 To improve</span></p><p dir=3D"ltr" styl=
e=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font=
-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-=
color:transparent;font-variant-numeric:normal;font-variant-east-asian:norma=
l;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0efficienc=
y of this process, a decoder SHOULD, on decoding, ignore the</span></p><br>=
<p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt">=
<span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb=
(0,0,0);background-color:transparent;font-variant-numeric:normal;font-varia=
nt-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">Again, s=
ame comment about SHOULD here.=C2=A0</span></p><br><p dir=3D"ltr" style=3D"=
line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size=
:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color=
:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ver=
tical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0results of CRC=
 checks during fuzz testing.</span></p><br><p dir=3D"ltr" style=3D"line-hei=
ght:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fo=
nt-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpa=
rent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-al=
ign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0See the FLAC decoder t=
estbench (<a href=3D"https://wiki.hydrogenaud.io/">https://wiki.hydrogenaud=
.io/</a></span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;=
margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier =
New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeri=
c:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space=
:pre-wrap">=C2=A0=C2=A0=C2=A0index.php?title=3DFLAC_decoder_testbench) for =
a non-exhaustive list of</span></p><p dir=3D"ltr" style=3D"line-height:1.38=
;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-famil=
y:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fon=
t-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:base=
line;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0FLAC files with extreme config=
urations which lead to crashes or</span></p><p dir=3D"ltr" style=3D"line-he=
ight:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;f=
ont-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transp=
arent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-a=
lign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0reboots on some known=
 implementations.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;ma=
rgin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&=
quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-v=
ariant-numeric:normal;font-variant-east-asian:normal;vertical-align:baselin=
e;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0None of the content carried in FL=
AC is intended to be executable.</span></p><br><p dir=3D"ltr" style=3D"line=
-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10p=
t;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:tra=
nsparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertica=
l-align:baseline;white-space:pre-wrap">Is this a requirement that decoders =
MUST NOT execute it?</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38=
;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-famil=
y:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fon=
t-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:base=
line;white-space:pre-wrap">14.=C2=A0 IANA Considerations</span></p><br><p d=
ir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><spa=
n style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0=
,0);background-color:transparent;font-variant-numeric:normal;font-variant-e=
ast-asian:normal;vertical-align:baseline;white-space:pre-wrap">14.1.=C2=A0 =
Media type registration</span></p><br><p dir=3D"ltr" style=3D"line-height:1=
.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fa=
mily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;=
font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:b=
aseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0The following information s=
erves as the registration form for the</span></p><p dir=3D"ltr" style=3D"li=
ne-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:1=
0pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:t=
ransparent;font-variant-numeric:normal;font-variant-east-asian:normal;verti=
cal-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0&quot;audio/flac=
&quot; media type.=C2=A0 This media type is applicable for FLAC</span></p><=
p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><=
span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(=
0,0,0);background-color:transparent;font-variant-numeric:normal;font-varian=
t-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=
=A0=C2=A0audio packaged in its native container.=C2=A0 FLAC audio packaged =
in</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin=
-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&qu=
ot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:norm=
al;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-w=
rap">=C2=A0=C2=A0=C2=A0another container will take on the media type of its=
 container, for</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-t=
op:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;C=
ourier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant=
-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whit=
e-space:pre-wrap">=C2=A0=C2=A0=C2=A0example audio/ogg when packaged in an O=
gg container or video/mp4 when</span></p><p dir=3D"ltr" style=3D"line-heigh=
t:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font=
-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpare=
nt;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-alig=
n:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0packaged in a MP4 contai=
ner alongside a video track.</span></p><br><p dir=3D"ltr" style=3D"line-hei=
ght:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fo=
nt-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpa=
rent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-al=
ign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Type name: audio</span=
></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:=
0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;colo=
r:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-=
variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0Subtype name: flac</span></p><p dir=3D"ltr" style=3D"line-he=
ight:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;f=
ont-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transp=
arent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-a=
lign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Required parameters: =
none</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&=
quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:no=
rmal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre=
-wrap">=C2=A0=C2=A0=C2=A0Optional parameters: none</span></p><p dir=3D"ltr"=
 style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D=
"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgr=
ound-color:transparent;font-variant-numeric:normal;font-variant-east-asian:=
normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Enco=
ding considerations: as per this document</span></p><p dir=3D"ltr" style=3D=
"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-siz=
e:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-colo=
r:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;ve=
rtical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Security cons=
iderations: see section 12</span></p><p dir=3D"ltr" style=3D"line-height:1.=
38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fam=
ily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;f=
ont-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:ba=
seline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Interoperability considerati=
ons: no known concerns</span></p><p dir=3D"ltr" style=3D"line-height:1.38;m=
argin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:=
&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-=
variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseli=
ne;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Published specification: THISRFC=
</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-b=
ottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot=
;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal=
;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wra=
p">=C2=A0=C2=A0=C2=A0Applications that use this media type: ffmpeg, apache,=
 firefox</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;=
margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier =
New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeri=
c:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space=
:pre-wrap">=C2=A0=C2=A0=C2=A0Fragment identifier considerations: none</span=
></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:=
0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;colo=
r:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-=
variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0Additional information:</span></p><p dir=3D"ltr" style=3D"li=
ne-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:1=
0pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:t=
ransparent;font-variant-numeric:normal;font-variant-east-asian:normal;verti=
cal-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Depr=
ecated alias names for this type: audio/x-flac</span></p><p dir=3D"ltr" sty=
le=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fon=
t-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background=
-color:transparent;font-variant-numeric:normal;font-variant-east-asian:norm=
al;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0Magic number(s): fLaC</span></p><p dir=3D"ltr" style=3D"line-height:1=
.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fa=
mily:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;=
font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:b=
aseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0File extension(=
s): flac</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;=
margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier =
New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeri=
c:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space=
:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Macintosh file type code(s): none<=
/span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bo=
ttom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;=
;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;=
font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap=
">=C2=A0=C2=A0=C2=A0Person &amp; email address to contact for further infor=
mation: IETF CELLAR WG</span></p><p dir=3D"ltr" style=3D"line-height:1.38;m=
argin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:=
&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-=
variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseli=
ne;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Intended usage: COMMON</span></p=
><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"=
><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rg=
b(0,0,0);background-color:transparent;font-variant-numeric:normal;font-vari=
ant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=
=C2=A0=C2=A0Restrictions on usage: N/A</span></p><p dir=3D"ltr" style=3D"li=
ne-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:1=
0pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:t=
ransparent;font-variant-numeric:normal;font-variant-east-asian:normal;verti=
cal-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Author: IETF CEL=
LAR WG</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;ma=
rgin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier Ne=
w&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:=
normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:p=
re-wrap">=C2=A0=C2=A0=C2=A0Change controller: IESG</span></p><p dir=3D"ltr"=
 style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D=
"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgr=
ound-color:transparent;font-variant-numeric:normal;font-variant-east-asian:=
normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0Prov=
isional registration? (standards tree only): NO</span></p><br><p dir=3D"ltr=
" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">15.=C2=A0 Normative=
 References</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-t=
op:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;C=
ourier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant=
-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whit=
e-space:pre-wrap">=C2=A0=C2=A0=C2=A0[I-D.ietf-cellar-matroska]</span></p><p=
 dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><s=
pan style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0=
,0,0);background-color:transparent;font-variant-numeric:normal;font-variant=
-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
Lhomme, S., Bunkus, M., and D. Rice, &quot;Matroska Media</span></p><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Con=
tainer Format Specifications&quot;, Work in Progress,</span></p><p dir=3D"l=
tr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=
=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);bac=
kground-color:transparent;font-variant-numeric:normal;font-variant-east-asi=
an:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Internet-=
Draft, draft-ietf-cellar-matroska-14, 1 October</span></p><p dir=3D"ltr" st=
yle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fo=
nt-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgroun=
d-color:transparent;font-variant-numeric:normal;font-variant-east-asian:nor=
mal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A02022, &lt;<a hr=
ef=3D"https://www.ietf.org/archive/id/draft-ietf-cellar-">https://www.ietf.=
org/archive/id/draft-ietf-cellar-</a></span></p><p dir=3D"ltr" style=3D"lin=
e-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10=
pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:tr=
ansparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertic=
al-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0matroska-14.txt&gt;.</sp=
an></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-b=
ottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot=
;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal=
;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wra=
p">=C2=A0=C2=A0=C2=A0[RFC2119]=C2=A0 Bradner, S., &quot;Key words for use i=
n RFCs to Indicate</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margi=
n-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quo=
t;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-vari=
ant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;w=
hite-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Requirement Levels&quot;, BCP 14, RFC 2119,</=
span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bot=
tom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;=
color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;f=
ont-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"=
>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0DOI 10.17487/RFC2119, March 1997,</span></p><p dir=3D"ltr" styl=
e=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font=
-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-=
color:transparent;font-variant-numeric:normal;font-variant-east-asian:norma=
l;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0&lt;<a href=3D"htt=
ps://www.rfc-editor.org/info/rfc2119">https://www.rfc-editor.org/info/rfc21=
19</a>&gt;.</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-t=
op:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;C=
ourier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant=
-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whit=
e-space:pre-wrap">=C2=A0=C2=A0=C2=A0[RFC4732]=C2=A0 Handley, M., Ed., Resco=
rla, E., Ed., and IAB, &quot;Internet</span></p><p dir=3D"ltr" style=3D"lin=
e-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10=
pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:tr=
ansparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertic=
al-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Denial-of-Service Consid=
erations&quot;, RFC 4732,</span></p><p dir=3D"ltr" style=3D"line-height:1.3=
8;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-fami=
ly:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;fo=
nt-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:bas=
eline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0DOI 10.17487/RFC4732, December 2006,=
</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-b=
ottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot=
;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal=
;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wra=
p">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0&lt;<a href=3D"https://www.rfc-editor.org/info/rfc4732">https:/=
/www.rfc-editor.org/info/rfc4732</a>&gt;.</span></p><br><p dir=3D"ltr" styl=
e=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font=
-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-=
color:transparent;font-variant-numeric:normal;font-variant-east-asian:norma=
l;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0[RFC8174]=
=C2=A0 Leiba, B., &quot;Ambiguity of Uppercase vs Lowercase in RFC</span></=
p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt=
"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:r=
gb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-var=
iant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A02119 Key Words&quot;, BCP 14, RFC 8174, DOI 10.17487/RFC8174,</span></p>=
<p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt">=
<span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb=
(0,0,0);background-color:transparent;font-variant-numeric:normal;font-varia=
nt-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0May 2017, &lt;<a href=3D"https://www.rfc-editor.org/info/rfc8174">https:=
//www.rfc-editor.org/info/rfc8174</a>&gt;.</span></p><br><p dir=3D"ltr" sty=
le=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"fon=
t-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background=
-color:transparent;font-variant-numeric:normal;font-variant-east-asian:norm=
al;vertical-align:baseline;white-space:pre-wrap">16.=C2=A0 Informative Refe=
rences</span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0p=
t;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courie=
r New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-nume=
ric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-spa=
ce:pre-wrap">=C2=A0=C2=A0=C2=A0[HPL-1999-144]</span></p><p dir=3D"ltr" styl=
e=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font=
-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-=
color:transparent;font-variant-numeric:normal;font-variant-east-asian:norma=
l;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Hans, M. and RW. S=
chafer, &quot;Lossless Compression of Digital</span></p><p dir=3D"ltr" styl=
e=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font=
-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-=
color:transparent;font-variant-numeric:normal;font-variant-east-asian:norma=
l;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0Audio&quot;, DOI 1=
0.1109/79.939834, November 1999,</span></p><p dir=3D"ltr" style=3D"line-hei=
ght:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;fo=
nt-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpa=
rent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-al=
ign:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0&lt;<a href=3D"https://www.hpl=
.hp.com/techreports/1999/HPL-">https://www.hpl.hp.com/techreports/1999/HPL-=
</a></span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&=
quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:no=
rmal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre=
-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A01999-144.pdf&gt;.</span></p><br><p dir=3D"ltr" style=3D"l=
ine-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:=
10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:=
transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vert=
ical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0[IEC.60908.1999=
]</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-=
bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quo=
t;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:norma=
l;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wr=
ap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0International Electrotechnical Commission, &quot;Audio</span=
></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:=
0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;colo=
r:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-=
variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0recording - Compact disc digital audio system&quot;,</span></p><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0IEC=
 International standard 60908 second edition, 1999.</span></p><br><p dir=3D=
"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span sty=
le=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);b=
ackground-color:transparent;font-variant-numeric:normal;font-variant-east-a=
sian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=
=A0[ISRC-handbook]</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margi=
n-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quo=
t;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-vari=
ant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;w=
hite-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0&quot;International Standard Recording Code (=
ISRC) Handbook,</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-t=
op:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;C=
ourier New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant=
-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;whit=
e-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A04th edition&quot;, 2021, &lt;<a href=3D"https://=
www.ifpi.org/isrc_handbook/">https://www.ifpi.org/isrc_handbook/</a>&gt;.</=
span></p><br><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin=
-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&qu=
ot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:norm=
al;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-w=
rap">=C2=A0=C2=A0=C2=A0[RFC3533]=C2=A0 Pfeiffer, S., &quot;The Ogg Encapsul=
ation Format Version 0&quot;,</span></p><p dir=3D"ltr" style=3D"line-height=
:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-=
family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transparen=
t;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align=
:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0RFC 3533, DOI 10.17487/RFC3533, M=
ay 2003,</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;=
margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier =
New&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeri=
c:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space=
:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0&lt;<a href=3D"https://www.rfc-editor.org/info/rfc3533=
">https://www.rfc-editor.org/info/rfc3533</a>&gt;.</span></p><br><p dir=3D"=
ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span styl=
e=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);ba=
ckground-color:transparent;font-variant-numeric:normal;font-variant-east-as=
ian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=
[RFC5334]=C2=A0 Goncalves, I., Pfeiffer, S., and C. Montgomery, &quot;Ogg M=
edia</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;marg=
in-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&=
quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:no=
rmal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre=
-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0Types&quot;, RFC 5334, DOI 10.17487/RFC5334, September 20=
08,</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margi=
n-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&q=
uot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:nor=
mal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-=
wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0&lt;<a href=3D"https://www.rfc-editor.org/info/rfc5334">http=
s://www.rfc-editor.org/info/rfc5334</a>&gt;.</span></p><br><p dir=3D"ltr" s=
tyle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"f=
ont-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgrou=
nd-color:transparent;font-variant-numeric:normal;font-variant-east-asian:no=
rmal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0[RFC67=
16]=C2=A0 Valin, JM., Vos, K., and T. Terriberry, &quot;Definition of the</=
span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bot=
tom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;=
color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;f=
ont-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"=
>=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0Opus Audio Codec&quot;, RFC 6716, DOI 10.17487/RFC6716,</span><=
/p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0p=
t"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:=
rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-va=
riant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0September 2012, &lt;<a href=3D"https://www.rfc-editor.org/info/rfc671=
6">https://www.rfc-editor.org/info/rfc6716</a>&gt;.</span></p><br><p dir=3D=
"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span sty=
le=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);b=
ackground-color:transparent;font-variant-numeric:normal;font-variant-east-a=
sian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=
=A0[RFC7942]=C2=A0 Sheffer, Y. and A. Farrel, &quot;Improving Awareness of =
Running</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;m=
argin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier N=
ew&quot;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric=
:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:=
pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0=C2=A0Code: The Implementation Status Section&quot;, BCP 205=
,</span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-=
bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quo=
t;;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:norma=
l;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wr=
ap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0RFC 7942, DOI 10.17487/RFC7942, July 2016,</span></p><p dir=
=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span =
style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0=
);background-color:transparent;font-variant-numeric:normal;font-variant-eas=
t-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0&lt=
;<a href=3D"https://www.rfc-editor.org/info/rfc7942">https://www.rfc-editor=
.org/info/rfc7942</a>&gt;.</span></p><br><p dir=3D"ltr" style=3D"line-heigh=
t:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font=
-family:&quot;Courier New&quot;;color:rgb(0,0,0);background-color:transpare=
nt;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-alig=
n:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0[robinson-tr156]</span><=
/p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0p=
t"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color:=
rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-va=
riant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0Robinson, T., &quot;SHORTEN: Simple lossless and near-lossless</span>=
</p><p dir=3D"ltr" style=3D"line-height:1.38;margin-top:0pt;margin-bottom:0=
pt"><span style=3D"font-size:10pt;font-family:&quot;Courier New&quot;;color=
:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-v=
ariant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">=C2=
=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0waveform compression&quot;, December 1994,</span></p><p dir=3D"ltr" s=
tyle=3D"line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style=3D"f=
ont-size:10pt;font-family:&quot;Courier New&quot;;color:rgb(0,0,0);backgrou=
nd-color:transparent;font-variant-numeric:normal;font-variant-east-asian:no=
rmal;vertical-align:baseline;white-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0&lt;<a href=3D"=
https://mi.eng.cam.ac.uk/reports/abstracts/">https://mi.eng.cam.ac.uk/repor=
ts/abstracts/</a></span></p><p dir=3D"ltr" style=3D"line-height:1.38;margin=
-top:0pt;margin-bottom:0pt"><span style=3D"font-size:10pt;font-family:&quot=
;Courier New&quot;;color:rgb(0,0,0);background-color:transparent;font-varia=
nt-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;wh=
ite-space:pre-wrap">=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0robinson_tr156.html&gt;.</span></p></span><br=
 class=3D"gmail-Apple-interchange-newline"></div></div>

--000000000000480d7705f5a56f73--

