message: dnn(onnx): handle unaligned access in ONNX importer
diff: @@ -147,8 +147,18 @@ Mat getMatFromTensor(opencv_onnx::TensorProto& tensor_proto)
  }
  else
  {
  - char* val = const_cast<char*>(tensor_proto.raw_data().c_str());
  - int64_t* src = reinterpret_cast<int64_t*>(val);
  + const char* val = tensor_proto.raw_data().c_str();
  + // Aligned pointer is required: https://github.com/opencv/opencv/issues/16373
  + // this doesn't work: typedef int64_t CV_DECL_ALIGNED(1) unaligned_int64_t;
  + AutoBuffer<int64_t, 16> aligned_val;
  + if (!isAligned<sizeof(int64_t)>(val))
  + {
  + size_t sz = tensor_proto.raw_data().size();
  + aligned_val.allocate(divUp(sz, sizeof(int64_t)));
  + memcpy(aligned_val.data(), val, sz);
  + val = (const char*)aligned_val.data();
  + }
  + const int64_t* src = reinterpret_cast<const int64_t*>(val);
  convertInt64ToInt32(src, dst, blob.total());
  }
  }
  