author | Lawrence Mok <lawrence.mok@amlogic.com> | 2011-11-28 20:05:09 (GMT) |
---|---|---|
committer | Lawrence Mok <lawrence.mok@amlogic.com> | 2011-11-28 20:05:09 (GMT) |
commit | c171ef796b39f5d50734aef721fd27a193a0a290 (patch) | |
tree | 1529234156931ffbd1d4a5aad4d403aa028f877e | |
parent | bffd26099431c4b42574bf86c0c77ed5f44b9e10 (diff) | |
download | camera-c171ef796b39f5d50734aef721fd27a193a0a290.zip camera-c171ef796b39f5d50734aef721fd27a193a0a290.tar.gz camera-c171ef796b39f5d50734aef721fd27a193a0a290.tar.bz2 |
fix starting preview after taking picture
-rw-r--r-- | BaseCameraAdapter.cpp | 1 | ||||
-rw-r--r-- | CameraHal_Module.cpp | 1 | ||||
-rw-r--r-- | V4LCameraAdapter/V4LCameraAdapter.cpp | 81 |
3 files changed, 27 insertions, 56 deletions
diff --git a/BaseCameraAdapter.cpp b/BaseCameraAdapter.cpp index 5ecc829..8f16ac6 100644 --- a/BaseCameraAdapter.cpp +++ b/BaseCameraAdapter.cpp @@ -589,7 +589,6 @@ status_t BaseCameraAdapter::sendCommand(CameraCommands operation, int value1, in { ret = stopPreview(); } - ret = NO_ERROR; /*just add it temporarily for taking picture use , will update it later */ if ( ret == NO_ERROR ) { ret = commitState(); diff --git a/CameraHal_Module.cpp b/CameraHal_Module.cpp index d5d8d84..52b237c 100644 --- a/CameraHal_Module.cpp +++ b/CameraHal_Module.cpp @@ -316,7 +316,6 @@ int camera_take_picture(struct camera_device * device) aml_dev = (aml_camera_device_t*) device; rv = gCameraHals[aml_dev->cameraid]->takePicture(); - rv = gCameraHals[aml_dev->cameraid]->startPreview(); return rv; } diff --git a/V4LCameraAdapter/V4LCameraAdapter.cpp b/V4LCameraAdapter/V4LCameraAdapter.cpp index 04c59e8..65945ee 100644 --- a/V4LCameraAdapter/V4LCameraAdapter.cpp +++ b/V4LCameraAdapter/V4LCameraAdapter.cpp @@ -146,6 +146,7 @@ status_t V4LCameraAdapter::initialize(CameraProperties::Properties* caps) // --------- writefile((char*)SYSFILE_CAMERA_SET_PARA, (char*)"1"); + writefile((char*)SYSFILE_CAMERA_SET_MIRROR, (char*)"1"); LOG_FUNCTION_NAME_EXIT; @@ -160,8 +161,8 @@ status_t V4LCameraAdapter::fillThisBuffer(void* frameBuf, CameraFrame::FrameType //LOGD("fillThisBuffer frameType=%d", frameType); if (CameraFrame::IMAGE_FRAME == frameType) { - if (NULL != mEndImageCaptureCallback) - mEndImageCaptureCallback(mEndCaptureData); + //if (NULL != mEndImageCaptureCallback) + //mEndImageCaptureCallback(mEndCaptureData); return NO_ERROR; } if ( !mVideoInfo->isStreaming ) @@ -357,7 +358,7 @@ status_t V4LCameraAdapter::UseBuffersCapture(void* bufArr, int num) * stop preview now so that we can set buffer format here. */ LOGD("UseBuffersCapture stopPreview.."); - stopPreview(); + this->stopPreview(); LOGD("UseBuffersCapture setBuffersFormat.."); int width, height; @@ -484,6 +485,7 @@ status_t V4LCameraAdapter::stopPreview() return NO_INIT; } + mPreviewing = false; mPreviewThread->requestExitAndWait(); mPreviewThread.clear(); @@ -515,7 +517,6 @@ status_t V4LCameraAdapter::stopPreview() LOGD("stopPreview clearexit.."); mPreviewBufs.clear(); - mPreviewing = false; return ret; @@ -678,32 +679,10 @@ int V4LCameraAdapter::previewThread() } int width, height; - #if 0 - uint16_t* dest = (uint16_t*)gralloc_hnd->base; //ptr; - uint16_t* src = (uint16_t*) fp; - mParams.getPreviewSize(&width, &height); - //LOGD("previewThread ptr=%#x dest=%#x fp=%#x width=%d height=%d", ptr, dest, fp, width, height); - for(int i=0;i<height;i++) - { - for(int j=0;j<width;j++) - { - *dest = *src; - //convert from YUYV to UYVY supported in Camera service - /* - *dest = (((*src & 0xFF000000)>>24)<<16)|(((*src & 0x00FF0000)>>16)<<24) | - (((*src & 0xFF00)>>8)<<0)|(((*src & 0x00FF)>>0)<<8); - */ - src++; - dest++; - } - //dest += 4096/2-width; - } - #else uint8_t* dest = (uint8_t*)gralloc_hnd->base; //ptr; uint8_t* src = (uint8_t*) fp; mParams.getPreviewSize(&width, &height); memcpy(dest,src,width*height*3/2); - #endif mParams.getPreviewSize(&width, &height); frame.mFrameMask = CameraFrame::PREVIEW_FRAME_SYNC; @@ -786,28 +765,13 @@ int V4LCameraAdapter::pictureThread() mParams.getPictureSize(&width, &height); LOGD("pictureThread mCaptureBuf=%#x dest=%#x fp=%#x width=%d height=%d", mCaptureBuf, dest, fp, width, height); LOGD("length=%d bytesused=%d index=%d", mVideoInfo->buf.length, mVideoInfo->buf.bytesused, index); -#if 0 - //frame size? - int zzz = 0; - for(int i=0;i<height;i++) - { - for(int j=0;j<width;j++) - { - if ((src - (uint16_t*)fp) > mVideoInfo->buf.length) { - LOGD("i j %d %d i*j*2 %d", i, j, i*j); - break; - } - zzz += *src; - *dest = *src; - src++; - dest++; - } - //dest += 4096/2-width; - } - LOGD("zzz %d", zzz); -#else - memcpy(dest, src, mVideoInfo->buf.length); -#endif + + memcpy(dest, src, mVideoInfo->buf.length); + + notifyShutterSubscribers(); + //TODO correct time to call this? + if (NULL != mEndImageCaptureCallback) + mEndImageCaptureCallback(mEndCaptureData); frame.mFrameMask = CameraFrame::IMAGE_FRAME; frame.mFrameType = CameraFrame::IMAGE_FRAME; @@ -821,12 +785,6 @@ int V4LCameraAdapter::pictureThread() frame.mWidth = width; frame.mHeight = height; frame.mTimestamp = systemTime(SYSTEM_TIME_MONOTONIC);; - ret = setInitFrameRefCount(frame.mBuffer, frame.mFrameMask); - if (ret) - LOGE("setInitFrameRefCount err=%d", ret); - else - ret = sendFrameToSubscribers(&frame); - //LOGD("pictureThread /sendFrameToSubscribers ret=%d", ret); if (mVideoInfo->isStreaming) { @@ -853,6 +811,21 @@ int V4LCameraAdapter::pictureThread() } + // start preview thread again after stopping it in UseBuffersCapture + { + Mutex::Autolock lock(mPreviewBufferLock); + UseBuffersPreview(mPreviewBuffers, mPreviewBufferCount); + startPreview(); + } + + + ret = setInitFrameRefCount(frame.mBuffer, frame.mFrameMask); + if (ret) + LOGE("setInitFrameRefCount err=%d", ret); + else + ret = sendFrameToSubscribers(&frame); + //LOGD("pictureThread /sendFrameToSubscribers ret=%d", ret); + return ret; } |