2017-07-03 2 views
1

Ich arbeite mit der Camera2 API und ich folge einem Tutorial. Ich habe die TextureView eingerichtet und ich habe die SurfaceTextureListener auf dieser TextureView. Wenn der Listener aufgerufen wird, verwende ich die CameraManager, um die Kamera-ID abzurufen, die ich verwenden möchte, und verwende die Breite und Höhe, die mir zur Verfügung gestellt wurde, um die Vorschaugröße festzulegen. Ich benutze auch die CameraManager, um die Kamera unter Angabe der Kamera-ID und des Kamera-Gerätestatus-Rückrufs zu öffnen. Auf der onOpened Überschreibung Methode rufe ich eine Methode startPreview() genannt:Capture Anfrage und Capture Session in Android

private void startPreview() { 
    SurfaceTexture surfaceTexture = mTextureView.getSurfaceTexture(); 
    surfaceTexture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); 
    Surface previewSurface = new Surface(surfaceTexture); 

    try { 
     mCaptureRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); 
     mCaptureRequestBuilder.addTarget(previewSurface); 

     mCameraDevice.createCaptureSession(Arrays.asList(previewSurface, mImageReader.getSurface()), 
       new CameraCaptureSession.StateCallback() { 
        @Override 
        public void onConfigured(CameraCaptureSession session) { 
         Log.d(TAG, "onConfigured: startPreview"); 
         mPreviewCaptureSession = session; 
         try { 
          mPreviewCaptureSession.setRepeatingRequest(mCaptureRequestBuilder.build(), 
            null, mBackgroundHandler); 
         } catch (CameraAccessException e) { 
          e.printStackTrace(); 
         } 
        } 

        @Override 
        public void onConfigureFailed(CameraCaptureSession session) { 
         Log.d(TAG, "onConfigureFailed: startPreview"); 

        } 
       }, null); 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 
} 

Was für eine Erfassungs-Anfrage ist und Capture Session? Die Android documentation Staaten createCaptureRequest:

eine CaptureRequest.Builder für neue Capture erstellen fordert

Ok, also was ein CaptureRequest.Builder ist? Die Dokumentation:

Ein Builder für Capture-Anforderungen.

Beide Definitionen verweisen auf die anderen, ohne eine Bedeutung zu geben.

+0

Konnten Sie Quellcode zur Verfügung stellen, der sich aufbaut? Irgendwelche Verbindungen –

Antwort

1

A CaptureRequest definiert die Parameter für das Kameragerät (z. B. Belichtung, Auflösung). Die Camera2-API bietet Vorlagen, um die Vorbereitung des besten CaptureRequest zu erleichtern, abgestimmt auf die jeweilige Kamera und für den Zweck.

Um einen CaptureRequest an der Kameraeinrichtung übergeben, verwenden wir ein CameraCaptureSession, die den Kontext für einzelne liefert oder wiederholt (zum Beispiel ein Foto) Anfragen (zum Beispiel Live-Vorschau angezeigt wird).

Das Erstellen einer Sitzung ist eine kostspielige Operation und kann einige hundert Millisekunden dauern, da die internen Pipelines der Kamera konfiguriert und Speicherpuffer für das Senden von Bildern an die gewünschten Ziele zugewiesen werden müssen.