1// Copyright 2011 Google Inc. 2// 3// This code is licensed under the same terms as WebM: 4// Software License Agreement: http://www.webmproject.org/license/software/ 5// Additional IP Rights Grant: http://www.webmproject.org/license/additional/ 6// ----------------------------------------------------------------------------- 7// 8// Bit writing and boolean coder 9// 10// Author: Skal (pascal.massimino@gmail.com) 11 12#ifndef WEBP_ENC_BIT_WRITER_H_ 13#define WEBP_ENC_BIT_WRITER_H_ 14 15#include "vp8enci.h" 16 17#if defined(__cplusplus) || defined(c_plusplus) 18extern "C" { 19#endif 20 21//----------------------------------------------------------------------------- 22// Bit-writing 23 24typedef struct VP8BitWriter VP8BitWriter; 25struct VP8BitWriter { 26 int32_t range_; // range-1 27 int32_t value_; 28 int run_; // number of outstanding bits 29 int nb_bits_; // number of pending bits 30 uint8_t* buf_; 31 size_t pos_; 32 size_t max_pos_; 33 int error_; // true in case of error 34}; 35 36int VP8BitWriterInit(VP8BitWriter* const bw, size_t expected_size); 37uint8_t* VP8BitWriterFinish(VP8BitWriter* const bw); 38int VP8PutBit(VP8BitWriter* const bw, int bit, int prob); 39int VP8PutBitUniform(VP8BitWriter* const bw, int bit); 40void VP8PutValue(VP8BitWriter* const bw, int value, int nb_bits); 41void VP8PutSignedValue(VP8BitWriter* const bw, int value, int nb_bits); 42int VP8BitWriterAppend(VP8BitWriter* const bw, 43 const uint8_t* data, size_t size); 44 45// return approximate write position (in bits) 46static inline uint64_t VP8BitWriterPos(const VP8BitWriter* const bw) { 47 return (uint64_t)(bw->pos_ + bw->run_) * 8 + 8 + bw->nb_bits_; 48} 49 50static inline uint8_t* VP8BitWriterBuf(const VP8BitWriter* const bw) { 51 return bw->buf_; 52} 53static inline size_t VP8BitWriterSize(const VP8BitWriter* const bw) { 54 return bw->pos_; 55} 56 57//----------------------------------------------------------------------------- 58 59#if defined(__cplusplus) || defined(c_plusplus) 60} // extern "C" 61#endif 62 63#endif // WEBP_ENC_BIT_WRITER_H_ 64