
This patch adds bit account infrastructure to the bit reader API. When configured with --enable-accounting, every bit reader API function records the number of bits necessary to decoding a symbol. Accounting symbol entries are collected in global accounting data structure, that can be used to understand exactly where bits are spent (http://aomanalyzer.org). The data structure is cleared and reused each frame to reduce memory usage. When configured without --enable-accounting, bit accounting does not incur any runtime overhead. All aom_read_xxx functions now have an additional string parameter that specifies the symbol name. By default, the ACCT_STR macro is used (which expands to __func__). For more precise accounting, these should be replaced with more descriptive names. Change-Id: Ia2e1343cb842c9391b12b77272587dfbe307a56d
40 lines
1.3 KiB
C
40 lines
1.3 KiB
C
/*
|
|
* Copyright (c) 2016, Alliance for Open Media. All rights reserved
|
|
*
|
|
* This source code is subject to the terms of the BSD 2 Clause License and
|
|
* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
|
|
* was not distributed with this source code in the LICENSE file, you can
|
|
* obtain it at www.aomedia.org/license/software. If the Alliance for Open
|
|
* Media Patent License 1.0 was not distributed with this source code in the
|
|
* PATENTS file, you can obtain it at www.aomedia.org/license/patent.
|
|
*/
|
|
|
|
#ifndef AV1_DECODER_DSUBEXP_H_
|
|
#define AV1_DECODER_DSUBEXP_H_
|
|
|
|
#include "aom_dsp/bitreader.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#if CONFIG_ACCOUNTING
|
|
#define av1_diff_update_prob(r, p, str) av1_diff_update_prob_(r, p, str)
|
|
#else
|
|
#define av1_diff_update_prob(r, p, str) av1_diff_update_prob_(r, p)
|
|
#endif
|
|
|
|
void av1_diff_update_prob_(aom_reader *r, aom_prob *p ACCT_STR_PARAM);
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
#if CONFIG_GLOBAL_MOTION
|
|
// mag_bits is number of bits for magnitude. The alphabet is of size
|
|
// 2 * 2^mag_bits + 1, symmetric around 0, where one bit is used to
|
|
// indicate 0 or non-zero, mag_bits bits are used to indicate magnitide
|
|
// and 1 more bit for the sign if non-zero.
|
|
int aom_read_primitive_symmetric(aom_reader *r, unsigned int mag_bits);
|
|
#endif // CONFIG_GLOBAL_MOTION
|
|
#endif // AV1_DECODER_DSUBEXP_H_
|