diff options
author | Ruben Brunk <rubenbrunk@google.com> | 2014-02-14 15:07:21 -0800 |
---|---|---|
committer | Ruben Brunk <rubenbrunk@google.com> | 2014-02-18 10:17:11 -0800 |
commit | 26cee964ab4e0a2bd6ae9ad199ba78ea9634421c (patch) | |
tree | abb228216bcc39023b4095278e3ec8eaa5be7641 /media/libstagefright/CameraSource.cpp | |
parent | 29182ee0515bd8dd56a22bc1d0c7cad7ca4cfd86 (diff) | |
download | frameworks_av-26cee964ab4e0a2bd6ae9ad199ba78ea9634421c.zip frameworks_av-26cee964ab4e0a2bd6ae9ad199ba78ea9634421c.tar.gz frameworks_av-26cee964ab4e0a2bd6ae9ad199ba78ea9634421c.tar.bz2 |
Handle recording failure more gracefully.
Bug: 13027666
Change-Id: Iec8239bfcd293c8f466b3780e69883b97f387949
Diffstat (limited to 'media/libstagefright/CameraSource.cpp')
-rw-r--r-- | media/libstagefright/CameraSource.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp index f3ff792..b31e9e8 100644 --- a/media/libstagefright/CameraSource.cpp +++ b/media/libstagefright/CameraSource.cpp @@ -586,14 +586,15 @@ CameraSource::~CameraSource() { } } -void CameraSource::startCameraRecording() { +status_t CameraSource::startCameraRecording() { ALOGV("startCameraRecording"); // Reset the identity to the current thread because media server owns the // camera and recording is started by the applications. The applications // will connect to the camera in ICameraRecordingProxy::startRecording. int64_t token = IPCThreadState::self()->clearCallingIdentity(); + status_t err; if (mNumInputBuffers > 0) { - status_t err = mCamera->sendCommand( + err = mCamera->sendCommand( CAMERA_CMD_SET_VIDEO_BUFFER_COUNT, mNumInputBuffers, 0); // This could happen for CameraHAL1 clients; thus the failure is @@ -604,17 +605,25 @@ void CameraSource::startCameraRecording() { } } + err = OK; if (mCameraFlags & FLAGS_HOT_CAMERA) { mCamera->unlock(); mCamera.clear(); - CHECK_EQ((status_t)OK, - mCameraRecordingProxy->startRecording(new ProxyListener(this))); + if ((err = mCameraRecordingProxy->startRecording( + new ProxyListener(this))) != OK) { + ALOGE("Failed to start recording, received error: %s (%d)", + strerror(-err), err); + } } else { mCamera->setListener(new CameraSourceListener(this)); mCamera->startRecording(); - CHECK(mCamera->recordingEnabled()); + if (!mCamera->recordingEnabled()) { + err = -EINVAL; + ALOGE("Failed to start recording"); + } } IPCThreadState::self()->restoreCallingIdentity(token); + return err; } status_t CameraSource::start(MetaData *meta) { @@ -646,10 +655,12 @@ status_t CameraSource::start(MetaData *meta) { } } - startCameraRecording(); + status_t err; + if ((err = startCameraRecording()) == OK) { + mStarted = true; + } - mStarted = true; - return OK; + return err; } void CameraSource::stopCameraRecording() { |