Differential D9642 Diff 31697 extern/draco/draco/src/draco/compression/attributes/sequential_quantization_attribute_encoder.cc
Changeset View
Changeset View
Standalone View
Standalone View
extern/draco/draco/src/draco/compression/attributes/sequential_quantization_attribute_encoder.cc
- This file was moved from extern/draco/dracoenc/src/draco/compression/attributes/sequential_quantization_attribute_encoder.cc.
| Show All 17 Lines | |||||
| namespace draco { | namespace draco { | ||||
| SequentialQuantizationAttributeEncoder:: | SequentialQuantizationAttributeEncoder:: | ||||
| SequentialQuantizationAttributeEncoder() {} | SequentialQuantizationAttributeEncoder() {} | ||||
| bool SequentialQuantizationAttributeEncoder::Init(PointCloudEncoder *encoder, | bool SequentialQuantizationAttributeEncoder::Init(PointCloudEncoder *encoder, | ||||
| int attribute_id) { | int attribute_id) { | ||||
| if (!SequentialIntegerAttributeEncoder::Init(encoder, attribute_id)) | if (!SequentialIntegerAttributeEncoder::Init(encoder, attribute_id)) { | ||||
| return false; | return false; | ||||
| } | |||||
| // This encoder currently works only for floating point attributes. | // This encoder currently works only for floating point attributes. | ||||
| const PointAttribute *const attribute = | const PointAttribute *const attribute = | ||||
| encoder->point_cloud()->attribute(attribute_id); | encoder->point_cloud()->attribute(attribute_id); | ||||
| if (attribute->data_type() != DT_FLOAT32) | if (attribute->data_type() != DT_FLOAT32) { | ||||
| return false; | return false; | ||||
| } | |||||
| // Initialize AttributeQuantizationTransform. | // Initialize AttributeQuantizationTransform. | ||||
| const int quantization_bits = encoder->options()->GetAttributeInt( | const int quantization_bits = encoder->options()->GetAttributeInt( | ||||
| attribute_id, "quantization_bits", -1); | attribute_id, "quantization_bits", -1); | ||||
| if (quantization_bits < 1) | if (quantization_bits < 1) { | ||||
| return false; | return false; | ||||
| } | |||||
| if (encoder->options()->IsAttributeOptionSet(attribute_id, | if (encoder->options()->IsAttributeOptionSet(attribute_id, | ||||
| "quantization_origin") && | "quantization_origin") && | ||||
| encoder->options()->IsAttributeOptionSet(attribute_id, | encoder->options()->IsAttributeOptionSet(attribute_id, | ||||
| "quantization_range")) { | "quantization_range")) { | ||||
| // Quantization settings are explicitly specified in the provided options. | // Quantization settings are explicitly specified in the provided options. | ||||
| std::vector<float> quantization_origin(attribute->num_components()); | std::vector<float> quantization_origin(attribute->num_components()); | ||||
| encoder->options()->GetAttributeVector(attribute_id, "quantization_origin", | encoder->options()->GetAttributeVector(attribute_id, "quantization_origin", | ||||
| attribute->num_components(), | attribute->num_components(), | ||||
| &quantization_origin[0]); | &quantization_origin[0]); | ||||
| const float range = encoder->options()->GetAttributeFloat( | const float range = encoder->options()->GetAttributeFloat( | ||||
| attribute_id, "quantization_range", 1.f); | attribute_id, "quantization_range", 1.f); | ||||
| attribute_quantization_transform_.SetParameters( | attribute_quantization_transform_.SetParameters( | ||||
| quantization_bits, quantization_origin.data(), | quantization_bits, quantization_origin.data(), | ||||
| attribute->num_components(), range); | attribute->num_components(), range); | ||||
| } else { | } else { | ||||
| // Compute quantization settings from the attribute values. | // Compute quantization settings from the attribute values. | ||||
| attribute_quantization_transform_.ComputeParameters(*attribute, | if (!attribute_quantization_transform_.ComputeParameters( | ||||
| quantization_bits); | *attribute, quantization_bits)) { | ||||
| return false; | |||||
| } | |||||
| } | } | ||||
| return true; | return true; | ||||
| } | } | ||||
| bool SequentialQuantizationAttributeEncoder:: | bool SequentialQuantizationAttributeEncoder:: | ||||
| EncodeDataNeededByPortableTransform(EncoderBuffer *out_buffer) { | EncodeDataNeededByPortableTransform(EncoderBuffer *out_buffer) { | ||||
| return attribute_quantization_transform_.EncodeParameters(out_buffer); | return attribute_quantization_transform_.EncodeParameters(out_buffer); | ||||
| } | } | ||||
| Show All 10 Lines | |||||