Message ID | 30afe0b0-3706-6df4-67f3-caf059986214@gmail.com |
---|---|
State | Superseded |
Headers | show |
On 02/08/17 06:55, Jun Zhao wrote: > From 2a0bd4795fcf7d889c3c93b03e8698015a519260 Mon Sep 17 00:00:00 2001 > From: Jun Zhao <jun.zhao@intel.com> > Date: Tue, 1 Aug 2017 04:16:30 -0400 > Subject: [PATCH V2 2/4] lavc/vaapi_encode: Add max slices number query. > > Add max slices number query. > > Signed-off-by: Jun Zhao <jun.zhao@intel.com> > --- > libavcodec/vaapi_encode.c | 4 ++++ > libavcodec/vaapi_encode.h | 3 +++ > 2 files changed, 7 insertions(+) > > diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c > index 11d9803b5d..9fc70bdd55 100644 > --- a/libavcodec/vaapi_encode.c > +++ b/libavcodec/vaapi_encode.c > @@ -972,6 +972,7 @@ static av_cold int vaapi_encode_config_attributes(AVCodecContext *avctx) > { VAConfigAttribRTFormat }, > { VAConfigAttribRateControl }, > { VAConfigAttribEncMaxRefFrames }, > + { VAConfigAttribEncMaxSlices }, > { VAConfigAttribEncPackedHeaders }, > }; > > @@ -1102,6 +1103,9 @@ static av_cold int vaapi_encode_config_attributes(AVCodecContext *avctx) > } > } > break; > + case VAConfigAttribEncMaxSlices: > + ctx->max_slices = attr[i].value; > + break; > case VAConfigAttribEncPackedHeaders: > if (ctx->va_packed_headers & ~attr[i].value) { > // This isn't fatal, but packed headers are always > diff --git a/libavcodec/vaapi_encode.h b/libavcodec/vaapi_encode.h > index b542772aed..fd55aa6cdc 100644 > --- a/libavcodec/vaapi_encode.h > +++ b/libavcodec/vaapi_encode.h > @@ -103,6 +103,9 @@ typedef struct VAAPIEncodeContext { > // Supported packed headers (initially the desired set, modified > // later to what is actually supported). > unsigned int va_packed_headers; > + // Supported max-slices number per frame. (0 means driver cannot > + // support max mutil-slices query) > + int max_slices; > > // The required size of surfaces. This is probably the input > // size (AVCodecContext.width|height) aligned up to whatever A few lines further down: // Everything above this point must be set before calling // ff_vaapi_encode_init(). max_slices is not in this category, so it should be somewhere below. > -- > 2.11.0 > Probably fine? Without too much thought I would probably write this the other way around (check the value in vaapi_encode_config_attributes(), then know it is correct thereafter, like max_b_frames), but maybe that causes more problems with unexpected failure and needing to mess with MPEG-2. - Mark
On 2017/8/10 5:29, Mark Thompson wrote: > On 02/08/17 06:55, Jun Zhao wrote: >> From 2a0bd4795fcf7d889c3c93b03e8698015a519260 Mon Sep 17 00:00:00 2001 >> From: Jun Zhao <jun.zhao@intel.com> >> Date: Tue, 1 Aug 2017 04:16:30 -0400 >> Subject: [PATCH V2 2/4] lavc/vaapi_encode: Add max slices number query. >> >> Add max slices number query. >> >> Signed-off-by: Jun Zhao <jun.zhao@intel.com> >> --- >> libavcodec/vaapi_encode.c | 4 ++++ >> libavcodec/vaapi_encode.h | 3 +++ >> 2 files changed, 7 insertions(+) >> >> diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c >> index 11d9803b5d..9fc70bdd55 100644 >> --- a/libavcodec/vaapi_encode.c >> +++ b/libavcodec/vaapi_encode.c >> @@ -972,6 +972,7 @@ static av_cold int vaapi_encode_config_attributes(AVCodecContext *avctx) >> { VAConfigAttribRTFormat }, >> { VAConfigAttribRateControl }, >> { VAConfigAttribEncMaxRefFrames }, >> + { VAConfigAttribEncMaxSlices }, >> { VAConfigAttribEncPackedHeaders }, >> }; >> >> @@ -1102,6 +1103,9 @@ static av_cold int vaapi_encode_config_attributes(AVCodecContext *avctx) >> } >> } >> break; >> + case VAConfigAttribEncMaxSlices: >> + ctx->max_slices = attr[i].value; >> + break; >> case VAConfigAttribEncPackedHeaders: >> if (ctx->va_packed_headers & ~attr[i].value) { >> // This isn't fatal, but packed headers are always >> diff --git a/libavcodec/vaapi_encode.h b/libavcodec/vaapi_encode.h >> index b542772aed..fd55aa6cdc 100644 >> --- a/libavcodec/vaapi_encode.h >> +++ b/libavcodec/vaapi_encode.h >> @@ -103,6 +103,9 @@ typedef struct VAAPIEncodeContext { >> // Supported packed headers (initially the desired set, modified >> // later to what is actually supported). >> unsigned int va_packed_headers; >> + // Supported max-slices number per frame. (0 means driver cannot >> + // support max mutil-slices query) >> + int max_slices; >> >> // The required size of surfaces. This is probably the input >> // size (AVCodecContext.width|height) aligned up to whatever > > A few lines further down: > // Everything above this point must be set before calling > // ff_vaapi_encode_init(). > > max_slices is not in this category, so it should be somewhere below. Didn't get this comments in the code, with change the place. > >> -- >> 2.11.0 >> > > Probably fine? Without too much thought I would probably write this the other way around (check the value in vaapi_encode_config_attributes(), then know it is correct thereafter, like max_b_frames), but maybe that causes more problems with unexpected failure and needing to mess with MPEG-2. double-check the i965 master branch source code, only AVC/HEVC support the VAConfigAttribEncMaxSlices query, MPEG2 will return VA_ATTRIB_NOT_SUPPORTED, and I will double check the old i965 release. > > - Mark > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >
diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c index 11d9803b5d..9fc70bdd55 100644 --- a/libavcodec/vaapi_encode.c +++ b/libavcodec/vaapi_encode.c @@ -972,6 +972,7 @@ static av_cold int vaapi_encode_config_attributes(AVCodecContext *avctx) { VAConfigAttribRTFormat }, { VAConfigAttribRateControl }, { VAConfigAttribEncMaxRefFrames }, + { VAConfigAttribEncMaxSlices }, { VAConfigAttribEncPackedHeaders }, }; @@ -1102,6 +1103,9 @@ static av_cold int vaapi_encode_config_attributes(AVCodecContext *avctx) } } break; + case VAConfigAttribEncMaxSlices: + ctx->max_slices = attr[i].value; + break; case VAConfigAttribEncPackedHeaders: if (ctx->va_packed_headers & ~attr[i].value) { // This isn't fatal, but packed headers are always diff --git a/libavcodec/vaapi_encode.h b/libavcodec/vaapi_encode.h index b542772aed..fd55aa6cdc 100644 --- a/libavcodec/vaapi_encode.h +++ b/libavcodec/vaapi_encode.h @@ -103,6 +103,9 @@ typedef struct VAAPIEncodeContext { // Supported packed headers (initially the desired set, modified // later to what is actually supported). unsigned int va_packed_headers; + // Supported max-slices number per frame. (0 means driver cannot + // support max mutil-slices query) + int max_slices; // The required size of surfaces. This is probably the input // size (AVCodecContext.width|height) aligned up to whatever