Android - RenderScript RSRuntimeException: несоответствие типов с U8_4 - PullRequest
0 голосов
/ 01 июня 2019

У меня есть следующие входные и выходные распределения:

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 и т. Д.), Но каждый раз получите ту же ошибку.

Может кто-нибудь помочь?

...