[FFmpeg-devel] [PATCH] avcodec/libmp3lame: properly handle unaligned frame data
Muhammad Faiz
mfcc64 at gmail.com
Wed Apr 26 13:16:05 EEST 2017
This should fix Ticket6349
Since 383057f8e744efeaaa3648a59bc577b25b055835, framequeue may
generate unaligned frame data.
Signed-off-by: Muhammad Faiz <mfcc64 at gmail.com>
---
libavcodec/libmp3lame.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/libavcodec/libmp3lame.c b/libavcodec/libmp3lame.c
index 5e26743..cd505bb 100644
--- a/libavcodec/libmp3lame.c
+++ b/libavcodec/libmp3lame.c
@@ -203,15 +203,20 @@ static int mp3lame_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
ENCODE_BUFFER(lame_encode_buffer_int, int32_t, frame->data);
break;
case AV_SAMPLE_FMT_FLTP:
- if (frame->linesize[0] < 4 * FFALIGN(frame->nb_samples, 8)) {
- av_log(avctx, AV_LOG_ERROR, "inadequate AVFrame plane padding\n");
- return AVERROR(EINVAL);
- }
for (ch = 0; ch < avctx->channels; ch++) {
+ if (frame->linesize[0] < 4 * FFALIGN(frame->nb_samples, 8) || 0x1F & (intptr_t)(frame->data[ch])) {
+ float *src = (float *) frame->data[ch];
+ float *dst = s->samples_flt[ch];
+ int k;
+
+ for (k = 0; k < frame->nb_samples; k++)
+ dst[k] = src[k] * 32768.0f;
+ } else {
s->fdsp->vector_fmul_scalar(s->samples_flt[ch],
(const float *)frame->data[ch],
32768.0f,
FFALIGN(frame->nb_samples, 8));
+ }
}
ENCODE_BUFFER(lame_encode_buffer_float, float, s->samples_flt);
break;
--
2.9.3
More information about the ffmpeg-devel
mailing list