I am embedding ffmpeg and running a dynamic number of filters passes per frame. The standard crop filter supports commands that allow updating the crop region on an existing filter. The vpp filter must be recreated for any change. My other changes (cuda and vt) implement the correct crop functionality in other hardware contexts, and they do not have dedicated crop filters like vpp. So for consistency I implemented it for qsv as well, and it would simplify my use case.
Is there anything else necessary to get this merged? Koush On Thu, Sep 12, 2024 at 12:17 AM Wang, Fei W <fei.w.w...@intel.com> wrote: > > On Tue, 2024-09-10 at 11:10 -0700, Koushik Dutta wrote: > > The crop filter has no effect on scale_qsv: > > > > -vf crop=100:100,scale_qsv=300x300 > > > > How about to use vpp_qsv filter directly? It support both scale and > crop via its options which is much more easy to use. > > Thanks > Fei > > > 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. > > --- > > 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; > > } > > > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".