0

I'm making use of the cwac-cam2 library owned by CommonsWare.

I've been struggling trying to modify some of its code in Camera2 engine to listen for zoom changes.

In the deprecated Camera API, There's a Camera.OnZoomChangeListener, so we can check when the zoom has been changed, but I'm not sure how to achieve that in Camera2 API

  @Override
  public boolean zoomTo(CameraSession session,
                         int zoomLevel) {
    final Session s=(Session)session;
    final Descriptor descriptor=(Descriptor)session.getDescriptor();

    if (s.previewRequest!=null) {
      try {
        final CameraCharacteristics cc=
          mgr.getCameraCharacteristics(descriptor.cameraId);
        final float maxZoom=
          cc.get(
            CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM);

        // if <=1, zoom not possible, so eat the the event
        if (maxZoom>1.0f) {
          float zoomTo=1.0f+((float)zoomLevel*(maxZoom-1.0f)/100.0f);
          Rect zoomRect=cropRegionForZoom(cc, zoomTo);

          s.previewRequestBuilder
            .set(CaptureRequest.SCALER_CROP_REGION, zoomRect);
          s.setZoomRect(zoomRect);
          s.previewRequest=s.previewRequestBuilder.build();
          s.captureSession.setRepeatingRequest(s.previewRequest, null, handler);
        }
      }
      catch (CameraAccessException e) {
        getBus().post(new DeepImpactEvent(e));
      }
    }

    return(false);
  }

Is there any listener I can register in-between these code lines so I will be able to know when the zoom was successfully changed?

idish
  • 3,190
  • 12
  • 53
  • 85

0 Answers0