summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorEino-Ville Talvala <etalvala@google.com>2012-07-20 18:38:59 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-07-20 18:39:00 -0700
commitafa1669ef8b3cf172a695f8959d94849cb9f7195 (patch)
tree51ff5a99dcc7d91d53dbcab1a3d857d1fe19dc74 /services
parentf5545b962794b78a97cafa73d0b592f55ffe06d8 (diff)
parent898a9a9b867e5d209671feee4c92266f90a55aa3 (diff)
downloadframeworks_av-afa1669ef8b3cf172a695f8959d94849cb9f7195.zip
frameworks_av-afa1669ef8b3cf172a695f8959d94849cb9f7195.tar.gz
frameworks_av-afa1669ef8b3cf172a695f8959d94849cb9f7195.tar.bz2
Merge "Camera2: Fix recording bugs"
Diffstat (limited to 'services')
-rw-r--r--services/camera/libcameraservice/Camera2Client.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/services/camera/libcameraservice/Camera2Client.cpp b/services/camera/libcameraservice/Camera2Client.cpp
index 8d4add4..9d904e8 100644
--- a/services/camera/libcameraservice/Camera2Client.cpp
+++ b/services/camera/libcameraservice/Camera2Client.cpp
@@ -338,6 +338,11 @@ void Camera2Client::disconnect() {
mCaptureStreamId = NO_STREAM;
}
+ if (mRecordingStreamId != NO_STREAM) {
+ mDevice->deleteStream(mRecordingStreamId);
+ mRecordingStreamId = NO_STREAM;
+ }
+
CameraService::Client::disconnect();
}
@@ -1492,10 +1497,12 @@ void Camera2Client::onRecordingFrameAvailable() {
{
Mutex::Autolock icl(mICameraLock);
// TODO: Signal errors here upstream
+ bool discardData = false;
if (mState != RECORD && mState != VIDEO_SNAPSHOT) {
- ALOGE("%s: Camera %d: Recording image buffer produced unexpectedly!",
+ ALOGV("%s: Camera %d: Discarding recording image buffers received after "
+ "recording done",
__FUNCTION__, mCameraId);
- return;
+ discardData = true;
}
CpuConsumer::LockedBuffer imgBuffer;
@@ -1509,9 +1516,14 @@ void Camera2Client::onRecordingFrameAvailable() {
if (imgBuffer.format != (int)kRecordingFormat) {
ALOGE("%s: Camera %d: Unexpected recording format: %x",
__FUNCTION__, mCameraId, imgBuffer.format);
+ discardData = true;
+ }
+
+ if (discardData) {
mRecordingConsumer->unlockBuffer(imgBuffer);
return;
}
+
size_t bufferSize = imgBuffer.width * imgBuffer.height * 3 / 2;
if (mRecordingHeap == 0 ||