@Override
public INDArray bitmapDecode(INDArray encoded, INDArray target) {
CudaContext context = AtomicAllocator.getInstance().getFlowController().prepareAction(target);
if (extraz.get() == null)
extraz.set(new PointerPointer(32));
PointerPointer extras = extraz.get().put(
AtomicAllocator.getInstance().getHostPointer(target),
context.getOldStream(),
context.getBufferScalar(),
context.getBufferReduction());
if (target.data().dataType() == DataBuffer.Type.FLOAT) {
nativeOps.decodeBitmapFloat(extras, AtomicAllocator.getInstance().getPointer(encoded.data(), context), target.lengthLong(), (FloatPointer) AtomicAllocator.getInstance().getPointer(target, context));
} else if (target.data().dataType() == DataBuffer.Type.DOUBLE) {
nativeOps.decodeBitmapDouble(extras, AtomicAllocator.getInstance().getPointer(encoded.data(), context), target.lengthLong(), (DoublePointer) AtomicAllocator.getInstance().getPointer(target, context));
} else if (target.data().dataType() == DataBuffer.Type.HALF) {
nativeOps.decodeBitmapHalf(extras, AtomicAllocator.getInstance().getPointer(encoded.data(), context), target.lengthLong(), (ShortPointer) AtomicAllocator.getInstance().getPointer(target, context));
} else
throw new ND4JIllegalStateException("Unknown dataType " + target.data().dataType());
AtomicAllocator.getInstance().getFlowController().registerAction(context, target);
return target;
}
}