Skip to content

Commit 6f1ac41

Browse files
committed
avfilter/vpp_qsv: Copy side data from input to output frame
Signed-off-by: softworkz <[email protected]>
1 parent 28c4b9e commit 6f1ac41

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

libavfilter/qsvvpp.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -880,6 +880,12 @@ int ff_qsvvpp_filter_frame(QSVVPPContext *s, AVFilterLink *inlink, AVFrame *picr
880880
return AVERROR(EAGAIN);
881881
break;
882882
}
883+
884+
av_frame_remove_all_side_data(out_frame->frame);
885+
ret = av_frame_copy_side_data(out_frame->frame, in_frame->frame, 0);
886+
if (ret < 0)
887+
return ret;
888+
883889
out_frame->frame->pts = av_rescale_q(out_frame->surface.Data.TimeStamp,
884890
default_tb, outlink->time_base);
885891

libavfilter/vf_overlay_qsv.c

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -231,13 +231,24 @@ static int process_frame(FFFrameSync *fs)
231231
{
232232
AVFilterContext *ctx = fs->parent;
233233
QSVOverlayContext *s = fs->opaque;
234+
AVFrame *frame0 = NULL;
234235
AVFrame *frame = NULL;
235-
int ret = 0, i;
236+
int ret = 0;
236237

237-
for (i = 0; i < ctx->nb_inputs; i++) {
238+
for (unsigned i = 0; i < ctx->nb_inputs; i++) {
238239
ret = ff_framesync_get_frame(fs, i, &frame, 0);
239-
if (ret == 0)
240-
ret = ff_qsvvpp_filter_frame(s->qsv, ctx->inputs[i], frame);
240+
241+
if (ret == 0) {
242+
if (i == 0)
243+
frame0 = frame;
244+
else {
245+
av_frame_remove_all_side_data(frame);
246+
ret = av_frame_copy_side_data(frame, frame0, 0);
247+
}
248+
249+
ret = ret < 0 ? ret : ff_qsvvpp_filter_frame(s->qsv, ctx->inputs[i], frame);
250+
}
251+
241252
if (ret < 0 && ret != AVERROR(EAGAIN))
242253
break;
243254
}

0 commit comments

Comments
 (0)