Re: [FFmpeg-devel] [PATCH] lavfi/vf_vpp_qsv: use macros for extra mfx parameter
On Ma, 2022-12-05 at 14:25 +0800, Xiang, Haihao wrote: > From: Haihao Xiang > > Make it easy to add new extra mfx parameter buffer. No functional > change. > > Signed-off-by: Haihao Xiang > --- > libavfilter/vf_vpp_qsv.c | 86 > 1 file changed, 34 insertions(+), 52 deletions(-) > > diff --git a/libavfilter/vf_vpp_qsv.c b/libavfilter/vf_vpp_qsv.c > index a14b3de7b5..61ea0c4256 100644 > --- a/libavfilter/vf_vpp_qsv.c > +++ b/libavfilter/vf_vpp_qsv.c > @@ -365,53 +365,44 @@ static int config_output(AVFilterLink *outlink) > param.crop = &crop; > } > > -if (vpp->deinterlace) { > -memset(&vpp->deinterlace_conf, 0, sizeof(mfxExtVPPDeinterlacing)); > -vpp->deinterlace_conf.Header.BufferId = > MFX_EXTBUFF_VPP_DEINTERLACING; > -vpp->deinterlace_conf.Header.BufferSz = > sizeof(mfxExtVPPDeinterlacing); > -vpp->deinterlace_conf.Mode = vpp->deinterlace == 1 ? > - MFX_DEINTERLACING_BOB : > MFX_DEINTERLACING_ADVANCED; > +#define INIT_MFX_EXTBUF(extbuf, id) do { \ > +memset(&vpp->extbuf, 0, sizeof(vpp->extbuf)); \ > +vpp->extbuf.Header.BufferId = id; \ > +vpp->extbuf.Header.BufferSz = sizeof(vpp->extbuf); \ > +param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->extbuf; \ > +} while (0) > + > +#define SET_MFX_PARAM_FIELD(extbuf, field, value) do { \ > +vpp->extbuf.field = value; \ > +} while (0) > > -param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp- > >deinterlace_conf; > +if (vpp->deinterlace) { > +INIT_MFX_EXTBUF(deinterlace_conf, MFX_EXTBUFF_VPP_DEINTERLACING); > +SET_MFX_PARAM_FIELD(deinterlace_conf, Mode, (vpp->deinterlace == 1 ? > +MFX_DEINTERLACING_BOB : > MFX_DEINTERLACING_ADVANCED)); > } > > if (vpp->use_frc) { > -memset(&vpp->frc_conf, 0, sizeof(mfxExtVPPFrameRateConversion)); > -vpp->frc_conf.Header.BufferId = > MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION; > -vpp->frc_conf.Header.BufferSz = sizeof(mfxExtVPPFrameRateConversion); > -vpp->frc_conf.Algorithm = MFX_FRCALGM_DISTRIBUTED_TIMESTAMP; > - > -param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->frc_conf; > +INIT_MFX_EXTBUF(frc_conf, MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION); > +SET_MFX_PARAM_FIELD(frc_conf, Algorithm, > MFX_FRCALGM_DISTRIBUTED_TIMESTAMP); > } > > if (vpp->denoise) { > -memset(&vpp->denoise_conf, 0, sizeof(mfxExtVPPDenoise)); > -vpp->denoise_conf.Header.BufferId = MFX_EXTBUFF_VPP_DENOISE; > -vpp->denoise_conf.Header.BufferSz = sizeof(mfxExtVPPDenoise); > -vpp->denoise_conf.DenoiseFactor = vpp->denoise; > - > -param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp- > >denoise_conf; > +INIT_MFX_EXTBUF(denoise_conf, MFX_EXTBUFF_VPP_DENOISE); > +SET_MFX_PARAM_FIELD(denoise_conf, DenoiseFactor, vpp->denoise); > } > > if (vpp->detail) { > -memset(&vpp->detail_conf, 0, sizeof(mfxExtVPPDetail)); > -vpp->detail_conf.Header.BufferId = MFX_EXTBUFF_VPP_DETAIL; > -vpp->detail_conf.Header.BufferSz = sizeof(mfxExtVPPDetail); > -vpp->detail_conf.DetailFactor = vpp->detail; > - > -param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp- > >detail_conf; > +INIT_MFX_EXTBUF(detail_conf, MFX_EXTBUFF_VPP_DETAIL); > +SET_MFX_PARAM_FIELD(detail_conf, DetailFactor, vpp->detail); > } > > if (vpp->procamp) { > -memset(&vpp->procamp_conf, 0, sizeof(mfxExtVPPProcAmp)); > -vpp->procamp_conf.Header.BufferId = MFX_EXTBUFF_VPP_PROCAMP; > -vpp->procamp_conf.Header.BufferSz = sizeof(mfxExtVPPProcAmp); > -vpp->procamp_conf.Hue = vpp->hue; > -vpp->procamp_conf.Saturation = vpp->saturation; > -vpp->procamp_conf.Contrast = vpp->contrast; > -vpp->procamp_conf.Brightness = vpp->brightness; > - > -param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp- > >procamp_conf; > +INIT_MFX_EXTBUF(procamp_conf, MFX_EXTBUFF_VPP_PROCAMP); > +SET_MFX_PARAM_FIELD(procamp_conf, Hue, vpp->hue); > +SET_MFX_PARAM_FIELD(procamp_conf, Saturation, vpp->saturation); > +SET_MFX_PARAM_FIELD(procamp_conf, Contrast, vpp->contrast); > +SET_MFX_PARAM_FIELD(procamp_conf, Brightness, vpp->brightness); > } > > if (vpp->transpose >= 0) { > @@ -458,18 +449,14 @@ static int config_output(AVFilterLink *outlink) > > if (vpp->rotate) { > if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 17)) { > -memset(&vpp->rotation_conf, 0, sizeof(mfxExtVPPRotation)); > -vpp->rotation_conf.Header.BufferId = MFX_EXTBUFF_VPP_ROTATION; > -vpp->rotation_conf.Header.BufferSz = sizeof(mfxExtVPPRotation); > -vpp->rotation_conf.Angle = vpp->rotate; > +
[FFmpeg-devel] [PATCH] lavfi/vf_vpp_qsv: use macros for extra mfx parameter
From: Haihao Xiang Make it easy to add new extra mfx parameter buffer. No functional change. Signed-off-by: Haihao Xiang --- libavfilter/vf_vpp_qsv.c | 86 1 file changed, 34 insertions(+), 52 deletions(-) diff --git a/libavfilter/vf_vpp_qsv.c b/libavfilter/vf_vpp_qsv.c index a14b3de7b5..61ea0c4256 100644 --- a/libavfilter/vf_vpp_qsv.c +++ b/libavfilter/vf_vpp_qsv.c @@ -365,53 +365,44 @@ static int config_output(AVFilterLink *outlink) param.crop = &crop; } -if (vpp->deinterlace) { -memset(&vpp->deinterlace_conf, 0, sizeof(mfxExtVPPDeinterlacing)); -vpp->deinterlace_conf.Header.BufferId = MFX_EXTBUFF_VPP_DEINTERLACING; -vpp->deinterlace_conf.Header.BufferSz = sizeof(mfxExtVPPDeinterlacing); -vpp->deinterlace_conf.Mode = vpp->deinterlace == 1 ? - MFX_DEINTERLACING_BOB : MFX_DEINTERLACING_ADVANCED; +#define INIT_MFX_EXTBUF(extbuf, id) do { \ +memset(&vpp->extbuf, 0, sizeof(vpp->extbuf)); \ +vpp->extbuf.Header.BufferId = id; \ +vpp->extbuf.Header.BufferSz = sizeof(vpp->extbuf); \ +param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->extbuf; \ +} while (0) + +#define SET_MFX_PARAM_FIELD(extbuf, field, value) do { \ +vpp->extbuf.field = value; \ +} while (0) -param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->deinterlace_conf; +if (vpp->deinterlace) { +INIT_MFX_EXTBUF(deinterlace_conf, MFX_EXTBUFF_VPP_DEINTERLACING); +SET_MFX_PARAM_FIELD(deinterlace_conf, Mode, (vpp->deinterlace == 1 ? +MFX_DEINTERLACING_BOB : MFX_DEINTERLACING_ADVANCED)); } if (vpp->use_frc) { -memset(&vpp->frc_conf, 0, sizeof(mfxExtVPPFrameRateConversion)); -vpp->frc_conf.Header.BufferId = MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION; -vpp->frc_conf.Header.BufferSz = sizeof(mfxExtVPPFrameRateConversion); -vpp->frc_conf.Algorithm = MFX_FRCALGM_DISTRIBUTED_TIMESTAMP; - -param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->frc_conf; +INIT_MFX_EXTBUF(frc_conf, MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION); +SET_MFX_PARAM_FIELD(frc_conf, Algorithm, MFX_FRCALGM_DISTRIBUTED_TIMESTAMP); } if (vpp->denoise) { -memset(&vpp->denoise_conf, 0, sizeof(mfxExtVPPDenoise)); -vpp->denoise_conf.Header.BufferId = MFX_EXTBUFF_VPP_DENOISE; -vpp->denoise_conf.Header.BufferSz = sizeof(mfxExtVPPDenoise); -vpp->denoise_conf.DenoiseFactor = vpp->denoise; - -param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->denoise_conf; +INIT_MFX_EXTBUF(denoise_conf, MFX_EXTBUFF_VPP_DENOISE); +SET_MFX_PARAM_FIELD(denoise_conf, DenoiseFactor, vpp->denoise); } if (vpp->detail) { -memset(&vpp->detail_conf, 0, sizeof(mfxExtVPPDetail)); -vpp->detail_conf.Header.BufferId = MFX_EXTBUFF_VPP_DETAIL; -vpp->detail_conf.Header.BufferSz = sizeof(mfxExtVPPDetail); -vpp->detail_conf.DetailFactor = vpp->detail; - -param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->detail_conf; +INIT_MFX_EXTBUF(detail_conf, MFX_EXTBUFF_VPP_DETAIL); +SET_MFX_PARAM_FIELD(detail_conf, DetailFactor, vpp->detail); } if (vpp->procamp) { -memset(&vpp->procamp_conf, 0, sizeof(mfxExtVPPProcAmp)); -vpp->procamp_conf.Header.BufferId = MFX_EXTBUFF_VPP_PROCAMP; -vpp->procamp_conf.Header.BufferSz = sizeof(mfxExtVPPProcAmp); -vpp->procamp_conf.Hue = vpp->hue; -vpp->procamp_conf.Saturation = vpp->saturation; -vpp->procamp_conf.Contrast = vpp->contrast; -vpp->procamp_conf.Brightness = vpp->brightness; - -param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->procamp_conf; +INIT_MFX_EXTBUF(procamp_conf, MFX_EXTBUFF_VPP_PROCAMP); +SET_MFX_PARAM_FIELD(procamp_conf, Hue, vpp->hue); +SET_MFX_PARAM_FIELD(procamp_conf, Saturation, vpp->saturation); +SET_MFX_PARAM_FIELD(procamp_conf, Contrast, vpp->contrast); +SET_MFX_PARAM_FIELD(procamp_conf, Brightness, vpp->brightness); } if (vpp->transpose >= 0) { @@ -458,18 +449,14 @@ static int config_output(AVFilterLink *outlink) if (vpp->rotate) { if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 17)) { -memset(&vpp->rotation_conf, 0, sizeof(mfxExtVPPRotation)); -vpp->rotation_conf.Header.BufferId = MFX_EXTBUFF_VPP_ROTATION; -vpp->rotation_conf.Header.BufferSz = sizeof(mfxExtVPPRotation); -vpp->rotation_conf.Angle = vpp->rotate; +INIT_MFX_EXTBUF(rotation_conf, MFX_EXTBUFF_VPP_ROTATION); +SET_MFX_PARAM_FIELD(rotation_conf, Angle, vpp->rotate); if (MFX_ANGLE_90 == vpp->rotate || MFX_ANGLE_270 == vpp->rotate) { FFSWAP(int, vpp->out_width, vpp->out_height);