summaryrefslogtreecommitdiffstats
path: root/services/camera/libcameraservice/Camera2Client.h
diff options
context:
space:
mode:
Diffstat (limited to 'services/camera/libcameraservice/Camera2Client.h')
-rw-r--r--services/camera/libcameraservice/Camera2Client.h29
1 files changed, 23 insertions, 6 deletions
diff --git a/services/camera/libcameraservice/Camera2Client.h b/services/camera/libcameraservice/Camera2Client.h
index e03aaba..e2f5cc4 100644
--- a/services/camera/libcameraservice/Camera2Client.h
+++ b/services/camera/libcameraservice/Camera2Client.h
@@ -33,8 +33,7 @@ namespace android {
*/
class Camera2Client :
public CameraService::Client,
- public Camera2Device::NotificationListener,
- public Camera2Device::FrameListener
+ public Camera2Device::NotificationListener
{
public:
// ICamera interface (see ICamera for details)
@@ -83,8 +82,6 @@ public:
virtual void notifyAutoExposure(uint8_t newState, int triggerId);
virtual void notifyAutoWhitebalance(uint8_t newState, int triggerId);
- virtual void onNewFrameAvailable();
-
private:
enum State {
DISCONNECTED,
@@ -299,9 +296,29 @@ private:
// Used with stream IDs
static const int NO_STREAM = -1;
- /* Output frame metadata processing methods */
+ /* Output frame metadata processing thread. This thread waits for new
+ * frames from the device, and analyzes them as necessary.
+ */
+ class FrameProcessor: public Thread {
+ public:
+ FrameProcessor(wp<Camera2Client> client);
+ ~FrameProcessor();
+
+ void dump(int fd, const Vector<String16>& args);
+ private:
+ static const nsecs_t kWaitDuration = 10000000; // 10 ms
+ wp<Camera2Client> mClient;
+
+ virtual bool threadLoop();
+
+ void processNewFrames(sp<Camera2Client> &client);
+ status_t processFaceDetect(const CameraMetadata &frame,
+ sp<Camera2Client> &client);
+
+ CameraMetadata mLastFrame;
+ };
- status_t processFrameFaceDetect(const CameraMetadata &frame);
+ sp<FrameProcessor> mFrameProcessor;
/* Preview related members */