Message ID | 7b694785-1c62-3584-b9ac-1faa325021c6@jkqxz.net |
---|---|
State | Accepted |
Commit | c490fc9536dcea7fdf1245a340bf075533610bc2 |
Headers | show |
> From: ffmpeg-devel [mailto:ffmpeg-devel-bounces@ffmpeg.org] On Behalf > Of Mark Thompson > +#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) }, IIRC, level 5.2 is the maximum level of H264? > +#undef LEVEL > + > { NULL }, > };
On Thu, Nov 30, 2017 at 08:52:21 +0000, Li, Zhong wrote: > > + { LEVEL("6", 60) }, > > + { LEVEL("6.1", 61) }, > > + { LEVEL("6.2", 62) }, > > IIRC, level 5.2 is the maximum level of H264? Higher levels were introduced in 2016. Edition V12 of H.264 lists 6, 6.1 and 6.2 in Annex A, Table A-1. It basically lists the same thing as Wikipedia: https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Levels Moritz
> From: ffmpeg-devel [mailto:ffmpeg-devel-bounces@ffmpeg.org] On Behalf > Of Moritz Barsnick > Sent: Thursday, November 30, 2017 10:33 PM > To: FFmpeg development discussions and patches > <ffmpeg-devel@ffmpeg.org> > Subject: Re: [FFmpeg-devel] [PATCH 1/2] vaapi_h264: Add named options for > setting profile and level > > On Thu, Nov 30, 2017 at 08:52:21 +0000, Li, Zhong wrote: > > > + { LEVEL("6", 60) }, > > > + { LEVEL("6.1", 61) }, > > > + { LEVEL("6.2", 62) }, > > > > IIRC, level 5.2 is the maximum level of H264? > > Higher levels were introduced in 2016. Edition V12 of H.264 lists 6, > 6.1 and 6.2 in Annex A, Table A-1. It basically lists the same thing as > Wikipedia: > https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Levels Exactly.
On 01/12/17 05:24, Li, Zhong wrote: >> From: ffmpeg-devel [mailto:ffmpeg-devel-bounces@ffmpeg.org] On Behalf >> Of Moritz Barsnick >> Sent: Thursday, November 30, 2017 10:33 PM >> To: FFmpeg development discussions and patches >> <ffmpeg-devel@ffmpeg.org> >> Subject: Re: [FFmpeg-devel] [PATCH 1/2] vaapi_h264: Add named options for >> setting profile and level >> >> On Thu, Nov 30, 2017 at 08:52:21 +0000, Li, Zhong wrote: >>>> + { LEVEL("6", 60) }, >>>> + { LEVEL("6.1", 61) }, >>>> + { LEVEL("6.2", 62) }, >>> >>> IIRC, level 5.2 is the maximum level of H264? >> >> Higher levels were introduced in 2016. Edition V12 of H.264 lists 6, >> 6.1 and 6.2 in Annex A, Table A-1. It basically lists the same thing as >> Wikipedia: >> https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Levels > > Exactly. To clarify, are you happy with this patch and the matching one for H.265 now? Thanks, - Mark
> From: ffmpeg-devel [mailto:ffmpeg-devel-bounces@ffmpeg.org] On Behalf > Of Mark Thompson > Sent: Saturday, December 2, 2017 11:36 PM > To: ffmpeg-devel@ffmpeg.org > Subject: Re: [FFmpeg-devel] [PATCH 1/2] vaapi_h264: Add named options for > setting profile and level > > On 01/12/17 05:24, Li, Zhong wrote: > >> From: ffmpeg-devel [mailto:ffmpeg-devel-bounces@ffmpeg.org] On > Behalf > >> Of Moritz Barsnick > >> Sent: Thursday, November 30, 2017 10:33 PM > >> To: FFmpeg development discussions and patches > >> <ffmpeg-devel@ffmpeg.org> > >> Subject: Re: [FFmpeg-devel] [PATCH 1/2] vaapi_h264: Add named options > >> for setting profile and level > >> > >> On Thu, Nov 30, 2017 at 08:52:21 +0000, Li, Zhong wrote: > >>>> + { LEVEL("6", 60) }, > >>>> + { LEVEL("6.1", 61) }, > >>>> + { LEVEL("6.2", 62) }, > >>> > >>> IIRC, level 5.2 is the maximum level of H264? > >> > >> Higher levels were introduced in 2016. Edition V12 of H.264 lists 6, > >> 6.1 and 6.2 in Annex A, Table A-1. It basically lists the same thing > >> as > >> Wikipedia: > >> https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Levels > > > > Exactly. > To clarify, are you happy with this patch and the matching one for H.265 > now? Yeah, LGTM. For h265, level_idc is not set by avctx->level in libx265, so we can just make it consistent with nvenc instead of libx264.
On 04/12/17 05:25, Li, Zhong wrote: >> From: ffmpeg-devel [mailto:ffmpeg-devel-bounces@ffmpeg.org] On Behalf >> Of Mark Thompson >> Sent: Saturday, December 2, 2017 11:36 PM >> To: ffmpeg-devel@ffmpeg.org >> Subject: Re: [FFmpeg-devel] [PATCH 1/2] vaapi_h264: Add named options for >> setting profile and level >> >> On 01/12/17 05:24, Li, Zhong wrote: >>>> From: ffmpeg-devel [mailto:ffmpeg-devel-bounces@ffmpeg.org] On >> Behalf >>>> Of Moritz Barsnick >>>> Sent: Thursday, November 30, 2017 10:33 PM >>>> To: FFmpeg development discussions and patches >>>> <ffmpeg-devel@ffmpeg.org> >>>> Subject: Re: [FFmpeg-devel] [PATCH 1/2] vaapi_h264: Add named options >>>> for setting profile and level >>>> >>>> On Thu, Nov 30, 2017 at 08:52:21 +0000, Li, Zhong wrote: >>>>>> + { LEVEL("6", 60) }, >>>>>> + { LEVEL("6.1", 61) }, >>>>>> + { LEVEL("6.2", 62) }, >>>>> >>>>> IIRC, level 5.2 is the maximum level of H264? >>>> >>>> Higher levels were introduced in 2016. Edition V12 of H.264 lists 6, >>>> 6.1 and 6.2 in Annex A, Table A-1. It basically lists the same thing >>>> as >>>> Wikipedia: >>>> https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Levels >>> >>> Exactly. >> To clarify, are you happy with this patch and the matching one for H.265 >> now? > > Yeah, LGTM. > For h265, level_idc is not set by avctx->level in libx265, so we can just make it consistent with nvenc instead of libx264. Yep. Applied; thank you! - Mark
diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c index 5fd0bf7796..6940823b8e 100644 --- a/libavcodec/vaapi_encode_h264.c +++ b/libavcodec/vaapi_encode_h264.c @@ -93,6 +93,8 @@ typedef struct VAAPIEncodeH264Options { int coder; int aud; int sei; + int profile; + int level; } VAAPIEncodeH264Options; @@ -886,6 +888,11 @@ static av_cold int vaapi_encode_h264_init(AVCodecContext *avctx) 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) { case FF_PROFILE_H264_BASELINE: av_log(avctx, AV_LOG_WARNING, "H.264 baseline profile is not " @@ -1010,12 +1017,49 @@ static const AVOption vaapi_encode_h264_options[] = { { "recovery_point", "Include recovery points where appropriate", 0, AV_OPT_TYPE_CONST, { .i64 = SEI_RECOVERY_POINT }, 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 }, }; static const AVCodecDefault vaapi_encode_h264_defaults[] = { - { "profile", "100" }, - { "level", "51" }, { "b", "0" }, { "bf", "2" }, { "g", "120" },