Альтернатива ImageReader для захвата кадров MediaProction на AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Альтернатива ImageReader для захвата кадров MediaProction на Android

Сообщение Anonymous »

В настоящее время я использую ImageReader для прослушивания виртуального дисплея MediaProction через поверхность: < /p>

Код: Выделить всё

    public void initRecorder() {
setupDynamicOverlay();
MediaProjection.Callback callback = new MediaProjection.Callback() {
@Override
public void onStop() {
super.onStop();
stopScreenCapture();
}
};
mediaProjection.registerCallback(callback, null);
if (mVirtualDisplay != null) {
mVirtualDisplay.release();
mVirtualDisplay = null;
}

int[] boundsRes = getBounds();
int width = boundsRes[0];
int height = boundsRes[1];

mVirtualDisplay = mediaProjection.createVirtualDisplay(
"ScreenCapture",
width == 0 ? DisplayMetrics.DENSITY_DEFAULT : width,
height == 0 ? DisplayMetrics.DENSITY_DEFAULT : height,
dpi,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
surface,
null,
handler
);

}

public void initImageReader() {
handlerThread = new HandlerThread("ImageProcessor");
handlerThread.start();
handler = new Handler(handlerThread.getLooper());

int[] boundsRes = getBounds();
imageReader = ImageReader.newInstance(
boundsRes[0],
boundsRes[1],
PixelFormat.RGBA_8888,
2
);

imageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = reader.acquireLatestImage();
if (image != null) {
Bitmap bitmap = imageToBitmap(image);
processImage(bitmap);
image.close();
bitmap.recycle();
// optional
saveToGalleryBitmap(bitmap);
}
}
}, handler);
surface = imageReader.getSurface();
initRecorder();
}
< /code>
Проблема в том, что ImageReader медленно прослушивает последнее изображение. Причина, по которой я это делаю, состоит в том, чтобы использовать модель ML для прогнозирования изображений с экрана пользователя (в ProcessImage ()). Тем не менее, я хочу, чтобы Imagelistener выводил изображения в режиме реального времени, чтобы некоторые кадры не были пропущены, когда слушатель работает. Я попробовал TextureView 
в качестве альтернативы, но я получил предупреждение о том, что в настоящее время он не поддерживается на Android 15+ и может вызвать проблему задержки/производительности.
Как я могу оптимизировать это дальше? Существуют ли альтернативы Imagereader и TextureView, которые могут прослушать поверхность, которая также имеет обратный вызов для последних кадров?

Подробнее здесь: https://stackoverflow.com/questions/797 ... on-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»