summaryrefslogtreecommitdiffstats
path: root/camera
diff options
context:
space:
mode:
Diffstat (limited to 'camera')
-rw-r--r--camera/ANativeWindowDisplayAdapter.cpp4
-rw-r--r--camera/CameraHal.cpp15
2 files changed, 13 insertions, 6 deletions
diff --git a/camera/ANativeWindowDisplayAdapter.cpp b/camera/ANativeWindowDisplayAdapter.cpp
index a7b2e86..e6a4c87 100644
--- a/camera/ANativeWindowDisplayAdapter.cpp
+++ b/camera/ANativeWindowDisplayAdapter.cpp
@@ -269,6 +269,10 @@ int ANativeWindowDisplayAdapter::setPreviewWindow(preview_stream_ops_t* window)
return BAD_VALUE;
}
+ if ( window == mANativeWindow ) {
+ return ALREADY_EXISTS;
+ }
+
///Destroy the existing window object, if it exists
destroy();
diff --git a/camera/CameraHal.cpp b/camera/CameraHal.cpp
index c7ba87f..c64b7e2 100644
--- a/camera/CameraHal.cpp
+++ b/camera/CameraHal.cpp
@@ -1713,12 +1713,15 @@ status_t CameraHal::setPreviewWindow(struct preview_stream_ops *window)
// Start the preview since the window is now available
ret = startPreview();
}
- }else
- {
- /* If mDisplayAdpater is already created. No need to do anything.
- * We get a surface handle directly now, so we can reconfigure surface
- * itself in DisplayAdapter if dimensions have changed
- */
+ } else {
+ // Update the display adapter with the new window that is passed from CameraService
+ ret = mDisplayAdapter->setPreviewWindow(window);
+ if ( (NO_ERROR == ret) && previewEnabled() ) {
+ restartPreview();
+ } else if (ret == ALREADY_EXISTS) {
+ // ALREADY_EXISTS should be treated as a noop in this case
+ ret = NO_ERROR;
+ }
}
LOG_FUNCTION_NAME_EXIT;