diff options
| author | 2015-12-16 23:09:29 +0000 | |
|---|---|---|
| committer | 2015-12-16 23:09:29 +0000 | |
| commit | c8a16ab564532cbbdd781d0528c825945c63e907 (patch) | |
| tree | 1f71915aeb37a15fc1be19ee8368b30702982e6b | |
| parent | 04ce46db647724b7c30c9a593bf717888d59081c (diff) | |
| parent | bcb636d4232bedfb421ecaa157f67b96a1b26944 (diff) | |
Merge "Camera2: create new streams if surface size has changed"
am: bcb636d423
* commit 'bcb636d4232bedfb421ecaa157f67b96a1b26944':
Camera2: create new streams if surface size has changed
| -rw-r--r-- | core/java/android/hardware/camera2/impl/CameraDeviceImpl.java | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java index 6e02df1f7131..8bfcc708f834 100644 --- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java @@ -95,6 +95,8 @@ public class CameraDeviceImpl extends CameraDevice { new SimpleEntry<>(REQUEST_ID_NONE, null); private final SparseArray<OutputConfiguration> mConfiguredOutputs = new SparseArray<>(); + private final SparseArray<Size> mConfiguredOutputSizes = + new SparseArray<>(); private final String mCameraId; private final CameraCharacteristics mCharacteristics; @@ -388,7 +390,14 @@ public class CameraDeviceImpl extends CameraDevice { if (!outputs.contains(outConfig)) { deleteList.add(streamId); } else { - addSet.remove(outConfig); // Don't create a stream previously created + // Even if same surface and rotation, the surface can have re-sized. + // If so, we must create a new stream to ensure HAL is configured correctly. + Size outSize = SurfaceUtils.getSurfaceSize(outConfig.getSurface()); + if (!outSize.equals(mConfiguredOutputSizes.valueAt(i))) { + deleteList.add(streamId); + } else { + addSet.remove(outConfig); // Don't create a stream previously created + } } } @@ -421,13 +430,16 @@ public class CameraDeviceImpl extends CameraDevice { for (Integer streamId : deleteList) { mRemoteDevice.deleteStream(streamId); mConfiguredOutputs.delete(streamId); + mConfiguredOutputSizes.delete(streamId); } // Add all new streams for (OutputConfiguration outConfig : outputs) { if (addSet.contains(outConfig)) { int streamId = mRemoteDevice.createStream(outConfig); + Size outSize = SurfaceUtils.getSurfaceSize(outConfig.getSurface()); mConfiguredOutputs.put(streamId, outConfig); + mConfiguredOutputSizes.put(streamId, outSize); } } |