Loading camera/libcameraservice/CameraService.cpp +43 −28 Original line number Diff line number Diff line Loading @@ -683,6 +683,8 @@ void CameraService::Client::stopPreview() { LOGD("stopPreview (pid %d)", getCallingPid()); // hold main lock during state transition { Mutex::Autolock lock(mLock); if (checkPid() != NO_ERROR) return; Loading @@ -698,14 +700,22 @@ void CameraService::Client::stopPreview() if (mSurface != 0 && !mUseOverlay) { mSurface->unregisterBuffers(); } } // hold preview buffer lock { Mutex::Autolock lock(mPreviewLock); mPreviewBuffer.clear(); } } // stop recording mode void CameraService::Client::stopRecording() { LOGD("stopRecording (pid %d)", getCallingPid()); // hold main lock during state transition { Mutex::Autolock lock(mLock); if (checkPid() != NO_ERROR) return; Loading @@ -722,9 +732,14 @@ void CameraService::Client::stopRecording() mHardware->stopRecording(); mHardware->disableMsgType(CAMERA_MSG_VIDEO_FRAME); LOGD("stopRecording(), hardware stopped OK"); } // hold preview buffer lock { Mutex::Autolock lock(mPreviewLock); mPreviewBuffer.clear(); } } // release a recording frame void CameraService::Client::releaseRecordingFrame(const sp<IMemory>& mem) Loading Loading @@ -1216,10 +1231,10 @@ void CameraService::Client::copyFrameAndPostCopiedFrame(const sp<ICameraClient>& // provided it's big enough. Don't allocate the memory or // perform the copy if there's no callback. // hold the lock while we grab a reference to the preview buffer // hold the preview lock while we grab a reference to the preview buffer sp<MemoryHeapBase> previewBuffer; { Mutex::Autolock lock(mLock); Mutex::Autolock lock(mPreviewLock); if (mPreviewBuffer == 0) { mPreviewBuffer = new MemoryHeapBase(size, 0, NULL); } else if (size > mPreviewBuffer->virtualSize()) { Loading camera/libcameraservice/CameraService.h +3 −1 Original line number Diff line number Diff line Loading @@ -181,7 +181,6 @@ private: mutable Condition mReady; sp<CameraService> mCameraService; sp<ISurface> mSurface; sp<MemoryHeapBase> mPreviewBuffer; int mPreviewCallbackFlag; sp<MediaPlayer> mMediaPlayerClick; Loading @@ -197,6 +196,9 @@ private: sp<OverlayRef> mOverlayRef; int mOverlayW; int mOverlayH; mutable Mutex mPreviewLock; sp<MemoryHeapBase> mPreviewBuffer; }; // ---------------------------------------------------------------------------- Loading Loading
camera/libcameraservice/CameraService.cpp +43 −28 Original line number Diff line number Diff line Loading @@ -683,6 +683,8 @@ void CameraService::Client::stopPreview() { LOGD("stopPreview (pid %d)", getCallingPid()); // hold main lock during state transition { Mutex::Autolock lock(mLock); if (checkPid() != NO_ERROR) return; Loading @@ -698,14 +700,22 @@ void CameraService::Client::stopPreview() if (mSurface != 0 && !mUseOverlay) { mSurface->unregisterBuffers(); } } // hold preview buffer lock { Mutex::Autolock lock(mPreviewLock); mPreviewBuffer.clear(); } } // stop recording mode void CameraService::Client::stopRecording() { LOGD("stopRecording (pid %d)", getCallingPid()); // hold main lock during state transition { Mutex::Autolock lock(mLock); if (checkPid() != NO_ERROR) return; Loading @@ -722,9 +732,14 @@ void CameraService::Client::stopRecording() mHardware->stopRecording(); mHardware->disableMsgType(CAMERA_MSG_VIDEO_FRAME); LOGD("stopRecording(), hardware stopped OK"); } // hold preview buffer lock { Mutex::Autolock lock(mPreviewLock); mPreviewBuffer.clear(); } } // release a recording frame void CameraService::Client::releaseRecordingFrame(const sp<IMemory>& mem) Loading Loading @@ -1216,10 +1231,10 @@ void CameraService::Client::copyFrameAndPostCopiedFrame(const sp<ICameraClient>& // provided it's big enough. Don't allocate the memory or // perform the copy if there's no callback. // hold the lock while we grab a reference to the preview buffer // hold the preview lock while we grab a reference to the preview buffer sp<MemoryHeapBase> previewBuffer; { Mutex::Autolock lock(mLock); Mutex::Autolock lock(mPreviewLock); if (mPreviewBuffer == 0) { mPreviewBuffer = new MemoryHeapBase(size, 0, NULL); } else if (size > mPreviewBuffer->virtualSize()) { Loading
camera/libcameraservice/CameraService.h +3 −1 Original line number Diff line number Diff line Loading @@ -181,7 +181,6 @@ private: mutable Condition mReady; sp<CameraService> mCameraService; sp<ISurface> mSurface; sp<MemoryHeapBase> mPreviewBuffer; int mPreviewCallbackFlag; sp<MediaPlayer> mMediaPlayerClick; Loading @@ -197,6 +196,9 @@ private: sp<OverlayRef> mOverlayRef; int mOverlayW; int mOverlayH; mutable Mutex mPreviewLock; sp<MemoryHeapBase> mPreviewBuffer; }; // ---------------------------------------------------------------------------- Loading