2 * Copyright (c) 2013 The WebM project authors. All Rights Reserved.
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
14 #include "./vpx_config.h"
15 #include "./bitwriter_buffer.h"
17 size_t vpx_wb_bytes_written(const struct vpx_write_bit_buffer
*wb
) {
18 return wb
->bit_offset
/ CHAR_BIT
+ (wb
->bit_offset
% CHAR_BIT
> 0);
21 void vpx_wb_write_bit(struct vpx_write_bit_buffer
*wb
, int bit
) {
22 const int off
= (int)wb
->bit_offset
;
23 const int p
= off
/ CHAR_BIT
;
24 const int q
= CHAR_BIT
- 1 - off
% CHAR_BIT
;
25 if (q
== CHAR_BIT
-1) {
26 wb
->bit_buffer
[p
] = bit
<< q
;
28 wb
->bit_buffer
[p
] &= ~(1 << q
);
29 wb
->bit_buffer
[p
] |= bit
<< q
;
31 wb
->bit_offset
= off
+ 1;
34 void vpx_wb_write_literal(struct vpx_write_bit_buffer
*wb
, int data
, int bits
) {
36 for (bit
= bits
- 1; bit
>= 0; bit
--)
37 vpx_wb_write_bit(wb
, (data
>> bit
) & 1);
40 void vpx_wb_write_inv_signed_literal(struct vpx_write_bit_buffer
*wb
,
43 vpx_wb_write_literal(wb
, data
, bits
+ 1);
45 vpx_wb_write_literal(wb
, abs(data
), bits
);
46 vpx_wb_write_bit(wb
, data
< 0);