|
|
|
@ -66,9 +66,11 @@ static int hwupload_init(AVFilterContext *avctx) |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int hwupload_query_formats(AVFilterContext *avctx) |
|
|
|
|
static int hwupload_query_formats(const AVFilterContext *avctx, |
|
|
|
|
AVFilterFormatsConfig **cfg_in, |
|
|
|
|
AVFilterFormatsConfig **cfg_out) |
|
|
|
|
{ |
|
|
|
|
HWUploadContext *ctx = avctx->priv; |
|
|
|
|
const HWUploadContext *ctx = avctx->priv; |
|
|
|
|
AVHWFramesConstraints *constraints = NULL; |
|
|
|
|
const enum AVPixelFormat *input_pix_fmts, *output_pix_fmts; |
|
|
|
|
AVFilterFormats *input_formats = NULL; |
|
|
|
@ -96,16 +98,15 @@ static int hwupload_query_formats(AVFilterContext *avctx) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ((err = ff_formats_ref(input_formats, &avctx->inputs[0]->outcfg.formats)) < 0 || |
|
|
|
|
if ((err = ff_formats_ref(input_formats, &cfg_in[0]->formats)) < 0 || |
|
|
|
|
(err = ff_formats_ref(ff_make_format_list(output_pix_fmts), |
|
|
|
|
&avctx->outputs[0]->incfg.formats)) < 0) |
|
|
|
|
&cfg_out[0]->formats)) < 0) |
|
|
|
|
goto fail; |
|
|
|
|
|
|
|
|
|
av_hwframe_constraints_free(&constraints); |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
fail: |
|
|
|
|
av_buffer_unref(&ctx->hwdevice_ref); |
|
|
|
|
av_hwframe_constraints_free(&constraints); |
|
|
|
|
return err; |
|
|
|
|
} |
|
|
|
@ -265,7 +266,7 @@ const AVFilter ff_vf_hwupload = { |
|
|
|
|
.priv_class = &hwupload_class, |
|
|
|
|
FILTER_INPUTS(hwupload_inputs), |
|
|
|
|
FILTER_OUTPUTS(hwupload_outputs), |
|
|
|
|
FILTER_QUERY_FUNC(hwupload_query_formats), |
|
|
|
|
FILTER_QUERY_FUNC2(hwupload_query_formats), |
|
|
|
|
.flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE, |
|
|
|
|
.flags = AVFILTER_FLAG_HWDEVICE, |
|
|
|
|
}; |
|
|
|
|