From ea7b485595f8cec6a66668b5c54c8f297d843f77 Mon Sep 17 00:00:00 2001 From: James Dong Date: Sun, 5 Dec 2010 14:25:34 -0800 Subject: Remove check if the target video resolution is not supported by CameraSource and clean up Camera is CameraSource could not created. bug - 3254411 Change-Id: I43497c450e7007de5ce027e2912b1421119e8887 --- .../libmediaplayerservice/StagefrightRecorder.cpp | 10 ++++++- media/libstagefright/CameraSource.cpp | 33 +++++++++++----------- 2 files changed, 25 insertions(+), 18 deletions(-) (limited to 'media') diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp index cee92d2..f72d919 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.cpp +++ b/media/libmediaplayerservice/StagefrightRecorder.cpp @@ -1079,7 +1079,15 @@ status_t StagefrightRecorder::setupCameraSource( mCamera, mCameraId, videoSize, mFrameRate, mPreviewSurface, true /*storeMetaDataInVideoBuffers*/); } - CHECK(*cameraSource != NULL); + if (*cameraSource == NULL) { + return UNKNOWN_ERROR; + } + + if ((*cameraSource)->initCheck() != OK) { + (*cameraSource).clear(); + *cameraSource = NULL; + return NO_INIT; + } // When frame rate is not set, the actual frame rate will be set to // the current frame rate being used. diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp index d9ff723..ed9e865 100644 --- a/media/libstagefright/CameraSource.cpp +++ b/media/libstagefright/CameraSource.cpp @@ -130,13 +130,6 @@ CameraSource *CameraSource::CreateFromCamera( CameraSource *source = new CameraSource(camera, cameraId, videoSize, frameRate, surface, storeMetaDataInVideoBuffers); - - if (source != NULL) { - if (source->initCheck() != OK) { - delete source; - return NULL; - } - } return source; } @@ -293,6 +286,7 @@ status_t CameraSource::configureCamera( if (width != -1 && height != -1) { if (!isVideoSizeSupported(width, height, sizes)) { LOGE("Video dimension (%dx%d) is unsupported", width, height); + releaseCamera(); return BAD_VALUE; } if (isSetVideoSizeSupportedByCamera) { @@ -306,6 +300,7 @@ status_t CameraSource::configureCamera( // If one and only one of the width and height is -1 // we reject such a request. LOGE("Requested video size (%dx%d) is not supported", width, height); + releaseCamera(); return BAD_VALUE; } else { // width == -1 && height == -1 // Do not configure the camera. @@ -323,6 +318,7 @@ status_t CameraSource::configureCamera( if (strstr(supportedFrameRates, buf) == NULL) { LOGE("Requested frame rate (%d) is not supported: %s", frameRate, supportedFrameRates); + releaseCamera(); return BAD_VALUE; } @@ -561,6 +557,18 @@ void CameraSource::stopCameraRecording() { mCamera->stopRecording(); } +void CameraSource::releaseCamera() { + LOGV("releaseCamera"); + if ((mCameraFlags & FLAGS_HOT_CAMERA) == 0) { + LOGV("Camera was cold when we started, stopping preview"); + mCamera->stopPreview(); + } + mCamera->unlock(); + mCamera.clear(); + mCamera = 0; + mCameraFlags = 0; +} + status_t CameraSource::stop() { LOGV("stop"); Mutex::Autolock autoLock(mLock); @@ -575,16 +583,7 @@ status_t CameraSource::stop() { mFramesBeingEncoded.size()); mFrameCompleteCondition.wait(mLock); } - - LOGV("Disconnect camera"); - if ((mCameraFlags & FLAGS_HOT_CAMERA) == 0) { - LOGV("Camera was cold when we started, stopping preview"); - mCamera->stopPreview(); - } - mCamera->unlock(); - mCamera.clear(); - mCamera = 0; - mCameraFlags = 0; + releaseCamera(); IPCThreadState::self()->restoreCallingIdentity(token); if (mCollectStats) { -- cgit v1.1