diff options
author | Igor Murashkin <iam@google.com> | 2013-02-21 12:02:29 -0800 |
---|---|---|
committer | Igor Murashkin <iam@google.com> | 2013-02-22 10:50:15 -0800 |
commit | a91537e268f2b35f9f0dfdc0c4f84655c93285ae (patch) | |
tree | 114691436e16b7c8dfc5929d922712edd2c41aff /services/camera/libcameraservice/ProCamera2Client.cpp | |
parent | eb72e1796b3af548e87891a6d2b73b0567807f25 (diff) | |
download | frameworks_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.cpp | 35 |
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 |