mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2026-02-04 14:30:55 +08:00
qsv: add requirement for the mininal version of libmfx
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. Reviewed-by: softworkz <softworkz@hotmail.com> Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org> Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
This commit is contained in:
committed by
Haihao Xiang
parent
f8a07c4d4a
commit
478e1a98a2
@@ -69,7 +69,6 @@ enum var_name {
|
||||
VARS_NB
|
||||
};
|
||||
|
||||
#define QSV_HAVE_SCALING_CONFIG QSV_VERSION_ATLEAST(1, 19)
|
||||
#define MFX_IMPL_VIA_MASK(impl) (0x0f00 & (impl))
|
||||
|
||||
typedef struct QSVScaleContext {
|
||||
@@ -92,12 +91,10 @@ typedef struct QSVScaleContext {
|
||||
|
||||
mfxExtOpaqueSurfaceAlloc opaque_alloc;
|
||||
|
||||
#if QSV_HAVE_SCALING_CONFIG
|
||||
mfxExtVPPScaling scale_conf;
|
||||
#endif
|
||||
int mode;
|
||||
|
||||
mfxExtBuffer *ext_buffers[1 + QSV_HAVE_SCALING_CONFIG];
|
||||
mfxExtBuffer *ext_buffers[2];
|
||||
int num_ext_buf;
|
||||
|
||||
int shift_width, shift_height;
|
||||
@@ -397,14 +394,12 @@ static int init_out_session(AVFilterContext *ctx)
|
||||
par.IOPattern = MFX_IOPATTERN_IN_VIDEO_MEMORY | MFX_IOPATTERN_OUT_VIDEO_MEMORY;
|
||||
}
|
||||
|
||||
#if QSV_HAVE_SCALING_CONFIG
|
||||
memset(&s->scale_conf, 0, sizeof(mfxExtVPPScaling));
|
||||
s->scale_conf.Header.BufferId = MFX_EXTBUFF_VPP_SCALING;
|
||||
s->scale_conf.Header.BufferSz = sizeof(mfxExtVPPScaling);
|
||||
s->scale_conf.ScalingMode = s->mode;
|
||||
s->ext_buffers[s->num_ext_buf++] = (mfxExtBuffer*)&s->scale_conf;
|
||||
av_log(ctx, AV_LOG_VERBOSE, "Scaling mode: %d\n", s->mode);
|
||||
#endif
|
||||
|
||||
par.ExtParam = s->ext_buffers;
|
||||
par.NumExtParam = s->num_ext_buf;
|
||||
@@ -620,15 +615,9 @@ static const AVOption options[] = {
|
||||
{ "h", "Output video height", OFFSET(h_expr), AV_OPT_TYPE_STRING, { .str = "ih" }, .flags = FLAGS },
|
||||
{ "format", "Output pixel format", OFFSET(format_str), AV_OPT_TYPE_STRING, { .str = "same" }, .flags = FLAGS },
|
||||
|
||||
#if QSV_HAVE_SCALING_CONFIG
|
||||
{ "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"},
|
||||
{ "low_power", "low power mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_LOWPOWER}, INT_MIN, INT_MAX, FLAGS, "mode"},
|
||||
{ "hq", "high quality mode", 0, AV_OPT_TYPE_CONST, { .i64 = MFX_SCALING_MODE_QUALITY}, INT_MIN, INT_MAX, FLAGS, "mode"},
|
||||
#else
|
||||
{ "mode", "(not supported)", OFFSET(mode), AV_OPT_TYPE_INT, { .i64 = 0}, 0, INT_MAX, FLAGS, "mode"},
|
||||
{ "low_power", "", 0, AV_OPT_TYPE_CONST, { .i64 = 1}, 0, 0, FLAGS, "mode"},
|
||||
{ "hq", "", 0, AV_OPT_TYPE_CONST, { .i64 = 2}, 0, 0, FLAGS, "mode"},
|
||||
#endif
|
||||
|
||||
{ NULL },
|
||||
};
|
||||
|
||||
@@ -43,9 +43,6 @@
|
||||
|
||||
/* number of video enhancement filters */
|
||||
#define ENH_FILTERS_COUNT (8)
|
||||
#define QSV_HAVE_ROTATION QSV_VERSION_ATLEAST(1, 17)
|
||||
#define QSV_HAVE_MIRRORING QSV_VERSION_ATLEAST(1, 19)
|
||||
#define QSV_HAVE_SCALING_CONFIG QSV_VERSION_ATLEAST(1, 19)
|
||||
|
||||
typedef struct VPPContext{
|
||||
const AVClass *class;
|
||||
@@ -60,9 +57,7 @@ typedef struct VPPContext{
|
||||
mfxExtVPPProcAmp procamp_conf;
|
||||
mfxExtVPPRotation rotation_conf;
|
||||
mfxExtVPPMirroring mirroring_conf;
|
||||
#ifdef QSV_HAVE_SCALING_CONFIG
|
||||
mfxExtVPPScaling scale_conf;
|
||||
#endif
|
||||
|
||||
int out_width;
|
||||
int out_height;
|
||||
@@ -138,9 +133,7 @@ static const AVOption options[] = {
|
||||
{ "height", "Output video height", OFFSET(oh), AV_OPT_TYPE_STRING, { .str="w*ch/cw" }, 0, 255, .flags = FLAGS },
|
||||
{ "format", "Output pixel format", OFFSET(output_format_str), AV_OPT_TYPE_STRING, { .str = "same" }, .flags = FLAGS },
|
||||
{ "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 },
|
||||
#ifdef QSV_HAVE_SCALING_CONFIG
|
||||
{ "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" },
|
||||
#endif
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
@@ -422,84 +415,83 @@ static int config_output(AVFilterLink *outlink)
|
||||
}
|
||||
|
||||
if (vpp->transpose >= 0) {
|
||||
#ifdef QSV_HAVE_ROTATION
|
||||
switch (vpp->transpose) {
|
||||
case TRANSPOSE_CCLOCK_FLIP:
|
||||
vpp->rotate = MFX_ANGLE_270;
|
||||
vpp->hflip = MFX_MIRRORING_HORIZONTAL;
|
||||
break;
|
||||
case TRANSPOSE_CLOCK:
|
||||
vpp->rotate = MFX_ANGLE_90;
|
||||
vpp->hflip = MFX_MIRRORING_DISABLED;
|
||||
break;
|
||||
case TRANSPOSE_CCLOCK:
|
||||
vpp->rotate = MFX_ANGLE_270;
|
||||
vpp->hflip = MFX_MIRRORING_DISABLED;
|
||||
break;
|
||||
case TRANSPOSE_CLOCK_FLIP:
|
||||
vpp->rotate = MFX_ANGLE_90;
|
||||
vpp->hflip = MFX_MIRRORING_HORIZONTAL;
|
||||
break;
|
||||
case TRANSPOSE_REVERSAL:
|
||||
vpp->rotate = MFX_ANGLE_180;
|
||||
vpp->hflip = MFX_MIRRORING_DISABLED;
|
||||
break;
|
||||
case TRANSPOSE_HFLIP:
|
||||
vpp->rotate = MFX_ANGLE_0;
|
||||
vpp->hflip = MFX_MIRRORING_HORIZONTAL;
|
||||
break;
|
||||
case TRANSPOSE_VFLIP:
|
||||
vpp->rotate = MFX_ANGLE_180;
|
||||
vpp->hflip = MFX_MIRRORING_HORIZONTAL;
|
||||
break;
|
||||
default:
|
||||
av_log(ctx, AV_LOG_ERROR, "Failed to set transpose mode to %d.\n", vpp->transpose);
|
||||
return AVERROR(EINVAL);
|
||||
if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 17)) {
|
||||
switch (vpp->transpose) {
|
||||
case TRANSPOSE_CCLOCK_FLIP:
|
||||
vpp->rotate = MFX_ANGLE_270;
|
||||
vpp->hflip = MFX_MIRRORING_HORIZONTAL;
|
||||
break;
|
||||
case TRANSPOSE_CLOCK:
|
||||
vpp->rotate = MFX_ANGLE_90;
|
||||
vpp->hflip = MFX_MIRRORING_DISABLED;
|
||||
break;
|
||||
case TRANSPOSE_CCLOCK:
|
||||
vpp->rotate = MFX_ANGLE_270;
|
||||
vpp->hflip = MFX_MIRRORING_DISABLED;
|
||||
break;
|
||||
case TRANSPOSE_CLOCK_FLIP:
|
||||
vpp->rotate = MFX_ANGLE_90;
|
||||
vpp->hflip = MFX_MIRRORING_HORIZONTAL;
|
||||
break;
|
||||
case TRANSPOSE_REVERSAL:
|
||||
vpp->rotate = MFX_ANGLE_180;
|
||||
vpp->hflip = MFX_MIRRORING_DISABLED;
|
||||
break;
|
||||
case TRANSPOSE_HFLIP:
|
||||
vpp->rotate = MFX_ANGLE_0;
|
||||
vpp->hflip = MFX_MIRRORING_HORIZONTAL;
|
||||
break;
|
||||
case TRANSPOSE_VFLIP:
|
||||
vpp->rotate = MFX_ANGLE_180;
|
||||
vpp->hflip = MFX_MIRRORING_HORIZONTAL;
|
||||
break;
|
||||
default:
|
||||
av_log(ctx, AV_LOG_ERROR, "Failed to set transpose mode to %d.\n", vpp->transpose);
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
} else {
|
||||
av_log(ctx, AV_LOG_WARNING, "The QSV VPP transpose option is "
|
||||
"not supported with this MSDK version.\n");
|
||||
vpp->transpose = 0;
|
||||
}
|
||||
#else
|
||||
av_log(ctx, AV_LOG_WARNING, "The QSV VPP transpose option is "
|
||||
"not supported with this MSDK version.\n");
|
||||
vpp->transpose = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (vpp->rotate) {
|
||||
#ifdef QSV_HAVE_ROTATION
|
||||
memset(&vpp->rotation_conf, 0, sizeof(mfxExtVPPRotation));
|
||||
vpp->rotation_conf.Header.BufferId = MFX_EXTBUFF_VPP_ROTATION;
|
||||
vpp->rotation_conf.Header.BufferSz = sizeof(mfxExtVPPRotation);
|
||||
vpp->rotation_conf.Angle = vpp->rotate;
|
||||
if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 17)) {
|
||||
memset(&vpp->rotation_conf, 0, sizeof(mfxExtVPPRotation));
|
||||
vpp->rotation_conf.Header.BufferId = MFX_EXTBUFF_VPP_ROTATION;
|
||||
vpp->rotation_conf.Header.BufferSz = sizeof(mfxExtVPPRotation);
|
||||
vpp->rotation_conf.Angle = vpp->rotate;
|
||||
|
||||
if (MFX_ANGLE_90 == vpp->rotate || MFX_ANGLE_270 == vpp->rotate) {
|
||||
FFSWAP(int, vpp->out_width, vpp->out_height);
|
||||
FFSWAP(int, outlink->w, outlink->h);
|
||||
av_log(ctx, AV_LOG_DEBUG, "Swap width and height for clock/cclock rotation.\n");
|
||||
if (MFX_ANGLE_90 == vpp->rotate || MFX_ANGLE_270 == vpp->rotate) {
|
||||
FFSWAP(int, vpp->out_width, vpp->out_height);
|
||||
FFSWAP(int, outlink->w, outlink->h);
|
||||
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 {
|
||||
av_log(ctx, AV_LOG_WARNING, "The QSV VPP rotate option is "
|
||||
"not supported with this MSDK version.\n");
|
||||
vpp->rotate = 0;
|
||||
}
|
||||
|
||||
param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->rotation_conf;
|
||||
#else
|
||||
av_log(ctx, AV_LOG_WARNING, "The QSV VPP rotate option is "
|
||||
"not supported with this MSDK version.\n");
|
||||
vpp->rotate = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (vpp->hflip) {
|
||||
#ifdef QSV_HAVE_MIRRORING
|
||||
memset(&vpp->mirroring_conf, 0, sizeof(mfxExtVPPMirroring));
|
||||
vpp->mirroring_conf.Header.BufferId = MFX_EXTBUFF_VPP_MIRRORING;
|
||||
vpp->mirroring_conf.Header.BufferSz = sizeof(mfxExtVPPMirroring);
|
||||
vpp->mirroring_conf.Type = vpp->hflip;
|
||||
if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) {
|
||||
memset(&vpp->mirroring_conf, 0, sizeof(mfxExtVPPMirroring));
|
||||
vpp->mirroring_conf.Header.BufferId = MFX_EXTBUFF_VPP_MIRRORING;
|
||||
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
|
||||
av_log(ctx, AV_LOG_WARNING, "The QSV VPP hflip option is "
|
||||
"not supported with this MSDK version.\n");
|
||||
vpp->hflip = 0;
|
||||
#endif
|
||||
param.ext_buf[param.num_ext_buf++] = (mfxExtBuffer*)&vpp->mirroring_conf;
|
||||
} else {
|
||||
av_log(ctx, AV_LOG_WARNING, "The QSV VPP hflip option is "
|
||||
"not supported with this MSDK version.\n");
|
||||
vpp->hflip = 0;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef QSV_HAVE_SCALING_CONFIG
|
||||
if (inlink->w != outlink->w || inlink->h != outlink->h) {
|
||||
if (QSV_RUNTIME_VERSION_ATLEAST(mfx_version, 1, 19)) {
|
||||
memset(&vpp->scale_conf, 0, sizeof(mfxExtVPPScaling));
|
||||
@@ -512,7 +504,6 @@ static int config_output(AVFilterLink *outlink)
|
||||
av_log(ctx, AV_LOG_WARNING, "The QSV VPP Scale option is "
|
||||
"not supported with this MSDK version.\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
if (vpp->use_frc || vpp->use_crop || vpp->deinterlace || vpp->denoise ||
|
||||
vpp->detail || vpp->procamp || vpp->rotate || vpp->hflip ||
|
||||
|
||||
Reference in New Issue
Block a user