[FFmpeg-devel] [PATCH 3/4] avfilter/scale_qsv: implement frame crop
Koushik Dutta
koushd at gmail.com
Sun Oct 20 08:58:45 EEST 2024
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 at gmail.com>
---
libavfilter/qsvvpp.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/libavfilter/qsvvpp.c b/libavfilter/qsvvpp.c
index 0818ada117..05ce387bc3 100644
--- a/libavfilter/qsvvpp.c
+++ b/libavfilter/qsvvpp.c
@@ -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;
}
--
2.39.5 (Apple Git-154)
More information about the ffmpeg-devel
mailing list