mirror of
https://git.mirrors.martin98.com/https://github.com/google/draco
synced 2025-04-21 05:09:52 +08:00
2.0 KiB
2.0 KiB
Sequential Quantization Attribute Decoder
ParseQuantizationBits()
void ParseQuantizationBits() {
quantized_data_quantization_bits[curr_att_dec][curr_att] UI8
}
{:.draco-syntax }
ParseQuantizationData()
void ParseQuantizationData() {
num_components = GetNumComponents();
for (j = 0; j < num_components; ++j) {
quantized_data_min_values[curr_att_dec][curr_att][i] Float
}
quantized_data_max_value_df[curr_att_dec][curr_att] Float
ParseQuantizationBits();
}
{:.draco-syntax }
DequantizeFloat()
float DequantizeFloat(val, max_quantized_value_factor_, range_) {
neg = (val < 0);
if (neg) {
val = -val;
}
norm_value = val * max_quantized_value_factor_;
if (neg)
norm_value = -norm_value;
return norm_value * range_;
}
{:.draco-syntax }
SequentialQuantizationAttributeDecoder_DequantizeValues()
void SequentialQuantizationAttributeDecoder_DequantizeValues() {
quantization_bits = quantized_data_quantization_bits[curr_att_dec][curr_att];
max_quantized_value = (1 << (quantization_bits)) - 1;
num_components = GetNumComponents();
quant_val_id = 0;
range_ = quantized_data_max_value_df[curr_att_dec][curr_att];
max_quantized_value_factor_ = 1.f / max_quantized_value;
min_value_ = quantized_data_min_values[curr_att_dec][curr_att];
original_values = seq_int_att_dec_original_values[curr_att_dec][curr_att];
num_values = att_dec_num_values_to_decode[curr_att_dec][curr_att];
for (i = 0; i < num_values; ++i) {
for (c = 0; c < num_components; ++c) {
value = DequantizeFloat(original_values[quant_val_id++],
max_quantized_value_factor_, range_);
value = value + min_value_[c];
att_val[c] = value;
dequantized_data.push_back(value);
}
}
seq_int_att_dec_dequantized_values[curr_att_dec][curr_att] = dequantized_data;
}
{:.draco-syntax }