[FFmpeg-devel] [PATCH 1/2] avfilter: change ff_inlink_make_frame_writable() to take AVFrame* argument
Muhammad Faiz
mfcc64 at gmail.com
Sat Jan 28 17:23:53 EET 2017
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 <nfxjfg at googlemail.com>
Signed-off-by: Muhammad Faiz <mfcc64 at 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
More information about the ffmpeg-devel
mailing list