On Sat, Jan 28, 2012 at 2:59 PM, Justin Ruggles
<[email protected]> wrote:
> Fixes handling of CODEC_CAP_SMALL_LAST_FRAME.
> ---
> It only happens to currently work because avconv allocates enough data to
> cover 1024 samples and zeros out unused samples when it's passing fewer
> samples for the final small frame.  However, the API does not specify this,
> so we should not read more samples than are being provided by the user.
>
>  libavcodec/aacenc.c |    8 +++++---
>  1 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c
> index e610a80..db8308d 100644
> --- a/libavcodec/aacenc.c
> +++ b/libavcodec/aacenc.c
> @@ -476,7 +476,7 @@ static void put_bitstream_info(AVCodecContext *avctx, 
> AACEncContext *s,
>  * Channels are reordered from Libav's default order to AAC order.
>  */
>  static void deinterleave_input_samples(AACEncContext *s,
> -                                       const float *samples)
> +                                       const float *samples, int nb_samples)
>  {
>     int ch, i;
>     const int sinc = s->channels;
> @@ -490,10 +490,12 @@ static void deinterleave_input_samples(AACEncContext *s,
>         memcpy(&s->planar_samples[ch][1024], &s->planar_samples[ch][2048], 
> 1024 * sizeof(s->planar_samples[0][0]));
>
>         /* deinterleave */
> -        for (i = 2048; i < 3072; i++) {
> +        for (i = 2048; i < 2048 + nb_samples; i++) {
>             s->planar_samples[ch][i] = *sptr;
>             sptr += sinc;
>         }
> +        memset(&s->planar_samples[ch][i], 0,
> +               (3072 - i) * sizeof(s->planar_samples[0][0]));
>     }
>  }
>
> @@ -511,7 +513,7 @@ static int aac_encode_frame(AVCodecContext *avctx,
>         return 0;
>
>     if (data) {
> -        deinterleave_input_samples(s, data);
> +        deinterleave_input_samples(s, data, avctx->frame_size);
>         if (s->psypp)
>             ff_psy_preprocess(s->psypp, s->planar_samples, s->channels);
>     }
> --
> 1.7.1

Looks Good
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to