• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2016, Alliance for Open Media. All rights reserved
3  *
4  * This source code is subject to the terms of the BSD 2 Clause License and
5  * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6  * was not distributed with this source code in the LICENSE file, you can
7  * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8  * Media Patent License 1.0 was not distributed with this source code in the
9  * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10  */
11 #ifndef AOM_AV1_DECODER_ACCOUNTING_H_
12 #define AOM_AV1_DECODER_ACCOUNTING_H_
13 #include <stdlib.h>
14 #include "aom/aomdx.h"
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif  // __cplusplus
19 
20 #define AOM_ACCOUNTING_HASH_SIZE (1021)
21 
22 /* Max number of entries for symbol types in the dictionary (increase as
23    necessary). */
24 #define MAX_SYMBOL_TYPES (256)
25 
26 /*The resolution of fractional-precision bit usage measurements, i.e.,
27    3 => 1/8th bits.*/
28 #define AOM_ACCT_BITRES (3)
29 
30 typedef struct {
31   int16_t x;
32   int16_t y;
33 } AccountingSymbolContext;
34 
35 typedef struct {
36   AccountingSymbolContext context;
37   uint32_t id;
38   /** Number of bits in units of 1/8 bit. */
39   uint32_t bits;
40   uint32_t samples;
41 } AccountingSymbol;
42 
43 /** Dictionary for translating strings into id. */
44 typedef struct {
45   char *(strs[MAX_SYMBOL_TYPES]);
46   int num_strs;
47 } AccountingDictionary;
48 
49 typedef struct {
50   /** All recorded symbols decoded. */
51   AccountingSymbol *syms;
52   /** Number of syntax actually recorded. */
53   int num_syms;
54   /** Raw symbol decoding calls for non-binary values. */
55   int num_multi_syms;
56   /** Raw binary symbol decoding calls. */
57   int num_binary_syms;
58   /** Dictionary for translating strings into id. */
59   AccountingDictionary dictionary;
60 } AccountingSymbols;
61 
62 struct Accounting {
63   AccountingSymbols syms;
64   /** Size allocated for symbols (not all may be used). */
65   int num_syms_allocated;
66   int16_t hash_dictionary[AOM_ACCOUNTING_HASH_SIZE];
67   AccountingSymbolContext context;
68   uint32_t last_tell_frac;
69 };
70 
71 void aom_accounting_init(Accounting *accounting);
72 void aom_accounting_reset(Accounting *accounting);
73 void aom_accounting_clear(Accounting *accounting);
74 void aom_accounting_set_context(Accounting *accounting, int16_t x, int16_t y);
75 int aom_accounting_dictionary_lookup(Accounting *accounting, const char *str);
76 void aom_accounting_record(Accounting *accounting, const char *str,
77                            uint32_t bits);
78 void aom_accounting_dump(Accounting *accounting);
79 #ifdef __cplusplus
80 }  // extern "C"
81 #endif  // __cplusplus
82 #endif  // AOM_AV1_DECODER_ACCOUNTING_H_
83