Remove special ANS initialization handling Change-Id: I5d5a93b27a42d591ff41ff23c007fc2954d2f9a7
diff --git a/aom_dsp/bitwriter.h b/aom_dsp/bitwriter.h index 68bc1c8..99f58ae 100644 --- a/aom_dsp/bitwriter.h +++ b/aom_dsp/bitwriter.h
@@ -62,9 +62,8 @@ static INLINE void aom_start_encode(aom_writer *bc, uint8_t *buffer) { #if CONFIG_ANS - (void)bc; - (void)buffer; - assert(0 && "buf_ans requires a more complicated startup procedure"); + aom_buf_ans_alloc(bc, /* error context*/ NULL); + buf_ans_write_init(bc, buffer); #else aom_daala_start_encode(bc, buffer); #endif @@ -72,8 +71,8 @@ static INLINE void aom_stop_encode(aom_writer *bc) { #if CONFIG_ANS - (void)bc; - assert(0 && "buf_ans requires a more complicated shutdown procedure"); + aom_buf_ans_flush(bc); + bc->pos = buf_ans_write_end(bc); #else aom_daala_stop_encode(bc); #endif
diff --git a/aom_dsp/buf_ans.c b/aom_dsp/buf_ans.c index 8fe1ff7..f7703df 100644 --- a/aom_dsp/buf_ans.c +++ b/aom_dsp/buf_ans.c
@@ -16,9 +16,8 @@ #include "aom/internal/aom_codec_internal.h" void aom_buf_ans_alloc(struct BufAnsCoder *c, - struct aom_internal_error_info *error, int size) { + struct aom_internal_error_info *error) { c->error = error; - c->size = size; assert(c->size > 1); AOM_CHECK_MEM_ERROR(error, c->buf, aom_malloc(c->size * sizeof(*c->buf))); // Initialize to overfull to trigger the assert in write.
diff --git a/aom_dsp/buf_ans.h b/aom_dsp/buf_ans.h index 0768506..f84ff3a 100644 --- a/aom_dsp/buf_ans.h +++ b/aom_dsp/buf_ans.h
@@ -46,6 +46,7 @@ #if ANS_MAX_SYMBOLS int window_size; #endif + int pos; // Dummy variable to store the output buffer after closing }; // Allocate a buffered ANS coder to store size symbols. @@ -54,7 +55,7 @@ // When ANS_MAX_SYMBOLS is turned off, size is merely an initial hint and the // buffer will grow on demand void aom_buf_ans_alloc(struct BufAnsCoder *c, - struct aom_internal_error_info *error, int hint); + struct aom_internal_error_info *error); void aom_buf_ans_free(struct BufAnsCoder *c);
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c index c86ef3a..4235c49 100644 --- a/av1/encoder/bitstream.c +++ b/av1/encoder/bitstream.c
@@ -40,9 +40,6 @@ #include "av1/common/seg_common.h" #include "av1/common/tile_common.h" -#if CONFIG_ANS -#include "aom_dsp/buf_ans.h" -#endif // CONFIG_ANS #if CONFIG_LV_MAP #include "av1/encoder/encodetxb.h" #endif // CONFIG_LV_MAP @@ -3780,11 +3777,7 @@ unsigned int *max_tile_size, unsigned int *max_tile_col_size) { const AV1_COMMON *const cm = &cpi->common; -#if CONFIG_ANS - struct BufAnsCoder *buf_ans = &cpi->buf_ans; -#else aom_writer mode_bc; -#endif // CONFIG_ANS int tile_row, tile_col; TOKENEXTRA *(*const tok_buffers)[MAX_TILE_COLS] = cpi->tile_tok; TileBufferEnc(*const tile_buffers)[MAX_TILE_COLS] = cpi->tile_buffers; @@ -3857,19 +3850,14 @@ cpi->td.mb.pvq_q = &this_tile->pvq_q; cpi->td.mb.daala_enc.state.adapt = &this_tile->tctx.pvq_context; #endif // CONFIG_PVQ -#if !CONFIG_ANS +#if CONFIG_ANS + mode_bc.size = 1 << cpi->common.ans_window_size_log2; +#endif aom_start_encode(&mode_bc, buf->data + data_offset); write_modes(cpi, &tile_info, &mode_bc, &tok, tok_end); assert(tok == tok_end); aom_stop_encode(&mode_bc); tile_size = mode_bc.pos; -#else - buf_ans_write_init(buf_ans, buf->data + data_offset); - write_modes(cpi, &tile_info, buf_ans, &tok, tok_end); - assert(tok == tok_end); - aom_buf_ans_flush(buf_ans); - tile_size = buf_ans_write_end(buf_ans); -#endif // !CONFIG_ANS #if CONFIG_PVQ cpi->td.mb.pvq_q = NULL; #endif @@ -4033,22 +4021,17 @@ cpi->td.mb.daala_enc.state.adapt = &this_tile->tctx.pvq_context; #endif // CONFIG_PVQ #if CONFIG_ANS - buf_ans_write_init(buf_ans, dst + total_size); - write_modes(cpi, &tile_info, buf_ans, &tok, tok_end); - assert(tok == tok_end); - aom_buf_ans_flush(buf_ans); - tile_size = buf_ans_write_end(buf_ans); -#else - aom_start_encode(&mode_bc, dst + total_size); - write_modes(cpi, &tile_info, &mode_bc, &tok, tok_end); + mode_bc.size = 1 << cpi->common.ans_window_size_log2; +#endif // CONFIG_ANS + aom_start_encode(&mode_bc, dst + total_size); + write_modes(cpi, &tile_info, &mode_bc, &tok, tok_end); #if !CONFIG_LV_MAP #if !CONFIG_PVQ - assert(tok == tok_end); + assert(tok == tok_end); #endif // !CONFIG_PVQ #endif // !CONFIG_LV_MAP - aom_stop_encode(&mode_bc); - tile_size = mode_bc.pos; -#endif // CONFIG_ANS + aom_stop_encode(&mode_bc); + tile_size = mode_bc.pos; #if CONFIG_PVQ cpi->td.mb.pvq_q = NULL; #endif @@ -4635,15 +4618,12 @@ (void)i; (void)fc; -#if CONFIG_ANS - int header_size; - header_bc = &cpi->buf_ans; - buf_ans_write_init(header_bc, data); -#else aom_writer real_header_bc; header_bc = &real_header_bc; - aom_start_encode(header_bc, data); +#if CONFIG_ANS + header_bc->size = 1 << cpi->common.ans_window_size_log2; #endif + aom_start_encode(header_bc, data); #if CONFIG_LOOP_RESTORATION encode_restoration(cm, header_bc); @@ -4788,16 +4768,9 @@ write_global_motion(cpi, header_bc); #endif // CONFIG_GLOBAL_MOTION } -#if CONFIG_ANS - aom_buf_ans_flush(header_bc); - header_size = buf_ans_write_end(header_bc); - assert(header_size <= 0xffff); - return header_size; -#else aom_stop_encode(header_bc); assert(header_bc->pos <= 0xffff); return header_bc->pos; -#endif // CONFIG_ANS } static int choose_size_bytes(uint32_t size, int spare_msbs) {
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c index a9fac7e..6ddefe2 100644 --- a/av1/encoder/encoder.c +++ b/av1/encoder/encoder.c
@@ -835,9 +835,6 @@ unsigned int tokens = get_token_alloc(cm->mb_rows, cm->mb_cols); CHECK_MEM_ERROR(cm, cpi->tile_tok[0][0], aom_calloc(tokens, sizeof(*cpi->tile_tok[0][0]))); -#if CONFIG_ANS && !ANS_MAX_SYMBOLS - aom_buf_ans_alloc(&cpi->buf_ans, &cm->error, (int)tokens); -#endif // CONFIG_ANS } av1_setup_pc_tree(&cpi->common, &cpi->td); @@ -2390,14 +2387,8 @@ #if CONFIG_HIGHBITDEPTH highbd_set_var_fns(cpi); #endif - #if CONFIG_ANS && ANS_MAX_SYMBOLS cpi->common.ans_window_size_log2 = cpi->oxcf.ans_window_size_log2; - if (cpi->buf_ans.size != (1 << cpi->common.ans_window_size_log2)) { - aom_buf_ans_free(&cpi->buf_ans); - aom_buf_ans_alloc(&cpi->buf_ans, &cpi->common.error, - 1 << cpi->common.ans_window_size_log2); - } #endif // CONFIG_ANS && ANS_MAX_SYMBOLS }
diff --git a/test/ans_test.cc b/test/ans_test.cc index a553a9e..fd460f4 100644 --- a/test/ans_test.cc +++ b/test/ans_test.cc
@@ -51,7 +51,8 @@ bool check_rabs(const PvVec &pv_vec, uint8_t *buf) { BufAnsCoder a; - aom_buf_ans_alloc(&a, NULL, kBufAnsSize); + a.size = kBufAnsSize; + aom_buf_ans_alloc(&a, NULL); buf_ans_write_init(&a, buf); std::clock_t start = std::clock(); @@ -125,7 +126,8 @@ bool check_rans(const std::vector<int> &sym_vec, const rans_sym *const tab, uint8_t *buf) { BufAnsCoder a; - aom_buf_ans_alloc(&a, NULL, kBufAnsSize); + a.size = kBufAnsSize; + aom_buf_ans_alloc(&a, NULL); buf_ans_write_init(&a, buf); aom_cdf_prob dec_tab[kRansSymbols]; rans_build_dec_tab(tab, dec_tab);