@@ -467,6 +467,16 @@ static QSVFrame *submit_frame(QSVVPPContext *s, AVFilterLink *inlink, AVFrame *p
else if (qsv_frame->frame->repeat_pict == 4)
qsv_frame->surface.Info.PicStruct |= MFX_PICSTRUCT_FRAME_TRIPLING;
+ // if crop arguments are not present from the vpp_qsv filter, use the provided AVFrame
+ // crop_* members instead.
+ if (!qsv_frame->surface.Info.CropX && !qsv_frame->surface.Info.CropY
+ && qsv_frame->surface.Info.CropW == picref->width && qsv_frame->surface.Info.CropH == picref->height) {
+ qsv_frame->surface.Info.CropW = (mfxU16)((picref->width - picref->crop_right) - picref->crop_left);
+ qsv_frame->surface.Info.CropH = (mfxU16)((picref->height - picref->crop_bottom) - picref->crop_top);
+ qsv_frame->surface.Info.CropX = (mfxU16)picref->crop_left;
+ qsv_frame->surface.Info.CropY = (mfxU16)picref->crop_top;
+ }
+
return qsv_frame;
}
The crop filter has no effect on scale_qsv: -vf crop=100:100,scale_qsv=300x300 Hardware frames (AV_PIX_FMT_FLAG_HWACCEL) are expected to use the crop_* properties, as seen in the implementation vf_crop.c. This patch is slightly different from the previously submitted patches since qsv supports frame crop via the vpp_qsv filter. If no explicit crop is detected via that filter, AVFrame.crop_* will be used instead. Removal of vpp_qsv's crop argument may be warranted. Signed-off-by: Koushik Dutta <koushd@gmail.com> --- libavfilter/qsvvpp.c | 10 ++++++++++ 1 file changed, 10 insertions(+)