| @@ -91,6 +91,8 @@ typedef struct VAAPIEncodeH264Options { | |||||
| int low_power; | int low_power; | ||||
| int aud; | int aud; | ||||
| int sei; | int sei; | ||||
| int profile; | |||||
| int level; | |||||
| } VAAPIEncodeH264Options; | } VAAPIEncodeH264Options; | ||||
| @@ -882,6 +884,11 @@ static av_cold int vaapi_encode_h264_init(AVCodecContext *avctx) | |||||
| ctx->codec = &vaapi_encode_type_h264; | ctx->codec = &vaapi_encode_type_h264; | ||||
| if (avctx->profile == FF_PROFILE_UNKNOWN) | |||||
| avctx->profile = opt->profile; | |||||
| if (avctx->level == FF_LEVEL_UNKNOWN) | |||||
| avctx->level = opt->level; | |||||
| switch (avctx->profile) { | switch (avctx->profile) { | ||||
| case FF_PROFILE_H264_BASELINE: | case FF_PROFILE_H264_BASELINE: | ||||
| av_log(avctx, AV_LOG_WARNING, "H.264 baseline profile is not " | av_log(avctx, AV_LOG_WARNING, "H.264 baseline profile is not " | ||||
| @@ -995,12 +1002,49 @@ static const AVOption vaapi_encode_h264_options[] = { | |||||
| { "recovery_point", "Include recovery points where appropriate", | { "recovery_point", "Include recovery points where appropriate", | ||||
| 0, AV_OPT_TYPE_CONST, { .i64 = SEI_RECOVERY_POINT }, | 0, AV_OPT_TYPE_CONST, { .i64 = SEI_RECOVERY_POINT }, | ||||
| INT_MIN, INT_MAX, FLAGS, "sei" }, | INT_MIN, INT_MAX, FLAGS, "sei" }, | ||||
| { "profile", "Set profile (profile_idc and constraint_set*_flag)", | |||||
| OFFSET(profile), AV_OPT_TYPE_INT, | |||||
| { .i64 = FF_PROFILE_H264_HIGH }, 0x0000, 0xffff, FLAGS, "profile" }, | |||||
| #define PROFILE(name, value) name, NULL, 0, AV_OPT_TYPE_CONST, \ | |||||
| { .i64 = value }, 0, 0, FLAGS, "profile" | |||||
| { PROFILE("constrained_baseline", FF_PROFILE_H264_CONSTRAINED_BASELINE) }, | |||||
| { PROFILE("main", FF_PROFILE_H264_MAIN) }, | |||||
| { PROFILE("high", FF_PROFILE_H264_HIGH) }, | |||||
| #undef PROFILE | |||||
| { "level", "Set level (level_idc)", | |||||
| OFFSET(level), AV_OPT_TYPE_INT, | |||||
| { .i64 = 51 }, 0x00, 0xff, FLAGS, "level" }, | |||||
| #define LEVEL(name, value) name, NULL, 0, AV_OPT_TYPE_CONST, \ | |||||
| { .i64 = value }, 0, 0, FLAGS, "level" | |||||
| { LEVEL("1", 10) }, | |||||
| { LEVEL("1.1", 11) }, | |||||
| { LEVEL("1.2", 12) }, | |||||
| { LEVEL("1.3", 13) }, | |||||
| { LEVEL("2", 20) }, | |||||
| { LEVEL("2.1", 21) }, | |||||
| { LEVEL("2.2", 22) }, | |||||
| { LEVEL("3", 30) }, | |||||
| { LEVEL("3.1", 31) }, | |||||
| { LEVEL("3.2", 32) }, | |||||
| { LEVEL("4", 40) }, | |||||
| { LEVEL("4.1", 41) }, | |||||
| { LEVEL("4.2", 42) }, | |||||
| { LEVEL("5", 50) }, | |||||
| { LEVEL("5.1", 51) }, | |||||
| { LEVEL("5.2", 52) }, | |||||
| { LEVEL("6", 60) }, | |||||
| { LEVEL("6.1", 61) }, | |||||
| { LEVEL("6.2", 62) }, | |||||
| #undef LEVEL | |||||
| { NULL }, | { NULL }, | ||||
| }; | }; | ||||
| static const AVCodecDefault vaapi_encode_h264_defaults[] = { | static const AVCodecDefault vaapi_encode_h264_defaults[] = { | ||||
| { "profile", "100" }, | |||||
| { "level", "51" }, | |||||
| { "b", "0" }, | { "b", "0" }, | ||||
| { "bf", "2" }, | { "bf", "2" }, | ||||
| { "g", "120" }, | { "g", "120" }, | ||||