Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Google I/O Extended Suwon 2019 Tech Talk - Camera X

Google I/O Extended Suwon 2019 Tech Talk - Camera X

Google I/O Extended Suwon Tech Talk - Camera X (성대현 님)

GDG Suwon

July 16, 2019
Tweet

More Decks by GDG Suwon

Other Decks in Technology

Transcript

  1. Camera1 API Camera Open Camera Release Start Preview Take Picture

    Start Recording Stop Preview HAL1 (Hardware Abstraction Layer)
  2. Camera2 API Capture Request Camera Metadata Camera Manager Camera Result

    Camera Device Capture Session HAL3 (Hardware Abstraction Layer) Open
  3. “ ” But, Camera2 API는 사용이 쉽지 않다. Camera를 Per

    frame으로 Control 가능 Zero Shutter Lag Burst Shot Raw Capture etc.
  4. “ ” Why 사용이 어렵다 Camera1 도 잘 동작한다 여전히

    Camera1 API를 사용 But 최적화된 동작을 보장할 수 없다 ETC..
  5. Why CameraX Backwards Compatible to L Consistent Behavior Stability Optimal

    Performance Camera X uses Camera2 API Camera1 Via Camera Legacy
  6. Why CameraX Camera App Camera 2 API Device HAL Camera

    App Camera 2 API Device HAL Camera X Hide
  7. Why CameraX Preview Image Analysis Image Capture Use Case 기반의

    쉬운 API 제공 Lifecycle Aware Camera Control
  8. CameraX benefits Reduced Device Specific Testing 75% reduction in lines

    of code Easier to read code Smaller apk size Easy to use Managing lifecycles No need for a separate camera thread
  9. CameraX Code – Preview PreviewConfig config = new PreviewConfig.Builder().build(); Preview

    preview = new Preview(config); preview.setOnPreviewOutputUpdateListener( new Preview.OnPreviewOutputUpdateListener() { @Override public void onUpdated(Preview.PreviewOutput previewOutput) { // Your code here. For example, use previewOutput.getSurfaceTexture() // and post to a GL renderer. }); }); CameraX.bindToLifecycle((LifecycleOwner) this, preview);
  10. CameraX Code – Image Capture ImageCaptureConfig config = new ImageCaptureConfig.Builder()

    .setTargetRotation(getWindowManager().getDefaultDisplay().getRotation()) .build(); ImagesCapture imageCapture = new ImageCapture(config); CameraX.bindToLifecycle((LifecycleOwner) this, imageCapture, imageAnalysis, preview);
  11. CameraX Code – Image Capture public void onClick() { File

    file = new File(...); imageCapture.takePicture(file, new ImageCapture.OnImageSavedListener() { @Override public void onImageSaved(File file) { } @Override public void onError( ImageCapture.UseCaseError useCaseError, String message, Throwable cause) { }
  12. CameraX Code – Extension ImageCaptureConfig.Builder builder = new ImageCaptureConfig.Builder(); //

    Create a Extender object which can be used to apply extension // configurations. BokehImageCaptureExtender bokehImageCapture = new BokehImageCaptureExtender(builder); // Query if extension is available (optional). if (bokehImageCapture.isExtensionAvailable()) { // Enable the extension if available. bokehImageCapture.enableExtension(); } // Finish constructing configuration with the same flow as when not using // extensions. ImageCaptureConfig config = builder.build(); ImageCapture useCase = new ImageCapture(config); CameraX.bindToLifecycle((LifecycleOwner)this, useCase); Bokeh Extender