15#ifndef DRACO_COMPRESSION_MESH_MESH_EDGEBREAKER_TRAVERSAL_PREDICTIVE_ENCODER_H_
16#define DRACO_COMPRESSION_MESH_MESH_EDGEBREAKER_TRAVERSAL_PREDICTIVE_ENCODER_H_
32 : corner_table_(nullptr),
34 num_split_symbols_(0),
35 last_corner_(kInvalidCornerIndex),
44 vertex_valences_.resize(corner_table_->num_vertices());
45 for (uint32_t i = 0; i < vertex_valences_.size(); ++i) {
46 vertex_valences_[i] = corner_table_->Valence(
VertexIndex(i));
54 const int valence = vertex_valences_[pivot.value()];
72 int32_t predicted_symbol = -1;
73 const CornerIndex next = corner_table_->Next(last_corner_);
74 const CornerIndex prev = corner_table_->Previous(last_corner_);
82 vertex_valences_[corner_table_->Vertex(next).value()] -= 1;
83 vertex_valences_[corner_table_->Vertex(prev).value()] -= 1;
94 vertex_valences_[corner_table_->Vertex(last_corner_).value()] = -1;
102 vertex_valences_[corner_table_->Vertex(last_corner_).value()] -= 1;
103 vertex_valences_[corner_table_->Vertex(next).value()] -= 1;
104 vertex_valences_[corner_table_->Vertex(prev).value()] -= 2;
107 vertex_valences_[corner_table_->Vertex(last_corner_).value()] -= 1;
108 vertex_valences_[corner_table_->Vertex(next).value()] -= 2;
109 vertex_valences_[corner_table_->Vertex(prev).value()] -= 1;
112 vertex_valences_[corner_table_->Vertex(last_corner_).value()] -= 2;
113 vertex_valences_[corner_table_->Vertex(next).value()] -= 2;
114 vertex_valences_[corner_table_->Vertex(prev).value()] -= 2;
120 bool store_prev_symbol =
true;
121 if (predicted_symbol != -1) {
122 if (predicted_symbol == prev_symbol_) {
123 predictions_.push_back(
true);
124 store_prev_symbol =
false;
125 }
else if (prev_symbol_ != -1) {
126 predictions_.push_back(
false);
129 if (store_prev_symbol && prev_symbol_ != -1) {
133 prev_symbol_ = symbol;
138 if (prev_symbol_ != -1) {
149 for (
int i =
static_cast<int>(predictions_.size()) - 1; i >= 0; --i) {
150 prediction_encoder.
EncodeBit(predictions_[i]);
159 std::vector<int> vertex_valences_;
160 std::vector<bool> predictions_;
162 int32_t prev_symbol_;
164 int32_t num_split_symbols_;
Definition corner_table.h:53
bool Encode(const T &data)
Definition encoder_buffer.h:60
Definition mesh_edgebreaker_encoder_impl_interface.h:33
virtual const CornerTable * GetCornerTable() const =0
void Done()
Definition mesh_edgebreaker_traversal_encoder.h:83
EncoderBuffer * GetOutputBuffer()
Definition mesh_edgebreaker_traversal_encoder.h:120
MeshEdgebreakerTraversalEncoder()
Definition mesh_edgebreaker_traversal_encoder.h:33
bool Init(MeshEdgebreakerEncoderImplInterface *encoder)
Definition mesh_edgebreaker_traversal_encoder.h:37
void EncodeSymbol(EdgebreakerTopologyBitPattern symbol)
Definition mesh_edgebreaker_traversal_encoder.h:70
void Done()
Definition mesh_edgebreaker_traversal_predictive_encoder.h:136
void EncodeSymbol(EdgebreakerTopologyBitPattern symbol)
Definition mesh_edgebreaker_traversal_predictive_encoder.h:66
MeshEdgebreakerTraversalPredictiveEncoder()
Definition mesh_edgebreaker_traversal_predictive_encoder.h:31
bool Init(MeshEdgebreakerEncoderImplInterface *encoder)
Definition mesh_edgebreaker_traversal_predictive_encoder.h:38
int NumEncodedSymbols() const
Definition mesh_edgebreaker_traversal_predictive_encoder.h:155
void NewCornerReached(CornerIndex corner)
Definition mesh_edgebreaker_traversal_predictive_encoder.h:51
int32_t ComputePredictedSymbol(VertexIndex pivot)
Definition mesh_edgebreaker_traversal_predictive_encoder.h:53
void EndEncoding(EncoderBuffer *target_buffer)
Definition rans_bit_encoder.cc:75
void EncodeBit(bool bit)
Definition rans_bit_encoder.cc:31
void StartEncoding()
Definition rans_bit_encoder.cc:29
#define FALLTHROUGH_INTENDED
Definition macros.h:54
Definition attribute_octahedron_transform.cc:21
VertexIndex VertexIndex
Definition mesh_edgebreaker_encoder_impl.cc:37
RAnsBitEncoder BinaryEncoder
Definition mesh_edgebreaker_traversal_encoder.h:25
CornerIndex CornerIndex
Definition mesh_edgebreaker_encoder_impl.cc:35
EdgebreakerTopologyBitPattern
Definition mesh_edgebreaker_shared.h:53
@ TOPOLOGY_INVALID
Definition mesh_edgebreaker_shared.h:64
@ TOPOLOGY_R
Definition mesh_edgebreaker_shared.h:57
@ TOPOLOGY_S
Definition mesh_edgebreaker_shared.h:55
@ TOPOLOGY_L
Definition mesh_edgebreaker_shared.h:56
@ TOPOLOGY_E
Definition mesh_edgebreaker_shared.h:58
@ TOPOLOGY_C
Definition mesh_edgebreaker_shared.h:54