avcodec/libaomenc: add row-mt option

Default to disable, same as aomenc.

Fixes ticket #7598

Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
James Almer 2018-12-08 20:14:12 -03:00
parent 8be56ee211
commit d12d4d4515
2 changed files with 15 additions and 3 deletions

View File

@ -1411,9 +1411,9 @@ to unconstrained variable bitrate.
@item threads @item threads
Set the number of threads to use while encoding. This may require the Set the number of threads to use while encoding. This may require the
@option{tiles} option to also be set to actually use the specified @option{tiles} or @option{row-mt} options to also be set to actually
number of threads fully. Defaults to the number of hardware threads use the specified number of threads fully. Defaults to the number of
supported by the host machine. hardware threads supported by the host machine.
@item profile @item profile
Set the encoding profile. Defaults to using the profile which matches Set the encoding profile. Defaults to using the profile which matches
@ -1477,6 +1477,9 @@ number of tiles required by the size of the input video (this is 1x1
Set the number of tiles as log2 of the number of tile rows and columns. Set the number of tiles as log2 of the number of tile rows and columns.
Provided for compatibility with libvpx/VP9. Provided for compatibility with libvpx/VP9.
@item row-mt (Requires libaom >= 1.0.0-759-g90a15f4f2)
Enable row based multi-threading. Disabled by default.
@end table @end table
@section libkvazaar @section libkvazaar

View File

@ -78,6 +78,7 @@ typedef struct AOMEncoderContext {
int tile_cols_log2, tile_rows_log2; int tile_cols_log2, tile_rows_log2;
aom_superblock_size_t superblock_size; aom_superblock_size_t superblock_size;
int uniform_tiles; int uniform_tiles;
int row_mt;
} AOMContext; } AOMContext;
static const char *const ctlidstr[] = { static const char *const ctlidstr[] = {
@ -92,6 +93,9 @@ static const char *const ctlidstr[] = {
[AV1E_SET_SUPERBLOCK_SIZE] = "AV1E_SET_SUPERBLOCK_SIZE", [AV1E_SET_SUPERBLOCK_SIZE] = "AV1E_SET_SUPERBLOCK_SIZE",
[AV1E_SET_TILE_COLUMNS] = "AV1E_SET_TILE_COLUMNS", [AV1E_SET_TILE_COLUMNS] = "AV1E_SET_TILE_COLUMNS",
[AV1E_SET_TILE_ROWS] = "AV1E_SET_TILE_ROWS", [AV1E_SET_TILE_ROWS] = "AV1E_SET_TILE_ROWS",
#ifdef AOM_CTRL_AV1E_SET_ROW_MT
[AV1E_SET_ROW_MT] = "AV1E_SET_ROW_MT",
#endif
}; };
static av_cold void log_encoder_error(AVCodecContext *avctx, const char *desc) static av_cold void log_encoder_error(AVCodecContext *avctx, const char *desc)
@ -650,6 +654,10 @@ static av_cold int aom_init(AVCodecContext *avctx,
codecctl_int(avctx, AV1E_SET_TILE_ROWS, ctx->tile_rows_log2); codecctl_int(avctx, AV1E_SET_TILE_ROWS, ctx->tile_rows_log2);
} }
#ifdef AOM_CTRL_AV1E_SET_ROW_MT
codecctl_int(avctx, AV1E_SET_ROW_MT, ctx->row_mt);
#endif
// provide dummy value to initialize wrapper, values will be updated each _encode() // provide dummy value to initialize wrapper, values will be updated each _encode()
aom_img_wrap(&ctx->rawimg, img_fmt, avctx->width, avctx->height, 1, aom_img_wrap(&ctx->rawimg, img_fmt, avctx->width, avctx->height, 1,
(unsigned char*)1); (unsigned char*)1);
@ -983,6 +991,7 @@ static const AVOption options[] = {
{ "tiles", "Tile columns x rows", OFFSET(tile_cols), AV_OPT_TYPE_IMAGE_SIZE, { .str = NULL }, 0, 0, VE }, { "tiles", "Tile columns x rows", OFFSET(tile_cols), AV_OPT_TYPE_IMAGE_SIZE, { .str = NULL }, 0, 0, VE },
{ "tile-columns", "Log2 of number of tile columns to use", OFFSET(tile_cols_log2), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 6, VE}, { "tile-columns", "Log2 of number of tile columns to use", OFFSET(tile_cols_log2), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 6, VE},
{ "tile-rows", "Log2 of number of tile rows to use", OFFSET(tile_rows_log2), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 6, VE}, { "tile-rows", "Log2 of number of tile rows to use", OFFSET(tile_rows_log2), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 6, VE},
{ "row-mt", "Enable row based multi-threading", OFFSET(row_mt), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, VE},
{ NULL } { NULL }
}; };