mlw_codec: Fixed alignment warning

- Restructured pointer API to prevent alignment warnings
- Changed weight tensor data type to np.int16

Change-Id: I310c1ca733bf98724c84e8b2194becb4be3e7eea
diff --git a/ethosu/mlw_codec/mlw_codecmodule.c b/ethosu/mlw_codec/mlw_codecmodule.c
index b752a4e..ddc8e7e 100644
--- a/ethosu/mlw_codec/mlw_codecmodule.c
+++ b/ethosu/mlw_codec/mlw_codecmodule.c
@@ -81,7 +81,7 @@
 
     PyArrayObject* input_ndarray_object = (PyArrayObject*)PyArray_FROM_OTF(
         input_object,
-        NPY_INT64,
+        NPY_INT16,
         NPY_ARRAY_ALIGNED);
     if (input_ndarray_object == NULL)
     {
@@ -99,13 +99,19 @@
     int kernel_width = (int)PyArray_DIM(input_ndarray_object, 2);
     int ifm_depth = (int)PyArray_DIM(input_ndarray_object, 3);
 
-    int64_t* brick_weights = (int64_t*)PyArray_DATA(input_ndarray_object);
+    int16_t* brick_weights = (int16_t*)PyArray_DATA(input_ndarray_object);
     int brick_strides[4];
     for (int i = 0; i < 4; i++)
     {
-        brick_strides[i] = (int)PyArray_STRIDE(input_ndarray_object, i);
+        int stride = (int)PyArray_STRIDE(input_ndarray_object, i);
+        if (stride % sizeof(int16_t))
+        {
+            PyErr_SetString(PyExc_ValueError, "Invalid stride");
+            return NULL;
+        }
+        brick_strides[i] = stride / sizeof(int16_t);
     }
-    if ((unsigned)PyArray_ITEMSIZE(input_ndarray_object) != sizeof(int64_t))
+    if ((unsigned)PyArray_ITEMSIZE(input_ndarray_object) != sizeof(int16_t))
     {
         PyErr_SetString(PyExc_ValueError, "Invalid input type");
         return NULL;