Differential D9642 Diff 31360 extern/draco/draco/src/draco/compression/mesh/mesh_edgebreaker_traversal_predictive_decoder.h
Changeset View
Changeset View
Standalone View
Standalone View
extern/draco/draco/src/draco/compression/mesh/mesh_edgebreaker_traversal_predictive_decoder.h
- This file was moved from extern/draco/dracoenc/src/draco/compression/mesh/mesh_edgebreaker_traversal_predictive_decoder.h.
| Show All 10 Lines | |||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | // limitations under the License. | ||||
| // | // | ||||
| #ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED | #ifdef DRACO_BACKWARDS_COMPATIBILITY_SUPPORTED | ||||
| #ifndef DRACO_COMPRESSION_MESH_MESH_EDGEBREAKER_TRAVERSAL_PREDICTIVE_DECODER_H_ | #ifndef DRACO_COMPRESSION_MESH_MESH_EDGEBREAKER_TRAVERSAL_PREDICTIVE_DECODER_H_ | ||||
| #define DRACO_COMPRESSION_MESH_MESH_EDGEBREAKER_TRAVERSAL_PREDICTIVE_DECODER_H_ | #define DRACO_COMPRESSION_MESH_MESH_EDGEBREAKER_TRAVERSAL_PREDICTIVE_DECODER_H_ | ||||
| #include "draco/draco_features.h" | |||||
| #include "draco/compression/mesh/mesh_edgebreaker_traversal_decoder.h" | #include "draco/compression/mesh/mesh_edgebreaker_traversal_decoder.h" | ||||
| #include "draco/draco_features.h" | |||||
| namespace draco { | namespace draco { | ||||
| // Decoder for traversal encoded with the | // Decoder for traversal encoded with the | ||||
| // MeshEdgebreakerTraversalPredictiveEncoder. The decoder maintains valences | // MeshEdgebreakerTraversalPredictiveEncoder. The decoder maintains valences | ||||
| // of the decoded portion of the traversed mesh and it uses them to predict | // of the decoded portion of the traversed mesh and it uses them to predict | ||||
| // symbols that are about to be decoded. | // symbols that are about to be decoded. | ||||
| class MeshEdgebreakerTraversalPredictiveDecoder | class MeshEdgebreakerTraversalPredictiveDecoder | ||||
| : public MeshEdgebreakerTraversalDecoder { | : public MeshEdgebreakerTraversalDecoder { | ||||
| public: | public: | ||||
| MeshEdgebreakerTraversalPredictiveDecoder() | MeshEdgebreakerTraversalPredictiveDecoder() | ||||
| : corner_table_(nullptr), | : corner_table_(nullptr), | ||||
| num_vertices_(0), | num_vertices_(0), | ||||
| last_symbol_(-1), | last_symbol_(-1), | ||||
| predicted_symbol_(-1) {} | predicted_symbol_(-1) {} | ||||
| void Init(MeshEdgebreakerDecoderImplInterface *decoder) { | void Init(MeshEdgebreakerDecoderImplInterface *decoder) { | ||||
| MeshEdgebreakerTraversalDecoder::Init(decoder); | MeshEdgebreakerTraversalDecoder::Init(decoder); | ||||
| corner_table_ = decoder->GetCornerTable(); | corner_table_ = decoder->GetCornerTable(); | ||||
| } | } | ||||
| void SetNumEncodedVertices(int num_vertices) { num_vertices_ = num_vertices; } | void SetNumEncodedVertices(int num_vertices) { num_vertices_ = num_vertices; } | ||||
| bool Start(DecoderBuffer *out_buffer) { | bool Start(DecoderBuffer *out_buffer) { | ||||
| if (!MeshEdgebreakerTraversalDecoder::Start(out_buffer)) | if (!MeshEdgebreakerTraversalDecoder::Start(out_buffer)) { | ||||
| return false; | return false; | ||||
| } | |||||
| int32_t num_split_symbols; | int32_t num_split_symbols; | ||||
| if (!out_buffer->Decode(&num_split_symbols) || num_split_symbols < 0) | if (!out_buffer->Decode(&num_split_symbols) || num_split_symbols < 0) | ||||
| return false; | return false; | ||||
| if (num_split_symbols >= num_vertices_) | if (num_split_symbols >= num_vertices_) { | ||||
| return false; | return false; | ||||
| } | |||||
| // Set the valences of all initial vertices to 0. | // Set the valences of all initial vertices to 0. | ||||
| vertex_valences_.resize(num_vertices_, 0); | vertex_valences_.resize(num_vertices_, 0); | ||||
| if (!prediction_decoder_.StartDecoding(out_buffer)) | if (!prediction_decoder_.StartDecoding(out_buffer)) { | ||||
| return false; | return false; | ||||
| } | |||||
| return true; | return true; | ||||
| } | } | ||||
| inline uint32_t DecodeSymbol() { | inline uint32_t DecodeSymbol() { | ||||
| // First check if we have a predicted symbol. | // First check if we have a predicted symbol. | ||||
| if (predicted_symbol_ != -1) { | if (predicted_symbol_ != -1) { | ||||
| // Double check that the predicted symbol was predicted correctly. | // Double check that the predicted symbol was predicted correctly. | ||||
| if (prediction_decoder_.DecodeNextBit()) { | if (prediction_decoder_.DecodeNextBit()) { | ||||
| ▲ Show 20 Lines • Show All 70 Lines • Show Last 20 Lines | |||||