[FFmpeg-devel] [PATCH] E-AC-3 spectral extension

Justin Ruggles justin.ruggles
Thu Aug 6 00:14:39 CEST 2009

Michael Niedermayer wrote:

> On Mon, Aug 03, 2009 at 06:08:52PM -0400, Justin Ruggles wrote:
>> Michael Niedermayer wrote:
> [...]
>>>> +    int8_t spx_atten_code[AC3_MAX_CHANNELS];    ///< spx attenuation code                   (spxattencod)
>>>> +    int spx_start_subband;                      ///< spx beginning frequency band           (spxbegf)
>>>> +    int spx_start_freq;                         ///< spx start frequency bin
>>>> +    int spx_end_freq;                           ///< spx end frequency bin
>>> what are frequency bins?
>> MDCT coefficient index.  Frequency bin is the term that the (E-)AC-3
>> spec uses throughout.
> Please explain these terms somewhere, like at the top of the file.
> And dont hesitate to add diagrams and ascii art to make all the relations
> clear.

I have added a summary of the bin/subband/band grouping of MDCT
coefficients used in (E-)AC-3...with an ascii art diagram. :)

>>>> +    int spx_copy_start_freq;                    ///< spx starting frequency for copying     (copystartmant)
>>> frequency in hz ?
>> bin number. fixed.
> next clarify what starting frequency is
> there surely is a source and a destination to every copy ...

the summary noted above defines what a frequency bin is.  i also added a
comment here stating that the copy range ends at the start of the spx range.

>>>> +    int num_spx_bands;                          ///< number of spx bands                    (nspxbnds)
>>>> +    uint8_t spx_band_struct[SPX_MAX_BANDS];     ///< spectral extension band structure      (spxbndstrc)
>>> what is a spectral extension band structure?
>> determines how many subbands are in each band.  for each subband, 1
>> means combine with previous band, 0 means start new band.  this is the
>> same format as the coupling band structure, hence the shared function to
>> decode it.  I just added more information to the current documentation
>> for decode_band_structure().
> Could you please explain this in the doxy of the variable,
> someone reading the code who sees "spx_band_struct" would look up
> the doxy in the struct first and only if the doxy that is supposed
> to explain does not do that at all would he read the code using the
> variable
> you dont have to write all the details in the doxy but
> "spectral extension band structure" says nothing unless one happens to
> know the ac3 spec by heart and id love to not require that.
> A person knowing how MDCT+VLC/RLE based audio coding works should be
> able to make sense of such decoders in lavc and not have to read
> through each individual spec

I hope the recent changes I've made help this.  I removed all the
*_band_struct[] from the AC3DecodeContext.  So what defines the band
structure is the number of bands and size of each band, which is much
more intuitive to someone not already knowing the spec.

New patch attached.

Thanks for the suggestions.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: eac3_spx_8.diff
Type: text/x-diff
Size: 21646 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090805/381dbc22/attachment.diff>

More information about the ffmpeg-devel mailing list