Differential D9642 Diff 31697 extern/draco/draco/src/draco/compression/attributes/sequential_attribute_encoders_controller.cc
Changeset View
Changeset View
Standalone View
Standalone View
extern/draco/draco/src/draco/compression/attributes/sequential_attribute_encoders_controller.cc
- This file was moved from extern/draco/dracoenc/src/draco/compression/attributes/sequential_attribute_encoders_controller.cc.
| Show All 25 Lines | SequentialAttributeEncodersController::SequentialAttributeEncodersController( | ||||
| : sequencer_(std::move(sequencer)) {} | : sequencer_(std::move(sequencer)) {} | ||||
| SequentialAttributeEncodersController::SequentialAttributeEncodersController( | SequentialAttributeEncodersController::SequentialAttributeEncodersController( | ||||
| std::unique_ptr<PointsSequencer> sequencer, int att_id) | std::unique_ptr<PointsSequencer> sequencer, int att_id) | ||||
| : AttributesEncoder(att_id), sequencer_(std::move(sequencer)) {} | : AttributesEncoder(att_id), sequencer_(std::move(sequencer)) {} | ||||
| bool SequentialAttributeEncodersController::Init(PointCloudEncoder *encoder, | bool SequentialAttributeEncodersController::Init(PointCloudEncoder *encoder, | ||||
| const PointCloud *pc) { | const PointCloud *pc) { | ||||
| if (!AttributesEncoder::Init(encoder, pc)) | if (!AttributesEncoder::Init(encoder, pc)) { | ||||
| return false; | return false; | ||||
| if (!CreateSequentialEncoders()) | } | ||||
| if (!CreateSequentialEncoders()) { | |||||
| return false; | return false; | ||||
| } | |||||
| // Initialize all value encoders. | // Initialize all value encoders. | ||||
| for (uint32_t i = 0; i < num_attributes(); ++i) { | for (uint32_t i = 0; i < num_attributes(); ++i) { | ||||
| const int32_t att_id = GetAttributeId(i); | const int32_t att_id = GetAttributeId(i); | ||||
| if (!sequential_encoders_[i]->Init(encoder, att_id)) | if (!sequential_encoders_[i]->Init(encoder, att_id)) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| } | |||||
| return true; | return true; | ||||
| } | } | ||||
| bool SequentialAttributeEncodersController::EncodeAttributesEncoderData( | bool SequentialAttributeEncodersController::EncodeAttributesEncoderData( | ||||
| EncoderBuffer *out_buffer) { | EncoderBuffer *out_buffer) { | ||||
| if (!AttributesEncoder::EncodeAttributesEncoderData(out_buffer)) | if (!AttributesEncoder::EncodeAttributesEncoderData(out_buffer)) { | ||||
| return false; | return false; | ||||
| } | |||||
| // Encode a unique id of every sequential encoder. | // Encode a unique id of every sequential encoder. | ||||
| for (uint32_t i = 0; i < sequential_encoders_.size(); ++i) { | for (uint32_t i = 0; i < sequential_encoders_.size(); ++i) { | ||||
| out_buffer->Encode(sequential_encoders_[i]->GetUniqueId()); | out_buffer->Encode(sequential_encoders_[i]->GetUniqueId()); | ||||
| } | } | ||||
| return true; | return true; | ||||
| } | } | ||||
| bool SequentialAttributeEncodersController::EncodeAttributes( | bool SequentialAttributeEncodersController::EncodeAttributes( | ||||
| EncoderBuffer *buffer) { | EncoderBuffer *buffer) { | ||||
| if (!sequencer_ || !sequencer_->GenerateSequence(&point_ids_)) | if (!sequencer_ || !sequencer_->GenerateSequence(&point_ids_)) { | ||||
| return false; | return false; | ||||
| } | |||||
| return AttributesEncoder::EncodeAttributes(buffer); | return AttributesEncoder::EncodeAttributes(buffer); | ||||
| } | } | ||||
| bool SequentialAttributeEncodersController:: | bool SequentialAttributeEncodersController:: | ||||
| TransformAttributesToPortableFormat() { | TransformAttributesToPortableFormat() { | ||||
| for (uint32_t i = 0; i < sequential_encoders_.size(); ++i) { | for (uint32_t i = 0; i < sequential_encoders_.size(); ++i) { | ||||
| if (!sequential_encoders_[i]->TransformAttributeToPortableFormat( | if (!sequential_encoders_[i]->TransformAttributeToPortableFormat( | ||||
| point_ids_)) | point_ids_)) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| } | |||||
| return true; | return true; | ||||
| } | } | ||||
| bool SequentialAttributeEncodersController::EncodePortableAttributes( | bool SequentialAttributeEncodersController::EncodePortableAttributes( | ||||
| EncoderBuffer *out_buffer) { | EncoderBuffer *out_buffer) { | ||||
| for (uint32_t i = 0; i < sequential_encoders_.size(); ++i) { | for (uint32_t i = 0; i < sequential_encoders_.size(); ++i) { | ||||
| if (!sequential_encoders_[i]->EncodePortableAttribute(point_ids_, | if (!sequential_encoders_[i]->EncodePortableAttribute(point_ids_, | ||||
| out_buffer)) | out_buffer)) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| } | |||||
| return true; | return true; | ||||
| } | } | ||||
| bool SequentialAttributeEncodersController:: | bool SequentialAttributeEncodersController:: | ||||
| EncodeDataNeededByPortableTransforms(EncoderBuffer *out_buffer) { | EncodeDataNeededByPortableTransforms(EncoderBuffer *out_buffer) { | ||||
| for (uint32_t i = 0; i < sequential_encoders_.size(); ++i) { | for (uint32_t i = 0; i < sequential_encoders_.size(); ++i) { | ||||
| if (!sequential_encoders_[i]->EncodeDataNeededByPortableTransform( | if (!sequential_encoders_[i]->EncodeDataNeededByPortableTransform( | ||||
| out_buffer)) | out_buffer)) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| } | |||||
| return true; | return true; | ||||
| } | } | ||||
| bool SequentialAttributeEncodersController::CreateSequentialEncoders() { | bool SequentialAttributeEncodersController::CreateSequentialEncoders() { | ||||
| sequential_encoders_.resize(num_attributes()); | sequential_encoders_.resize(num_attributes()); | ||||
| for (uint32_t i = 0; i < num_attributes(); ++i) { | for (uint32_t i = 0; i < num_attributes(); ++i) { | ||||
| sequential_encoders_[i] = CreateSequentialEncoder(i); | sequential_encoders_[i] = CreateSequentialEncoder(i); | ||||
| if (sequential_encoders_[i] == nullptr) | if (sequential_encoders_[i] == nullptr) { | ||||
| return false; | return false; | ||||
| } | |||||
| if (i < sequential_encoder_marked_as_parent_.size()) { | if (i < sequential_encoder_marked_as_parent_.size()) { | ||||
| if (sequential_encoder_marked_as_parent_[i]) | if (sequential_encoder_marked_as_parent_[i]) { | ||||
| sequential_encoders_[i]->MarkParentAttribute(); | sequential_encoders_[i]->MarkParentAttribute(); | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| return true; | return true; | ||||
| } | } | ||||
| std::unique_ptr<SequentialAttributeEncoder> | std::unique_ptr<SequentialAttributeEncoder> | ||||
| SequentialAttributeEncodersController::CreateSequentialEncoder(int i) { | SequentialAttributeEncodersController::CreateSequentialEncoder(int i) { | ||||
| const int32_t att_id = GetAttributeId(i); | const int32_t att_id = GetAttributeId(i); | ||||
| const PointAttribute *const att = encoder()->point_cloud()->attribute(att_id); | const PointAttribute *const att = encoder()->point_cloud()->attribute(att_id); | ||||
| Show All 36 Lines | |||||