[FFmpeg-devel] [PATCH] avfilter: align data frame when needed
Muhammad Faiz
mfcc64 at gmail.com
Fri May 5 09:01:31 EEST 2017
This should fix Ticket6349.
Since 383057f8e744efeaaa3648a59bc577b25b055835, framequeue may
generate unaligned frame data.
Signed-off-by: Muhammad Faiz <mfcc64 at gmail.com>
---
libavfilter/avfilter.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index 08b86b0..504f5c6 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -1192,7 +1192,31 @@ static int take_samples(AVFilterLink *link, unsigned min, unsigned max,
av_assert1(samples_ready(link, link->min_samples));
frame0 = frame = ff_framequeue_peek(&link->fifo, 0);
if (frame->nb_samples >= min && frame->nb_samples < max) {
- *rframe = ff_framequeue_take(&link->fifo);
+ int align = 32;
+ if (!((align - 1) & (intptr_t)frame->data[0])) {
+ *rframe = ff_framequeue_take(&link->fifo);
+ return 0;
+ }
+
+ buf = ff_get_audio_buffer(link, frame->nb_samples);
+ if (!buf)
+ return AVERROR(ENOMEM);
+
+ ret = av_frame_copy_props(buf, frame);
+ if (ret < 0) {
+ av_frame_free(&buf);
+ return ret;
+ }
+
+ ret = av_frame_copy(buf, frame);
+ if (ret < 0) {
+ av_frame_free(&buf);
+ return ret;
+ }
+
+ frame = ff_framequeue_take(&link->fifo);
+ av_frame_free(&frame);
+ *rframe = buf;
return 0;
}
nb_frames = 0;
--
2.9.3
More information about the ffmpeg-devel
mailing list