The new modes work on new platforms and are avaialable only for oneVPL.
Showing the changes to libavfilter (1 of 1 file). Show all
Unified · Split
| @@ -504,8 +504,15 @@ static int config_output(AVFilterLink *outlink) · 503 unmodified lines | ||
| 504 | 504 | |
| 505 | 505 | if (inlink->w != outlink->w || inlink->h != outlink->h || in_format != vpp->out_format) { |
| 506 | 506 | if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) { |
| 507 | + int mode = vpp->scale_mode; | |
| 508 | + | |
| 509 | +#if QSV_ONEVPL | |
| 510 | + if (mode > 2) | |
| 511 | + mode = MFX_SCALING_MODE_VENDOR + mode - 2; | |
| 512 | +#endif | |
| 513 | + | |
| 507 | 514 | INIT_MFX_EXTBUF(scale_conf, MFX_EXTBUFF_VPP_SCALING); |
| 508 | − SET_MFX_PARAM_FIELD(scale_conf, ScalingMode, vpp->scale_mode); | |
| 515 | + SET_MFX_PARAM_FIELD(scale_conf, ScalingMode, mode); | |
| 509 | 516 | } else |
| 510 | 517 | av_log(ctx, AV_LOG_WARNING, "The QSV VPP Scale & format conversion " |
| 511 | 518 | "option is not supported with this MSDK version.\n"); |
| @@ -679,10 +686,19 @@ static const AVOption vpp_options[] = { · 167 unmodified lines | ||
| 679 | 686 | { "height", "Output video height(0=input video height, -1=keep input video aspect)", OFFSET(oh), AV_OPT_TYPE_STRING, { .str="w*ch/cw" }, 0, 255, .flags = FLAGS }, |
| 680 | 687 | { "format", "Output pixel format", OFFSET(output_format_str), AV_OPT_TYPE_STRING, { .str = "same" }, .flags = FLAGS }, |
| 681 | 688 | { "async_depth", "Internal parallelization depth, the higher the value the higher the latency.", OFFSET(qsv.async_depth), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, .flags = FLAGS }, |
| 682 | − { "scale_mode", "scale & format conversion 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" }, | |
| 689 | +#if QSV_ONEVPL | |
| 690 | + { "scale_mode", "scaling & format conversion mode (mode compute(3), vd(4) and ve(5) are only available on some platforms)", OFFSET(scale_mode), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 5, .flags = FLAGS, "scale mode" }, | |
| 691 | +#else | |
| 692 | + { "scale_mode", "scaling & format conversion mode", OFFSET(scale_mode), AV_OPT_TYPE_INT, { .i64 = MFX_SCALING_MODE_DEFAULT }, MFX_SCALING_MODE_DEFAULT, MFX_SCALING_MODE_QUALITY, .flags = FLAGS, "scale mode" }, | |
| 693 | +#endif | |
| 683 | 694 | { "auto", "auto mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_DEFAULT}, INT_MIN, INT_MAX, FLAGS, "scale mode"}, |
| 684 | 695 | { "low_power", "low power mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_LOWPOWER}, INT_MIN, INT_MAX, FLAGS, "scale mode"}, |
| 685 | 696 | { "hq", "high quality mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_QUALITY}, INT_MIN, INT_MAX, FLAGS, "scale mode"}, |
| 697 | +#if QSV_ONEVPL | |
| 698 | + { "compute", "compute", 0, AV_OPT_TYPE_CONST, { .i64 = 3}, INT_MIN, INT_MAX, FLAGS, "scale mode"}, | |
| 699 | + { "vd", "vd", 0, AV_OPT_TYPE_CONST, { .i64 = 4}, INT_MIN, INT_MAX, FLAGS, "scale mode"}, | |
| 700 | + { "ve", "ve", 0, AV_OPT_TYPE_CONST, { .i64 = 5}, INT_MIN, INT_MAX, FLAGS, "scale mode"}, | |
| 701 | +#endif | |
| 686 | 702 | |
| 687 | 703 | { "rate", "Generate output at frame rate or field rate, available only for deinterlace mode", |
| 688 | 704 | OFFSET(field_rate), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, FLAGS, "rate" }, |
| @@ -735,9 +751,18 @@ static const AVOption qsvscale_options[] = { · 46 unmodified lines | ||
| 735 | 751 | { "h", "Output video height(0=input video height, -1=keep input video aspect)", OFFSET(oh), AV_OPT_TYPE_STRING, { .str = "ih" }, .flags = FLAGS }, |
| 736 | 752 | { "format", "Output pixel format", OFFSET(output_format_str), AV_OPT_TYPE_STRING, { .str = "same" }, .flags = FLAGS }, |
| 737 | 753 | |
| 738 | − { "mode", "set scaling mode", OFFSET(scale_mode), AV_OPT_TYPE_INT, { .i64 = MFX_SCALING_MODE_DEFAULT}, MFX_SCALING_MODE_DEFAULT, MFX_SCALING_MODE_QUALITY, FLAGS, "mode"}, | |
| 754 | +#if QSV_ONEVPL | |
| 755 | + { "mode", "scaling & format conversion mode (mode compute(3), vd(4) and ve(5) are only available on some platforms)", OFFSET(scale_mode), AV_OPT_TYPE_INT, { .i64 = 0}, 0, 5, FLAGS, "mode"}, | |
| 756 | +#else | |
| 757 | + { "mode", "scaling & format conversion mode", OFFSET(scale_mode), AV_OPT_TYPE_INT, { .i64 = MFX_SCALING_MODE_DEFAULT}, MFX_SCALING_MODE_DEFAULT, MFX_SCALING_MODE_QUALITY, FLAGS, "mode"}, | |
| 758 | +#endif | |
| 739 | 759 | { "low_power", "low power mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_LOWPOWER}, INT_MIN, INT_MAX, FLAGS, "mode"}, |
| 740 | 760 | { "hq", "high quality mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_QUALITY}, INT_MIN, INT_MAX, FLAGS, "mode"}, |
| 761 | +#if QSV_ONEVPL | |
| 762 | + { "compute", "compute", 0, AV_OPT_TYPE_CONST, { .i64 = 3}, INT_MIN, INT_MAX, FLAGS, "mode"}, | |
| 763 | + { "vd", "vd", 0, AV_OPT_TYPE_CONST, { .i64 = 4}, INT_MIN, INT_MAX, FLAGS, "mode"}, | |
| 764 | + { "ve", "ve", 0, AV_OPT_TYPE_CONST, { .i64 = 5}, INT_MIN, INT_MAX, FLAGS, "mode"}, | |
| 765 | +#endif | |
| 741 | 766 | |
| 742 | 767 | { NULL }, |
| 743 | 768 | }; |