hardware: samsung_slsi: libcamera2: Fixed Front Camera Recording
authorSungjoong Kang <sj3.kang@samsung.com>
Fri, 27 Jul 2012 19:03:29 +0000 (12:03 -0700)
committerAlex Ray <aray@google.com>
Mon, 30 Jul 2012 21:13:24 +0000 (14:13 -0700)
This patch fixes lockup during front camera recording.

Change-Id: I8f308a763feabc414154bb9d372e559605275244
Signed-off-by: Sungjoong Kang <sj3.kang@samsung.com>
libcamera2/ExynosCameraHWInterface2.cpp

index 00cb313d726b17101ec6eaf2f640a624c3436d4b..3500766215c43c0e450b656165fcd50bb054050a 100644 (file)
@@ -1988,6 +1988,22 @@ void ExynosCameraHWInterface2::m_sensorThreadFunc(SignalDrivenThread * self)
         shot_ext = (struct camera2_shot_ext *)(m_camera_info.sensor.buffer[index].virt.extP[1]);
         matchedFrameCnt = m_requestManager->FindFrameCnt(shot_ext);
         ALOGD("### Matched(%d) last(%d)", matchedFrameCnt, lastFrameCnt);
+#if 1
+        if (matchedFrameCnt != -1) {
+            while (matchedFrameCnt == lastFrameCnt) {
+                 m_BayerManager->MarkSensorDequeue(index, -1, &frameTime);
+                ALOGD("### Sensor DQBUF start");
+                index = cam_int_dqbuf(&(m_camera_info.sensor));
+                frameTime = systemTime();
+                ALOGD("### Sensor DQBUF done BayerIndex(%d)", index);
+                bool wait = false;
+                shot_ext = (struct camera2_shot_ext *)(m_camera_info.sensor.buffer[index].virt.extP[1]);
+                matchedFrameCnt = m_requestManager->FindFrameCnt(shot_ext);
+                ALOGD("### Matched(%d) last(%d)", matchedFrameCnt, lastFrameCnt);
+            }
+            lastFrameCnt = matchedFrameCnt;
+        }
+#else
         if (m_sensor_drop) {
             matchedFrameCnt = -1;
             m_sensor_drop = false;
@@ -2001,7 +2017,7 @@ void ExynosCameraHWInterface2::m_sensorThreadFunc(SignalDrivenThread * self)
                        m_scp_closing = false;
                        m_scp_closed = false;
         }
-
+#endif
         m_BayerManager->MarkSensorDequeue(index, matchedFrameCnt, &frameTime);
 
         m_requestManager->RegisterTimestamp(matchedFrameCnt, &frameTime);
@@ -2227,6 +2243,8 @@ void ExynosCameraHWInterface2::m_ispThreadFunc(SignalDrivenThread * self)
             shot_ext->request_scp = 0;
             shot_ext->request_sensor = 0;
         }
+        //if (m_sensor_drop)
+        //    usleep(25000);
         cam_int_qbuf(&(m_camera_info.isp), bayerIndexToEnqueue);
         ALOGV("### isp QBUF done bayerIndex[%d] scp(%d)", bayerIndexToEnqueue, shot_ext->request_scp);
         m_BayerManager->MarkIspEnqueue(bayerIndexToEnqueue);
@@ -2247,7 +2265,6 @@ void ExynosCameraHWInterface2::m_ispThreadFunc(SignalDrivenThread * self)
         int bayerIndexToDequeue = 0;
         int processingFrameCnt = 0;
            ALOGV("DEBUG(%s): IspThread processing SIGNAL_ISP_START_BAYER_DEQUEUE", __FUNCTION__);
-
         bayerIndexToDequeue = m_BayerManager->GetIndexForIspDequeue(&processingFrameCnt);
         m_ispProcessingFrameCnt = processingFrameCnt;
         m_previewOutput = 0;