Re: [FFmpeg-devel] [PATCH 3/3] lavc/vaapi_encode_h265: add h265 tile encoding support
> From: ffmpeg-devel On Behalf Of Fu, > Linjie > Sent: Saturday, March 28, 2020 23:02 > To: FFmpeg development discussions and patches de...@ffmpeg.org>; myp...@gmail.com > Subject: Re: [FFmpeg-devel] [PATCH 3/3] lavc/vaapi_encode_h265: add h265 > tile encoding support > > > From: ffmpeg-devel On Behalf Of > Fu, > > Linjie > > Sent: Tuesday, March 24, 2020 10:15 > > To: myp...@gmail.com; FFmpeg development discussions and patches > > > > Subject: Re: [FFmpeg-devel] [PATCH 3/3] lavc/vaapi_encode_h265: add > h265 > > tile encoding support > > > > > From: myp...@gmail.com > > > Sent: Monday, March 23, 2020 22:44 > > > To: FFmpeg development discussions and patches > > de...@ffmpeg.org> > > > Cc: Fu, Linjie > > > Subject: Re: [FFmpeg-devel] [PATCH 3/3] lavc/vaapi_encode_h265: add > > h265 > > > tile encoding support > > > > > > On Mon, Mar 23, 2020 at 10:30 PM Linjie Fu wrote: > > > > > > > > Default to enable uniform_spacing_flag. Guess level by the tile > > > > rows/cols. Supported for ICL+ platforms. > > > > > > > > Also add documentations. > > > > > > > > To encode with 4 rows 2 columns: > > > > ffmpeg ... -c:v hevc_vaapi -tile_rows 4 -tile_cols 2 ... > > > > > > > > Signed-off-by: Linjie Fu > > > > --- > > > > doc/encoders.texi | 8 > > > > libavcodec/vaapi_encode_h265.c | 36 > > > +++- > > > > 2 files changed, 43 insertions(+), 1 deletion(-) > > > > > > > > diff --git a/doc/encoders.texi b/doc/encoders.texi > > > > index e23b6b3..2dc5cd4 100644 > > > > --- a/doc/encoders.texi > > > > +++ b/doc/encoders.texi > > > > @@ -3091,6 +3091,14 @@ Include HDR metadata if the input frames > have > > it > > > > messages). > > > > @end table > > > > > > > > +@item tile_rows > > > > +Selects how many rows of tiles to encode with. For example, 4 tile > rows > > > would > > > > +be requested by setting the tile_rows option to 4. > > > > + > > > > +@item tile_cols > > > > +Selects how many columns of tiles to encode with. For example, 5 tile > > > columns > > > > +would be requested by setting the tile_cols option to 5. > > > > + > > > > @end table > > > > > > > > @item mjpeg_vaapi > > > > diff --git a/libavcodec/vaapi_encode_h265.c > > > b/libavcodec/vaapi_encode_h265.c > > > > index 97dc5a7..457e3d9 100644 > > > > --- a/libavcodec/vaapi_encode_h265.c > > > > +++ b/libavcodec/vaapi_encode_h265.c > > > > @@ -63,6 +63,9 @@ typedef struct VAAPIEncodeH265Context { > > > > int level; > > > > int sei; > > > > > > > > +int trows; > > > > +int tcols; > > > > + > > > > // Derived settings. > > > > int fixed_qp_idr; > > > > int fixed_qp_p; > > > > @@ -345,7 +348,7 @@ static int > > > vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) > > > > > > > > level = ff_h265_guess_level(ptl, avctx->bit_rate, > > > > ctx->surface_width, > > > > ctx->surface_height, > > > > -ctx->nb_slices, 1, 1, > > > > +ctx->nb_slices, ctx->tile_rows, > > > > ctx->tile_cols, > > > > (ctx->b_per_p > 0) + 1); > > > > if (level) { > > > > av_log(avctx, AV_LOG_VERBOSE, "Using level %s.\n", level- > > >name); > > > > @@ -558,6 +561,20 @@ static int > > > vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) > > > > > > > > pps->pps_loop_filter_across_slices_enabled_flag = 1; > > > > > > > > +if (ctx->tile_rows && ctx->tile_cols) { > > > > +pps->tiles_enabled_flag = 1; > > > > +pps->uniform_spacing_flag = 1; > > > > + > > > > +pps->num_tile_rows_minus1 = ctx->tile_rows - 1; > > > > +pps->num_tile_columns_minus1= ctx->tile_cols - 1; > > > > + > > > > +
Re: [FFmpeg-devel] [PATCH 3/3] lavc/vaapi_encode_h265: add h265 tile encoding support
> From: ffmpeg-devel On Behalf Of Fu, > Linjie > Sent: Tuesday, March 24, 2020 10:15 > To: myp...@gmail.com; FFmpeg development discussions and patches > > Subject: Re: [FFmpeg-devel] [PATCH 3/3] lavc/vaapi_encode_h265: add h265 > tile encoding support > > > From: myp...@gmail.com > > Sent: Monday, March 23, 2020 22:44 > > To: FFmpeg development discussions and patches > de...@ffmpeg.org> > > Cc: Fu, Linjie > > Subject: Re: [FFmpeg-devel] [PATCH 3/3] lavc/vaapi_encode_h265: add > h265 > > tile encoding support > > > > On Mon, Mar 23, 2020 at 10:30 PM Linjie Fu wrote: > > > > > > Default to enable uniform_spacing_flag. Guess level by the tile > > > rows/cols. Supported for ICL+ platforms. > > > > > > Also add documentations. > > > > > > To encode with 4 rows 2 columns: > > > ffmpeg ... -c:v hevc_vaapi -tile_rows 4 -tile_cols 2 ... > > > > > > Signed-off-by: Linjie Fu > > > --- > > > doc/encoders.texi | 8 > > > libavcodec/vaapi_encode_h265.c | 36 > > +++- > > > 2 files changed, 43 insertions(+), 1 deletion(-) > > > > > > diff --git a/doc/encoders.texi b/doc/encoders.texi > > > index e23b6b3..2dc5cd4 100644 > > > --- a/doc/encoders.texi > > > +++ b/doc/encoders.texi > > > @@ -3091,6 +3091,14 @@ Include HDR metadata if the input frames have > it > > > messages). > > > @end table > > > > > > +@item tile_rows > > > +Selects how many rows of tiles to encode with. For example, 4 tile rows > > would > > > +be requested by setting the tile_rows option to 4. > > > + > > > +@item tile_cols > > > +Selects how many columns of tiles to encode with. For example, 5 tile > > columns > > > +would be requested by setting the tile_cols option to 5. > > > + > > > @end table > > > > > > @item mjpeg_vaapi > > > diff --git a/libavcodec/vaapi_encode_h265.c > > b/libavcodec/vaapi_encode_h265.c > > > index 97dc5a7..457e3d9 100644 > > > --- a/libavcodec/vaapi_encode_h265.c > > > +++ b/libavcodec/vaapi_encode_h265.c > > > @@ -63,6 +63,9 @@ typedef struct VAAPIEncodeH265Context { > > > int level; > > > int sei; > > > > > > +int trows; > > > +int tcols; > > > + > > > // Derived settings. > > > int fixed_qp_idr; > > > int fixed_qp_p; > > > @@ -345,7 +348,7 @@ static int > > vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) > > > > > > level = ff_h265_guess_level(ptl, avctx->bit_rate, > > > ctx->surface_width, > > > ctx->surface_height, > > > -ctx->nb_slices, 1, 1, > > > +ctx->nb_slices, ctx->tile_rows, > > > ctx->tile_cols, > > > (ctx->b_per_p > 0) + 1); > > > if (level) { > > > av_log(avctx, AV_LOG_VERBOSE, "Using level %s.\n", level- > >name); > > > @@ -558,6 +561,20 @@ static int > > vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) > > > > > > pps->pps_loop_filter_across_slices_enabled_flag = 1; > > > > > > +if (ctx->tile_rows && ctx->tile_cols) { > > > +pps->tiles_enabled_flag = 1; > > > +pps->uniform_spacing_flag = 1; > > > + > > > +pps->num_tile_rows_minus1 = ctx->tile_rows - 1; > > > +pps->num_tile_columns_minus1= ctx->tile_cols - 1; > > > + > > > +pps->loop_filter_across_tiles_enabled_flag = 1; > > > + > > > +for (i = 0; i <= pps->num_tile_rows_minus1; i++) > > > +pps->row_height_minus1[i] = ctx->row_height[i] - 1; > > > +for (i = 0; i <= pps->num_tile_columns_minus1; i++) > > > +pps->column_width_minus1[i] = ctx->col_width[i] - 1; > > > +} > > > > > > // Fill VAAPI parameter buffers. > > > > > > @@ -666,6 +683,13 @@ static int > > vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) > > > }, > > > }; > > > > > > +if (pps->tiles_enabled_flag) { > > > +for (i = 0; i <
Re: [FFmpeg-devel] [PATCH 3/3] lavc/vaapi_encode_h265: add h265 tile encoding support
> From: myp...@gmail.com > Sent: Monday, March 23, 2020 22:44 > To: FFmpeg development discussions and patches de...@ffmpeg.org> > Cc: Fu, Linjie > Subject: Re: [FFmpeg-devel] [PATCH 3/3] lavc/vaapi_encode_h265: add h265 > tile encoding support > > On Mon, Mar 23, 2020 at 10:30 PM Linjie Fu wrote: > > > > Default to enable uniform_spacing_flag. Guess level by the tile > > rows/cols. Supported for ICL+ platforms. > > > > Also add documentations. > > > > To encode with 4 rows 2 columns: > > ffmpeg ... -c:v hevc_vaapi -tile_rows 4 -tile_cols 2 ... > > > > Signed-off-by: Linjie Fu > > --- > > doc/encoders.texi | 8 > > libavcodec/vaapi_encode_h265.c | 36 > +++- > > 2 files changed, 43 insertions(+), 1 deletion(-) > > > > diff --git a/doc/encoders.texi b/doc/encoders.texi > > index e23b6b3..2dc5cd4 100644 > > --- a/doc/encoders.texi > > +++ b/doc/encoders.texi > > @@ -3091,6 +3091,14 @@ Include HDR metadata if the input frames have it > > messages). > > @end table > > > > +@item tile_rows > > +Selects how many rows of tiles to encode with. For example, 4 tile rows > would > > +be requested by setting the tile_rows option to 4. > > + > > +@item tile_cols > > +Selects how many columns of tiles to encode with. For example, 5 tile > columns > > +would be requested by setting the tile_cols option to 5. > > + > > @end table > > > > @item mjpeg_vaapi > > diff --git a/libavcodec/vaapi_encode_h265.c > b/libavcodec/vaapi_encode_h265.c > > index 97dc5a7..457e3d9 100644 > > --- a/libavcodec/vaapi_encode_h265.c > > +++ b/libavcodec/vaapi_encode_h265.c > > @@ -63,6 +63,9 @@ typedef struct VAAPIEncodeH265Context { > > int level; > > int sei; > > > > +int trows; > > +int tcols; > > + > > // Derived settings. > > int fixed_qp_idr; > > int fixed_qp_p; > > @@ -345,7 +348,7 @@ static int > vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) > > > > level = ff_h265_guess_level(ptl, avctx->bit_rate, > > ctx->surface_width, > > ctx->surface_height, > > -ctx->nb_slices, 1, 1, > > +ctx->nb_slices, ctx->tile_rows, > > ctx->tile_cols, > > (ctx->b_per_p > 0) + 1); > > if (level) { > > av_log(avctx, AV_LOG_VERBOSE, "Using level %s.\n", > > level->name); > > @@ -558,6 +561,20 @@ static int > vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) > > > > pps->pps_loop_filter_across_slices_enabled_flag = 1; > > > > +if (ctx->tile_rows && ctx->tile_cols) { > > +pps->tiles_enabled_flag = 1; > > +pps->uniform_spacing_flag = 1; > > + > > +pps->num_tile_rows_minus1 = ctx->tile_rows - 1; > > +pps->num_tile_columns_minus1= ctx->tile_cols - 1; > > + > > +pps->loop_filter_across_tiles_enabled_flag = 1; > > + > > +for (i = 0; i <= pps->num_tile_rows_minus1; i++) > > +pps->row_height_minus1[i] = ctx->row_height[i] - 1; > > +for (i = 0; i <= pps->num_tile_columns_minus1; i++) > > +pps->column_width_minus1[i] = ctx->col_width[i] - 1; > > +} > > > > // Fill VAAPI parameter buffers. > > > > @@ -666,6 +683,13 @@ static int > vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) > > }, > > }; > > > > +if (pps->tiles_enabled_flag) { > > +for (i = 0; i <= vpic->num_tile_rows_minus1; i++) > > +vpic->row_height_minus1[i] = pps->row_height_minus1[i]; > > +for (i = 0; i <= vpic->num_tile_columns_minus1; i++) > > +vpic->column_width_minus1[i] = pps->column_width_minus1[i]; > > +} > > + > > return 0; > > } > > > > @@ -1181,6 +1205,11 @@ static av_cold int > vaapi_encode_h265_init(AVCodecContext *avctx) > > if (priv->qp > 0) > > ctx->explicit_qp = priv->qp; > > > > +if (priv->trows && priv->tcols) { > > +ctx->tile_rows = priv->trows; > > +ctx->tile_cols = priv->tcols; > > +} > > + > >
Re: [FFmpeg-devel] [PATCH 3/3] lavc/vaapi_encode_h265: add h265 tile encoding support
On Mon, Mar 23, 2020 at 10:30 PM Linjie Fu wrote: > > Default to enable uniform_spacing_flag. Guess level by the tile > rows/cols. Supported for ICL+ platforms. > > Also add documentations. > > To encode with 4 rows 2 columns: > ffmpeg ... -c:v hevc_vaapi -tile_rows 4 -tile_cols 2 ... > > Signed-off-by: Linjie Fu > --- > doc/encoders.texi | 8 > libavcodec/vaapi_encode_h265.c | 36 +++- > 2 files changed, 43 insertions(+), 1 deletion(-) > > diff --git a/doc/encoders.texi b/doc/encoders.texi > index e23b6b3..2dc5cd4 100644 > --- a/doc/encoders.texi > +++ b/doc/encoders.texi > @@ -3091,6 +3091,14 @@ Include HDR metadata if the input frames have it > messages). > @end table > > +@item tile_rows > +Selects how many rows of tiles to encode with. For example, 4 tile rows would > +be requested by setting the tile_rows option to 4. > + > +@item tile_cols > +Selects how many columns of tiles to encode with. For example, 5 tile columns > +would be requested by setting the tile_cols option to 5. > + > @end table > > @item mjpeg_vaapi > diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c > index 97dc5a7..457e3d9 100644 > --- a/libavcodec/vaapi_encode_h265.c > +++ b/libavcodec/vaapi_encode_h265.c > @@ -63,6 +63,9 @@ typedef struct VAAPIEncodeH265Context { > int level; > int sei; > > +int trows; > +int tcols; > + > // Derived settings. > int fixed_qp_idr; > int fixed_qp_p; > @@ -345,7 +348,7 @@ static int > vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) > > level = ff_h265_guess_level(ptl, avctx->bit_rate, > ctx->surface_width, ctx->surface_height, > -ctx->nb_slices, 1, 1, > +ctx->nb_slices, ctx->tile_rows, > ctx->tile_cols, > (ctx->b_per_p > 0) + 1); > if (level) { > av_log(avctx, AV_LOG_VERBOSE, "Using level %s.\n", level->name); > @@ -558,6 +561,20 @@ static int > vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) > > pps->pps_loop_filter_across_slices_enabled_flag = 1; > > +if (ctx->tile_rows && ctx->tile_cols) { > +pps->tiles_enabled_flag = 1; > +pps->uniform_spacing_flag = 1; > + > +pps->num_tile_rows_minus1 = ctx->tile_rows - 1; > +pps->num_tile_columns_minus1= ctx->tile_cols - 1; > + > +pps->loop_filter_across_tiles_enabled_flag = 1; > + > +for (i = 0; i <= pps->num_tile_rows_minus1; i++) > +pps->row_height_minus1[i] = ctx->row_height[i] - 1; > +for (i = 0; i <= pps->num_tile_columns_minus1; i++) > +pps->column_width_minus1[i] = ctx->col_width[i] - 1; > +} > > // Fill VAAPI parameter buffers. > > @@ -666,6 +683,13 @@ static int > vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) > }, > }; > > +if (pps->tiles_enabled_flag) { > +for (i = 0; i <= vpic->num_tile_rows_minus1; i++) > +vpic->row_height_minus1[i] = pps->row_height_minus1[i]; > +for (i = 0; i <= vpic->num_tile_columns_minus1; i++) > +vpic->column_width_minus1[i] = pps->column_width_minus1[i]; > +} > + > return 0; > } > > @@ -1181,6 +1205,11 @@ static av_cold int > vaapi_encode_h265_init(AVCodecContext *avctx) > if (priv->qp > 0) > ctx->explicit_qp = priv->qp; > > +if (priv->trows && priv->tcols) { > +ctx->tile_rows = priv->trows; > +ctx->tile_cols = priv->tcols; > +} > + > return ff_vaapi_encode_init(avctx); > } > > @@ -1257,6 +1286,11 @@ static const AVOption vaapi_encode_h265_options[] = { >{ .i64 = SEI_MASTERING_DISPLAY | SEI_CONTENT_LIGHT_LEVEL }, >INT_MIN, INT_MAX, FLAGS, "sei" }, > > +{ "tile_rows", "Number of rows for tile encoding", > + OFFSET(trows), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS }, > +{ "tile_cols", "Number of cols for tile encoding", > + OFFSET(tcols), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS }, > + > { NULL }, > }; > > -- As my viewpoint, -tiles 3x2 (rows x cols) more naturally ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-devel] [PATCH 3/3] lavc/vaapi_encode_h265: add h265 tile encoding support
Default to enable uniform_spacing_flag. Guess level by the tile rows/cols. Supported for ICL+ platforms. Also add documentations. To encode with 4 rows 2 columns: ffmpeg ... -c:v hevc_vaapi -tile_rows 4 -tile_cols 2 ... Signed-off-by: Linjie Fu --- doc/encoders.texi | 8 libavcodec/vaapi_encode_h265.c | 36 +++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/doc/encoders.texi b/doc/encoders.texi index e23b6b3..2dc5cd4 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -3091,6 +3091,14 @@ Include HDR metadata if the input frames have it messages). @end table +@item tile_rows +Selects how many rows of tiles to encode with. For example, 4 tile rows would +be requested by setting the tile_rows option to 4. + +@item tile_cols +Selects how many columns of tiles to encode with. For example, 5 tile columns +would be requested by setting the tile_cols option to 5. + @end table @item mjpeg_vaapi diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c index 97dc5a7..457e3d9 100644 --- a/libavcodec/vaapi_encode_h265.c +++ b/libavcodec/vaapi_encode_h265.c @@ -63,6 +63,9 @@ typedef struct VAAPIEncodeH265Context { int level; int sei; +int trows; +int tcols; + // Derived settings. int fixed_qp_idr; int fixed_qp_p; @@ -345,7 +348,7 @@ static int vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) level = ff_h265_guess_level(ptl, avctx->bit_rate, ctx->surface_width, ctx->surface_height, -ctx->nb_slices, 1, 1, +ctx->nb_slices, ctx->tile_rows, ctx->tile_cols, (ctx->b_per_p > 0) + 1); if (level) { av_log(avctx, AV_LOG_VERBOSE, "Using level %s.\n", level->name); @@ -558,6 +561,20 @@ static int vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) pps->pps_loop_filter_across_slices_enabled_flag = 1; +if (ctx->tile_rows && ctx->tile_cols) { +pps->tiles_enabled_flag = 1; +pps->uniform_spacing_flag = 1; + +pps->num_tile_rows_minus1 = ctx->tile_rows - 1; +pps->num_tile_columns_minus1= ctx->tile_cols - 1; + +pps->loop_filter_across_tiles_enabled_flag = 1; + +for (i = 0; i <= pps->num_tile_rows_minus1; i++) +pps->row_height_minus1[i] = ctx->row_height[i] - 1; +for (i = 0; i <= pps->num_tile_columns_minus1; i++) +pps->column_width_minus1[i] = ctx->col_width[i] - 1; +} // Fill VAAPI parameter buffers. @@ -666,6 +683,13 @@ static int vaapi_encode_h265_init_sequence_params(AVCodecContext *avctx) }, }; +if (pps->tiles_enabled_flag) { +for (i = 0; i <= vpic->num_tile_rows_minus1; i++) +vpic->row_height_minus1[i] = pps->row_height_minus1[i]; +for (i = 0; i <= vpic->num_tile_columns_minus1; i++) +vpic->column_width_minus1[i] = pps->column_width_minus1[i]; +} + return 0; } @@ -1181,6 +1205,11 @@ static av_cold int vaapi_encode_h265_init(AVCodecContext *avctx) if (priv->qp > 0) ctx->explicit_qp = priv->qp; +if (priv->trows && priv->tcols) { +ctx->tile_rows = priv->trows; +ctx->tile_cols = priv->tcols; +} + return ff_vaapi_encode_init(avctx); } @@ -1257,6 +1286,11 @@ static const AVOption vaapi_encode_h265_options[] = { { .i64 = SEI_MASTERING_DISPLAY | SEI_CONTENT_LIGHT_LEVEL }, INT_MIN, INT_MAX, FLAGS, "sei" }, +{ "tile_rows", "Number of rows for tile encoding", + OFFSET(trows), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS }, +{ "tile_cols", "Number of cols for tile encoding", + OFFSET(tcols), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS }, + { NULL }, }; -- 2.7.4 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".