@@ -1235,6 +1235,22 @@ static int take_samples(AVFilterLink *link, unsigned min, unsigned max,
frame = ff_framequeue_peek(&link->fifo, 0);
av_samples_copy(buf->extended_data, frame->extended_data, p, 0, n,
link->channels, link->format);
+
+ if (!av_frame_is_writable(frame)) {
+ AVFrame *new = ff_get_audio_buffer(link, frame->nb_samples);
+ if (!new)
+ return AVERROR(ENOMEM);
+ ret = av_frame_copy_props(new, frame);
+ if (ret < 0) {
+ av_frame_free(&new);
+ return ret;
+ }
+ av_frame_copy(new, frame);
+ av_frame_unref(frame);
+ av_frame_move_ref(frame, new);
+ av_frame_free(&new);
+ }
+
frame->nb_samples -= n;
av_samples_copy(frame->extended_data, frame->extended_data, 0, n,
frame->nb_samples, link->channels, link->format);
affect filters that set partial_buf_size test-case ffplay -i lavfi 'aevalsrc=sin(1000*t*t), aformat=sample_fmts=fltp, asplit [a][b]; [a] firequalizer=fixed=on, showcqt=s=1280x360 [a1]; [b] firequalizer=fixed=on, showcqt=s=1280x360 [b1]; [a1][b1] vstack' Signed-off-by: Muhammad Faiz <mfcc64@gmail.com> --- libavfilter/avfilter.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)