10

i am looking for an example of manual focus in camera2 in android. I tried to get minimum focus distance and available focal lengths shown below, but it didn't help. How to control the focus distance ?

float minimumLens = characteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE);

float[] lensDistances = characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS); 

I need to control it with seekbar. Thanks in advance.

Alexandre Marcondes
  • 5,859
  • 2
  • 25
  • 31
user0770
  • 797
  • 3
  • 11
  • 22

1 Answers1

9
 switch (seekBar.getId()) {
            case R.id.sb_focus:
                float minimumLens = mCameraCharacteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE);
                float num = (((float) i) * minimumLens / 100);
                mPreviewBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE, num);
                int showNum = (int) num;
                mSeekBarTextView.setText("focus:" + showNum);
                break;}

be careful ,CONTROL_AF_MODE should be OFF.
https://github.com/pinguo-yuyidong/Camera2/blob/master/app/src/main/java/us/yydcdut/androidltest/ui/DisplayFragment.java
code in Line 1109

yydcdut
  • 801
  • 6
  • 9
  • what about manual focus for a single area ? How can i do that? – user0770 Mar 04 '16 at 12:44
  • @yydcdut: Unfortunately this solution does not work on the Samsung Galaxy S7. While I haven't tried it on any other samsung phone, I strongly suspect that most samsung phones suffer from the problem. – unshul Sep 17 '16 at 19:08
  • 1
    Just for future readers, I believe in this sample code you want: mPreviewBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE, minimumLens); It's not clear what exactly num is, but it's somehow related to the percentage of the focal distance, probably for the seekBar. – jranalli Apr 06 '17 at 18:12
  • What's "i" variable ? – Sebastien Ferrand Apr 15 '20 at 03:38
  • @SebastienFerrand "i" is seekbar progress – c_sharma Oct 15 '20 at 06:35