IVGCVSW-5359 Fix Transpose Conv2d Dynamic tests

Signed-off-by: Finn Williams <Finn.Williams@arm.com>
Change-Id: I377af50c1ae17aef9b730d1c8ef6a2b54d9d4c5c
diff --git a/ConversionUtils_1_2.hpp b/ConversionUtils_1_2.hpp
index 256be4a..779d88f 100644
--- a/ConversionUtils_1_2.hpp
+++ b/ConversionUtils_1_2.hpp
@@ -2767,18 +2767,6 @@
 
         const uint32_t kernelX = weights.GetShape()[widthIndex];
         const uint32_t kernelY = weights.GetShape()[heightIndex];
-        const uint32_t outputX = outputInfo.GetShape()[widthIndex];
-        const uint32_t outputY = outputInfo.GetShape()[heightIndex];
-
-        CalcPaddingTransposeConv(outputX, kernelX, strideX, padLeft, padRight, paddingScheme);
-        CalcPaddingTransposeConv(outputY, kernelY, strideY, padTop, padBottom, paddingScheme);
-
-        // NOTE: The Android NN API allows for negative padding values in TransposeConv2d,
-        // but Arm NN only supports values >= 0
-        if (padLeft < 0 || padRight < 0 || padTop < 0 || padBottom < 0)
-        {
-            return Fail("%s: Negative padding values are not supported", __func__);
-        }
 
         // If output shape has been specified as a parameter then extract it and make it available.
         const HalOperand* outputShapeOperand = GetInputOperand<HalPolicy>(operation, 3, model, false);
@@ -2793,6 +2781,35 @@
             desc.m_OutputShapeEnabled = true;
         }
 
+        uint32_t outputX;
+        uint32_t outputY;
+
+        if (IsDynamicTensor(outputInfo))
+        {
+            if (outputShape.size() == 0)
+            {
+                return Fail("%s: Padding sizes cannot be inferred", __func__);
+            }
+
+            outputX = outputShape[widthIndex];
+            outputY = outputShape[heightIndex];
+        }
+        else
+        {
+            outputX = outputInfo.GetShape()[widthIndex];
+            outputY = outputInfo.GetShape()[heightIndex];
+        }
+
+        CalcPaddingTransposeConv(outputX, kernelX, strideX, padLeft, padRight, paddingScheme);
+        CalcPaddingTransposeConv(outputY, kernelY, strideY, padTop, padBottom, paddingScheme);
+
+        // NOTE: The Android NN API allows for negative padding values in TransposeConv2d,
+        // but Arm NN only supports values >= 0
+        if (padLeft < 0 || padRight < 0 || padTop < 0 || padBottom < 0)
+        {
+            return Fail("%s: Negative padding values are not supported", __func__);
+        }
+
         desc.m_StrideX   = armnn::numeric_cast<uint32_t>(strideX);
         desc.m_StrideY   = armnn::numeric_cast<uint32_t>(strideY);
         desc.m_PadLeft   = armnn::numeric_cast<uint32_t>(padLeft);