2016-01-07 3 views
4

Я пытаюсь захватить данные изображения с камеры с помощью API камеры2. В основном я использовал код, взятый из примера android Capture2RAW. Только несколько изображений проходят (то есть вызовы onImageAvailable), прежде чем полностью остановиться. Я попытался захватить с использованием RAW_SENSOR и JPEG форматов разных размеров с теми же результатами. Что я делаю не так?Camera2 ImageReader замораживает повторяющийся запрос захвата

this.mImageReader = ImageReader.newInstance(width, height, ImageFormat.RAW_SENSOR, /*maxImages*/ 1); 
Surface surface = this.mImageReader.getSurface(); 
final List<Surface> surfaces = Arrays.asList(surface); 
this.mCamera.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() { 
    // Callback methods here 
}, null); 
CaptureRequest.Builder captureRequestBuilder; 
captureRequestBuilder = this.mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); 
captureRequestBuilder.addTarget(surface); 
this.mCaptureRequest = captureRequestBuilder.build(); 
this.mCaptureSession.setRepeatingRequest(mCaptureRequest, null, null); 

ответ

7

Исправлено. Изображения, созданные ImageReader, должны быть закрыты, иначе они быстро заполнят память.

@Override 
onImageAvailable(ImageReader reader) { 
    Image image = reader.acquireLatestImage(); 
    // Process the image 
    image.close(); 
} 
+0

Большое спасибо за разъяснения! Мое приложение замерзало после получения 7 кадров. –

+0

Большое спасибо. Этот API обрабатывает память странно. – jokeman

Смежные вопросы