diff options
author | Matthieu Bouron <matthieu.bouron@gmail.com> | 2017-03-29 23:39:40 +0200 |
---|---|---|
committer | Matthieu Bouron <matthieu.bouron@gmail.com> | 2017-03-30 00:02:08 +0200 |
commit | b5e1ec5660692d7cee360da3ed0434d3b46f40d5 (patch) | |
tree | 853ecad2f21623a52a15577dca710c337823a6c6 /libavfilter | |
parent | 78e871ebbcc6f3c877e7292c4dda0c9979f8ede4 (diff) | |
parent | e3fb74f7f9a8f1895381355f40c92cac3c1023d9 (diff) | |
download | ffmpeg-streaming-b5e1ec5660692d7cee360da3ed0434d3b46f40d5.zip ffmpeg-streaming-b5e1ec5660692d7cee360da3ed0434d3b46f40d5.tar.gz |
Merge commit 'e3fb74f7f9a8f1895381355f40c92cac3c1023d9'
* commit 'e3fb74f7f9a8f1895381355f40c92cac3c1023d9':
lavfi: Always propagate hw_frames_ctx through links
Merged-by: Matthieu Bouron <matthieu.bouron@gmail.com>
Diffstat (limited to 'libavfilter')
-rw-r--r-- | libavfilter/avfilter.c | 14 | ||||
-rw-r--r-- | libavfilter/avfilter.h | 2 | ||||
-rw-r--r-- | libavfilter/internal.h | 6 | ||||
-rw-r--r-- | libavfilter/vf_deinterlace_qsv.c | 2 | ||||
-rw-r--r-- | libavfilter/vf_hwdownload.c | 1 | ||||
-rw-r--r-- | libavfilter/vf_hwupload.c | 1 | ||||
-rw-r--r-- | libavfilter/vf_hwupload_cuda.c | 2 | ||||
-rw-r--r-- | libavfilter/vf_scale_npp.c | 2 | ||||
-rw-r--r-- | libavfilter/vf_scale_qsv.c | 2 | ||||
-rw-r--r-- | libavfilter/vf_scale_vaapi.c | 1 |
10 files changed, 25 insertions, 8 deletions
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index b431990..ecfb872 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -355,14 +355,12 @@ int avfilter_config_links(AVFilterContext *filter) } 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->src->filter->flags_internal & FF_FILTER_FLAG_HWFRAME_AWARE)) { + av_assert0(!link->hw_frames_ctx && + "should not be set by non-hwframe-aware filter"); + link->hw_frames_ctx = av_buffer_ref(link->src->inputs[0]->hw_frames_ctx); + if (!link->hw_frames_ctx) + return AVERROR(ENOMEM); } if ((config_link = link->dstpad->config_props)) diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index ac6dca4..60662c1 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -268,6 +268,8 @@ typedef struct AVFilter { int priv_size; ///< size of private data to allocate for the filter + int flags_internal; ///< Additional flags for avfilter internal use only. + /** * Used by the filter registration system. Must not be touched by any other * code. diff --git a/libavfilter/internal.h b/libavfilter/internal.h index 460d75e..1070f18 100644 --- a/libavfilter/internal.h +++ b/libavfilter/internal.h @@ -387,6 +387,12 @@ int ff_filter_activate(AVFilterContext *filter); void ff_filter_graph_remove_filter(AVFilterGraph *graph, AVFilterContext *filter); /** + * The filter is aware of hardware frames, and any hardware frame context + * should not be automatically propagated through it. + */ +#define FF_FILTER_FLAG_HWFRAME_AWARE (1 << 0) + +/** * Run one round of processing on a filter graph. */ int ff_filter_graph_run_once(AVFilterGraph *graph); diff --git a/libavfilter/vf_deinterlace_qsv.c b/libavfilter/vf_deinterlace_qsv.c index 2fe74c1..bd43ef7 100644 --- a/libavfilter/vf_deinterlace_qsv.c +++ b/libavfilter/vf_deinterlace_qsv.c @@ -570,4 +570,6 @@ AVFilter ff_vf_deinterlace_qsv = { .inputs = qsvdeint_inputs, .outputs = qsvdeint_outputs, + + .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE, }; diff --git a/libavfilter/vf_hwdownload.c b/libavfilter/vf_hwdownload.c index f3138f3..33af30c 100644 --- a/libavfilter/vf_hwdownload.c +++ b/libavfilter/vf_hwdownload.c @@ -214,4 +214,5 @@ AVFilter ff_vf_hwdownload = { .priv_class = &hwdownload_class, .inputs = hwdownload_inputs, .outputs = hwdownload_outputs, + .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE, }; diff --git a/libavfilter/vf_hwupload.c b/libavfilter/vf_hwupload.c index 9237253..157686b 100644 --- a/libavfilter/vf_hwupload.c +++ b/libavfilter/vf_hwupload.c @@ -231,4 +231,5 @@ AVFilter ff_vf_hwupload = { .priv_class = &hwupload_class, .inputs = hwupload_inputs, .outputs = hwupload_outputs, + .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE, }; diff --git a/libavfilter/vf_hwupload_cuda.c b/libavfilter/vf_hwupload_cuda.c index 1e47ada..ef98233d 100644 --- a/libavfilter/vf_hwupload_cuda.c +++ b/libavfilter/vf_hwupload_cuda.c @@ -187,4 +187,6 @@ AVFilter ff_vf_hwupload_cuda = { .inputs = cudaupload_inputs, .outputs = cudaupload_outputs, + + .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE, }; diff --git a/libavfilter/vf_scale_npp.c b/libavfilter/vf_scale_npp.c index 4b45174..b5acce6 100644 --- a/libavfilter/vf_scale_npp.c +++ b/libavfilter/vf_scale_npp.c @@ -592,4 +592,6 @@ AVFilter ff_vf_scale_npp = { .inputs = nppscale_inputs, .outputs = nppscale_outputs, + + .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE, }; diff --git a/libavfilter/vf_scale_qsv.c b/libavfilter/vf_scale_qsv.c index 52e3ef9..8b262b6 100644 --- a/libavfilter/vf_scale_qsv.c +++ b/libavfilter/vf_scale_qsv.c @@ -628,4 +628,6 @@ AVFilter ff_vf_scale_qsv = { .inputs = qsvscale_inputs, .outputs = qsvscale_outputs, + + .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE, }; diff --git a/libavfilter/vf_scale_vaapi.c b/libavfilter/vf_scale_vaapi.c index c4334c7..5f049a5 100644 --- a/libavfilter/vf_scale_vaapi.c +++ b/libavfilter/vf_scale_vaapi.c @@ -477,4 +477,5 @@ AVFilter ff_vf_scale_vaapi = { .inputs = scale_vaapi_inputs, .outputs = scale_vaapi_outputs, .priv_class = &scale_vaapi_class, + .flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE, }; |