diff options
author | James Dong <jdong@google.com> | 2010-12-05 14:25:34 -0800 |
---|---|---|
committer | James Dong <jdong@google.com> | 2010-12-05 16:08:30 -0800 |
commit | 5df53fe2f038bc23f2e3c452dc8398c8bdd08d30 (patch) | |
tree | bf971ac81017ef67dc0387768f6002e420233dcb /media | |
parent | 933a4bb4ffccc4235e913b401d752789f58bfc06 (diff) | |
download | frameworks_base-5df53fe2f038bc23f2e3c452dc8398c8bdd08d30.zip frameworks_base-5df53fe2f038bc23f2e3c452dc8398c8bdd08d30.tar.gz frameworks_base-5df53fe2f038bc23f2e3c452dc8398c8bdd08d30.tar.bz2 |
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
Diffstat (limited to 'media')
-rw-r--r-- | media/libmediaplayerservice/StagefrightRecorder.cpp | 10 | ||||
-rw-r--r-- | media/libstagefright/CameraSource.cpp | 33 |
2 files changed, 25 insertions, 18 deletions
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) { |