diff options
author | Haihao Xiang <haihao.xiang@intel.com> | 2023-06-12 16:14:44 +0800 |
---|---|---|
committer | Haihao Xiang <haihao.xiang@intel.com> | 2023-06-20 09:52:43 +0800 |
commit | 5189b51939f4b1c21d0fb23b2303b07893c7f6a5 (patch) | |
tree | b568addce20696ac95719735807c98990d85842d /libavfilter | |
parent | 07139b6deb83a760ef7ddec45797f32478118687 (diff) | |
download | ffmpeg-5189b51939f4b1c21d0fb23b2303b07893c7f6a5.tar.gz |
lavfi/qsvvpp: copy metadata fields from src to dst
Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
Diffstat (limited to 'libavfilter')
-rw-r--r-- | libavfilter/qsvvpp.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/libavfilter/qsvvpp.c b/libavfilter/qsvvpp.c index 779afce66d..61402c8e0a 100644 --- a/libavfilter/qsvvpp.c +++ b/libavfilter/qsvvpp.c @@ -474,7 +474,7 @@ static QSVFrame *submit_frame(QSVVPPContext *s, AVFilterLink *inlink, AVFrame *p } /* get the output surface */ -static QSVFrame *query_frame(QSVVPPContext *s, AVFilterLink *outlink) +static QSVFrame *query_frame(QSVVPPContext *s, AVFilterLink *outlink, const AVFrame *in) { AVFilterContext *ctx = outlink->src; QSVFrame *out_frame; @@ -493,6 +493,12 @@ static QSVFrame *query_frame(QSVVPPContext *s, AVFilterLink *outlink) if (!out_frame->frame) return NULL; + ret = av_frame_copy_props(out_frame->frame, in); + if (ret < 0) { + av_log(ctx, AV_LOG_ERROR, "Failed to copy metadata fields from src to dst.\n"); + return NULL; + } + ret = av_hwframe_get_buffer(outlink->hw_frames_ctx, out_frame->frame, 0); if (ret < 0) { av_log(ctx, AV_LOG_ERROR, "Can't allocate a surface.\n"); @@ -509,6 +515,12 @@ static QSVFrame *query_frame(QSVVPPContext *s, AVFilterLink *outlink) if (!out_frame->frame) return NULL; + ret = av_frame_copy_props(out_frame->frame, in); + if (ret < 0) { + av_log(ctx, AV_LOG_ERROR, "Failed to copy metadata fields from src to dst.\n"); + return NULL; + } + ret = map_frame_to_surface(out_frame->frame, &out_frame->surface); if (ret < 0) @@ -884,7 +896,7 @@ int ff_qsvvpp_filter_frame(QSVVPPContext *s, AVFilterLink *inlink, AVFrame *picr } do { - out_frame = query_frame(s, outlink); + out_frame = query_frame(s, outlink, in_frame->frame); if (!out_frame) { av_log(ctx, AV_LOG_ERROR, "Failed to query an output frame.\n"); return AVERROR(ENOMEM); |