so the behavior will be similar to av_frame_make_writable(). Also use av_frame_copy() replacing av_image_copy()/av_samples_copy().
Needed for the next patch. Suggested-by: wm4 <nfx...@googlemail.com> Signed-off-by: Muhammad Faiz <mfc...@gmail.com> --- libavfilter/avfilter.c | 26 ++++++-------------------- libavfilter/filters.h | 2 +- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index c12d491..c8dafd2 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -1104,7 +1104,7 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame) filter_frame = default_filter_frame; if (dst->needs_writable) { - ret = ff_inlink_make_frame_writable(link, &frame); + ret = ff_inlink_make_frame_writable(link, frame); if (ret < 0) goto fail; } @@ -1556,9 +1556,8 @@ int ff_inlink_consume_samples(AVFilterLink *link, unsigned min, unsigned max, return 1; } -int ff_inlink_make_frame_writable(AVFilterLink *link, AVFrame **rframe) +int ff_inlink_make_frame_writable(AVFilterLink *link, AVFrame *frame) { - AVFrame *frame = *rframe; AVFrame *out; int ret; @@ -1585,23 +1584,10 @@ int ff_inlink_make_frame_writable(AVFilterLink *link, AVFrame **rframe) return ret; } - switch (link->type) { - case AVMEDIA_TYPE_VIDEO: - av_image_copy(out->data, out->linesize, (const uint8_t **)frame->data, frame->linesize, - frame->format, frame->width, frame->height); - break; - case AVMEDIA_TYPE_AUDIO: - av_samples_copy(out->extended_data, frame->extended_data, - 0, 0, frame->nb_samples, - av_frame_get_channels(frame), - frame->format); - break; - default: - av_assert0(!"reached"); - } - - av_frame_free(&frame); - *rframe = out; + av_frame_copy(out, frame); + av_frame_unref(frame); + av_frame_move_ref(frame, out); + av_frame_free(&out); return 0; } diff --git a/libavfilter/filters.h b/libavfilter/filters.h index 2c78d60..5d32403 100644 --- a/libavfilter/filters.h +++ b/libavfilter/filters.h @@ -101,7 +101,7 @@ int ff_inlink_consume_samples(AVFilterLink *link, unsigned min, unsigned max, * This is similar to av_frame_make_writable() except it uses the link's * buffer allocation callback, and therefore allows direct rendering. */ -int ff_inlink_make_frame_writable(AVFilterLink *link, AVFrame **rframe); +int ff_inlink_make_frame_writable(AVFilterLink *link, AVFrame *frame); /** * Test and acknowledge the change of status on the link. -- 2.5.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel