if (ret < 0)
return ret;
- ret = generate_fake_vps(&q->qsv, avctx);
- if (ret < 0) {
- ff_qsv_enc_close(avctx, &q->qsv);
- return ret;
+ if (!q->qsv.hevc_vps) {
+ ret = generate_fake_vps(&q->qsv, avctx);
+ if (ret < 0) {
+ ff_qsv_enc_close(avctx, &q->qsv);
+ return ret;
+ }
}
return 0;
{ "main", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_PROFILE_HEVC_MAIN }, INT_MIN, INT_MAX, VE, "profile" },
{ "main10", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_PROFILE_HEVC_MAIN10 }, INT_MIN, INT_MAX, VE, "profile" },
{ "mainsp", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_PROFILE_HEVC_MAINSP }, INT_MIN, INT_MAX, VE, "profile" },
+ { "rext", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_PROFILE_HEVC_REXT }, INT_MIN, INT_MAX, VE, "profile" },
+
+ { "gpb", "1: GPB (generalized P/B frame); 0: regular P frame", OFFSET(qsv.gpb), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE},
+
+ { "tile_cols", "Number of columns for tiled encoding", OFFSET(qsv.tile_cols), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, UINT16_MAX, VE },
+ { "tile_rows", "Number of rows for tiled encoding", OFFSET(qsv.tile_rows), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, UINT16_MAX, VE },
{ NULL },
};
// same as the x264 default
{ "g", "248" },
{ "bf", "8" },
+ { "qmin", "-1" },
+ { "qmax", "-1" },
{ "trellis", "-1" },
{ "flags", "+cgop" },
-#if FF_API_PRIVATE_OPT
- { "b_strategy", "-1" },
-#endif
{ NULL },
};
-AVCodec ff_hevc_qsv_encoder = {
+const AVCodec ff_hevc_qsv_encoder = {
.name = "hevc_qsv",
.long_name = NULL_IF_CONFIG_SMALL("HEVC (Intel Quick Sync Video acceleration)"),
.priv_data_size = sizeof(QSVHEVCEncContext),
.defaults = qsv_enc_defaults,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.wrapper_name = "qsv",
+ .hw_configs = ff_qsv_enc_hw_configs,
};