The camera exactly I want is part of a logical camera and cannot be found in getCameraIdList.
I use CameraCharacteristics to get Physical CameraId.
CameraFilter cameraFilter = Camera2CameraFilter.createCameraFilter((idCharMap) -> {
LinkedHashMap<String, CameraCharacteristics> resultCameras=new LinkedHashMap<String, CameraCharacteristics>();
for(Map.Entry<String, CameraCharacteristics> entry : idCharMap.entrySet()) {
Set<String> ID=entry.getValue().getPhysicalCameraIds();
}
return resultCameras;
});
In google pixel5,it returns "2" and "3".
When using Camera2 api,I can use code like below to decide which camera to use by Physical CameraId which I get from Func getPhysicalCameraIds().
OutputConfiguration outputConfiguration1 = new OutputConfiguration(mCameraImageReader1.getSurface());
outputConfiguration1.setPhysicalCameraId("2");
outputConfigurationList.add((outputConfiguration1));
OutputConfiguration outputConfiguration2 = new OutputConfiguration(mCameraImageReader2.getSurface());
outputConfiguration2.setPhysicalCameraId("3");
outputConfigurationList.add((outputConfiguration2));
SessionConfiguration sessionConfiguration = new SessionConfiguration(SessionConfiguration.SESSION_REGULAR,
outputConfigurationList, AsyncTask.THREAD_POOL_EXECUTOR, myStateCallback);
mCamera.createCaptureSession(sessionConfiguration);
Then I can get 2 different image data stream from two back cameras.
The logical cameraid returned by getCameraIdList are different from Physical CameraId.
Just to confirm.
You say "Now CameraFilter only provides the camera IDs from getCameraIdList.".
Does it mean that currently cameraFilter just cannot distinguish different back cameras?
Thanks a lot