Android Camera2Api Image ByteBuffer производительность - PullRequest
0 голосов
/ 28 августа 2018

Я пытался использовать Camera2API google sample https://github.com/googlesamples/android-Camera2Video для преобразования yuv-кадра в rgb. Я изменил источники, удалив функцию записи и добавив реализацию https://developer.android.com/reference/android/media/ImageReader.OnImageAvailableListener,, также я установил разрешение 1280x720.

Это реализация прослушивателя изображений:

private static final String TAG = "FrameImageListener";
private static final int SKIP_FRAMES = 30;

private int mImageCounter = 0;

@Override
public void onImageAvailable(ImageReader reader) {
    Image img;
    img = reader.acquireNextImage();
    if (img == null) return;
    try {
        if (mImageCounter % SKIP_FRAMES == 0) {
            rgb(img);
        }
    } finally {
        mImageCounter++;
        img.close();
    }
}

private Bitmap rgb(Image image) {
    if (image == null) return null;
    int W = image.getWidth();
    int H = image.getHeight();
    byte[] frameData = new byte[W * H * 2 - 2];
    Image.Plane Y = image.getPlanes()[0];
    int YRemaining = Y.getBuffer().remaining();
    ByteBuffer YBuffer = Y.getBuffer();
    long start = System.nanoTime();
    YBuffer.get(frameData, 0, YRemaining);
    Log.d(TAG, "image W H " + W + " " + H);
    Log.d(TAG, "remaining " + YRemaining);
    Log.d(TAG, "copy time " + (System.nanoTime() - start) / 1000_000);
    return null;
}

Мы протестировали один и тот же код на разных устройствах Samsumg и заметили недостаток производительности с S8 +

Вывод отладки с помощью Samsung Galaxy s8 + с Android 8.0 выглядит следующим образом:

image W H 1024 768
remaining 786432
copy time 18

Вывод отладки для Samsung Galaxy s7 выглядит следующим образом:

image W H 1024 768
remaining 786432
copy time 5

Так что проблема в большой разнице во времени копирования. Более новое устройство работает медленнее, чем старое.

...