[Mp4-tech] Re: [Audio] CCE buffers

Ralph Sperschneider ralph.sperschneider iis.fraunhofer.de
Wed Apr 16 20:25:45 EDT 2008


Alex Converse wrote:
> Ralph Sperschneider wrote:
>> Alex Converse wrote:
>>> Dear Experts:
>>>
>>>
>>> I'm having trouble understanding part of the AAC CCE procedures. 
>>> From 14496-3 section 4.6.8.3.3:
>>> ""
>>> spectrum_l(idx, domain)    Pointer to the spectral data associated 
>>> with the left channel of the
>>>                           channel_pair_element() with index idx. 
>>> Depending on the value of
>>>                           "domain", the spectral coefficients before 
>>> (0) or after (1) TNS decoding are
>>>                           pointed to.
>>> ""
>>>
>>> ""
>>> decode_coupling_channel()
>>> {
>>>   - decode spectral coefficients of embedded single_channel_element
>>>     into buffer "cc_spectrum[]".
>>>
>>> ...
>>>
>>>     couple_channel( cc_spectrum,         spectrum_l( 
>>> cc_target_tag_select[c], cc_domain ),         list_index++ ) );
>>>
>>>
>>> ...
>>> }
>>>
>>> couple_channel( source_spectrum[], dest_spectrum[], gain_list_index ) {
>>> ...
>>>     dest_spectrum[g][b][sfb][i] +=         cc_gain[idx][g][sfb] * 
>>> source_spectrum[g][b][sfb][i];
>>> ...
>>> }
>>> ""
>>>
>>>
>>>
>>> Now besides obvious the extraneous parenthesis on couple_channel(), 
>>> the procedure seems to reading the output buffer, modifying it and 
>>> witting over the input buffer!!! Am I missing something here or did 
>>> the buffers get swapped in error in the spec?
>>>
>>> Thanks,
>>> Alex Converse
>>>
>>>
>> Dear Alex,
>>
>> I checked your observations. With regard to the extraneous 
>> parenthesis you are definitely right. However, wrt. source and 
>> destination I think the standard is correct:
>>
>> Here, the destination is derived (in place derivation):
>>
>> dest_spectrum[g][b][sfb][i] += cc_gain[idx][g][sfb] * 
>> source_spectrum[g][b][sfb][i];
>>
>> Thus, the target channel is mixed with the coupling channel, using 
>> cc_gain as attenuation factor.
>>
>> Therefore, the relationship:
>>
>> source_spectrum = cc_spectrum = the spectrum of the coupling channel
>> destination_spectrum = spectrum_[rlm] = the spectrum of the output 
>> channel
>>
>> seems to me correct.
>>
>> Best regards,
>> Ralph
>>
>
> Hi Ralph,
>
> That makes a lot of sense. It initially read to me like the "decode 
> spectral coefficients of embedded single_channel_element into buffer 
> 'cc_spectrum[]'" was a post condition/description of the code below. 
> But I guess it's really more of a precondition.
>
> Thanks for the help,
> Alex Converse

Yep - I had to read it twice, too. The sentence seems just to replace 
some obvious pseudo code. I think it should rather look like:
"
decode_coupling_channel()
{
    /*
        first:
            decode spectral coefficients of embedded single_channel_element
            into buffer "cc_spectrum[]"
            (no pseudo code is given for this task)
        second:
            Couple spectral coefficients onto target channels
            (according to the following pseudo code)
    */
     list_index = 0;
     ....
"
Best regards,
Ralph
-- 
Dipl.-Ing. Ralph Sperschneider  | Phone: +49 9131 776 6167
Fraunhofer IIS                  | Fax:   +49 9131 776 6099
Am Wolfsmantel 33               | mailto:ralph.sperschneider iis.fraunhofer.de
D 91058 Erlangen                | http://www.iis.fraunhofer.de/amm/


More information about the Mp4-tech mailing list