diff options
| author | Wu-cheng Li <wuchengli@google.com> | 2011-07-30 05:00:37 +0800 | 
|---|---|---|
| committer | Wu-cheng Li <wuchengli@google.com> | 2011-08-02 15:48:41 +0800 | 
| commit | 57c86189bc07d9ccb0fd044e66df736d0bf19639 (patch) | |
| tree | 850a15dd5d48eb35aa993ceb27f3551a25622803 /services | |
| parent | 40cdc56efa47580d89a93750cefecb8ccbaf9a72 (diff) | |
| download | frameworks_av-57c86189bc07d9ccb0fd044e66df736d0bf19639.zip frameworks_av-57c86189bc07d9ccb0fd044e66df736d0bf19639.tar.gz frameworks_av-57c86189bc07d9ccb0fd044e66df736d0bf19639.tar.bz2  | |
Pass camera frame metadata from camera service to Java.
bug:4460717
Change-Id: I2fae6e1dfca6b8f3a5ee5716fc7817f5417bf657
Diffstat (limited to 'services')
| -rw-r--r-- | services/camera/libcameraservice/CameraService.cpp | 40 | ||||
| -rw-r--r-- | services/camera/libcameraservice/CameraService.h | 10 | 
2 files changed, 28 insertions, 22 deletions
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp index def25d1..e193be0 100644 --- a/services/camera/libcameraservice/CameraService.cpp +++ b/services/camera/libcameraservice/CameraService.cpp @@ -350,10 +350,9 @@ CameraService::Client::Client(const sp<CameraService>& cameraService,                              dataCallbackTimestamp,                              (void *)cameraId); -    // Enable zoom, error, and focus messages by default -    enableMsgType(CAMERA_MSG_ERROR | -                  CAMERA_MSG_ZOOM | -                  CAMERA_MSG_FOCUS); +    // Enable zoom, error, focus, and metadata messages by default +    enableMsgType(CAMERA_MSG_ERROR | CAMERA_MSG_ZOOM | CAMERA_MSG_FOCUS | +                  CAMERA_MSG_PREVIEW_METADATA);      // Callback is disabled by default      mPreviewCallbackFlag = CAMERA_FRAME_CALLBACK_FLAG_NOOP; @@ -995,15 +994,15 @@ void CameraService::Client::dataCallback(int32_t msgType,      if (client == 0) return;      if (!client->lockIfMessageWanted(msgType)) return; -    if (dataPtr == 0) { +    if (dataPtr == 0 && metadata == NULL) {          LOGE("Null data returned in data callback");          client->handleGenericNotify(CAMERA_MSG_ERROR, UNKNOWN_ERROR, 0);          return;      } -    switch (msgType) { +    switch (msgType & ~CAMERA_MSG_PREVIEW_METADATA) {          case CAMERA_MSG_PREVIEW_FRAME: -            client->handlePreviewData(dataPtr); +            client->handlePreviewData(msgType, dataPtr, metadata);              break;          case CAMERA_MSG_POSTVIEW_FRAME:              client->handlePostview(dataPtr); @@ -1015,7 +1014,7 @@ void CameraService::Client::dataCallback(int32_t msgType,              client->handleCompressedPicture(dataPtr);              break;          default: -            client->handleGenericData(msgType, dataPtr); +            client->handleGenericData(msgType, dataPtr, metadata);              break;      }  } @@ -1055,7 +1054,9 @@ void CameraService::Client::handleShutter(void) {  }  // preview callback - frame buffer update -void CameraService::Client::handlePreviewData(const sp<IMemory>& mem) { +void CameraService::Client::handlePreviewData(int32_t msgType, +                                              const sp<IMemory>& mem, +                                              camera_frame_metadata_t *metadata) {      ssize_t offset;      size_t size;      sp<IMemoryHeap> heap = mem->getMemory(&offset, &size); @@ -1087,11 +1088,11 @@ void CameraService::Client::handlePreviewData(const sp<IMemory>& mem) {          // Is the received frame copied out or not?          if (flags & CAMERA_FRAME_CALLBACK_FLAG_COPY_OUT_MASK) {              LOG2("frame is copied"); -            copyFrameAndPostCopiedFrame(c, heap, offset, size); +            copyFrameAndPostCopiedFrame(msgType, c, heap, offset, size, metadata);          } else {              LOG2("frame is forwarded");              mLock.unlock(); -            c->dataCallback(CAMERA_MSG_PREVIEW_FRAME, mem); +            c->dataCallback(msgType, mem, metadata);          }      } else {          mLock.unlock(); @@ -1105,7 +1106,7 @@ void CameraService::Client::handlePostview(const sp<IMemory>& mem) {      sp<ICameraClient> c = mCameraClient;      mLock.unlock();      if (c != 0) { -        c->dataCallback(CAMERA_MSG_POSTVIEW_FRAME, mem); +        c->dataCallback(CAMERA_MSG_POSTVIEW_FRAME, mem, NULL);      }  } @@ -1120,7 +1121,7 @@ void CameraService::Client::handleRawPicture(const sp<IMemory>& mem) {      sp<ICameraClient> c = mCameraClient;      mLock.unlock();      if (c != 0) { -        c->dataCallback(CAMERA_MSG_RAW_IMAGE, mem); +        c->dataCallback(CAMERA_MSG_RAW_IMAGE, mem, NULL);      }  } @@ -1131,7 +1132,7 @@ void CameraService::Client::handleCompressedPicture(const sp<IMemory>& mem) {      sp<ICameraClient> c = mCameraClient;      mLock.unlock();      if (c != 0) { -        c->dataCallback(CAMERA_MSG_COMPRESSED_IMAGE, mem); +        c->dataCallback(CAMERA_MSG_COMPRESSED_IMAGE, mem, NULL);      }  } @@ -1146,11 +1147,11 @@ void CameraService::Client::handleGenericNotify(int32_t msgType,  }  void CameraService::Client::handleGenericData(int32_t msgType, -    const sp<IMemory>& dataPtr) { +    const sp<IMemory>& dataPtr, camera_frame_metadata_t *metadata) {      sp<ICameraClient> c = mCameraClient;      mLock.unlock();      if (c != 0) { -        c->dataCallback(msgType, dataPtr); +        c->dataCallback(msgType, dataPtr, metadata);      }  } @@ -1164,8 +1165,9 @@ void CameraService::Client::handleGenericDataTimestamp(nsecs_t timestamp,  }  void CameraService::Client::copyFrameAndPostCopiedFrame( -        const sp<ICameraClient>& client, const sp<IMemoryHeap>& heap, -        size_t offset, size_t size) { +        int32_t msgType, const sp<ICameraClient>& client, +        const sp<IMemoryHeap>& heap, size_t offset, size_t size, +        camera_frame_metadata_t *metadata) {      LOG2("copyFrameAndPostCopiedFrame");      // It is necessary to copy out of pmem before sending this to      // the callback. For efficiency, reuse the same MemoryHeapBase @@ -1197,7 +1199,7 @@ void CameraService::Client::copyFrameAndPostCopiedFrame(      }      mLock.unlock(); -    client->dataCallback(CAMERA_MSG_PREVIEW_FRAME, frame); +    client->dataCallback(msgType, frame, metadata);  }  int CameraService::Client::getOrientation(int degrees, bool mirror) { diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h index af7f06e..57abf83 100644 --- a/services/camera/libcameraservice/CameraService.h +++ b/services/camera/libcameraservice/CameraService.h @@ -147,18 +147,22 @@ private:          static sp<Client>       getClientFromCookie(void* user);          // handlers for messages          void                    handleShutter(void); -        void                    handlePreviewData(const sp<IMemory>& mem); +        void                    handlePreviewData(int32_t msgType, const sp<IMemory>& mem, +                                                  camera_frame_metadata_t *metadata);          void                    handlePostview(const sp<IMemory>& mem);          void                    handleRawPicture(const sp<IMemory>& mem);          void                    handleCompressedPicture(const sp<IMemory>& mem);          void                    handleGenericNotify(int32_t msgType, int32_t ext1, int32_t ext2); -        void                    handleGenericData(int32_t msgType, const sp<IMemory>& dataPtr); +        void                    handleGenericData(int32_t msgType, const sp<IMemory>& dataPtr, +                                                  camera_frame_metadata_t *metadata);          void                    handleGenericDataTimestamp(nsecs_t timestamp, int32_t msgType, const sp<IMemory>& dataPtr);          void                    copyFrameAndPostCopiedFrame( +                                    int32_t msgType,                                      const sp<ICameraClient>& client,                                      const sp<IMemoryHeap>& heap, -                                    size_t offset, size_t size); +                                    size_t offset, size_t size, +                                    camera_frame_metadata_t *metadata);          int                     getOrientation(int orientation, bool mirror);  | 
