/* * Copyright (c) Qualcomm Innovation Center, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. */ #include #include namespace executorch { namespace backends { namespace qnn { std::unique_ptr CreateQuantizationParamWrapper( const Qnn_QuantizeParams_t& quantization) { std::unique_ptr quantize_param_wrapper; if (quantization.quantizationEncoding == QNN_QUANTIZATION_ENCODING_UNDEFINED) { quantize_param_wrapper = std::make_unique(); } else if ( quantization.quantizationEncoding == QNN_QUANTIZATION_ENCODING_AXIS_SCALE_OFFSET) { std::vector scale_offset( quantization.axisScaleOffsetEncoding.scaleOffset, quantization.axisScaleOffsetEncoding.scaleOffset + quantization.axisScaleOffsetEncoding.numScaleOffsets); quantize_param_wrapper = std::make_unique( quantization.axisScaleOffsetEncoding.axis, scale_offset); } else if ( quantization.quantizationEncoding == QNN_QUANTIZATION_ENCODING_BW_AXIS_SCALE_OFFSET) { std::vector scales( quantization.bwAxisScaleOffsetEncoding.scales, quantization.bwAxisScaleOffsetEncoding.scales + quantization.bwAxisScaleOffsetEncoding.numElements); std::vector offsets( quantization.bwAxisScaleOffsetEncoding.offsets, quantization.bwAxisScaleOffsetEncoding.offsets + quantization.bwAxisScaleOffsetEncoding.numElements); quantize_param_wrapper = std::make_unique( quantization.bwAxisScaleOffsetEncoding.bitwidth, quantization.bwAxisScaleOffsetEncoding.axis, quantization.bwAxisScaleOffsetEncoding.numElements, scales, offsets); } else if ( quantization.quantizationEncoding == QNN_QUANTIZATION_ENCODING_BW_SCALE_OFFSET) { quantize_param_wrapper = std::make_unique( quantization.bwScaleOffsetEncoding.bitwidth, quantization.bwScaleOffsetEncoding.scale, quantization.bwScaleOffsetEncoding.offset); } else if ( quantization.quantizationEncoding == QNN_QUANTIZATION_ENCODING_SCALE_OFFSET) { quantize_param_wrapper = std::make_unique( quantization.scaleOffsetEncoding.scale, quantization.scaleOffsetEncoding.offset); } else { QNN_EXECUTORCH_LOG_ERROR( "Unknown the encoding of quantization: %d", quantization.quantizationEncoding); } return quantize_param_wrapper; } } // namespace qnn } // namespace backends } // namespace executorch