[Flake-enc-svnlog] SF.net SVN: flake-enc:[252] doc
Status: Beta
Brought to you by:
jbr79
From: <jb...@us...> - 2009-06-07 23:03:01
|
Revision: 252 http://flake-enc.svn.sourceforge.net/flake-enc/?rev=252&view=rev Author: jbr79 Date: 2009-06-07 23:02:49 +0000 (Sun, 07 Jun 2009) Log Message: ----------- Add a doc subdirectory. Add a document detailing FLAC format constraints. Added Paths: ----------- doc/ doc/flac_constraints.txt Added: doc/flac_constraints.txt =================================================================== --- doc/flac_constraints.txt (rev 0) +++ doc/flac_constraints.txt 2009-06-07 23:02:49 UTC (rev 252) @@ -0,0 +1,162 @@ + +FLAC Constraints + + +================================================================================ +(c) 2009 Justin Ruggles +This work is licensed under a Creative Commons Attribution-Share Alike 3.0 +Unported License. http://creativecommons.org/licenses/by-sa/3.0/ +================================================================================ + + +This document details the constraints on the source audio format parameters and +encoding options in the FLAC format. There are 3 limiting factors, the FLAC +bitstream format, the compression level, and Subset compatibility. Encoder and +decoder limitations add additional constraints in practical use, but those are +only noted in this document for informational purposes. + + +Compression Level Compatibility Constraints +=========================================== + +Compression levels are not defined in the official FLAC format description, but +the libFLAC compression levels are often used to describe compatibility in +hardware implementations. + + Level Blocksize Mid/Side LPC Type Max LPC Order Max Rice Order +-------------------------------------------------------------------------------- + 0 1152 No Fixed 4 3 + 1/2 1152 Yes Fixed 4 3 + 3 4096 No Adaptive 6 4 + 4 4096 Yes Adaptive 8 4 + 5 4096 Yes Adaptive 8 5 + 6/7 4096 Yes Adaptive 8 6 + 8 4096 Yes Adaptive 12 6 + *9/10 4096(v) Yes Adaptive 12 8 +*11/12 8192(v) Yes Adaptive 32 8 + +* = Flake only +v = maximum blocksize in variable blocksize mode + + +Subset Compatibility Constraints +================================ + +Quote from the FLAC Format Description: + FLAC specifies a subset of itself as the Subset format. The purpose of this + is to ensure that any streams encoded according to the Subset are truly + "streamable", meaning that a decoder that cannot seek within the stream can + still pick up in the middle of the stream and start decoding. It also makes + hardware decoder implementations more practical by limiting the encoding + parameters such that decoder buffer sizes and other resource requirements + can be easily determined. flac generates Subset streams by default unless + the "--lax" command-line option is used. The Subset makes the following + limitations on what may be used in the stream: + * The blocksize bits in the frame header must be 0001-1110. The + blocksize must be <=16384; if the sample rate is <= 48000Hz, the + blocksize must be <=4608. + * The sample rate bits in the frame header must be 0001-1110. + * The bits-per-sample bits in the frame header must be 001-111. + * If the sample rate is <= 48000Hz, the filter order in LPC subframes + must be less than or equal to 12, i.e. the subframe type bits in the + subframe header may not be 101100-111111. + * The Rice partition order in a Rice-coded residual section must be less + than or equal to 8. + +In practical terms, this means that compression levels 0 to 10 are Subset +compatible for sample rates <= 48kHz, and compression levels 0 to 12 are Subset +compatible for higher sample rates. There is also the additional constraint +that the "get from STREAMINFO" values cannot be used for sample rate and sample +size in the frame headers. This limits the possible sample sizes, but not the +possible sample rates. + +The use of 32-bit sample sizes is not currently allowed in Subset compatible +streams since the only way to specify it is in the STREAMINFO. The logical use +of the reserved value of 7 for sample size would be for 32-bit, and 7 is +included in the allowed values for Subset, but for now the value is still +reserved. + + +Detailed Summary of Constraints +=============================== + +Sample Size: + * The FLAC format supports from 4-bit to 32-bit sample sizes. + * libFLAC does not support encoding or decoding anything above 24-bit. + * Flake supports encoding up to 32-bit. + * FFmpeg supports decoding up to 32-bit, but 32-bit is only supported if + mid/side is disabled due to bitstream reader limitations. + * Only sample sizes of 8, 12, 16, 20, and 24 are Subset compatible. + +Channels: + * The number of channels can be from 1 to 8. + * Channel assignment is defined for 1 to 6 channels, but is undefined for + 7 or 8 channels. However, the flac reference encoder also has an option + for keeping the WAV header, which contains a channel mask to define + channel assignment. + * Channel order is defined for 1 to 6 channels as SMPTE/WAV order, but is + undefined for 7 or 8 channels. + * Mid/side coding can be used for stereo audio. It is not used for + compression levels 0 and 3. + * There is no limitation with regard to Subset compatibility on the number + of channels or the use of mid/side coding. + +Sample Rate: + * The sample rate can be from 1Hz to 655350Hz. + * The only Subset limitation is that the sample rate must be specified in + each frame, not just in the STREAMINFO. + * The sample rate determines Subset compatibility constraints for blocksize + and LPC order. + +Blocksize: + * The minimum blocksize is 16 samples, except for the last block which can + be as small as 1 sample. + * The maximum blocksize is 65535 samples. + * Subset compatible streams are limited to a blocksize of 4608 when the + sample rate is <= 48kHz or 16384 when the sample rate is > 48kHz. + * The FLAC format description specifies how to indicate variable blocksize, + and there are no constraints listed on its use. + * The libFLAC reference encoder does not use variable blocksize encoding, + but it is supported in the libFLAC decoder. + * Flake takes a cautious approach and only uses variable blocksize encoding + for compression levels which are specific to Flake. + +Subframe Type: + * There are 4 subframe types: Constant, Verbatim, Fixed LPC, and Adaptive + LPC. + * All subframe types are Subset compatible. + * No prediction or Rice coding is used in Constant and Verbatim subframes. + * All compression levels can use the Constant, Verbatim, and Fixed LPC + subframe types. + * Only compression levels > 2 use the Adaptive LPC subframe type. + +LPC Order: + * The prediction order in Fixed LPC mode can be 0 to 4. + * Order 0 in Fixed LPC mode does no prediction, but does allow for Rice + coding. + * Order 0 is not allowed in Adaptive LPC mode. + * The maximum order in Adaptive LPC mode is 32. + * If the sample rate is <= 48kHz, the LPC order must be <= 12 in order for + the stream to be Subset compatible. + * The maximum LPC order constraint varies between compression levels. + +Quantized LPC Coefficient Precision: + * The LPC coefficient precision can be from 1 to 15 bits. + * There is no additional constraint on LPC coefficient precision with + regard to Subset compatibility or compression level. + * By default, the libFLAC encoder adaptively chooses the precision based on + sample size and blocksize. + +Residual Encoding Method: + * There is no constraint on the selection of the residual encoding method. + * Both Flake and the libFLAC encoder adaptively choose RICE or RICE2 based + on which one compresses better for each subframe. + +Rice Partition Order: + * The minimum Rice order is 0, which corresponds to a single Rice parameter + being used for the entire subframe. + * The maximum Rice order is 15, which uses 32768 Rice parameters for the + subframe. + * The Rice order must be <= 8 in order for the stream to be Subset + compatible. + * The maximum Rice order constraint varies between compression levels. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |