15#ifndef DRACO_COMPRESSION_MESH_MESH_EDGEBREAKER_TRAVERSAL_DECODER_H_
16#define DRACO_COMPRESSION_MESH_MESH_EDGEBREAKER_TRAVERSAL_DECODER_H_
33 : attribute_connectivity_decoders_(nullptr),
34 num_attribute_data_(0),
35 decoder_impl_(nullptr) {}
37 decoder_impl_ = decoder;
45 return decoder_impl_->GetDecoder()->bitstream_version();
73 *out_buffer = buffer_;
79 uint32_t face_configuration;
80#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED
82 start_face_buffer_.DecodeLeastSignificantBits32(1, &face_configuration);
87 face_configuration = start_face_decoder_.DecodeNextBit();
89 return face_configuration;
95 symbol_buffer_.DecodeLeastSignificantBits32(1, &symbol);
100 uint32_t symbol_suffix;
101 symbol_buffer_.DecodeLeastSignificantBits32(2, &symbol_suffix);
102 symbol |= (symbol_suffix << 1);
118 return attribute_connectivity_decoders_[attribute].DecodeNextBit();
123 if (symbol_buffer_.bit_decoder_active()) {
124 symbol_buffer_.EndBitDecoding();
126#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED
128 start_face_buffer_.EndBitDecoding();
133 start_face_decoder_.EndDecoding();
141 uint64_t traversal_size;
142 symbol_buffer_ = buffer_;
143 if (!symbol_buffer_.StartBitDecoding(
true, &traversal_size)) {
146 buffer_ = symbol_buffer_;
147 if (traversal_size >
static_cast<uint64_t
>(buffer_.remaining_size())) {
150 buffer_.Advance(traversal_size);
156#ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED
158 start_face_buffer_ = buffer_;
159 uint64_t traversal_size;
160 if (!start_face_buffer_.StartBitDecoding(
true, &traversal_size)) {
163 buffer_ = start_face_buffer_;
164 if (traversal_size >
static_cast<uint64_t
>(buffer_.remaining_size())) {
167 buffer_.Advance(traversal_size);
171 return start_face_decoder_.StartDecoding(&buffer_);
176 if (num_attribute_data_ > 0) {
177 attribute_connectivity_decoders_ = std::unique_ptr<BinaryDecoder[]>(
179 for (
int i = 0; i < num_attribute_data_; ++i) {
180 if (!attribute_connectivity_decoders_[i].StartDecoding(&buffer_)) {
194 std::unique_ptr<BinaryDecoder[]> attribute_connectivity_decoders_;
195 int num_attribute_data_;
Definition decoder_buffer.h:30
const char * data_head() const
Definition decoder_buffer.h:114
uint16_t bitstream_version() const
Definition decoder_buffer.h:120
int64_t remaining_size() const
Definition decoder_buffer.h:115
Definition mesh_edgebreaker_decoder_impl_interface.h:28
virtual bool Init(MeshEdgebreakerDecoder *decoder)=0
virtual MeshEdgebreakerDecoder * GetDecoder() const =0
void SetNumAttributeData(int num_data)
Definition mesh_edgebreaker_traversal_decoder.h:54
MeshEdgebreakerTraversalDecoder()
Definition mesh_edgebreaker_traversal_decoder.h:32
uint32_t DecodeSymbol()
Definition mesh_edgebreaker_traversal_decoder.h:93
void Init(MeshEdgebreakerDecoderImplInterface *decoder)
Definition mesh_edgebreaker_traversal_decoder.h:36
void MergeVertices(VertexIndex, VertexIndex)
Definition mesh_edgebreaker_traversal_decoder.h:111
bool DecodeAttributeSeams()
Definition mesh_edgebreaker_traversal_decoder.h:174
bool DecodeTraversalSymbols()
Definition mesh_edgebreaker_traversal_decoder.h:140
void Done()
Definition mesh_edgebreaker_traversal_decoder.h:122
void SetNumEncodedVertices(int)
Definition mesh_edgebreaker_traversal_decoder.h:50
bool DecodeAttributeSeam(int attribute)
Definition mesh_edgebreaker_traversal_decoder.h:117
DecoderBuffer * buffer()
Definition mesh_edgebreaker_traversal_decoder.h:138
uint16_t BitstreamVersion() const
Definition mesh_edgebreaker_traversal_decoder.h:44
bool DecodeStartFaces()
Definition mesh_edgebreaker_traversal_decoder.h:154
bool DecodeStartFaceConfiguration()
Definition mesh_edgebreaker_traversal_decoder.h:78
void NewActiveCornerReached(CornerIndex)
Definition mesh_edgebreaker_traversal_decoder.h:107
bool Start(DecoderBuffer *out_buffer)
Definition mesh_edgebreaker_traversal_decoder.h:59
DecoderBuffer * buffer()
Definition point_cloud_decoder.h:79
Definition rans_bit_decoder.h:28
#define DRACO_BITSTREAM_VERSION(MAJOR, MINOR)
Definition macros.h:114
Definition attribute_octahedron_transform.cc:21
VertexIndex VertexIndex
Definition mesh_edgebreaker_encoder_impl.cc:37
RAnsBitDecoder BinaryDecoder
Definition mesh_edgebreaker_traversal_decoder.h:26
CornerIndex CornerIndex
Definition mesh_edgebreaker_encoder_impl.cc:35
@ TOPOLOGY_C
Definition mesh_edgebreaker_shared.h:54