diff options
Diffstat (limited to 'camera')
-rw-r--r-- | camera/ANativeWindowDisplayAdapter.cpp | 4 | ||||
-rw-r--r-- | camera/CameraHal.cpp | 15 |
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; |