Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Camera2 increase brightness

Tags:

I am using android camera2 in my application to take continuous images, Here when I use camera2 getting image preview brightness very dark compare to original camera. I seen this but there is no similar requirement in that answer.

I tried to set brightness in camera2 as suggested here:

Note that this control will only be effective if android.control.aeMode != OFF. This control will take effect even when android.control.aeLock == true.

captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);             captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);             captureRequestBuilder.set(CaptureRequest.CONTROL_AE_LOCK, true);             captureRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 6); 

But it still showing preview as dark image only as shown below.

See the difference here:

Original Camera: enter image description here

Using Camera2: enter image description here

And what is the value I need to pass as second parameter in:

captureRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, 6); 

I kept 6 because as suggested in doc's:

For example, if the exposure value (EV) step is 0.333, '6' will mean an exposure compensation of +2 EV; -3 will mean an exposure compensation of -1 EV.

But still no effect in brightness..

like image 765
Shailendra Madda Avatar asked Nov 09 '17 07:11

Shailendra Madda


People also ask

What is Camera2 in Android?

Camera2 is the latest low-level Android camera package and replaces the deprecated Camera class. Camera2 provides in-depth controls for complex use cases, but requires you to manage device-specific configurations. You can read about specific Camera2 classes and functions in the reference documentation.


1 Answers

Here it is:

Add below code in onConfigured() and unlockFocus()

captureRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,getRange()); 

By using the above code you will get the better preview. But your captured picture will remain as it is. To get the better picture as well use the same below code in captureStillPicture()

captureBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, getRange()); 

getRange is:

    private Range<Integer> getRange() {     CameraCharacteristics chars = null;     try {         chars = mCameraManager.getCameraCharacteristics(mCameraId);         Range<Integer>[] ranges = chars.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);         Range<Integer> result = null;         for (Range<Integer> range : ranges) {             int upper = range.getUpper();             // 10 - min range upper for my needs             if (upper >= 10) {                 if (result == null || upper < result.getUpper().intValue()) {                     result = range;                 }             }         }         if (result == null) {             result = ranges[0];         }         return result;     } catch (CameraAccessException e) {         e.printStackTrace();         return null;     } } 
like image 198
Ronak Thakkar Avatar answered Sep 19 '22 01:09

Ronak Thakkar