-rw-r--r-- | v3/EmulatedFakeCamera3.cpp | 805 | ||||
-rw-r--r-- | v3/fake-pipeline2/Sensor.cpp | 69 | ||||
-rw-r--r-- | v3/fake-pipeline2/Sensor.h | 1 |
3 files changed, 451 insertions, 424 deletions
diff --git a/v3/fake-pipeline2/Sensor.cpp b/v3/fake-pipeline2/Sensor.cpp index fa826bb..d94da95 100644 --- a/v3/fake-pipeline2/Sensor.cpp +++ b/v3/fake-pipeline2/Sensor.cpp @@ -198,6 +198,7 @@ Sensor::Sensor(): mIoctlSupport(0), msupportrotate(0), mTimeOutCount(0), + mWait(false), mScene(kResolution[0], kResolution[1], kElectronsPerLuxSecond) { @@ -953,6 +954,7 @@ void Sensor::setFrameNumber(uint32_t frameNumber) { status_t Sensor::waitForVSync(nsecs_t reltime) { int res; Mutex::Autolock lock(mControlMutex); + CAMHAL_LOGDB("%s , E mControlMutex" , __FUNCTION__); if (mExitSensorThread) { return -1; } @@ -963,19 +965,20 @@ status_t Sensor::waitForVSync(nsecs_t reltime) { ALOGE("%s: Error waiting for VSync signal: %d", __FUNCTION__, res); return false; } + CAMHAL_LOGDB("%s , X mControlMutex , mGotVSync = %d " , __FUNCTION__ , mGotVSync); return mGotVSync; } status_t Sensor::waitForNewFrame(nsecs_t reltime, nsecs_t *captureTime) { Mutex::Autolock lock(mReadoutMutex); - uint8_t *ret; if (mExitSensorThread) { return -1; } if (mCapturedBuffers == NULL) { int res; + CAMHAL_LOGDB("%s , E mReadoutMutex , reltime = %d" , __FUNCTION__, reltime); res = mReadoutAvailable.waitRelative(mReadoutMutex, reltime); if (res == TIMED_OUT) { return false; @@ -983,12 +986,17 @@ status_t Sensor::waitForNewFrame(nsecs_t reltime, ALOGE("Error waiting for sensor readout signal: %d", res); return false; } - } else { + } + if (mWait) { + mWait = false; + *captureTime = mCaptureTime; + mCapturedBuffers = NULL; mReadoutComplete.signal(); + } else { + *captureTime = mCaptureTime; + mCapturedBuffers = NULL; } - - *captureTime = mCaptureTime; - mCapturedBuffers = NULL; + CAMHAL_LOGDB("%s , X" , __FUNCTION__); return true; } @@ -1034,6 +1042,7 @@ bool Sensor::threadLoop() { SensorListener *listener = NULL; { Mutex::Autolock lock(mControlMutex); + CAMHAL_LOGDB("%s , E mControlMutex" , __FUNCTION__); exposureDuration = mExposureTime; frameDuration = mFrameDuration; gain = mGainFactor; @@ -1077,8 +1086,10 @@ bool Sensor::threadLoop() { if (capturedBuffers != NULL) { ALOGVV("Sensor readout complete"); Mutex::Autolock lock(mReadoutMutex); + CAMHAL_LOGDB("%s , E mReadoutMutex" , __FUNCTION__); if (mCapturedBuffers != NULL) { - ALOGV("Waiting for readout thread to catch up!"); + ALOGE("Waiting for readout thread to catch up!"); + mWait = true; mReadoutComplete.wait(mReadoutMutex); } @@ -1087,6 +1098,7 @@ bool Sensor::threadLoop() { mReadoutAvailable.signal(); capturedBuffers = NULL; } + CAMHAL_LOGDB("%s , X mReadoutMutex" , __FUNCTION__); if (mExitSensorThread) { return false; @@ -1150,6 +1162,7 @@ bool Sensor::threadLoop() { ALOGVV("Frame cycle took %d ms, target %d ms", (int)((endRealTime - startRealTime)/1000000), (int)(frameDuration / 1000000)); + CAMHAL_LOGDB("%s , X" , __FUNCTION__); return true; }; @@ -1181,7 +1194,7 @@ int Sensor::captureNewImage() { mKernelBuffer = NULL; // Might be adding more buffers, so size isn't constant - CAMHAL_LOGDB("size=%d\n", mNextCapturedBuffers->size()); + ALOGVV("size=%d\n", mNextCapturedBuffers->size()); for (size_t i = 0; i < mNextCapturedBuffers->size(); i++) { const StreamBuffer &b = (*mNextCapturedBuffers)[i]; ALOGVV("Sensor capturing buffer %d: stream %d," @@ -2115,7 +2128,7 @@ void Sensor::captureNV21(StreamBuffer b, uint32_t gain) { if (get_device_status(vinfo)) { break; } - CAMHAL_LOGDA("get frame NULL, sleep 5ms"); + ALOGVV("get frame NULL, sleep 5ms"); usleep(5000); mTimeOutCount++; if (mTimeOutCount > 300) { @@ -2124,11 +2137,13 @@ void Sensor::captureNV21(StreamBuffer b, uint32_t gain) { continue; } mTimeOutCount = 0; - if (vinfo->preview.format.fmt.pix.pixelformat != V4L2_PIX_FMT_MJPEG) { - if (vinfo->preview.buf.length != vinfo->preview.buf.bytesused) { - DBG_LOGB("length=%d, bytesused=%d \n", vinfo->preview.buf.length, vinfo->preview.buf.bytesused); - putback_frame(vinfo); - continue; + if (mSensorType == SENSOR_USB) { + if (vinfo->preview.format.fmt.pix.pixelformat != V4L2_PIX_FMT_MJPEG) { + if (vinfo->preview.buf.length != vinfo->preview.buf.bytesused) { + DBG_LOGB("length=%d, bytesused=%d \n", vinfo->preview.buf.length, vinfo->preview.buf.bytesused); + putback_frame(vinfo); + continue; + } } } if (vinfo->preview.format.fmt.pix.pixelformat == V4L2_PIX_FMT_NV21) { @@ -2305,7 +2320,7 @@ void Sensor::captureYV12(StreamBuffer b, uint32_t gain) { if (get_device_status(vinfo)) { break; } - CAMHAL_LOGDA("get frame NULL, sleep 5ms"); + ALOGVV("get frame NULL, sleep 5ms"); usleep(5000); mTimeOutCount++; if (mTimeOutCount > 300) { @@ -2314,11 +2329,13 @@ void Sensor::captureYV12(StreamBuffer b, uint32_t gain) { continue; } mTimeOutCount = 0; - if (vinfo->preview.format.fmt.pix.pixelformat != V4L2_PIX_FMT_MJPEG) { - if (vinfo->preview.buf.length != vinfo->preview.buf.bytesused) { - CAMHAL_LOGDB("length=%d, bytesused=%d \n", vinfo->preview.buf.length, vinfo->preview.buf.bytesused); - putback_frame(vinfo); - continue; + if (mSensorType == SENSOR_USB) { + if (vinfo->preview.format.fmt.pix.pixelformat != V4L2_PIX_FMT_MJPEG) { + if (vinfo->preview.buf.length != vinfo->preview.buf.bytesused) { + CAMHAL_LOGDB("length=%d, bytesused=%d \n", vinfo->preview.buf.length, vinfo->preview.buf.bytesused); + putback_frame(vinfo); + continue; + } } } if (vinfo->preview.format.fmt.pix.pixelformat == V4L2_PIX_FMT_YVU420) { @@ -2431,7 +2448,7 @@ void Sensor::captureYUYV(uint8_t *img, uint32_t gain, uint32_t stride) { if (get_device_status(vinfo)) { break; } - CAMHAL_LOGDA("get frame NULL, sleep 5ms"); + ALOGVV("get frame NULL, sleep 5ms"); usleep(5000); mTimeOutCount++; if (mTimeOutCount > 300) { @@ -2440,11 +2457,13 @@ void Sensor::captureYUYV(uint8_t *img, uint32_t gain, uint32_t stride) { continue; } mTimeOutCount = 0; - if (vinfo->preview.format.fmt.pix.pixelformat != V4L2_PIX_FMT_MJPEG) { - if (vinfo->preview.buf.length != vinfo->preview.buf.bytesused) { - CAMHAL_LOGDB("length=%d, bytesused=%d \n", vinfo->preview.buf.length, vinfo->preview.buf.bytesused); - putback_frame(vinfo); - continue; + if (mSensorType == SENSOR_USB) { + if (vinfo->preview.format.fmt.pix.pixelformat != V4L2_PIX_FMT_MJPEG) { + if (vinfo->preview.buf.length != vinfo->preview.buf.bytesused) { + CAMHAL_LOGDB("length=%d, bytesused=%d \n", vinfo->preview.buf.length, vinfo->preview.buf.bytesused); + putback_frame(vinfo); + continue; + } } } if (vinfo->preview.format.fmt.pix.pixelformat == V4L2_PIX_FMT_YUYV) { |