IVGCVSW-4888 Update Resize Front end for new parameters

 * Added AlignCorners and HalfPixelCenters to Resize and ResizeBilinear
 * Updated Serializer and Serializer tests

!android-nn-driver:3280

Signed-off-by: David Monahan <david.monahan@arm.com>
Change-Id: Ice3bb448c239b04323854641525bfe0808c03b2e
diff --git a/include/armnn/Descriptors.hpp b/include/armnn/Descriptors.hpp
index 13765e8..9e5dea2 100644
--- a/include/armnn/Descriptors.hpp
+++ b/include/armnn/Descriptors.hpp
@@ -718,6 +718,8 @@
         : m_TargetWidth(0)
         , m_TargetHeight(0)
         , m_DataLayout(DataLayout::NCHW)
+        , m_AlignCorners(false)
+        , m_HalfPixelCenters(false)
     {}
 
     /// Target width value.
@@ -726,6 +728,10 @@
     uint32_t          m_TargetHeight;
     /// The data layout to be used (NCHW, NHWC).
     DataLayout m_DataLayout;
+    /// Aligned corners
+    bool m_AlignCorners;
+    /// Half Pixel Centers
+    bool m_HalfPixelCenters;
 };
 
 /// A ResizeDescriptor for the ResizeLayer.
@@ -736,7 +742,7 @@
         , m_TargetHeight(0)
         , m_Method(ResizeMethod::NearestNeighbor)
         , m_DataLayout(DataLayout::NCHW)
-        , m_BilinearAlignCorners(false)
+        , m_AlignCorners(false)
         , m_HalfPixelCenters(false)
     {}
 
@@ -746,7 +752,7 @@
                m_TargetHeight         == rhs.m_TargetHeight &&
                m_Method               == rhs.m_Method &&
                m_DataLayout           == rhs.m_DataLayout &&
-               m_BilinearAlignCorners == rhs.m_BilinearAlignCorners &&
+               m_AlignCorners         == rhs.m_AlignCorners &&
                m_HalfPixelCenters     == rhs.m_HalfPixelCenters;
     }
 
@@ -759,8 +765,8 @@
     ResizeMethod m_Method;
     /// The data layout to be used (NCHW, NHWC).
     DataLayout m_DataLayout;
-    /// Aligned corners for bilinear method
-    bool m_BilinearAlignCorners;
+    /// Aligned corners
+    bool m_AlignCorners;
     /// Half Pixel Centers
     bool m_HalfPixelCenters;
 };
diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp
index a047297..d636d01 100644
--- a/src/armnn/Network.cpp
+++ b/src/armnn/Network.cpp
@@ -1458,10 +1458,12 @@
                                                    const char* name)
 {
     ResizeDescriptor resizeDescriptor;
-    resizeDescriptor.m_Method       = ResizeMethod::Bilinear;
-    resizeDescriptor.m_DataLayout   = descriptor.m_DataLayout;
-    resizeDescriptor.m_TargetWidth  = descriptor.m_TargetWidth;
-    resizeDescriptor.m_TargetHeight = descriptor.m_TargetHeight;
+    resizeDescriptor.m_Method           = ResizeMethod::Bilinear;
+    resizeDescriptor.m_DataLayout       = descriptor.m_DataLayout;
+    resizeDescriptor.m_TargetWidth      = descriptor.m_TargetWidth;
+    resizeDescriptor.m_TargetHeight     = descriptor.m_TargetHeight;
+    resizeDescriptor.m_AlignCorners     = descriptor.m_AlignCorners;
+    resizeDescriptor.m_HalfPixelCenters = descriptor.m_HalfPixelCenters;
 
     return m_Graph->AddLayer<ResizeLayer>(resizeDescriptor, name);
 }
diff --git a/src/armnnDeserializer/Deserializer.cpp b/src/armnnDeserializer/Deserializer.cpp
index 36beebc..bea34e1 100644
--- a/src/armnnDeserializer/Deserializer.cpp
+++ b/src/armnnDeserializer/Deserializer.cpp
@@ -2045,6 +2045,8 @@
     descriptor.m_TargetHeight = flatBufferDescriptor->targetHeight();
     descriptor.m_Method = ToResizeMethod(flatBufferDescriptor->method());
     descriptor.m_DataLayout = ToDataLayout(flatBufferDescriptor->dataLayout());
+    descriptor.m_AlignCorners = flatBufferDescriptor->alignCorners();
+    descriptor.m_HalfPixelCenters = flatBufferDescriptor->halfPixelCenters();
 
     auto layerName = GetLayerName(graph, layerIndex);
     IConnectableLayer* layer = m_Network->AddResizeLayer(descriptor, layerName.c_str());
@@ -2073,6 +2075,8 @@
     descriptor.m_TargetHeight = flatBufferDescriptor->targetHeight();
     descriptor.m_Method       = armnn::ResizeMethod::Bilinear;
     descriptor.m_DataLayout   = ToDataLayout(flatBufferDescriptor->dataLayout());
+    descriptor.m_AlignCorners = flatBufferDescriptor->alignCorners();
+    descriptor.m_HalfPixelCenters = flatBufferDescriptor->halfPixelCenters();
 
     auto layerName = GetLayerName(graph, layerIndex);
     IConnectableLayer* layer = m_Network->AddResizeLayer(descriptor, layerName.c_str());
diff --git a/src/armnnSerializer/ArmnnSchema.fbs b/src/armnnSerializer/ArmnnSchema.fbs
index 6e5ee3f..532c12c 100644
--- a/src/armnnSerializer/ArmnnSchema.fbs
+++ b/src/armnnSerializer/ArmnnSchema.fbs
@@ -558,6 +558,8 @@
     targetWidth:uint;
     targetHeight:uint;
     dataLayout:DataLayout;
+    alignCorners:bool;
+    halfPixelCenters:bool;
 }
 
 table SliceLayer {
@@ -817,6 +819,8 @@
     targetWidth:uint;
     method:ResizeMethod = NearestNeighbor;
     dataLayout:DataLayout;
+    alignCorners:bool;
+    halfPixelCenters:bool;
 }
 
 table StackLayer {
diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index c4d3cfb..9c62a93 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -864,7 +864,9 @@
         CreateResizeBilinearDescriptor(m_flatBufferBuilder,
                                        resizeDescriptor.m_TargetWidth,
                                        resizeDescriptor.m_TargetHeight,
-                                       GetFlatBufferDataLayout(resizeDescriptor.m_DataLayout));
+                                       GetFlatBufferDataLayout(resizeDescriptor.m_DataLayout),
+                                       resizeDescriptor.m_AlignCorners,
+                                       resizeDescriptor.m_HalfPixelCenters);
 
     auto flatBufferLayer = serializer::CreateResizeBilinearLayer(m_flatBufferBuilder,
                                                                  flatBufferBaseLayer,
@@ -886,7 +888,9 @@
                                    resizeDescriptor.m_TargetHeight,
                                    resizeDescriptor.m_TargetWidth,
                                    GetFlatBufferResizeMethod(resizeDescriptor.m_Method),
-                                   GetFlatBufferDataLayout(resizeDescriptor.m_DataLayout));
+                                   GetFlatBufferDataLayout(resizeDescriptor.m_DataLayout),
+                                   resizeDescriptor.m_AlignCorners,
+                                   resizeDescriptor.m_HalfPixelCenters);
 
     auto flatBufferLayer = serializer::CreateResizeLayer(m_flatBufferBuilder,
                                                          flatBufferBaseLayer,
diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp
index 76ac5a4..e7f93c6 100644
--- a/src/armnnSerializer/test/SerializerTests.cpp
+++ b/src/armnnSerializer/test/SerializerTests.cpp
@@ -2206,6 +2206,8 @@
     desc.m_TargetWidth  = 4;
     desc.m_TargetHeight = 2;
     desc.m_Method       = armnn::ResizeMethod::NearestNeighbor;
+    desc.m_AlignCorners = true;
+    desc.m_HalfPixelCenters = true;
 
     armnn::INetworkPtr network = armnn::INetwork::Create();
     armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0);
@@ -2241,10 +2243,12 @@
     {
         VerifyNameAndConnections(layer, name);
 
-        BOOST_CHECK(descriptor.m_Method       == armnn::ResizeMethod::Bilinear);
-        BOOST_CHECK(descriptor.m_TargetWidth  == m_Descriptor.m_TargetWidth);
-        BOOST_CHECK(descriptor.m_TargetHeight == m_Descriptor.m_TargetHeight);
-        BOOST_CHECK(descriptor.m_DataLayout   == m_Descriptor.m_DataLayout);
+        BOOST_CHECK(descriptor.m_Method             == armnn::ResizeMethod::Bilinear);
+        BOOST_CHECK(descriptor.m_TargetWidth        == m_Descriptor.m_TargetWidth);
+        BOOST_CHECK(descriptor.m_TargetHeight       == m_Descriptor.m_TargetHeight);
+        BOOST_CHECK(descriptor.m_DataLayout         == m_Descriptor.m_DataLayout);
+        BOOST_CHECK(descriptor.m_AlignCorners       == m_Descriptor.m_AlignCorners);
+        BOOST_CHECK(descriptor.m_HalfPixelCenters   == m_Descriptor.m_HalfPixelCenters);
     }
 
     void VisitResizeBilinearLayer(const armnn::IConnectableLayer*,
@@ -2267,6 +2271,8 @@
     armnn::ResizeBilinearDescriptor desc;
     desc.m_TargetWidth  = 4u;
     desc.m_TargetHeight = 2u;
+    desc.m_AlignCorners = true;
+    desc.m_HalfPixelCenters = true;
 
     armnn::INetworkPtr network = armnn::INetwork::Create();
     armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0);
diff --git a/src/armnnTfLiteParser/TfLiteParser.cpp b/src/armnnTfLiteParser/TfLiteParser.cpp
index 08bd68d..53b49f4 100644
--- a/src/armnnTfLiteParser/TfLiteParser.cpp
+++ b/src/armnnTfLiteParser/TfLiteParser.cpp
@@ -2168,7 +2168,7 @@
             const auto & operatorPtr = m_Model->subgraphs[subgraphIndex]->operators[operatorIndex];
             const auto * options     = operatorPtr->builtin_options.AsResizeBilinearOptions();
 
-            desc.m_BilinearAlignCorners = options->align_corners;
+            desc.m_AlignCorners = options->align_corners;
             break;
         }
         case ResizeMethod::NearestNeighbor:
diff --git a/src/backends/cl/workloads/ClResizeWorkload.cpp b/src/backends/cl/workloads/ClResizeWorkload.cpp
index 05b212c..adfb368 100644
--- a/src/backends/cl/workloads/ClResizeWorkload.cpp
+++ b/src/backends/cl/workloads/ClResizeWorkload.cpp
@@ -40,7 +40,7 @@
                                           arm_compute::PixelValue(0.f),
                                           arm_compute::SamplingPolicy::TOP_LEFT,
                                           true,
-                                          descriptor.m_BilinearAlignCorners);
+                                          descriptor.m_AlignCorners);
 }
 
 ClResizeWorkload::ClResizeWorkload(const ResizeQueueDescriptor& descriptor, const WorkloadInfo& info) :
@@ -65,7 +65,7 @@
                             arm_compute::PixelValue(0.f),
                             arm_compute::SamplingPolicy::TOP_LEFT,
                             true,
-                            descriptor.m_Parameters.m_BilinearAlignCorners);
+                            descriptor.m_Parameters.m_AlignCorners);
 };
 
 void ClResizeWorkload::Execute() const
diff --git a/src/backends/neon/workloads/NeonResizeWorkload.cpp b/src/backends/neon/workloads/NeonResizeWorkload.cpp
index 9e3be26..afb753f 100644
--- a/src/backends/neon/workloads/NeonResizeWorkload.cpp
+++ b/src/backends/neon/workloads/NeonResizeWorkload.cpp
@@ -64,7 +64,7 @@
                             arm_compute::PixelValue(0.f),
                             arm_compute::SamplingPolicy::TOP_LEFT,
                             true,
-                            descriptor.m_Parameters.m_BilinearAlignCorners);
+                            descriptor.m_Parameters.m_AlignCorners);
 };
 
 void NeonResizeWorkload::Execute() const
diff --git a/src/backends/reference/workloads/RefResizeWorkload.cpp b/src/backends/reference/workloads/RefResizeWorkload.cpp
index 624b426..4e53c4f 100644
--- a/src/backends/reference/workloads/RefResizeWorkload.cpp
+++ b/src/backends/reference/workloads/RefResizeWorkload.cpp
@@ -35,7 +35,7 @@
            outputInfo,
            m_Data.m_Parameters.m_DataLayout,
            m_Data.m_Parameters.m_Method,
-           m_Data.m_Parameters.m_BilinearAlignCorners);
+           m_Data.m_Parameters.m_AlignCorners);
 }
 
 } //namespace armnn