This reverts commit 489c5db0791f39518775b12eef6d48276c17f96f. Treating EQUAL_MULTI_ROWS in the same way as the arbitrary-size cases is just wrong. Consider 9 rows, 4 slices - we pick 4 slices with sizes { 3, 2, 2, 2 }, which EQUAL_MULTI_ROWS does not allow. It isn't possible to split the frame into 4 slices at all with the EQUAL_MULTI_ROWS structure - the closest options are 3 slices with sizes { 3, 3, 3 } or 5 slices with sizes { 2, 2, 2, 2, 1 }.
Showing the changes to libavcodec/vaapi_encode.c (1 of 1 file). Show all
Unified · Split
| @@ -1908,9 +1908,6 @@ static av_cold int vaapi_encode_init_row_slice_structure(AVCodecContext *avctx, · 1907 unmodified lines | |||
| 1908 | req_slices = avctx->slices; | 1908 | req_slices = avctx->slices; |
| 1909 | } | 1909 | } |
| 1910 | if (slice_structure & VA_ENC_SLICE_STRUCTURE_ARBITRARY_ROWS || | 1910 | if (slice_structure & VA_ENC_SLICE_STRUCTURE_ARBITRARY_ROWS || |
| 1911 | #if VA_CHECK_VERSION(1, 8, 0) | ||
| 1912 | slice_structure & VA_ENC_SLICE_STRUCTURE_EQUAL_MULTI_ROWS || | ||
| 1913 | #endif | ||
| 1914 | slice_structure & VA_ENC_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS) { | 1911 | slice_structure & VA_ENC_SLICE_STRUCTURE_ARBITRARY_MACROBLOCKS) { |
| 1915 | ctx->nb_slices = req_slices; | 1912 | ctx->nb_slices = req_slices; |
| 1916 | ctx->slice_size = ctx->slice_block_rows / ctx->nb_slices; | 1913 | ctx->slice_size = ctx->slice_block_rows / ctx->nb_slices; |