aboutsummaryrefslogtreecommitdiff
path: root/ConversionUtils.hpp
diff options
context:
space:
mode:
authorAron Virginas-Tar <Aron.Virginas-Tar@arm.com>2019-07-05 15:47:07 +0100
committerÁron Virginás-Tar <aron.virginas-tar@arm.com>2019-07-05 15:40:00 +0000
commitcb8ac845da5a6297f7009e26df282a2bfd73f3b9 (patch)
treeeec2028892a95882412ff3cd869771c7a8f46f43 /ConversionUtils.hpp
parentf4a7c7d7feb3a6f0ac91268978d047cb556329fd (diff)
downloadandroid-nn-driver-cb8ac845da5a6297f7009e26df282a2bfd73f3b9.tar.gz
IVGCVSW-3301 Support PAD_V2 in HAL1.2 driver
Signed-off-by: Aron Virginas-Tar <Aron.Virginas-Tar@arm.com> Change-Id: If3da7b9015fb816bb27b85ab491102005859b3b0
Diffstat (limited to 'ConversionUtils.hpp')
-rw-r--r--ConversionUtils.hpp46
1 files changed, 45 insertions, 1 deletions
diff --git a/ConversionUtils.hpp b/ConversionUtils.hpp
index 9a711cb7..d30b8a4e 100644
--- a/ConversionUtils.hpp
+++ b/ConversionUtils.hpp
@@ -5,11 +5,12 @@
#pragma once
+#include "Utils.hpp"
+
#include <armnn/ArmNN.hpp>
#include "armnn/src/armnnUtils/DataLayoutIndexed.hpp"
#include "armnn/src/armnnUtils/Permute.hpp"
-#include "Utils.hpp"
#include <ActivationFunctor.h>
#include <CpuExecutor.h>
@@ -1139,6 +1140,49 @@ bool ConvertToActivation(const HalOperation& operation,
template<typename HalPolicy,
typename HalOperation = typename HalPolicy::Operation,
typename HalModel = typename HalPolicy::Model>
+bool ConvertPaddings(const HalOperation& operation,
+ const HalModel& model,
+ ConversionData& data,
+ unsigned int rank,
+ armnn::PadDescriptor& padDescriptor)
+{
+ using HalOperand = typename HalPolicy::Operand;
+
+ const HalOperand* paddingsOperand = GetInputOperand<HalPolicy>(operation, 1, model);
+ if (!paddingsOperand)
+ {
+ return Fail("%s: Could not read paddings operand", __func__);
+ }
+
+ armnn::TensorShape paddingsOperandShape = GetTensorShapeForOperand(*paddingsOperand);
+ if (paddingsOperandShape.GetNumDimensions() != 2 || paddingsOperandShape.GetNumElements() != rank * 2)
+ {
+ return Fail("%s: Operation has invalid paddings operand: expected shape [%d, 2]", __func__, rank);
+ }
+
+ std::vector<int32_t> paddings;
+ GetTensorInt32Values<HalPolicy>(*paddingsOperand, paddings, model, data);
+
+ // add padding for each dimension of input tensor.
+ for (unsigned int i = 0; i < paddings.size() - 1; i += 2)
+ {
+ int paddingBeforeInput = paddings[i];
+ int paddingAfterInput = paddings[i + 1];
+
+ if (paddingBeforeInput < 0 || paddingAfterInput < 0)
+ {
+ return Fail("%s: Operation has invalid paddings operand, invalid padding values.", __func__);
+ }
+
+ padDescriptor.m_PadList.emplace_back((unsigned int) paddingBeforeInput, (unsigned int) paddingAfterInput);
+ }
+
+ return true;
+}
+
+template<typename HalPolicy,
+ typename HalOperation = typename HalPolicy::Operation,
+ typename HalModel = typename HalPolicy::Model>
bool ConvertPooling2d(const HalOperation& operation,
const char* operationName,
armnn::PoolingAlgorithm poolType,