lavfi/qsvvpp: copy metadata fields from src to dst

Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
pull/389/head
Haihao Xiang 1 year ago
parent 07139b6deb
commit 5189b51939
  1. 16
      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);

Loading…
Cancel
Save