[FFmpeg-devel] [PATCH] cbs_av1: Fill tile width/height values when uniform_tile_spacing_flag is set

Mark Thompson sw at jkqxz.net
Sun Aug 23 01:25:32 EEST 2020


They are not explicitly in the bitstream in this case, but it is helpful
to be able to use these values without always needing to check the flag
beforehand.
---
On 22/08/2020 23:01, Mark Thompson wrote:
> On 21/08/2020 06:29, Fei Wang wrote:
>> ...
>> +
>> +    if (s->raw_frame_header.uniform_tile_spacing_flag) {
>> +        mi_cols = 2 * ((s->raw_seq.max_frame_width_minus_1 + 8) >> 3);
>> +        mi_rows = 2 * ((s->raw_seq.max_frame_height_minus_1 + 8) >> 3);
>> +        sb_cols = s->raw_seq.use_128x128_superblock ? ((mi_cols + 31) >> 5)
>> +                                                    : ((mi_cols + 15) >> 4);
>> +        sb_rows = s->raw_seq.use_128x128_superblock ? ((mi_rows + 31) >> 5)
>> +                                                    : ((mi_rows + 15) >> 4);
>> +        tile_width_sb = (sb_cols + (1 << s->raw_frame_header.tile_cols_log2)
>> +                         -1) >> s->raw_frame_header.tile_cols_log2;
>> +        tile_height_sb = (sb_rows + (1 << s->raw_frame_header.tile_rows_log2)
>> +                         -1) >> s->raw_frame_header.tile_rows_log2;
> 
> Maybe cbs read should always fill the width/height_in_sbs arrays so that all the special casing for uniform_spacing_flag in this function isn't needed?  It would be trivial to add it there.

Like this.

  libavcodec/cbs_av1_syntax_template.c | 9 +++++++++
  1 file changed, 9 insertions(+)

diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c
index a315e8868a..2c976a9574 100644
--- a/libavcodec/cbs_av1_syntax_template.c
+++ b/libavcodec/cbs_av1_syntax_template.c
@@ -624,6 +624,15 @@ static int FUNC(tile_info)(CodedBitstreamContext *ctx, RWContext *rw,
              current->tile_rows_log2;
          current->tile_rows = (sb_rows + tile_height_sb - 1) / tile_height_sb;

+        for (i = 0; i < current->tile_cols - 1; i++)
+            infer(width_in_sbs_minus_1[i], tile_width_sb);
+        infer(width_in_sbs_minus_1[i],
+              sb_cols - (current->tile_cols - 1) * tile_width_sb);
+        for (i = 0; i < current->tile_rows - 1; i++)
+            infer(height_in_sbs_minus_1[i], tile_height_sb);
+        infer(height_in_sbs_minus_1[i],
+              sb_rows - (current->tile_rows - 1) * tile_height_sb);
+
      } else {
          int widest_tile_sb, start_sb, size_sb, max_width, max_height;

-- 
2.28.0


More information about the ffmpeg-devel mailing list