libmfx 1.28 was released 3 years ago, it is easy to get a greater version than 1.28. We may remove lots of compile-time checks if adding the requirement for the minimal version in the configure script.
Showing the changes to libavfilter (2 of 9 files). Show all
Unified · Split
| @@ -69,7 +69,6 @@ enum var_name { · 68 unmodified lines | ||
| 69 | 69 | VARS_NB |
| 70 | 70 | }; |
| 71 | 71 | |
| 72 | −#define QSV_HAVE_SCALING_CONFIG QSV_VERSION_ATLEAST(1, 19) | |
| 73 | 72 | #define MFX_IMPL_VIA_MASK(impl) (0x0f00 & (impl)) |
| 74 | 73 | |
| 75 | 74 | typedef struct QSVScaleContext { |
| @@ -92,12 +91,10 @@ typedef struct QSVScaleContext { · 16 unmodified lines | ||
| 92 | 91 | |
| 93 | 92 | mfxExtOpaqueSurfaceAlloc opaque_alloc; |
| 94 | 93 | |
| 95 | −#if QSV_HAVE_SCALING_CONFIG | |
| 96 | 94 | mfxExtVPPScaling scale_conf; |
| 97 | −#endif | |
| 98 | 95 | int mode; |
| 99 | 96 | |
| 100 | − mfxExtBuffer *ext_buffers[1 + QSV_HAVE_SCALING_CONFIG]; | |
| 97 | + mfxExtBuffer *ext_buffers[2]; | |
| 101 | 98 | int num_ext_buf; |
| 102 | 99 | |
| 103 | 100 | int shift_width, shift_height; |
| @@ -397,14 +394,12 @@ static int init_out_session(AVFilterContext *ctx) · 293 unmodified lines | ||
| 397 | 394 | par.IOPattern = MFX_IOPATTERN_IN_VIDEO_MEMORY | MFX_IOPATTERN_OUT_VIDEO_MEMORY; |
| 398 | 395 | } |
| 399 | 396 | |
| 400 | −#if QSV_HAVE_SCALING_CONFIG | |
| 401 | 397 | memset(&s->scale_conf, 0, sizeof(mfxExtVPPScaling)); |
| 402 | 398 | s->scale_conf.Header.BufferId = MFX_EXTBUFF_VPP_SCALING; |
| 403 | 399 | s->scale_conf.Header.BufferSz = sizeof(mfxExtVPPScaling); |
| 404 | 400 | s->scale_conf.ScalingMode = s->mode; |
| 405 | 401 | s->ext_buffers[s->num_ext_buf++] = (mfxExtBuffer*)&s->scale_conf; |
| 406 | 402 | av_log(ctx, AV_LOG_VERBOSE, "Scaling mode: %d\n", s->mode); |
| 407 | −#endif | |
| 408 | 403 | |
| 409 | 404 | par.ExtParam = s->ext_buffers; |
| 410 | 405 | par.NumExtParam = s->num_ext_buf; |
| @@ -620,15 +615,9 @@ static const AVOption options[] = { · 209 unmodified lines | ||
| 620 | 615 | { "h", "Output video height", OFFSET(h_expr), AV_OPT_TYPE_STRING, { .str = "ih" }, .flags = FLAGS }, |
| 621 | 616 | { "format", "Output pixel format", OFFSET(format_str), AV_OPT_TYPE_STRING, { .str = "same" }, .flags = FLAGS }, |
| 622 | 617 | |
| 623 | −#if QSV_HAVE_SCALING_CONFIG | |
| 624 | 618 | { "mode", "set scaling mode", OFFSET(mode), AV_OPT_TYPE_INT, { .i64 = MFX_SCALING_MODE_DEFAULT}, MFX_SCALING_MODE_DEFAULT, MFX_SCALING_MODE_QUALITY, FLAGS, "mode"}, |
| 625 | 619 | { "low_power", "low power mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_LOWPOWER}, INT_MIN, INT_MAX, FLAGS, "mode"}, |
| 626 | 620 | { "hq", "high quality mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_QUALITY}, INT_MIN, INT_MAX, FLAGS, "mode"}, |
| 627 | −#else | |
| 628 | − { "mode", "(not supported)", OFFSET(mode), AV_OPT_TYPE_INT, { .i64 = 0}, 0, INT_MAX, FLAGS, "mode"}, | |
| 629 | − { "low_power", "", 0, AV_OPT_TYPE_CONST, { .i64 = 1}, 0, 0, FLAGS, "mode"}, | |
| 630 | − { "hq", "", 0, AV_OPT_TYPE_CONST, { .i64 = 2}, 0, 0, FLAGS, "mode"}, | |
| 631 | −#endif | |
| 632 | 621 | |
| 633 | 622 | { NULL }, |
| 634 | 623 | }; |
| @@ -43,9 +43,6 @@ · 42 unmodified lines | ||
| 43 | 43 | |
| 44 | 44 | /* number of video enhancement filters */ |
| 45 | 45 | #define ENH_FILTERS_COUNT (8) |
| 46 | −#define QSV_HAVE_ROTATION QSV_VERSION_ATLEAST(1, 17) | |
| 47 | −#define QSV_HAVE_MIRRORING QSV_VERSION_ATLEAST(1, 19) | |
| 48 | −#define QSV_HAVE_SCALING_CONFIG QSV_VERSION_ATLEAST(1, 19) | |
| 49 | 46 | |
| 50 | 47 | typedef struct VPPContext{ |
| 51 | 48 | const AVClass *class; |
| @@ -60,9 +57,7 @@ typedef struct VPPContext{ · 8 unmodified lines | ||
| 60 | 57 | mfxExtVPPProcAmp procamp_conf; |
| 61 | 58 | mfxExtVPPRotation rotation_conf; |
| 62 | 59 | mfxExtVPPMirroring mirroring_conf; |
| 63 | −#ifdef QSV_HAVE_SCALING_CONFIG | |
| 64 | 60 | mfxExtVPPScaling scale_conf; |
| 65 | −#endif | |
| 66 | 61 | |
| 67 | 62 | int out_width; |
| 68 | 63 | int out_height; |
| @@ -138,9 +133,7 @@ static const AVOption options[] = { · 69 unmodified lines | ||
| 138 | 133 | { "height", "Output video height", OFFSET(oh), AV_OPT_TYPE_STRING, { .str="w*ch/cw" }, 0, 255, .flags = FLAGS }, |
| 139 | 134 | { "format", "Output pixel format", OFFSET(output_format_str), AV_OPT_TYPE_STRING, { .str = "same" }, .flags = FLAGS }, |
| 140 | 135 | { "async_depth", "Internal parallelization depth, the higher the value the higher the latency.", OFFSET(async_depth), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, .flags = FLAGS }, |
| 141 | −#ifdef QSV_HAVE_SCALING_CONFIG | |
| 142 | 136 | { "scale_mode", "scale mode: 0=auto, 1=low power, 2=high quality", OFFSET(scale_mode), AV_OPT_TYPE_INT, { .i64 = MFX_SCALING_MODE_DEFAULT }, MFX_SCALING_MODE_DEFAULT, MFX_SCALING_MODE_QUALITY, .flags = FLAGS, "scale mode" }, |
| 143 | −#endif | |
| 144 | 137 | { NULL } |
| 145 | 138 | }; |
| 146 | 139 | |
| @@ -422,84 +415,83 @@ static int config_output(AVFilterLink *outlink) · 275 unmodified lines | ||
| 422 | 415 | } |
| 423 | 416 | |
| 424 | 417 | if (vpp->transpose >= 0) { |
| 425 | −#ifdef QSV_HAVE_ROTATION | |
| 426 | − switch (vpp->transpose) { | |
| 427 | − case TRANSPOSE_CCLOCK_FLIP: | |
| 428 | − vpp->rotate = MFX_ANGLE_270; | |
| 429 | − vpp->hflip = MFX_MIRRORING_HORIZONTAL; | |
| 430 | − break; | |
| 431 | − case TRANSPOSE_CLOCK: | |
| 432 | − vpp->rotate = MFX_ANGLE_90; | |
| 433 | − vpp->hflip = MFX_MIRRORING_DISABLED; | |
| 434 | − break; | |
| 435 | − case TRANSPOSE_CCLOCK: | |
| 436 | − vpp->rotate = MFX_ANGLE_270; | |
| 437 | − vpp->hflip = MFX_MIRRORING_DISABLED; | |
| 438 | − break; | |
| 439 | − case TRANSPOSE_CLOCK_FLIP: | |
| 440 | − vpp->rotate = MFX_ANGLE_90; | |
| 441 | − vpp->hflip = MFX_MIRRORING_HORIZONTAL; | |
| 442 | − break; | |
| 443 | − case TRANSPOSE_REVERSAL: | |
| 444 | − vpp->rotate = MFX_ANGLE_180; | |
| 445 | − vpp->hflip = MFX_MIRRORING_DISABLED; | |
| 446 | − break; | |
| 447 | − case TRANSPOSE_HFLIP: | |
| 448 | − vpp->rotate = MFX_ANGLE_0; | |
| 449 | − vpp->hflip = MFX_MIRRORING_HORIZONTAL; | |
| 450 | − break; | |
| 451 | − case TRANSPOSE_VFLIP: | |
| 452 | − vpp->rotate = MFX_ANGLE_180; | |
| 453 | − vpp->hflip = MFX_MIRRORING_HORIZONTAL; | |
| 454 | − break; | |
| 455 | − default: | |
| 456 | − av_log(ctx, AV_LOG_ERROR, "Failed to set transpose mode to %d.\n", vpp->transpose); | |
| 457 | − return AVERROR(EINVAL); | |
| 418 | + if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 17)) { | |
| 419 | + switch (vpp->transpose) { | |
| 420 | + case TRANSPOSE_CCLOCK_FLIP: | |
| 421 | + vpp->rotate = MFX_ANGLE_270; | |
| 422 | + vpp->hflip = MFX_MIRRORING_HORIZONTAL; | |
| 423 | + break; | |
| 424 | + case TRANSPOSE_CLOCK: | |
| 425 | + vpp->rotate = MFX_ANGLE_90; | |
| 426 | + vpp->hflip = MFX_MIRRORING_DISABLED; | |
| 427 | + break; | |
| 428 | + case TRANSPOSE_CCLOCK: | |
| 429 | + vpp->rotate = MFX_ANGLE_270; | |
| 430 | + vpp->hflip = MFX_MIRRORING_DISABLED; | |
| 431 | + break; | |
| 432 | + case TRANSPOSE_CLOCK_FLIP: | |
| 433 | + vpp->rotate = MFX_ANGLE_90; | |
| 434 | + vpp->hflip = MFX_MIRRORING_HORIZONTAL; | |
| 435 | + break; | |
| 436 | + case TRANSPOSE_REVERSAL: | |
| 437 | + vpp->rotate = MFX_ANGLE_180; | |
| 438 | + vpp->hflip = MFX_MIRRORING_DISABLED; | |
| 439 | + break; | |
| 440 | + case TRANSPOSE_HFLIP: | |
| 441 | + vpp->rotate = MFX_ANGLE_0; | |
| 442 | + vpp->hflip = MFX_MIRRORING_HORIZONTAL; | |
| 443 | + break; | |
| 444 | + case TRANSPOSE_VFLIP: | |
| 445 | + vpp->rotate = MFX_ANGLE_180; | |
| 446 | + vpp->hflip = MFX_MIRRORING_HORIZONTAL; | |
| 447 | + break; | |
| 448 | + default: | |
| 449 | + av_log(ctx, AV_LOG_ERROR, "Failed to set transpose mode to %d.\n", vpp->transpose); | |
| 450 | + return AVERROR(EINVAL); | |
| 451 | + } | |
| 452 | + } else { | |
| 453 | + av_log(ctx, AV_LOG_WARNING, "The QSV VPP transpose option is " | |
| 454 | + "not supported with this MSDK version.\n"); | |
| 455 | + vpp->transpose = 0; | |
| 458 | 456 | } |
| 459 | −#else | |
| 460 | − av_log(ctx, AV_LOG_WARNING, "The QSV VPP transpose option is " | |
| 461 | − "not supported with this MSDK version.\n"); | |
| 462 | − vpp->transpose = 0; | |
| 463 | −#endif | |
| 464 | 457 | } |
| 465 | 458 | |
| 466 | 459 | if (vpp->rotate) { |
| 467 | −#ifdef QSV_HAVE_ROTATION | |
| 468 | − memset(&vpp->rotation_conf, 0, sizeof(mfxExtVPPRotation)); | |
| 469 | − vpp->rotation_conf.Header.BufferId = MFX_EXTBUFF_VPP_ROTATION; | |
| 470 | − vpp->rotation_conf.Header.BufferSz = sizeof(mfxExtVPPRotation); | |
| 471 | − vpp->rotation_conf.Angle = vpp->rotate; | |
| 472 | − | |
| 473 | − if (MFX_ANGLE_90 == vpp->rotate || MFX_ANGLE_270 == vpp->rotate) { | |
| 474 | − FFSWAP(int, vpp->out_width, vpp->out_height); | |
| 475 | − FFSWAP(int, outlink->w, outlink->h); | |
| 476 | − av_log(ctx, AV_LOG_DEBUG, "Swap width and height for clock/cclock rotation.\n"); | |
| 477 | − } | |
| 460 | + 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; | |
| 465 | + | |
| 466 | + if (MFX_ANGLE_90 == vpp->rotate || MFX_ANGLE_270 == vpp->rotate) { | |
| 467 | + FFSWAP(int, vpp->out_width, vpp->out_height); | |
| 468 | + FFSWAP(int, outlink->w, outlink->h); | |
| 469 | + av_log(ctx, AV_LOG_DEBUG, "Swap width and height for clock/cclock rotation.\n"); | |
| 470 | + } | |
| 478 | 471 | |
| 479 | − param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->rotation_conf; | |
| 480 | −#else | |
| 481 | − av_log(ctx, AV_LOG_WARNING, "The QSV VPP rotate option is " | |
| 482 | − "not supported with this MSDK version.\n"); | |
| 483 | − vpp->rotate = 0; | |
| 484 | −#endif | |
| 472 | + param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->rotation_conf; | |
| 473 | + } else { | |
| 474 | + av_log(ctx, AV_LOG_WARNING, "The QSV VPP rotate option is " | |
| 475 | + "not supported with this MSDK version.\n"); | |
| 476 | + vpp->rotate = 0; | |
| 477 | + } | |
| 485 | 478 | } |
| 486 | 479 | |
| 487 | 480 | if (vpp->hflip) { |
| 488 | −#ifdef QSV_HAVE_MIRRORING | |
| 489 | − memset(&vpp->mirroring_conf, 0, sizeof(mfxExtVPPMirroring)); | |
| 490 | − vpp->mirroring_conf.Header.BufferId = MFX_EXTBUFF_VPP_MIRRORING; | |
| 491 | − vpp->mirroring_conf.Header.BufferSz = sizeof(mfxExtVPPMirroring); | |
| 492 | − vpp->mirroring_conf.Type = vpp->hflip; | |
| 493 | − | |
| 494 | − param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->mirroring_conf; | |
| 495 | −#else | |
| 496 | − av_log(ctx, AV_LOG_WARNING, "The QSV VPP hflip option is " | |
| 497 | − "not supported with this MSDK version.\n"); | |
| 498 | − vpp->hflip = 0; | |
| 499 | −#endif | |
| 481 | + 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; | |
| 488 | + } else { | |
| 489 | + av_log(ctx, AV_LOG_WARNING, "The QSV VPP hflip option is " | |
| 490 | + "not supported with this MSDK version.\n"); | |
| 491 | + vpp->hflip = 0; | |
| 492 | + } | |
| 500 | 493 | } |
| 501 | 494 | |
| 502 | −#ifdef QSV_HAVE_SCALING_CONFIG | |
| 503 | 495 | if (inlink->w != outlink->w || inlink->h != outlink->h) { |
| 504 | 496 | if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) { |
| 505 | 497 | memset(&vpp->scale_conf, 0, sizeof(mfxExtVPPScaling)); |
| @@ -512,7 +504,6 @@ static int config_output(AVFilterLink *outlink) · 6 unmodified lines | ||
| 512 | 504 | av_log(ctx, AV_LOG_WARNING, "The QSV VPP Scale option is " |
| 513 | 505 | "not supported with this MSDK version.\n"); |
| 514 | 506 | } |
| 515 | −#endif | |
| 516 | 507 | |
| 517 | 508 | if (vpp->use_frc || vpp->use_crop || vpp->deinterlace || vpp->denoise || |
| 518 | 509 | vpp->detail || vpp->procamp || vpp->rotate || vpp->hflip || |