Samsung S9 + и RenderScript Intrinsics - PullRequest
2 голосов
/ 06 ноября 2019

Я использую этот скрипт для конвертации изображений YUV_420_888 в растровое изображение. Все отлично работает на моем Samsung S8. Я попробовал RenderScript на моем S9 +, и в результате получается черный растровый рисунок. Нет ошибок, нет предупреждений, просто черный растр. Я обновил S9 + до Android Pie, но все по-прежнему черный. Я действительно не могу объяснить, что не так с устройствами S9 + ...

        int W = mImage.getWidth();
        int H = mImage.getHeight();

        Image.Plane Y = mImage.getPlanes()[0];
        Image.Plane U = mImage.getPlanes()[1];
        Image.Plane V = mImage.getPlanes()[2];

        int Yb = Y.getBuffer().remaining();
        int Ub = U.getBuffer().remaining();
        int Vb = V.getBuffer().remaining();

        byte[] data = new byte[Yb + Ub + Vb];

        Y.getBuffer().get(data, 0, Yb);
        V.getBuffer().get(data, Yb, Vb);
        U.getBuffer().get(data, Yb + Vb, Ub);

        RenderScript rs = RenderScript.create(Main2Activity.this);
        ScriptIntrinsicYuvToRGB yuvToRgbIntrinsic = ScriptIntrinsicYuvToRGB.create(rs, Element.U8_4(rs));

        Type.Builder yuvType = new Type.Builder(rs, Element.U8(rs)).setX(data.length);
        Allocation in = Allocation.createTyped(rs, yuvType.create(), Allocation.USAGE_SCRIPT);

        Type.Builder rgbaType = new Type.Builder(rs, Element.RGBA_8888(rs)).setX(W).setY(H);
        Allocation out = Allocation.createTyped(rs, rgbaType.create(), Allocation.USAGE_SCRIPT);

        final Bitmap bmpout = Bitmap.createBitmap(W, H, Bitmap.Config.ARGB_8888);

        in.copyFromUnchecked(data);

        yuvToRgbIntrinsic.setInput(in);
        yuvToRgbIntrinsic.forEach(out);
        out.copyTo(bmpout);

** Редактировать: ** Я изменил разрешение моего изображения на 2,960 x 1,440 пикселей и получил несколько сбоев. Во время сбоя приложения я снова устанавливал приложение, а во время сбоя приложение показывало растровые изображения. Я думаю, что проблема не в коде. Я думаю, что у S9 + есть некоторые проблемы с корректным запуском Renderscript.

1 Ответ

4 голосов
/ 10 ноября 2019

Кажется, что у S9 + были проблемы с TextureView, которое я поместил поверх ImagView. После удаления TextureView приложение работало просто отлично.

...