Почему camera2 использует ImageReader для получения изображения YUV, всего лишь под 10-15 кадрами

Я использую Camera2 API для камеры, и мне нужно повторно обработать предварительное изображение, поэтому используйте ImageReader, чтобы получить кадр, обработать этот кадр, а затем нарисовать этот кадр на поверхности

но у меня была проблема, кадр всего 10 кадров в секунду, выглядит медленно

ImageReader.OnImageAvailableListener mYuv1ImageListener =
        new ImageReader.OnImageAvailableListener() {
            @Override
            public void onImageAvailable(ImageReader reader) {
                Image img = reader.acquireLatestImage();
                if (img == null) {
                    Logger.debug(TAG, "Null image returned YUV1");
                    return;
                }
                Logger.debug(TAG, "no Null image returned YUV1");

                Image.Plane plane0 = img.getPlanes()[0];
                Image.Plane plane1 = img.getPlanes()[1];
                Image.Plane plane2 = img.getPlanes()[2];
                final ByteBuffer buffer0 = plane0.getBuffer();
                final ByteBuffer buffer1 = plane1.getBuffer();
                final ByteBuffer buffer2 = plane2.getBuffer();

                final byte[] ybuff, ubuff, vbuff;
                if (buffer0.hasArray()) {
                    ybuff = buffer0.array();
                } else {
                    ybuff = new byte[buffer0.capacity()];
                    buffer0.get(ybuff);
                }

                if (buffer1.hasArray()) {
                    ubuff = buffer1.array();
                } else {
                    ubuff = new byte[buffer1.capacity()];
                    buffer1.get(ubuff);
                }

                if (buffer2.hasArray()) {
                    vbuff = buffer2.array();
                } else {
                    vbuff = new byte[buffer2.capacity()];
                    buffer2.get(vbuff);
                }
                int width = img.getWidth();
                int height = img.getHeight();
                img.close();
                mMyCameraCallback.frameDataAvailable(ybuff, ubuff, vbuff, width, height); process image and draw this frame on surface

};

0 ответов

Другие вопросы по тегам