Differential D9642 Diff 31697 extern/draco/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.h
Changeset View
Changeset View
Standalone View
Standalone View
extern/draco/draco/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.h
- This file was moved from extern/draco/dracoenc/src/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.h.
| Show All 26 Lines | class PredictionSchemeWrapEncodingTransform | ||||
| : public PredictionSchemeWrapTransformBase<DataTypeT> { | : public PredictionSchemeWrapTransformBase<DataTypeT> { | ||||
| public: | public: | ||||
| typedef CorrTypeT CorrType; | typedef CorrTypeT CorrType; | ||||
| PredictionSchemeWrapEncodingTransform() {} | PredictionSchemeWrapEncodingTransform() {} | ||||
| void Init(const DataTypeT *orig_data, int size, int num_components) { | void Init(const DataTypeT *orig_data, int size, int num_components) { | ||||
| PredictionSchemeWrapTransformBase<DataTypeT>::Init(num_components); | PredictionSchemeWrapTransformBase<DataTypeT>::Init(num_components); | ||||
| // Go over the original values and compute the bounds. | // Go over the original values and compute the bounds. | ||||
| if (size == 0) | if (size == 0) { | ||||
| return; | return; | ||||
| } | |||||
| DataTypeT min_value = orig_data[0]; | DataTypeT min_value = orig_data[0]; | ||||
| DataTypeT max_value = min_value; | DataTypeT max_value = min_value; | ||||
| for (int i = 1; i < size; ++i) { | for (int i = 1; i < size; ++i) { | ||||
| if (orig_data[i] < min_value) | if (orig_data[i] < min_value) { | ||||
| min_value = orig_data[i]; | min_value = orig_data[i]; | ||||
| else if (orig_data[i] > max_value) | } else if (orig_data[i] > max_value) { | ||||
| max_value = orig_data[i]; | max_value = orig_data[i]; | ||||
| } | } | ||||
| } | |||||
| this->set_min_value(min_value); | this->set_min_value(min_value); | ||||
| this->set_max_value(max_value); | this->set_max_value(max_value); | ||||
| this->InitCorrectionBounds(); | this->InitCorrectionBounds(); | ||||
| } | } | ||||
| // Computes the corrections based on the input original value and the | // Computes the corrections based on the input original value and the | ||||
| // predicted value. Out of bound correction values are wrapped around the max | // predicted value. Out of bound correction values are wrapped around the max | ||||
| // range of input values. | // range of input values. | ||||
| inline void ComputeCorrection(const DataTypeT *original_vals, | inline void ComputeCorrection(const DataTypeT *original_vals, | ||||
| const DataTypeT *predicted_vals, | const DataTypeT *predicted_vals, | ||||
| CorrTypeT *out_corr_vals) const { | CorrTypeT *out_corr_vals) const { | ||||
| for (int i = 0; i < this->num_components(); ++i) { | for (int i = 0; i < this->num_components(); ++i) { | ||||
| predicted_vals = this->ClampPredictedValue(predicted_vals); | predicted_vals = this->ClampPredictedValue(predicted_vals); | ||||
| out_corr_vals[i] = original_vals[i] - predicted_vals[i]; | out_corr_vals[i] = original_vals[i] - predicted_vals[i]; | ||||
| // Wrap around if needed. | // Wrap around if needed. | ||||
| DataTypeT &corr_val = out_corr_vals[i]; | DataTypeT &corr_val = out_corr_vals[i]; | ||||
| if (corr_val < this->min_correction()) | if (corr_val < this->min_correction()) { | ||||
| corr_val += this->max_dif(); | corr_val += this->max_dif(); | ||||
| else if (corr_val > this->max_correction()) | } else if (corr_val > this->max_correction()) { | ||||
| corr_val -= this->max_dif(); | corr_val -= this->max_dif(); | ||||
| } | } | ||||
| } | } | ||||
| } | |||||
| bool EncodeTransformData(EncoderBuffer *buffer) { | bool EncodeTransformData(EncoderBuffer *buffer) { | ||||
| // Store the input value range as it is needed by the decoder. | // Store the input value range as it is needed by the decoder. | ||||
| buffer->Encode(this->min_value()); | buffer->Encode(this->min_value()); | ||||
| buffer->Encode(this->max_value()); | buffer->Encode(this->max_value()); | ||||
| return true; | return true; | ||||
| } | } | ||||
| }; | }; | ||||
| } // namespace draco | } // namespace draco | ||||
| #endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_WRAP_ENCODING_TRANSFORM_H_ | #endif // DRACO_COMPRESSION_ATTRIBUTES_PREDICTION_SCHEMES_PREDICTION_SCHEME_WRAP_ENCODING_TRANSFORM_H_ | ||||