Prevent encoder crash caused by row tile dependencies
In multi-thread case, the encoder may crash if using encoder option tile-rows > 0. To prevent that, force tile-rows=0 in this situation. This is a workaround for WebM issue 1095: https://bugs.chromium.org/p/webm/issues/detail?id=1095 The further fix can be done by adding synchronizations after a tile row is encoded. But this will hurt multi-threaded encoder performance. So, it is recommended to use tile-rows=0 while encoding with threads > 1. Change-Id: I656cbcc200f8d0410d09530e7981ad8f32fe7bc9
This commit is contained in:
Родитель
bfc2a7e3a0
Коммит
dc5f7712f2
|
@ -486,7 +486,13 @@ static vpx_codec_err_t set_encoder_config(
|
|||
oxcf->content = extra_cfg->content;
|
||||
|
||||
oxcf->tile_columns = extra_cfg->tile_columns;
|
||||
oxcf->tile_rows = extra_cfg->tile_rows;
|
||||
|
||||
// The dependencies between row tiles cause error in multi-threaded encoding.
|
||||
// For now, it is forced to be 0 in this case.
|
||||
if (oxcf->max_threads > 1 && oxcf->tile_columns > 0)
|
||||
oxcf->tile_rows = 0;
|
||||
else
|
||||
oxcf->tile_rows = extra_cfg->tile_rows;
|
||||
|
||||
oxcf->error_resilient_mode = cfg->g_error_resilient;
|
||||
oxcf->frame_parallel_decoding_mode = extra_cfg->frame_parallel_decoding_mode;
|
||||
|
|
3
vpxenc.c
3
vpxenc.c
|
@ -380,7 +380,8 @@ static const arg_def_t cpu_used_vp9 = ARG_DEF(
|
|||
static const arg_def_t tile_cols = ARG_DEF(
|
||||
NULL, "tile-columns", 1, "Number of tile columns to use, log2");
|
||||
static const arg_def_t tile_rows = ARG_DEF(
|
||||
NULL, "tile-rows", 1, "Number of tile rows to use, log2");
|
||||
NULL, "tile-rows", 1,
|
||||
"Number of tile rows to use, log2 (set to 0 while threads > 1)");
|
||||
static const arg_def_t lossless = ARG_DEF(
|
||||
NULL, "lossless", 1, "Lossless mode (0: false (default), 1: true)");
|
||||
static const arg_def_t frame_parallel_decoding = ARG_DEF(
|
||||
|
|
Загрузка…
Ссылка в новой задаче