From d69c7f654cc772b03717999c1b24402d5c40e69f Mon Sep 17 00:00:00 2001 From: James Dong Date: Thu, 9 Dec 2010 11:24:22 -0800 Subject: Release a recording frame only if mCamera exists and is not cleared. and also call mCamera->stopRecording() only after CameraSource releases all the outstanding video frames sent from CameraSource to its clients (such as video encoder). Change-Id: I7eeed4e2f388e77c28668d52c24b5330d3d9ebde --- media/libstagefright/CameraSource.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'media/libstagefright/CameraSource.cpp') diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp index 371c21f..8c686b9 100644 --- a/media/libstagefright/CameraSource.cpp +++ b/media/libstagefright/CameraSource.cpp @@ -576,13 +576,13 @@ status_t CameraSource::stop() { mFrameAvailableCondition.signal(); int64_t token = IPCThreadState::self()->clearCallingIdentity(); - stopCameraRecording(); releaseQueuedFrames(); while (!mFramesBeingEncoded.empty()) { LOGI("Waiting for outstanding frames being encoded: %d", mFramesBeingEncoded.size()); mFrameCompleteCondition.wait(mLock); } + stopCameraRecording(); releaseCamera(); IPCThreadState::self()->restoreCallingIdentity(token); @@ -602,7 +602,9 @@ status_t CameraSource::stop() { } void CameraSource::releaseRecordingFrame(const sp& frame) { - mCamera->releaseRecordingFrame(frame); + if (mCamera != NULL) { + mCamera->releaseRecordingFrame(frame); + } } void CameraSource::releaseQueuedFrames() { -- cgit v1.1