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.
12 #include "vp9/encoder/vp9_write_bit_buffer.h"
14 size_t vp9_wb_bytes_written(const struct vp9_write_bit_buffer
*wb
) {
15 return wb
->bit_offset
/ CHAR_BIT
+ (wb
->bit_offset
% CHAR_BIT
> 0);
18 void vp9_wb_write_bit(struct vp9_write_bit_buffer
*wb
, int bit
) {
19 const int off
= (int)wb
->bit_offset
;
20 const int p
= off
/ CHAR_BIT
;
21 const int q
= CHAR_BIT
- 1 - off
% CHAR_BIT
;
22 if (q
== CHAR_BIT
-1) {
23 wb
->bit_buffer
[p
] = bit
<< q
;
25 wb
->bit_buffer
[p
] &= ~(1 << q
);
26 wb
->bit_buffer
[p
] |= bit
<< q
;
28 wb
->bit_offset
= off
+ 1;
31 void vp9_wb_write_literal(struct vp9_write_bit_buffer
*wb
, int data
, int bits
) {
33 for (bit
= bits
- 1; bit
>= 0; bit
--)
34 vp9_wb_write_bit(wb
, (data
>> bit
) & 1);