Re: [FFmpeg-devel] [PATCH] lavfi/vf_vpp_qsv: use macros for extra mfx parameter

2022-12-06 Thread Xiang, Haihao
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

2022-12-04 Thread Xiang, Haihao
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);