[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