Differential D9642 Diff 31337 extern/draco/draco/src/draco/compression/bit_coders/direct_bit_decoder.cc
Changeset View
Changeset View
Standalone View
Standalone View
extern/draco/draco/src/draco/compression/bit_coders/direct_bit_decoder.cc
- This file was moved from extern/draco/dracoenc/src/draco/compression/bit_coders/direct_bit_decoder.cc.
| Show All 17 Lines | |||||
| DirectBitDecoder::DirectBitDecoder() : pos_(bits_.end()), num_used_bits_(0) {} | DirectBitDecoder::DirectBitDecoder() : pos_(bits_.end()), num_used_bits_(0) {} | ||||
| DirectBitDecoder::~DirectBitDecoder() { Clear(); } | DirectBitDecoder::~DirectBitDecoder() { Clear(); } | ||||
| bool DirectBitDecoder::StartDecoding(DecoderBuffer *source_buffer) { | bool DirectBitDecoder::StartDecoding(DecoderBuffer *source_buffer) { | ||||
| Clear(); | Clear(); | ||||
| uint32_t size_in_bytes; | uint32_t size_in_bytes; | ||||
| if (!source_buffer->Decode(&size_in_bytes)) | if (!source_buffer->Decode(&size_in_bytes)) { | ||||
| return false; | return false; | ||||
| } | |||||
| // Check that size_in_bytes is > 0 and a multiple of 4 as the encoder always | // Check that size_in_bytes is > 0 and a multiple of 4 as the encoder always | ||||
| // encodes 32 bit elements. | // encodes 32 bit elements. | ||||
| if (size_in_bytes == 0 || size_in_bytes & 0x3) | if (size_in_bytes == 0 || size_in_bytes & 0x3) { | ||||
| return false; | return false; | ||||
| if (size_in_bytes > source_buffer->remaining_size()) | } | ||||
| if (size_in_bytes > source_buffer->remaining_size()) { | |||||
| return false; | return false; | ||||
| } | |||||
| const uint32_t num_32bit_elements = size_in_bytes / 4; | const uint32_t num_32bit_elements = size_in_bytes / 4; | ||||
| bits_.resize(num_32bit_elements); | bits_.resize(num_32bit_elements); | ||||
| if (!source_buffer->Decode(bits_.data(), size_in_bytes)) | if (!source_buffer->Decode(bits_.data(), size_in_bytes)) { | ||||
| return false; | return false; | ||||
| } | |||||
| pos_ = bits_.begin(); | pos_ = bits_.begin(); | ||||
| num_used_bits_ = 0; | num_used_bits_ = 0; | ||||
| return true; | return true; | ||||
| } | } | ||||
| void DirectBitDecoder::Clear() { | void DirectBitDecoder::Clear() { | ||||
| bits_.clear(); | bits_.clear(); | ||||
| num_used_bits_ = 0; | num_used_bits_ = 0; | ||||
| pos_ = bits_.end(); | pos_ = bits_.end(); | ||||
| } | } | ||||
| } // namespace draco | } // namespace draco | ||||