@@ -215,7 +215,7 @@ static int aptx_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
if ((ret = ff_af_queue_add(&s->afq, frame)) < 0)
return ret;
- output_size = s->block_size * frame->nb_samples/4;
+ output_size = s->block_size * (frame->nb_samples/4);
if ((ret = ff_get_encode_buffer(avctx, avpkt, output_size, 0)) < 0)
return ret;
@@ -229,7 +229,8 @@ static int aptx_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
aptx_encode_samples(s, samples, avpkt->data + pos);
}
- ff_af_queue_remove(&s->afq, frame->nb_samples, &avpkt->pts, &avpkt->duration);
+ ff_af_queue_remove(&s->afq, frame->nb_samples & ~3,
+ &avpkt->pts, &avpkt->duration);
*got_packet_ptr = 1;
return 0;
}
@@ -1,5 +1,5 @@
-b5d8a297c0e8d9854f19d9d3e8b82859 *tests/data/fate/aptx.aptx
-418950 tests/data/fate/aptx.aptx
+966f4391a8472208409a52603494846f *tests/data/fate/aptx.aptx
+418948 tests/data/fate/aptx.aptx
#tb 0: 1/44100
#media_type 0: audio
#codec_id 0: pcm_s16le
@@ -1,5 +1,5 @@
-48ecaa81ee5adaaa62ed3ff6574b6666 *tests/data/fate/aptx-hd.aptx_hd
-628425 tests/data/fate/aptx-hd.aptx_hd
+0bb7bb4313bd33fe44e409c67d392fd0 *tests/data/fate/aptx-hd.aptx_hd
+628422 tests/data/fate/aptx-hd.aptx_hd
#tb 0: 1/44100
#media_type 0: audio
#codec_id 0: pcm_s32le
Otherwise one could read into the frame's padding when one encounters the small last frame; furthermore, one would indicate a packet size that is not a multiple of the actual block size and one would write into the padding of said packet. This actually happened in our FATE tests (where the number of samples is 2 mod 4), which therefore needed to be updated. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> --- libavcodec/aptxenc.c | 5 +++-- tests/ref/fate/aptx | 4 ++-- tests/ref/fate/aptx-hd | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-)