diff options
author | Derek Buitenhuis <derek.buitenhuis@gmail.com> | 2016-02-24 16:03:57 +0000 |
---|---|---|
committer | Derek Buitenhuis <derek.buitenhuis@gmail.com> | 2016-02-24 16:03:57 +0000 |
commit | 10424024a16a7646169b9c9008c5f7b77cbc2211 (patch) | |
tree | ea852976be3a8b8d0cd3d57bc1beb918b89991d0 /libavfilter/avfilter.c | |
parent | 6992276acaaee32b33bd5f6e2f0d89588c4ae59a (diff) | |
parent | b3dd30db0b2d857147fc0e1461a00bd6172a26a3 (diff) | |
download | ffmpeg-10424024a16a7646169b9c9008c5f7b77cbc2211.tar.gz |
Merge commit 'b3dd30db0b2d857147fc0e1461a00bd6172a26a3'
* commit 'b3dd30db0b2d857147fc0e1461a00bd6172a26a3':
lavfi: pass the hw frames context through the filter chain
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Diffstat (limited to 'libavfilter/avfilter.c')
-rw-r--r-- | libavfilter/avfilter.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 2f4d59f316..3a2a6c2a60 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -22,9 +22,11 @@ #include "libavutil/atomic.h" #include "libavutil/avassert.h" #include "libavutil/avstring.h" +#include "libavutil/buffer.h" #include "libavutil/channel_layout.h" #include "libavutil/common.h" #include "libavutil/eval.h" +#include "libavutil/hwcontext.h" #include "libavutil/imgutils.h" #include "libavutil/internal.h" #include "libavutil/opt.h" @@ -322,6 +324,17 @@ int avfilter_config_links(AVFilterContext *filter) return ret; } + if (link->src->nb_inputs && link->src->inputs[0]->hw_frames_ctx && + !link->hw_frames_ctx) { + AVHWFramesContext *input_ctx = (AVHWFramesContext*)link->src->inputs[0]->hw_frames_ctx->data; + + if (input_ctx->format == link->format) { + link->hw_frames_ctx = av_buffer_ref(link->src->inputs[0]->hw_frames_ctx); + if (!link->hw_frames_ctx) + return AVERROR(ENOMEM); + } + } + link->init_state = AVLINK_INIT; } } @@ -715,6 +728,8 @@ static void free_link(AVFilterLink *link) if (link->dst) link->dst->inputs[link->dstpad - link->dst->input_pads] = NULL; + av_buffer_unref(&link->hw_frames_ctx); + ff_formats_unref(&link->in_formats); ff_formats_unref(&link->out_formats); ff_formats_unref(&link->in_samplerates); |