Commit e62fea12cb for aom

commit e62fea12cb4e2b09ce134781c67ddbd10b5bd161
Author: Wan-Teh Chang <wtc@google.com>
Date:   Thu May 21 15:14:56 2026 -0700

    Remove cpi->available_bs_size

    Instead, pass dst_size along with dst to init_tile_pack_bs_params(), the
    consumer of cpi->available_bs_size. dst_size is more accurate than
    cpi->available_bs_size and it is easier to verify dst_size is the size
    of the dst buffer.

    Bug: oss-fuzz:514006304
    Change-Id: Ifeccc016b81f583a3d2e130114871cd00f786837

diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 178a84a7c7..2d6890a678 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -4127,7 +4127,7 @@ static int calc_pack_bs_mt_workers(const TileDataEnc *tile_data, int num_tiles,
 }

 static inline uint32_t pack_tiles_in_tg_obus(
-    AV1_COMP *const cpi, uint8_t *const dst,
+    AV1_COMP *const cpi, uint8_t *const dst, size_t dst_size,
     struct aom_write_bit_buffer *saved_wb, uint8_t obu_extension_header,
     const FrameHeaderInfo *fh_info, int *const largest_tile_id) {
   const CommonTileParams *const tiles = &cpi->common.tiles;
@@ -4144,9 +4144,10 @@ static inline uint32_t pack_tiles_in_tg_obus(
       cpi->mt_info.pack_bs_mt_enabled);

   if (num_workers > 1) {
-    av1_write_tile_obu_mt(cpi, dst, &total_size, saved_wb, obu_extension_header,
-                          fh_info, largest_tile_id, &max_tile_size,
-                          &obu_header_size, &tile_data_start, num_workers);
+    av1_write_tile_obu_mt(cpi, dst, dst_size, &total_size, saved_wb,
+                          obu_extension_header, fh_info, largest_tile_id,
+                          &max_tile_size, &obu_header_size, &tile_data_start,
+                          num_workers);
   } else {
     write_tile_obu(cpi, dst, &total_size, saved_wb, obu_extension_header,
                    fh_info, largest_tile_id, &max_tile_size, &obu_header_size,
@@ -4165,8 +4166,6 @@ static uint32_t write_tiles_in_tg_obus(AV1_COMP *const cpi, uint8_t *const dst,
                                        uint8_t obu_extension_header,
                                        const FrameHeaderInfo *fh_info,
                                        int *const largest_tile_id) {
-  // TODO: bug 42302568 - Use dst_size.
-  (void)dst_size;
   AV1_COMMON *const cm = &cpi->common;
   const CommonTileParams *const tiles = &cm->tiles;
   *largest_tile_id = 0;
@@ -4187,8 +4186,8 @@ static uint32_t write_tiles_in_tg_obus(AV1_COMP *const cpi, uint8_t *const dst,
     return pack_large_scale_tiles_in_tg_obus(
         cpi, dst, saved_wb, obu_extension_header, largest_tile_id);

-  return pack_tiles_in_tg_obus(cpi, dst, saved_wb, obu_extension_header,
-                               fh_info, largest_tile_id);
+  return pack_tiles_in_tg_obus(cpi, dst, dst_size, saved_wb,
+                               obu_extension_header, fh_info, largest_tile_id);
 }

 // Returns the number of bytes written on success. Returns 0 on failure.
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index d6151ddaaa..07ef75b615 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -5346,7 +5346,6 @@ int av1_get_compressed_data(AV1_COMP *cpi, AV1_COMP_DATA *const cpi_data) {
   cpi->is_dropped_frame = false;
   cm->showable_frame = 0;
   cpi_data->frame_size = 0;
-  cpi->available_bs_size = cpi_data->cx_data_sz;
 #if CONFIG_INTERNAL_STATS
   struct aom_usec_timer cmptimer;
   aom_usec_timer_start(&cmptimer);
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 55c7e913bb..dd94a24458 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -3518,11 +3518,6 @@ typedef struct AV1_COMP {
    */
   int sb_counter;

-  /*!
-   * Available bitstream buffer size in bytes
-   */
-  size_t available_bs_size;
-
   /*!
    * The controller of the external partition model.
    * It is used to do partition type selection based on external models.
diff --git a/av1/encoder/ethread.c b/av1/encoder/ethread.c
index 7585162a8d..71cd41323b 100644
--- a/av1/encoder/ethread.c
+++ b/av1/encoder/ethread.c
@@ -2946,6 +2946,7 @@ static inline size_t get_bs_chunk_size(int tg_or_tile_size,

 // Initializes params required for pack bitstream tile.
 static void init_tile_pack_bs_params(AV1_COMP *const cpi, uint8_t *const dst,
+                                     size_t dst_size,
                                      struct aom_write_bit_buffer *saved_wb,
                                      PackBSParams *const pack_bs_params_arr,
                                      uint8_t obu_extn_header) {
@@ -2998,9 +2999,9 @@ static void init_tile_pack_bs_params(AV1_COMP *const cpi, uint8_t *const dst,
     }
   }

-  assert(cpi->available_bs_size > 0);
+  assert(dst_size > 0);
   size_t tg_buf_size[MAX_TILES] = { 0 };
-  size_t max_buf_size = cpi->available_bs_size;
+  size_t max_buf_size = dst_size;
   size_t remain_buf_size = max_buf_size;
   const int frame_size_mi = cm->mi_params.mi_rows * cm->mi_params.mi_cols;

@@ -3224,12 +3225,15 @@ static void accumulate_pack_bs_data(
   }
 }

-void av1_write_tile_obu_mt(
-    AV1_COMP *const cpi, uint8_t *const dst, uint32_t *total_size,
-    struct aom_write_bit_buffer *saved_wb, uint8_t obu_extn_header,
-    const FrameHeaderInfo *fh_info, int *const largest_tile_id,
-    unsigned int *max_tile_size, uint32_t *const obu_header_size,
-    uint8_t **tile_data_start, const int num_workers) {
+void av1_write_tile_obu_mt(AV1_COMP *const cpi, uint8_t *const dst,
+                           size_t dst_size, uint32_t *total_size,
+                           struct aom_write_bit_buffer *saved_wb,
+                           uint8_t obu_extn_header,
+                           const FrameHeaderInfo *fh_info,
+                           int *const largest_tile_id,
+                           unsigned int *max_tile_size,
+                           uint32_t *const obu_header_size,
+                           uint8_t **tile_data_start, const int num_workers) {
   MultiThreadInfo *const mt_info = &cpi->mt_info;

   PackBSParams pack_bs_params[MAX_TILES];
@@ -3238,7 +3242,8 @@ void av1_write_tile_obu_mt(
   for (int tile_idx = 0; tile_idx < MAX_TILES; tile_idx++)
     pack_bs_params[tile_idx].total_size = &tile_size[tile_idx];

-  init_tile_pack_bs_params(cpi, dst, saved_wb, pack_bs_params, obu_extn_header);
+  init_tile_pack_bs_params(cpi, dst, dst_size, saved_wb, pack_bs_params,
+                           obu_extn_header);
   prepare_pack_bs_workers(cpi, pack_bs_params, pack_bs_worker_hook,
                           num_workers);
   launch_workers(mt_info, num_workers);
diff --git a/av1/encoder/ethread.h b/av1/encoder/ethread.h
index 99d8c70374..76cbd8eddd 100644
--- a/av1/encoder/ethread.h
+++ b/av1/encoder/ethread.h
@@ -111,12 +111,15 @@ void av1_cdef_mse_calc_frame_mt(AV1_COMP *cpi);

 void av1_cdef_mt_dealloc(AV1CdefSync *cdef_sync);

-void av1_write_tile_obu_mt(
-    AV1_COMP *const cpi, uint8_t *const dst, uint32_t *total_size,
-    struct aom_write_bit_buffer *saved_wb, uint8_t obu_extn_header,
-    const FrameHeaderInfo *fh_info, int *const largest_tile_id,
-    unsigned int *max_tile_size, uint32_t *const obu_header_size,
-    uint8_t **tile_data_start, const int num_workers);
+void av1_write_tile_obu_mt(AV1_COMP *const cpi, uint8_t *const dst,
+                           size_t dst_size, uint32_t *total_size,
+                           struct aom_write_bit_buffer *saved_wb,
+                           uint8_t obu_extn_header,
+                           const FrameHeaderInfo *fh_info,
+                           int *const largest_tile_id,
+                           unsigned int *max_tile_size,
+                           uint32_t *const obu_header_size,
+                           uint8_t **tile_data_start, const int num_workers);

 int av1_compute_num_fp_contexts(AV1_PRIMARY *ppi, AV1EncoderConfig *oxcf);