У меня есть следующие входные и выходные распределения:
Type.Builder yuvTypeBuilder = new Type.Builder(rs, Element.YUV(rs));
yuvTypeBuilder.setX(dimensions.getWidth());
yuvTypeBuilder.setY(dimensions.getHeight());
yuvTypeBuilder.setYuvFormat(ImageFormat.YUV_420_888);
mInputNormalAllocation = Allocation.createTyped(rs, yuvTypeBuilder.create(), Allocation.USAGE_IO_INPUT | Allocation.USAGE_SCRIPT);
Type.Builder rgbTypeBuilder = new Type.Builder(rs, Element.RGBA_8888(rs));
rgbTypeBuilder.setX(dimensions.getWidth());
rgbTypeBuilder.setY(dimensions.getHeight());
mOutputAllocation = Allocation.createTyped(rs, rgbTypeBuilder.create(), Allocation.USAGE_IO_OUTPUT | Allocation.USAGE_SCRIPT);
// create conversion script
ScriptIntrinsicYuvToRGB sYUV = ScriptIntrinsicYuvToRGB.create(rs, Element.U8(rs));
sYUV.setInput(mInputNormalAllocation);
// does the conversion
sYUV.forEach(mOutputAllocation);
Позже я вызываю функцию ядра Renderscript с помощью следующего вызова:
script.forEach_greyscale(mInputAllocation, mOutputAllocation);
Файл Renderscript имеет следующее содержимое:
#pragma version(1)
#pragma rs java_package_name(com.celik.abdullah.playingwithcamera2api)
#pragma rs_fp_relaxed
uchar4 __attribute__((kernel)) greyscale(uchar4 in) {
uchar grayscale = in.r * 0.299 + in.g * 0.587 + in.b * 0.114;
uchar4 pixelOut;
pixelOut.a = in.a;
pixelOut.r = grayscale;
pixelOut.g = grayscale;
pixelOut.b = grayscale;
return pixelOut;
}
Но Android выдает мне следующую ошибку:
android.renderscript.RSRuntimeException: несоответствие типов с U8_4!
на com.celik.abdullah.playingwithcamera2api.ScriptC_gray.forEach_greyscale (ScriptC_gray.java:58)
на com.celik.abdullah.playingwithcamera2api.ScriptC_gray.forEach_greyscale (ScriptC_gray.java:52)
на com.celik.abdullah.playingwithcamera2api.ViewfinderProcessor $ ProcessingTask.run (ViewfinderProcessor.java:176)
на android.os.Handler.handleCallback (Handler.java:790)
на android.os.Handler.dispatchMessage (Handler.java:99)
на android.os.Looper.loop (Looper.java:164)
на android.os.HandlerThread.run (HandlerThread.java:65)
Я посмотрел на https://developer.android.com/reference/android/renderscript/Element.html#U8(android.renderscript.RenderScript) и Несоответствие типа Android Renderscript с U8_4 , но я все еще не знаю, что делать. Я пробовал разные U8 (например, U8_4 и т. Д.), Но каждый раз
получите ту же ошибку.
Может кто-нибудь помочь?