Balance having critical features with supporting target user base What features the API supports deciding minimum SDK using Build.VERSION What features the device camera has using use-feature and PackageManager querying support level from the Camera being aware of manufacturer/device quirks WANT CAN You can’t always get what you want. But if you try sometimes well you just mind find You get what you need.
device would require: a back-facing camera a front-facing camera auto-focus flash From docs: “This will automatically enforce the <uses-feature> manifest element for all camera features.” If any of the above are not requirements, specify <uses-feature>: <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/> CAMERA SETUP: THE MANIFEST 5
a SurfaceView to your layout for the camera preview Implement a SurfaceHolder.Callback: surfaceCreated(), surfaceChanged(), surfaceDestroyed() Pass the callback to the SurfaceHolder instance of the SurfaceView Get android.hardware.Camera instance via Camera.open() Call Camera.getParameters() and perform any initial setup Call Camera.startPreview() wait for surface to be created: #surfaceCreated Call Camera.setPreviewDisplay() with the SurfaceHolder
the surface is created Otherwise, no error, no preview Preview size changes must be made between Camera.stopPreview()/Camera.startPreview() all Camera.release() in onPause() to free up the camera The surface is destroyed when SurfaceView is View.INVISIBLE. CAMERA SETUP: THINGS TO NOTE 9
3 image formats raw: uncompressed postview: scaled, fully processed JPEG: compressed Raw and postview support depends on device ShutterCallback (more or less) invoked the moment that camera sensor captures an image Camera.takePicture() stops the camera preview; call Camera.startPreview() in/after picture taking callbacks IMAGE CAPTURE 10
the camera for the image to match the natural orientation of the device facing: front or back whether the shutter sound can be disabled Camera.getCameraInfo(): camera IDs are 0-based indices Use CameraInfo to swap between front and back Use PackageManager to check if a front camera exists if front camera is not required by <use-feature> Close the current camera before swapping CAMERA INFO: SWITCHING IT UP 12
Natural camera orientation Natural device orientation Camera.Info.orientation = 90 Camera.Info.orientation = 270 90° 270° (looking at the device from the front)
to check for auto-focus and flash Otherwise check getter return values in Camera.Parameters !isAutoWhiteBalanceLockSupported() Or returns 0 or null API level also a factor (of course) CAMERA PARAMETERS 19
values on a Camera.Parameters instance and pass it to Camera.setParameters() Always call Camera.getParameters() Do not hold onto Camera.Parameters instances Only flattened string makes it past Camera service CAMERA SETTINGS: UPDATING 21
calculate exposure + WB focus areas: prioritizing focus Camera.Parameters.setMeteringAreas(List<Camera.Area>) Camera.Parameters.setFocusAreas(List<Camera.Area>) Relative to the current zoom: cannot be outside FOV Camera viewfinder/sensor has its own coordinate system CAMERA FEATURES: AREAS 23
intensive work inside the callback No event when no faces are detected Modifying the UI in response to face detection: timer or postDelayed to reset UI after some time without detection event FACE DETECTION 27
1: black box: 3 modes (preview, still, video) HAL3: all requests handled same way, “unified view” More user control for both capture and post-processing Maintainability and efficiency CAMERA API 2 IN L: THE FUTURE IS AWESOME 28
result Dynamic metadata: timestamps, exposure time More output options Multiple Surface instances receive results from a single request App-visible JPEG, YUV, RAW Bayer buffers CAMERA API 2 IN L: THE FUTURE IS AWESOME 31
+ CameraDevice.StateListener Camera (function access) -> CameraDevice Actually get the ID of the camera! CameraCaptureSession/CaptureRequest Parameters -> CaptureRequest.Builder.set() to configure CameraInfo -> CameraCharacteristics CameraMetadata parent of CameraCharacteristics, CaptureRequest, CaptureResult, TotalCaptureResult CAMERA API 2 IN L: THE FUTURE IS AWESOME 32
words) More complex… but more is still better More control and performance More consistency in the API More for developers to leverage It’s going to be… CAMERA API 2 IN L: THE FUTURE IS AWESOME 33
Owner Randomly Typing ! @queencodemonkey ! [email protected] randomlytyping.com ! speakerdeck.com/randomlytyping slideshare.net/randomlytyping 34 Code will coming to github ! Things To check out ! Building Apps with Multimedia: Capturing Photos developer.android.com/training/camera/ index.html ! Android Design in Action: Camera Apps youtube.com/watch?v=OLSa7fErTAM ! Standford Digital Image Processing Class stanford.edu/class/ee368/Android/index.html ! DevBytes: Android L - Camera2 API youtube.com/watch?v=Xtp3tH27OFs ! Sample Camera 2 API app: github.com/googlesamples/android- Camera2Basic/blob/master/Camera2BasicSample ! Digital Camera Sensor Sizes gizmag.com/camera-sensor-size-guide/26684/