/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], ®, 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_ |