80 строки
2.4 KiB
C
80 строки
2.4 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 AOM_ACCOUNTING_H_
|
|
#define AOM_ACCOUNTING_H_
|
|
#include <stdlib.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif // __cplusplus
|
|
|
|
#define AOM_ACCOUNTING_HASH_SIZE (1021)
|
|
|
|
/* Max number of entries for symbol types in the dictionary (increase as
|
|
necessary). */
|
|
#define MAX_SYMBOL_TYPES (256)
|
|
|
|
/*The resolution of fractional-precision bit usage measurements, i.e.,
|
|
3 => 1/8th bits.*/
|
|
#define AOM_ACCT_BITRES (3)
|
|
|
|
typedef struct {
|
|
int16_t x;
|
|
int16_t y;
|
|
} AccountingSymbolContext;
|
|
|
|
typedef struct {
|
|
AccountingSymbolContext context;
|
|
uint32_t id;
|
|
/** Number of bits in units of 1/8 bit. */
|
|
uint32_t bits;
|
|
uint32_t samples;
|
|
} AccountingSymbol;
|
|
|
|
/** Dictionary for translating strings into id. */
|
|
typedef struct {
|
|
char *(strs[MAX_SYMBOL_TYPES]);
|
|
int num_strs;
|
|
} AccountingDictionary;
|
|
|
|
typedef struct {
|
|
/** All recorded symbols decoded. */
|
|
AccountingSymbol *syms;
|
|
/** Number of symbols actually recorded. */
|
|
int num_syms;
|
|
/** Dictionary for translating strings into id. */
|
|
AccountingDictionary dictionary;
|
|
} AccountingSymbols;
|
|
|
|
typedef struct Accounting Accounting;
|
|
|
|
struct Accounting {
|
|
AccountingSymbols syms;
|
|
/** Size allocated for symbols (not all may be used). */
|
|
int num_syms_allocated;
|
|
int16_t hash_dictionary[AOM_ACCOUNTING_HASH_SIZE];
|
|
AccountingSymbolContext context;
|
|
uint32_t last_tell_frac;
|
|
};
|
|
|
|
void aom_accounting_init(Accounting *accounting);
|
|
void aom_accounting_reset(Accounting *accounting);
|
|
void aom_accounting_clear(Accounting *accounting);
|
|
void aom_accounting_set_context(Accounting *accounting, int16_t x, int16_t y);
|
|
int aom_accounting_dictionary_lookup(Accounting *accounting, const char *str);
|
|
void aom_accounting_record(Accounting *accounting, const char *str,
|
|
uint32_t bits);
|
|
void aom_accounting_dump(Accounting *accounting);
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif // __cplusplus
|
|
#endif // AOM_ACCOUNTING_H_
|