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?