Make it easy to add new extra mfx parameter buffer. No functional change.
Showing the changes to libavfilter (1 of 1 file). Show all
Unified · Split
| @@ -365,53 +365,44 @@ static int config_output(AVFilterLink *outlink) · 364 unmodified lines | ||
| 365 | 365 | param.crop = &crop; |
| 366 | 366 | } |
| 367 | 367 | |
| 368 | − if (vpp->deinterlace) { | |
| 369 | − memset(&vpp->deinterlace_conf, 0, sizeof(mfxExtVPPDeinterlacing)); | |
| 370 | − vpp->deinterlace_conf.Header.BufferId = MFX_EXTBUFF_VPP_DEINTERLACING; | |
| 371 | − vpp->deinterlace_conf.Header.BufferSz = sizeof(mfxExtVPPDeinterlacing); | |
| 372 | − vpp->deinterlace_conf.Mode = vpp->deinterlace == 1 ? | |
| 373 | − MFX_DEINTERLACING_BOB : MFX_DEINTERLACING_ADVANCED; | |
| 368 | +#define INIT_MFX_EXTBUF(extbuf, id) do { \ | |
| 369 | + memset(&vpp->extbuf, 0, sizeof(vpp->extbuf)); \ | |
| 370 | + vpp->extbuf.Header.BufferId = id; \ | |
| 371 | + vpp->extbuf.Header.BufferSz = sizeof(vpp->extbuf); \ | |
| 372 | + param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->extbuf; \ | |
| 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 | 385 | if (vpp->use_frc) { |
| 379 | − memset(&vpp->frc_conf, 0, sizeof(mfxExtVPPFrameRateConversion)); | |
| 380 | − vpp->frc_conf.Header.BufferId = MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION; | |
| 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; | |
| 386 | + INIT_MFX_EXTBUF(frc_conf, MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION); | |
| 387 | + SET_MFX_PARAM_FIELD(frc_conf, Algorithm, MFX_FRCALGM_DISTRIBUTED_TIMESTAMP); | |
| 385 | 388 | } |
| 386 | 389 | |
| 387 | 390 | if (vpp->denoise) { |
| 388 | − memset(&vpp->denoise_conf, 0, sizeof(mfxExtVPPDenoise)); | |
| 389 | − vpp->denoise_conf.Header.BufferId = MFX_EXTBUFF_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; | |
| 391 | + INIT_MFX_EXTBUF(denoise_conf, MFX_EXTBUFF_VPP_DENOISE); | |
| 392 | + SET_MFX_PARAM_FIELD(denoise_conf, DenoiseFactor, vpp->denoise); | |
| 394 | 393 | } |
| 395 | 394 | |
| 396 | 395 | if (vpp->detail) { |
| 397 | − memset(&vpp->detail_conf, 0, sizeof(mfxExtVPPDetail)); | |
| 398 | − vpp->detail_conf.Header.BufferId = MFX_EXTBUFF_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; | |
| 396 | + INIT_MFX_EXTBUF(detail_conf, MFX_EXTBUFF_VPP_DETAIL); | |
| 397 | + SET_MFX_PARAM_FIELD(detail_conf, DetailFactor, vpp->detail); | |
| 403 | 398 | } |
| 404 | 399 | |
| 405 | 400 | if (vpp->procamp) { |
| 406 | − memset(&vpp->procamp_conf, 0, sizeof(mfxExtVPPProcAmp)); | |
| 407 | − vpp->procamp_conf.Header.BufferId = MFX_EXTBUFF_VPP_PROCAMP; | |
| 408 | − vpp->procamp_conf.Header.BufferSz = sizeof(mfxExtVPPProcAmp); | |
| 409 | − vpp->procamp_conf.Hue = vpp->hue; | |
| 410 | − vpp->procamp_conf.Saturation = vpp->saturation; | |
| 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; | |
| 401 | + INIT_MFX_EXTBUF(procamp_conf, MFX_EXTBUFF_VPP_PROCAMP); | |
| 402 | + SET_MFX_PARAM_FIELD(procamp_conf, Hue, vpp->hue); | |
| 403 | + SET_MFX_PARAM_FIELD(procamp_conf, Saturation, vpp->saturation); | |
| 404 | + SET_MFX_PARAM_FIELD(procamp_conf, Contrast, vpp->contrast); | |
| 405 | + SET_MFX_PARAM_FIELD(procamp_conf, Brightness, vpp->brightness); | |
| 415 | 406 | } |
| 416 | 407 | |
| 417 | 408 | if (vpp->transpose >= 0) { |
| @@ -458,18 +449,14 @@ static int config_output(AVFilterLink *outlink) · 40 unmodified lines | ||
| 458 | 449 | |
| 459 | 450 | if (vpp->rotate) { |
| 460 | 451 | if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 17)) { |
| 461 | − memset(&vpp->rotation_conf, 0, sizeof(mfxExtVPPRotation)); | |
| 462 | − vpp->rotation_conf.Header.BufferId = MFX_EXTBUFF_VPP_ROTATION; | |
| 463 | − vpp->rotation_conf.Header.BufferSz = sizeof(mfxExtVPPRotation); | |
| 464 | − vpp->rotation_conf.Angle = vpp->rotate; | |
| 452 | + INIT_MFX_EXTBUF(rotation_conf, MFX_EXTBUFF_VPP_ROTATION); | |
| 453 | + SET_MFX_PARAM_FIELD(rotation_conf, Angle, vpp->rotate); | |
| 465 | 454 | |
| 466 | 455 | if (MFX_ANGLE_90 == vpp->rotate || MFX_ANGLE_270 == vpp->rotate) { |
| 467 | 456 | FFSWAP(int, vpp->out_width, vpp->out_height); |
| 468 | 457 | FFSWAP(int, outlink->w, outlink->h); |
| 469 | 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 | 460 | } else { |
| 474 | 461 | av_log(ctx, AV_LOG_WARNING, "The QSV VPP rotate option is " |
| 475 | 462 | "not supported with this MSDK version.\n"); |
| @@ -479,12 +466,8 @@ static int config_output(AVFilterLink *outlink) · 3 unmodified lines | ||
| 479 | 466 | |
| 480 | 467 | if (vpp->hflip) { |
| 481 | 468 | if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) { |
| 482 | − memset(&vpp->mirroring_conf, 0, sizeof(mfxExtVPPMirroring)); | |
| 483 | − vpp->mirroring_conf.Header.BufferId = MFX_EXTBUFF_VPP_MIRRORING; | |
| 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; | |
| 469 | + INIT_MFX_EXTBUF(mirroring_conf, MFX_EXTBUFF_VPP_MIRRORING); | |
| 470 | + SET_MFX_PARAM_FIELD(mirroring_conf, Type, vpp->hflip); | |
| 488 | 471 | } else { |
| 489 | 472 | av_log(ctx, AV_LOG_WARNING, "The QSV VPP hflip option is " |
| 490 | 473 | "not supported with this MSDK version.\n"); |
| @@ -494,17 +477,16 @@ static int config_output(AVFilterLink *outlink) · 3 unmodified lines | ||
| 494 | 477 | |
| 495 | 478 | if (inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format) { |
| 496 | 479 | if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) { |
| 497 | − memset(&vpp->scale_conf, 0, sizeof(mfxExtVPPScaling)); | |
| 498 | − vpp->scale_conf.Header.BufferId = MFX_EXTBUFF_VPP_SCALING; | |
| 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; | |
| 480 | + INIT_MFX_EXTBUF(scale_conf, MFX_EXTBUFF_VPP_SCALING); | |
| 481 | + SET_MFX_PARAM_FIELD(scale_conf, ScalingMode, vpp->scale_mode); | |
| 503 | 482 | } else |
| 504 | 483 | av_log(ctx, AV_LOG_WARNING, "The QSV VPP Scale & format conversion " |
| 505 | 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 | 490 | if (vpp->use_frc || vpp->use_crop || vpp->deinterlace || vpp->denoise || |
| 509 | 491 | vpp->detail || vpp->procamp || vpp->rotate || vpp->hflip || |
| 510 | 492 | inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format) |