提交 f44005b6 编写于 作者: J Justin Ruggles

aacenc: only use the number of input samples provided by the user.

Fixes handling of CODEC_CAP_SMALL_LAST_FRAME.
上级 48f1e521
...@@ -477,7 +477,7 @@ static void put_bitstream_info(AVCodecContext *avctx, AACEncContext *s, ...@@ -477,7 +477,7 @@ static void put_bitstream_info(AVCodecContext *avctx, AACEncContext *s,
* Channels are reordered from Libav's default order to AAC order. * Channels are reordered from Libav's default order to AAC order.
*/ */
static void deinterleave_input_samples(AACEncContext *s, static void deinterleave_input_samples(AACEncContext *s,
const float *samples) const float *samples, int nb_samples)
{ {
int ch, i; int ch, i;
const int sinc = s->channels; const int sinc = s->channels;
...@@ -491,10 +491,12 @@ static void deinterleave_input_samples(AACEncContext *s, ...@@ -491,10 +491,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])); memcpy(&s->planar_samples[ch][1024], &s->planar_samples[ch][2048], 1024 * sizeof(s->planar_samples[0][0]));
/* deinterleave */ /* deinterleave */
for (i = 2048; i < 3072; i++) { for (i = 2048; i < 2048 + nb_samples; i++) {
s->planar_samples[ch][i] = *sptr; s->planar_samples[ch][i] = *sptr;
sptr += sinc; sptr += sinc;
} }
memset(&s->planar_samples[ch][i], 0,
(3072 - i) * sizeof(s->planar_samples[0][0]));
} }
} }
...@@ -512,7 +514,7 @@ static int aac_encode_frame(AVCodecContext *avctx, ...@@ -512,7 +514,7 @@ static int aac_encode_frame(AVCodecContext *avctx,
return 0; return 0;
if (data) { if (data) {
deinterleave_input_samples(s, data); deinterleave_input_samples(s, data, avctx->frame_size);
if (s->psypp) if (s->psypp)
ff_psy_preprocess(s->psypp, s->planar_samples, s->channels); ff_psy_preprocess(s->psypp, s->planar_samples, s->channels);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册