History

lavfi/vf_vpp_qsv: use macros for extra mfx parameter

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

Haihao Xiang committed 3 years ago

Commit d51edd21 parent 20f29411 file · +34 −52Browse files

Unified · Split

libavfilter/vf_vpp_qsv.c+34−52
@@ -365,53 +365,44 @@ static int config_output(AVFilterLink *outlink) · 364 unmodified lines
365 param.crop = &crop;365 param.crop = &crop;
366 }366 }
367 367
368 if (vpp->deinterlace) {368#define INIT_MFX_EXTBUF(extbuf, id) do { \
369 memset(&vpp->deinterlace_conf, 0, sizeof(mfxExtVPPDeinterlacing));369 memset(&vpp->extbuf, 0, sizeof(vpp->extbuf)); \
370 vpp->deinterlace_conf.Header.BufferId = MFX_EXTBUFF_VPP_DEINTERLACING;370 vpp->extbuf.Header.BufferId = id; \
371 vpp->deinterlace_conf.Header.BufferSz = sizeof(mfxExtVPPDeinterlacing);371 vpp->extbuf.Header.BufferSz = sizeof(vpp->extbuf); \
372 vpp->deinterlace_conf.Mode = vpp->deinterlace == 1 ?372 param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->extbuf; \
373 MFX_DEINTERLACING_BOB : MFX_DEINTERLACING_ADVANCED;373 } while (0)
374
375#define SET_MFX_PARAM_FIELD(extbuf, field, value) do { \
376 vpp->extbuf.field = value; \
377 } while (0)
374 378
375 param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->deinterlace_conf;379 if (vpp->deinterlace) {
380 INIT_MFX_EXTBUF(deinterlace_conf, MFX_EXTBUFF_VPP_DEINTERLACING);
381 SET_MFX_PARAM_FIELD(deinterlace_conf, Mode, (vpp->deinterlace == 1 ?
382 MFX_DEINTERLACING_BOB : MFX_DEINTERLACING_ADVANCED));
376 }383 }
377 384
378 if (vpp->use_frc) {385 if (vpp->use_frc) {
379 memset(&vpp->frc_conf, 0, sizeof(mfxExtVPPFrameRateConversion));386 INIT_MFX_EXTBUF(frc_conf, MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION);
380 vpp->frc_conf.Header.BufferId = MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION;387 SET_MFX_PARAM_FIELD(frc_conf, Algorithm, MFX_FRCALGM_DISTRIBUTED_TIMESTAMP);
381 vpp->frc_conf.Header.BufferSz = sizeof(mfxExtVPPFrameRateConversion);
382 vpp->frc_conf.Algorithm = MFX_FRCALGM_DISTRIBUTED_TIMESTAMP;
383
384 param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->frc_conf;
385 }388 }
386 389
387 if (vpp->denoise) {390 if (vpp->denoise) {
388 memset(&vpp->denoise_conf, 0, sizeof(mfxExtVPPDenoise));391 INIT_MFX_EXTBUF(denoise_conf, MFX_EXTBUFF_VPP_DENOISE);
389 vpp->denoise_conf.Header.BufferId = MFX_EXTBUFF_VPP_DENOISE;392 SET_MFX_PARAM_FIELD(denoise_conf, DenoiseFactor, vpp->denoise);
390 vpp->denoise_conf.Header.BufferSz = sizeof(mfxExtVPPDenoise);
391 vpp->denoise_conf.DenoiseFactor = vpp->denoise;
392
393 param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->denoise_conf;
394 }393 }
395 394
396 if (vpp->detail) {395 if (vpp->detail) {
397 memset(&vpp->detail_conf, 0, sizeof(mfxExtVPPDetail));396 INIT_MFX_EXTBUF(detail_conf, MFX_EXTBUFF_VPP_DETAIL);
398 vpp->detail_conf.Header.BufferId = MFX_EXTBUFF_VPP_DETAIL;397 SET_MFX_PARAM_FIELD(detail_conf, DetailFactor, vpp->detail);
399 vpp->detail_conf.Header.BufferSz = sizeof(mfxExtVPPDetail);
400 vpp->detail_conf.DetailFactor = vpp->detail;
401
402 param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->detail_conf;
403 }398 }
404 399
405 if (vpp->procamp) {400 if (vpp->procamp) {
406 memset(&vpp->procamp_conf, 0, sizeof(mfxExtVPPProcAmp));401 INIT_MFX_EXTBUF(procamp_conf, MFX_EXTBUFF_VPP_PROCAMP);
407 vpp->procamp_conf.Header.BufferId = MFX_EXTBUFF_VPP_PROCAMP;402 SET_MFX_PARAM_FIELD(procamp_conf, Hue, vpp->hue);
408 vpp->procamp_conf.Header.BufferSz = sizeof(mfxExtVPPProcAmp);403 SET_MFX_PARAM_FIELD(procamp_conf, Saturation, vpp->saturation);
409 vpp->procamp_conf.Hue = vpp->hue;404 SET_MFX_PARAM_FIELD(procamp_conf, Contrast, vpp->contrast);
410 vpp->procamp_conf.Saturation = vpp->saturation;405 SET_MFX_PARAM_FIELD(procamp_conf, Brightness, vpp->brightness);
411 vpp->procamp_conf.Contrast = vpp->contrast;
412 vpp->procamp_conf.Brightness = vpp->brightness;
413
414 param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->procamp_conf;
415 }406 }
416 407
417 if (vpp->transpose >= 0) {408 if (vpp->transpose >= 0) {
@@ -458,18 +449,14 @@ static int config_output(AVFilterLink *outlink) · 40 unmodified lines
458 449
459 if (vpp->rotate) {450 if (vpp->rotate) {
460 if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 17)) {451 if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 17)) {
461 memset(&vpp->rotation_conf, 0, sizeof(mfxExtVPPRotation));452 INIT_MFX_EXTBUF(rotation_conf, MFX_EXTBUFF_VPP_ROTATION);
462 vpp->rotation_conf.Header.BufferId = MFX_EXTBUFF_VPP_ROTATION;453 SET_MFX_PARAM_FIELD(rotation_conf, Angle, vpp->rotate);
463 vpp->rotation_conf.Header.BufferSz = sizeof(mfxExtVPPRotation);
464 vpp->rotation_conf.Angle = vpp->rotate;
465 454
466 if (MFX_ANGLE_90 == vpp->rotate || MFX_ANGLE_270 == vpp->rotate) {455 if (MFX_ANGLE_90 == vpp->rotate || MFX_ANGLE_270 == vpp->rotate) {
467 FFSWAP(int, vpp->out_width, vpp->out_height);456 FFSWAP(int, vpp->out_width, vpp->out_height);
468 FFSWAP(int, outlink->w, outlink->h);457 FFSWAP(int, outlink->w, outlink->h);
469 av_log(ctx, AV_LOG_DEBUG, "Swap width and height for clock/cclock rotation.\n");458 av_log(ctx, AV_LOG_DEBUG, "Swap width and height for clock/cclock rotation.\n");
470 }459 }
471
472 param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->rotation_conf;
473 } else {460 } else {
474 av_log(ctx, AV_LOG_WARNING, "The QSV VPP rotate option is "461 av_log(ctx, AV_LOG_WARNING, "The QSV VPP rotate option is "
475 "not supported with this MSDK version.\n");462 "not supported with this MSDK version.\n");
@@ -479,12 +466,8 @@ static int config_output(AVFilterLink *outlink) · 3 unmodified lines
479 466
480 if (vpp->hflip) {467 if (vpp->hflip) {
481 if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) {468 if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) {
482 memset(&vpp->mirroring_conf, 0, sizeof(mfxExtVPPMirroring));469 INIT_MFX_EXTBUF(mirroring_conf, MFX_EXTBUFF_VPP_MIRRORING);
483 vpp->mirroring_conf.Header.BufferId = MFX_EXTBUFF_VPP_MIRRORING;470 SET_MFX_PARAM_FIELD(mirroring_conf, Type, vpp->hflip);
484 vpp->mirroring_conf.Header.BufferSz = sizeof(mfxExtVPPMirroring);
485 vpp->mirroring_conf.Type = vpp->hflip;
486
487 param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->mirroring_conf;
488 } else {471 } else {
489 av_log(ctx, AV_LOG_WARNING, "The QSV VPP hflip option is "472 av_log(ctx, AV_LOG_WARNING, "The QSV VPP hflip option is "
490 "not supported with this MSDK version.\n");473 "not supported with this MSDK version.\n");
@@ -494,17 +477,16 @@ static int config_output(AVFilterLink *outlink) · 3 unmodified lines
494 477
495 if (inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format) {478 if (inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format) {
496 if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) {479 if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) {
497 memset(&vpp->scale_conf, 0, sizeof(mfxExtVPPScaling));480 INIT_MFX_EXTBUF(scale_conf, MFX_EXTBUFF_VPP_SCALING);
498 vpp->scale_conf.Header.BufferId = MFX_EXTBUFF_VPP_SCALING;481 SET_MFX_PARAM_FIELD(scale_conf, ScalingMode, vpp->scale_mode);
499 vpp->scale_conf.Header.BufferSz = sizeof(mfxExtVPPScaling);
500 vpp->scale_conf.ScalingMode = vpp->scale_mode;
501
502 param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->scale_conf;
503 } else482 } else
504 av_log(ctx, AV_LOG_WARNING, "The QSV VPP Scale & format conversion "483 av_log(ctx, AV_LOG_WARNING, "The QSV VPP Scale & format conversion "
505 "option is not supported with this MSDK version.\n");484 "option is not supported with this MSDK version.\n");
506 }485 }
507 486
487#undef INIT_MFX_EXTBUF
488#undef SET_MFX_PARAM_FIELD
489
508 if (vpp->use_frc || vpp->use_crop || vpp->deinterlace || vpp->denoise ||490 if (vpp->use_frc || vpp->use_crop || vpp->deinterlace || vpp->denoise ||
509 vpp->detail || vpp->procamp || vpp->rotate || vpp->hflip ||491 vpp->detail || vpp->procamp || vpp->rotate || vpp->hflip ||
510 inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format)492 inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t