summaryrefslogtreecommitdiffstats
path: root/services/camera/libcameraservice/ProCamera2Client.cpp
diff options
context:
space:
mode:
authorIgor Murashkin <iam@google.com>2013-02-21 12:02:29 -0800
committerIgor Murashkin <iam@google.com>2013-02-22 10:50:15 -0800
commita91537e268f2b35f9f0dfdc0c4f84655c93285ae (patch)
tree114691436e16b7c8dfc5929d922712edd2c41aff /services/camera/libcameraservice/ProCamera2Client.cpp
parenteb72e1796b3af548e87891a6d2b73b0567807f25 (diff)
downloadframeworks_av-a91537e268f2b35f9f0dfdc0c4f84655c93285ae.zip
frameworks_av-a91537e268f2b35f9f0dfdc0c4f84655c93285ae.tar.gz
frameworks_av-a91537e268f2b35f9f0dfdc0c4f84655c93285ae.tar.bz2
Camera: ProCamera - implement onResultReceived callback for metadata callbacks
Change-Id: I46775402b007244bc383d6343a620eebbd492aad
Diffstat (limited to 'services/camera/libcameraservice/ProCamera2Client.cpp')
-rw-r--r--services/camera/libcameraservice/ProCamera2Client.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/services/camera/libcameraservice/ProCamera2Client.cpp b/services/camera/libcameraservice/ProCamera2Client.cpp
index f850034..7611796 100644
--- a/services/camera/libcameraservice/ProCamera2Client.cpp
+++ b/services/camera/libcameraservice/ProCamera2Client.cpp
@@ -26,6 +26,7 @@
#include <gui/Surface.h>
#include "camera2/Parameters.h"
#include "ProCamera2Client.h"
+#include "camera2/ProFrameProcessor.h"
namespace android {
using namespace camera2;
@@ -82,6 +83,16 @@ status_t ProCamera2Client::initialize(camera_module_t *module)
res = mDevice->setNotifyCallback(this);
+ String8 threadName;
+ mFrameProcessor = new ProFrameProcessor(this);
+ threadName = String8::format("PC2-%d-FrameProc",
+ mCameraId);
+ mFrameProcessor->run(threadName.string());
+
+ mFrameProcessor->registerListener(FRAME_PROCESSOR_LISTENER_MIN_ID,
+ FRAME_PROCESSOR_LISTENER_MAX_ID,
+ /*listener*/this);
+
return OK;
}
@@ -307,6 +318,7 @@ status_t ProCamera2Client::dump(int fd, const Vector<String16>& args) {
result.append(" State: ");
// TODO: print dynamic/request section from most recent requests
+ mFrameProcessor->dump(fd, args);
#define CASE_APPEND_ENUM(x) case x: result.append(#x "\n"); break;
@@ -338,7 +350,12 @@ void ProCamera2Client::disconnect() {
if (mDevice == 0) return;
ALOGV("Camera %d: Shutting down", mCameraId);
+ mFrameProcessor->removeListener(FRAME_PROCESSOR_LISTENER_MIN_ID,
+ FRAME_PROCESSOR_LISTENER_MAX_ID,
+ /*listener*/this);
+ mFrameProcessor->requestExit();
ALOGV("Camera %d: Waiting for threads", mCameraId);
+ mFrameProcessor->join();
ALOGV("Camera %d: Disconnecting device", mCameraId);
mDevice->disconnect();
@@ -446,4 +463,22 @@ void ProCamera2Client::SharedCameraCallbacks::clear() {
mRemoteCallback.clear();
}
+void ProCamera2Client::onFrameAvailable(int32_t frameId,
+ const CameraMetadata& frame) {
+ ATRACE_CALL();
+ ALOGV("%s", __FUNCTION__);
+
+ Mutex::Autolock icl(mIProCameraUserLock);
+ SharedCameraCallbacks::Lock l(mSharedCameraCallbacks);
+
+ if (mRemoteCallback != NULL) {
+ CameraMetadata tmp(frame);
+ camera_metadata_t* meta = tmp.release();
+ ALOGV("%s: meta = %p ", __FUNCTION__, meta);
+ mRemoteCallback->onResultReceived(frameId, meta);
+ tmp.acquire(meta);
+ }
+
+}
+
} // namespace android