On Fri, Jul 29, 2011 at 3:30 PM, Alex Converse <[email protected]> wrote: > On Fri, Jul 29, 2011 at 1:58 PM, Nathan Caldwell <[email protected]> wrote: >> The spec states: >> >> * Only the lowest 12 spectral coefficients of any LFE may be non-zero >> >> We were using the 12 lowest *bands*. >> --- >> libavcodec/aacenc.c | 10 +++++++++- >> 1 files changed, 9 insertions(+), 1 deletions(-) >> >> diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c >> index e74af0b..7b3794f 100644 >> --- a/libavcodec/aacenc.c >> +++ b/libavcodec/aacenc.c >> @@ -540,6 +540,14 @@ static int aac_encode_frame(AVCodecContext *avctx, >> wi[ch].window_shape = 0; >> wi[ch].num_windows = 1; >> wi[ch].grouping[0] = 1; >> + >> + /* Only the lowest 12 coefficients are used in a LFE >> channel */ >> + if (s->sample_rate_index >= 11) >> + ics->num_swb = 1; >> + else if (s->sample_rate_index >= 8) >> + ics->num_swb = 2; /* This actually results in 16 >> coefficients */ > > Should we play it safe and only use 8 here? Can we zero out 13-16 > after the fact?
I like using 8, if only because it simplifies the logic. That still gives us up to 112Hz on the high end and 77Hz on the low end at those sample rates. Not ideal, but should be fine. Attached. -- -Nathan Caldwell
From 030a282fe397506d077cb64a7a4548cf9269730b Mon Sep 17 00:00:00 2001 From: Nathan Caldwell <[email protected]> Date: Fri, 29 Jul 2011 14:49:04 -0600 Subject: [PATCH 2/2] aacenc: Fix number of coefficients used in a LFE channel. To: libav development <[email protected]> The spec states: * Only the lowest 12 spectral coefficients of any LFE may be non-zero We were using the 12 lowest *bands*. --- libavcodec/aacenc.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c index 5a1fc94..449b200 100644 --- a/libavcodec/aacenc.c +++ b/libavcodec/aacenc.c @@ -540,6 +540,12 @@ static int aac_encode_frame(AVCodecContext *avctx, wi[ch].window_shape = 0; wi[ch].num_windows = 1; wi[ch].grouping[0] = 1; + + /* Only the lowest 12 coefficients are used in a LFE channel. + * The expression below results in only the bottom 8 coefficients + * being used for 11.025kHz to 16kHz sample rates. + */ + ics->num_swb = s->samplerate_index >= 8 ? 1 : 3; } else { wi[ch] = s->psy.model->window(&s->psy, samples2, la, cur_channel, ics->window_sequence[0]); @@ -550,7 +556,7 @@ static int aac_encode_frame(AVCodecContext *avctx, ics->use_kb_window[0] = wi[ch].window_shape; ics->num_windows = wi[ch].num_windows; ics->swb_sizes = s->psy.bands [ics->num_windows == 8]; - ics->num_swb = tag == TYPE_LFE ? 12 : s->psy.num_bands[ics->num_windows == 8]; + ics->num_swb = tag == TYPE_LFE ? ics->num_swb : s->psy.num_bands[ics->num_windows == 8]; for (w = 0; w < ics->num_windows; w++) ics->group_len[w] = wi[ch].grouping[w]; -- 1.7.6
_______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
