diff --git a/include/media/stagefright/CameraSource.h b/include/media/stagefright/CameraSource.h
index e6c9f93..794355b 100644
--- a/include/media/stagefright/CameraSource.h
+++ b/include/media/stagefright/CameraSource.h
@@ -215,6 +215,8 @@
     status_t checkFrameRate(const CameraParameters& params,
                     int32_t frameRate);
 
+    void releaseCamera();
+
     CameraSource(const CameraSource &);
     CameraSource &operator=(const CameraSource &);
 };
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 @@
                 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 *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 @@
     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 @@
         // 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 @@
         if (strstr(supportedFrameRates, buf) == NULL) {
             LOGE("Requested frame rate (%d) is not supported: %s",
                 frameRate, supportedFrameRates);
+            releaseCamera();
             return BAD_VALUE;
         }
 
@@ -561,6 +557,18 @@
     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 @@
                 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) {
