lavfi/vf_vpp_qsv: use macros for extra mfx parameter

Make it easy to add new extra mfx parameter buffer. No functional
change.

Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
This commit is contained in:
Haihao Xiang
2022-12-05 14:25:08 +08:00
parent 20f2941191
commit d51edd225d

View File

@@ -365,53 +365,44 @@ static int config_output(AVFilterLink *outlink)
param.crop = &crop; param.crop = &crop;
} }
if (vpp->deinterlace) { #define INIT_MFX_EXTBUF(extbuf, id) do { \
memset(&vpp->deinterlace_conf, 0, sizeof(mfxExtVPPDeinterlacing)); memset(&vpp->extbuf, 0, sizeof(vpp->extbuf)); \
vpp->deinterlace_conf.Header.BufferId = MFX_EXTBUFF_VPP_DEINTERLACING; vpp->extbuf.Header.BufferId = id; \
vpp->deinterlace_conf.Header.BufferSz = sizeof(mfxExtVPPDeinterlacing); vpp->extbuf.Header.BufferSz = sizeof(vpp->extbuf); \
vpp->deinterlace_conf.Mode = vpp->deinterlace == 1 ? param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->extbuf; \
MFX_DEINTERLACING_BOB : MFX_DEINTERLACING_ADVANCED; } while (0)
param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->deinterlace_conf; #define SET_MFX_PARAM_FIELD(extbuf, field, value) do { \
vpp->extbuf.field = value; \
} while (0)
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) { if (vpp->use_frc) {
memset(&vpp->frc_conf, 0, sizeof(mfxExtVPPFrameRateConversion)); INIT_MFX_EXTBUF(frc_conf, MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION);
vpp->frc_conf.Header.BufferId = MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION; SET_MFX_PARAM_FIELD(frc_conf, Algorithm, MFX_FRCALGM_DISTRIBUTED_TIMESTAMP);
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;
} }
if (vpp->denoise) { if (vpp->denoise) {
memset(&vpp->denoise_conf, 0, sizeof(mfxExtVPPDenoise)); INIT_MFX_EXTBUF(denoise_conf, MFX_EXTBUFF_VPP_DENOISE);
vpp->denoise_conf.Header.BufferId = MFX_EXTBUFF_VPP_DENOISE; SET_MFX_PARAM_FIELD(denoise_conf, DenoiseFactor, 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;
} }
if (vpp->detail) { if (vpp->detail) {
memset(&vpp->detail_conf, 0, sizeof(mfxExtVPPDetail)); INIT_MFX_EXTBUF(detail_conf, MFX_EXTBUFF_VPP_DETAIL);
vpp->detail_conf.Header.BufferId = MFX_EXTBUFF_VPP_DETAIL; SET_MFX_PARAM_FIELD(detail_conf, DetailFactor, 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;
} }
if (vpp->procamp) { if (vpp->procamp) {
memset(&vpp->procamp_conf, 0, sizeof(mfxExtVPPProcAmp)); INIT_MFX_EXTBUF(procamp_conf, MFX_EXTBUFF_VPP_PROCAMP);
vpp->procamp_conf.Header.BufferId = MFX_EXTBUFF_VPP_PROCAMP; SET_MFX_PARAM_FIELD(procamp_conf, Hue, vpp->hue);
vpp->procamp_conf.Header.BufferSz = sizeof(mfxExtVPPProcAmp); SET_MFX_PARAM_FIELD(procamp_conf, Saturation, vpp->saturation);
vpp->procamp_conf.Hue = vpp->hue; SET_MFX_PARAM_FIELD(procamp_conf, Contrast, vpp->contrast);
vpp->procamp_conf.Saturation = vpp->saturation; SET_MFX_PARAM_FIELD(procamp_conf, Brightness, vpp->brightness);
vpp->procamp_conf.Contrast = vpp->contrast;
vpp->procamp_conf.Brightness = vpp->brightness;
param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->procamp_conf;
} }
if (vpp->transpose >= 0) { if (vpp->transpose >= 0) {
@@ -458,18 +449,14 @@ static int config_output(AVFilterLink *outlink)
if (vpp->rotate) { if (vpp->rotate) {
if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 17)) { if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 17)) {
memset(&vpp->rotation_conf, 0, sizeof(mfxExtVPPRotation)); INIT_MFX_EXTBUF(rotation_conf, MFX_EXTBUFF_VPP_ROTATION);
vpp->rotation_conf.Header.BufferId = MFX_EXTBUFF_VPP_ROTATION; SET_MFX_PARAM_FIELD(rotation_conf, Angle, vpp->rotate);
vpp->rotation_conf.Header.BufferSz = sizeof(mfxExtVPPRotation);
vpp->rotation_conf.Angle = vpp->rotate;
if (MFX_ANGLE_90 == vpp->rotate || MFX_ANGLE_270 == vpp->rotate) { if (MFX_ANGLE_90 == vpp->rotate || MFX_ANGLE_270 == vpp->rotate) {
FFSWAP(int, vpp->out_width, vpp->out_height); FFSWAP(int, vpp->out_width, vpp->out_height);
FFSWAP(int, outlink->w, outlink->h); FFSWAP(int, outlink->w, outlink->h);
av_log(ctx, AV_LOG_DEBUG, "Swap width and height for clock/cclock rotation.\n"); av_log(ctx, AV_LOG_DEBUG, "Swap width and height for clock/cclock rotation.\n");
} }
param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->rotation_conf;
} else { } else {
av_log(ctx, AV_LOG_WARNING, "The QSV VPP rotate option is " av_log(ctx, AV_LOG_WARNING, "The QSV VPP rotate option is "
"not supported with this MSDK version.\n"); "not supported with this MSDK version.\n");
@@ -479,12 +466,8 @@ static int config_output(AVFilterLink *outlink)
if (vpp->hflip) { if (vpp->hflip) {
if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) { if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) {
memset(&vpp->mirroring_conf, 0, sizeof(mfxExtVPPMirroring)); INIT_MFX_EXTBUF(mirroring_conf, MFX_EXTBUFF_VPP_MIRRORING);
vpp->mirroring_conf.Header.BufferId = MFX_EXTBUFF_VPP_MIRRORING; SET_MFX_PARAM_FIELD(mirroring_conf, Type, vpp->hflip);
vpp->mirroring_conf.Header.BufferSz = sizeof(mfxExtVPPMirroring);
vpp->mirroring_conf.Type = vpp->hflip;
param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->mirroring_conf;
} else { } else {
av_log(ctx, AV_LOG_WARNING, "The QSV VPP hflip option is " av_log(ctx, AV_LOG_WARNING, "The QSV VPP hflip option is "
"not supported with this MSDK version.\n"); "not supported with this MSDK version.\n");
@@ -494,17 +477,16 @@ static int config_output(AVFilterLink *outlink)
if (inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format) { if (inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format) {
if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) { if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) {
memset(&vpp->scale_conf, 0, sizeof(mfxExtVPPScaling)); INIT_MFX_EXTBUF(scale_conf, MFX_EXTBUFF_VPP_SCALING);
vpp->scale_conf.Header.BufferId = MFX_EXTBUFF_VPP_SCALING; SET_MFX_PARAM_FIELD(scale_conf, ScalingMode, vpp->scale_mode);
vpp->scale_conf.Header.BufferSz = sizeof(mfxExtVPPScaling);
vpp->scale_conf.ScalingMode = vpp->scale_mode;
param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->scale_conf;
} else } else
av_log(ctx, AV_LOG_WARNING, "The QSV VPP Scale & format conversion " av_log(ctx, AV_LOG_WARNING, "The QSV VPP Scale & format conversion "
"option is not supported with this MSDK version.\n"); "option is not supported with this MSDK version.\n");
} }
#undef INIT_MFX_EXTBUF
#undef SET_MFX_PARAM_FIELD
if (vpp->use_frc || vpp->use_crop || vpp->deinterlace || vpp->denoise || if (vpp->use_frc || vpp->use_crop || vpp->deinterlace || vpp->denoise ||
vpp->detail || vpp->procamp || vpp->rotate || vpp->hflip || vpp->detail || vpp->procamp || vpp->rotate || vpp->hflip ||
inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format) inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format)