Coverage Report

Created: 2025-06-22 08:04

/src/aom/aom_dsp/entenc.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (c) 2001-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
12
#ifndef AOM_AOM_DSP_ENTENC_H_
13
#define AOM_AOM_DSP_ENTENC_H_
14
#include <stddef.h>
15
#include "aom_dsp/entcode.h"
16
#include "aom_util/endian_inl.h"
17
18
#ifdef __cplusplus
19
extern "C" {
20
#endif
21
22
typedef uint64_t od_ec_enc_window;
23
24
typedef struct od_ec_enc od_ec_enc;
25
26
#define OD_MEASURE_EC_OVERHEAD (0)
27
28
/*The entropy encoder context.*/
29
struct od_ec_enc {
30
  /*Buffered output.
31
    This contains only the raw bits until the final call to od_ec_enc_done(),
32
     where all the arithmetic-coded data gets prepended to it.*/
33
  unsigned char *buf;
34
  /*The size of the buffer.*/
35
  uint32_t storage;
36
  /*The offset at which the next entropy-coded byte will be written.*/
37
  uint32_t offs;
38
  /*The low end of the current range.*/
39
  od_ec_enc_window low;
40
  /*The number of values in the current range.*/
41
  uint16_t rng;
42
  /*The number of bits of data in the current value.*/
43
  int16_t cnt;
44
  /*Nonzero if an error occurred.*/
45
  int error;
46
#if OD_MEASURE_EC_OVERHEAD
47
  double entropy;
48
  int nb_symbols;
49
#endif
50
};
51
52
/*See entenc.c for further documentation.*/
53
54
void od_ec_enc_init(od_ec_enc *enc, uint32_t size) OD_ARG_NONNULL(1);
55
void od_ec_enc_reset(od_ec_enc *enc) OD_ARG_NONNULL(1);
56
void od_ec_enc_clear(od_ec_enc *enc) OD_ARG_NONNULL(1);
57
58
void od_ec_encode_bool_q15(od_ec_enc *enc, int val, unsigned f_q15)
59
    OD_ARG_NONNULL(1);
60
void od_ec_encode_cdf_q15(od_ec_enc *enc, int s, const uint16_t *cdf, int nsyms)
61
    OD_ARG_NONNULL(1) OD_ARG_NONNULL(3);
62
63
void od_ec_enc_bits(od_ec_enc *enc, uint32_t fl, unsigned ftb)
64
    OD_ARG_NONNULL(1);
65
66
OD_WARN_UNUSED_RESULT unsigned char *od_ec_enc_done(od_ec_enc *enc,
67
                                                    uint32_t *nbytes)
68
    OD_ARG_NONNULL(1) OD_ARG_NONNULL(2);
69
70
OD_WARN_UNUSED_RESULT int od_ec_enc_tell(const od_ec_enc *enc)
71
    OD_ARG_NONNULL(1);
72
OD_WARN_UNUSED_RESULT uint32_t od_ec_enc_tell_frac(const od_ec_enc *enc)
73
    OD_ARG_NONNULL(1);
74
75
// buf is the frame bitbuffer, offs is where carry to be added
76
0
static inline void propagate_carry_bwd(unsigned char *buf, uint32_t offs) {
77
0
  uint16_t sum, carry = 1;
78
0
  do {
79
0
    sum = (uint16_t)buf[offs] + 1;
80
0
    buf[offs--] = (unsigned char)sum;
81
0
    carry = sum >> 8;
82
0
  } while (carry);
83
0
}
Unexecuted instantiation: av1_cx_iface.c:propagate_carry_bwd
Unexecuted instantiation: allintra_vis.c:propagate_carry_bwd
Unexecuted instantiation: av1_quantize.c:propagate_carry_bwd
Unexecuted instantiation: bitstream.c:propagate_carry_bwd
Unexecuted instantiation: context_tree.c:propagate_carry_bwd
Unexecuted instantiation: encodeframe.c:propagate_carry_bwd
Unexecuted instantiation: encodeframe_utils.c:propagate_carry_bwd
Unexecuted instantiation: encodemb.c:propagate_carry_bwd
Unexecuted instantiation: encodemv.c:propagate_carry_bwd
Unexecuted instantiation: encoder.c:propagate_carry_bwd
Unexecuted instantiation: encoder_utils.c:propagate_carry_bwd
Unexecuted instantiation: encodetxb.c:propagate_carry_bwd
Unexecuted instantiation: ethread.c:propagate_carry_bwd
Unexecuted instantiation: firstpass.c:propagate_carry_bwd
Unexecuted instantiation: global_motion_facade.c:propagate_carry_bwd
Unexecuted instantiation: level.c:propagate_carry_bwd
Unexecuted instantiation: lookahead.c:propagate_carry_bwd
Unexecuted instantiation: mcomp.c:propagate_carry_bwd
Unexecuted instantiation: mv_prec.c:propagate_carry_bwd
Unexecuted instantiation: palette.c:propagate_carry_bwd
Unexecuted instantiation: partition_search.c:propagate_carry_bwd
Unexecuted instantiation: partition_strategy.c:propagate_carry_bwd
Unexecuted instantiation: pass2_strategy.c:propagate_carry_bwd
Unexecuted instantiation: pickcdef.c:propagate_carry_bwd
Unexecuted instantiation: picklpf.c:propagate_carry_bwd
Unexecuted instantiation: pickrst.c:propagate_carry_bwd
Unexecuted instantiation: ratectrl.c:propagate_carry_bwd
Unexecuted instantiation: rd.c:propagate_carry_bwd
Unexecuted instantiation: rdopt.c:propagate_carry_bwd
Unexecuted instantiation: nonrd_pickmode.c:propagate_carry_bwd
Unexecuted instantiation: nonrd_opt.c:propagate_carry_bwd
Unexecuted instantiation: segmentation.c:propagate_carry_bwd
Unexecuted instantiation: speed_features.c:propagate_carry_bwd
Unexecuted instantiation: superres_scale.c:propagate_carry_bwd
Unexecuted instantiation: svc_layercontext.c:propagate_carry_bwd
Unexecuted instantiation: temporal_filter.c:propagate_carry_bwd
Unexecuted instantiation: tokenize.c:propagate_carry_bwd
Unexecuted instantiation: tpl_model.c:propagate_carry_bwd
Unexecuted instantiation: tx_search.c:propagate_carry_bwd
Unexecuted instantiation: txb_rdopt.c:propagate_carry_bwd
Unexecuted instantiation: intra_mode_search.c:propagate_carry_bwd
Unexecuted instantiation: var_based_part.c:propagate_carry_bwd
Unexecuted instantiation: av1_noise_estimate.c:propagate_carry_bwd
Unexecuted instantiation: bitwriter.c:propagate_carry_bwd
Unexecuted instantiation: entenc.c:propagate_carry_bwd
Unexecuted instantiation: binary_codes_writer.c:propagate_carry_bwd
Unexecuted instantiation: aq_complexity.c:propagate_carry_bwd
Unexecuted instantiation: aq_cyclicrefresh.c:propagate_carry_bwd
Unexecuted instantiation: aq_variance.c:propagate_carry_bwd
Unexecuted instantiation: compound_type.c:propagate_carry_bwd
Unexecuted instantiation: encode_strategy.c:propagate_carry_bwd
Unexecuted instantiation: global_motion.c:propagate_carry_bwd
Unexecuted instantiation: gop_structure.c:propagate_carry_bwd
Unexecuted instantiation: interp_search.c:propagate_carry_bwd
Unexecuted instantiation: motion_search_facade.c:propagate_carry_bwd
84
85
// Convert to big-endian byte order and write data to buffer adding the
86
// carry-bit
87
static inline void write_enc_data_to_out_buf(unsigned char *out, uint32_t offs,
88
                                             uint64_t output, uint64_t carry,
89
                                             uint32_t *enc_offs,
90
0
                                             uint8_t num_bytes_ready) {
91
0
  const uint64_t reg = HToBE64(output << ((8 - num_bytes_ready) << 3));
92
0
  memcpy(&out[offs], &reg, 8);
93
  // Propagate carry backwards if exists
94
0
  if (carry) {
95
0
    assert(offs > 0);
96
0
    propagate_carry_bwd(out, offs - 1);
97
0
  }
98
0
  *enc_offs = offs + num_bytes_ready;
99
0
}
Unexecuted instantiation: av1_cx_iface.c:write_enc_data_to_out_buf
Unexecuted instantiation: allintra_vis.c:write_enc_data_to_out_buf
Unexecuted instantiation: av1_quantize.c:write_enc_data_to_out_buf
Unexecuted instantiation: bitstream.c:write_enc_data_to_out_buf
Unexecuted instantiation: context_tree.c:write_enc_data_to_out_buf
Unexecuted instantiation: encodeframe.c:write_enc_data_to_out_buf
Unexecuted instantiation: encodeframe_utils.c:write_enc_data_to_out_buf
Unexecuted instantiation: encodemb.c:write_enc_data_to_out_buf
Unexecuted instantiation: encodemv.c:write_enc_data_to_out_buf
Unexecuted instantiation: encoder.c:write_enc_data_to_out_buf
Unexecuted instantiation: encoder_utils.c:write_enc_data_to_out_buf
Unexecuted instantiation: encodetxb.c:write_enc_data_to_out_buf
Unexecuted instantiation: ethread.c:write_enc_data_to_out_buf
Unexecuted instantiation: firstpass.c:write_enc_data_to_out_buf
Unexecuted instantiation: global_motion_facade.c:write_enc_data_to_out_buf
Unexecuted instantiation: level.c:write_enc_data_to_out_buf
Unexecuted instantiation: lookahead.c:write_enc_data_to_out_buf
Unexecuted instantiation: mcomp.c:write_enc_data_to_out_buf
Unexecuted instantiation: mv_prec.c:write_enc_data_to_out_buf
Unexecuted instantiation: palette.c:write_enc_data_to_out_buf
Unexecuted instantiation: partition_search.c:write_enc_data_to_out_buf
Unexecuted instantiation: partition_strategy.c:write_enc_data_to_out_buf
Unexecuted instantiation: pass2_strategy.c:write_enc_data_to_out_buf
Unexecuted instantiation: pickcdef.c:write_enc_data_to_out_buf
Unexecuted instantiation: picklpf.c:write_enc_data_to_out_buf
Unexecuted instantiation: pickrst.c:write_enc_data_to_out_buf
Unexecuted instantiation: ratectrl.c:write_enc_data_to_out_buf
Unexecuted instantiation: rd.c:write_enc_data_to_out_buf
Unexecuted instantiation: rdopt.c:write_enc_data_to_out_buf
Unexecuted instantiation: nonrd_pickmode.c:write_enc_data_to_out_buf
Unexecuted instantiation: nonrd_opt.c:write_enc_data_to_out_buf
Unexecuted instantiation: segmentation.c:write_enc_data_to_out_buf
Unexecuted instantiation: speed_features.c:write_enc_data_to_out_buf
Unexecuted instantiation: superres_scale.c:write_enc_data_to_out_buf
Unexecuted instantiation: svc_layercontext.c:write_enc_data_to_out_buf
Unexecuted instantiation: temporal_filter.c:write_enc_data_to_out_buf
Unexecuted instantiation: tokenize.c:write_enc_data_to_out_buf
Unexecuted instantiation: tpl_model.c:write_enc_data_to_out_buf
Unexecuted instantiation: tx_search.c:write_enc_data_to_out_buf
Unexecuted instantiation: txb_rdopt.c:write_enc_data_to_out_buf
Unexecuted instantiation: intra_mode_search.c:write_enc_data_to_out_buf
Unexecuted instantiation: var_based_part.c:write_enc_data_to_out_buf
Unexecuted instantiation: av1_noise_estimate.c:write_enc_data_to_out_buf
Unexecuted instantiation: bitwriter.c:write_enc_data_to_out_buf
Unexecuted instantiation: entenc.c:write_enc_data_to_out_buf
Unexecuted instantiation: binary_codes_writer.c:write_enc_data_to_out_buf
Unexecuted instantiation: aq_complexity.c:write_enc_data_to_out_buf
Unexecuted instantiation: aq_cyclicrefresh.c:write_enc_data_to_out_buf
Unexecuted instantiation: aq_variance.c:write_enc_data_to_out_buf
Unexecuted instantiation: compound_type.c:write_enc_data_to_out_buf
Unexecuted instantiation: encode_strategy.c:write_enc_data_to_out_buf
Unexecuted instantiation: global_motion.c:write_enc_data_to_out_buf
Unexecuted instantiation: gop_structure.c:write_enc_data_to_out_buf
Unexecuted instantiation: interp_search.c:write_enc_data_to_out_buf
Unexecuted instantiation: motion_search_facade.c:write_enc_data_to_out_buf
100
101
#ifdef __cplusplus
102
}  // extern "C"
103
#endif
104
105
#endif  // AOM_AOM_DSP_ENTENC_H_