Я пытался использовать 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
Так что проблема в большой разнице во времени копирования. Более новое устройство работает медленнее, чем старое.