Loading camera/IProCameraUser.cpp +30 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ enum { CANCEL_STREAM, CREATE_STREAM, CREATE_DEFAULT_REQUEST, GET_CAMERA_INFO, }; /** Loading Loading @@ -255,6 +256,17 @@ public: } virtual status_t getCameraInfo(int cameraId, camera_metadata** info) { Parcel data, reply; data.writeInterfaceToken(IProCameraUser::getInterfaceDescriptor()); data.writeInt32(cameraId); remote()->transact(GET_CAMERA_INFO, data, &reply); readMetadata(reply, /*out*/info); return reply.readInt32(); } private: Loading Loading @@ -367,6 +379,24 @@ status_t BnProCameraUser::onTransact( writeMetadata(*reply, request); reply->writeInt32(ret); free_camera_metadata(request); return NO_ERROR; } break; case GET_CAMERA_INFO: { CHECK_INTERFACE(IProCameraUser, data, reply); int cameraId = data.readInt32(); camera_metadata_t* info = NULL; status_t ret; ret = getCameraInfo(cameraId, &info); writeMetadata(*reply, info); reply->writeInt32(ret); free_camera_metadata(info); return NO_ERROR; } break; default: Loading camera/ProCamera.cpp +18 −5 Original line number Diff line number Diff line Loading @@ -361,15 +361,28 @@ status_t ProCamera::createStreamCpu(int width, int height, int format, } int ProCamera::getNumberOfCameras() { ALOGE("%s: not implemented yet", __FUNCTION__); return 1; const sp<ICameraService> cs = getCameraService(); if (!cs.get()) { return DEAD_OBJECT; } return cs->getNumberOfCameras(); } camera_metadata* ProCamera::getCameraInfo(int cameraId) { ALOGE("%s: not implemented yet", __FUNCTION__); ALOGV("%s: cameraId = %d", __FUNCTION__, cameraId); return NULL; sp <IProCameraUser> c = mCamera; if (c == 0) return NULL; camera_metadata* ptr = NULL; status_t status = c->getCameraInfo(cameraId, &ptr); if (status != OK) { ALOGE("%s: Failed to get camera info, error = %d", __FUNCTION__, status); } return ptr; } status_t ProCamera::createDefaultRequest(int templateId, Loading camera/tests/ProCameraTests.cpp +30 −0 Original line number Diff line number Diff line Loading @@ -324,10 +324,40 @@ protected: ASSERT_NE((void*)NULL, surface.get()); } template <typename T> static bool FindItem(T needle, T* array, size_t count) { for (int i = 0; i < count; ++i) { if (array[i] == needle) { return true; } } return false; } }; sp<Thread> ProCameraTest::mTestThread; TEST_F(ProCameraTest, AvailableFormats) { if (HasFatalFailure()) { return; } camera_metadata_t* info = mCamera->getCameraInfo(CAMERA_ID); ASSERT_NE((void*)NULL, info); camera_metadata_entry_t entry; uint32_t tag = static_cast<uint32_t>(ANDROID_SCALER_AVAILABLE_FORMATS); EXPECT_EQ(OK, find_camera_metadata_entry(info, tag, &entry)); EXPECT_TRUE(FindItem<int32_t>(HAL_PIXEL_FORMAT_YV12, entry.data.i32, entry.count)); EXPECT_TRUE(FindItem<int32_t>(HAL_PIXEL_FORMAT_YCrCb_420_SP, entry.data.i32, entry.count)); free_camera_metadata(info); } // test around exclusiveTryLock (immediate locking) TEST_F(ProCameraTest, LockingImmediate) { Loading include/camera/IProCameraUser.h +5 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,11 @@ public: camera_metadata** request) = 0; // Get static camera metadata virtual status_t getCameraInfo(int cameraId, /*out*/ camera_metadata** info) = 0; }; // ---------------------------------------------------------------------------- Loading include/camera/ProCamera.h +1 −1 Original line number Diff line number Diff line Loading @@ -172,7 +172,7 @@ public: static int getNumberOfCameras(); // Get static camera metadata static camera_metadata* getCameraInfo(int cameraId); camera_metadata* getCameraInfo(int cameraId); sp<IProCameraUser> remote(); Loading Loading
camera/IProCameraUser.cpp +30 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ enum { CANCEL_STREAM, CREATE_STREAM, CREATE_DEFAULT_REQUEST, GET_CAMERA_INFO, }; /** Loading Loading @@ -255,6 +256,17 @@ public: } virtual status_t getCameraInfo(int cameraId, camera_metadata** info) { Parcel data, reply; data.writeInterfaceToken(IProCameraUser::getInterfaceDescriptor()); data.writeInt32(cameraId); remote()->transact(GET_CAMERA_INFO, data, &reply); readMetadata(reply, /*out*/info); return reply.readInt32(); } private: Loading Loading @@ -367,6 +379,24 @@ status_t BnProCameraUser::onTransact( writeMetadata(*reply, request); reply->writeInt32(ret); free_camera_metadata(request); return NO_ERROR; } break; case GET_CAMERA_INFO: { CHECK_INTERFACE(IProCameraUser, data, reply); int cameraId = data.readInt32(); camera_metadata_t* info = NULL; status_t ret; ret = getCameraInfo(cameraId, &info); writeMetadata(*reply, info); reply->writeInt32(ret); free_camera_metadata(info); return NO_ERROR; } break; default: Loading
camera/ProCamera.cpp +18 −5 Original line number Diff line number Diff line Loading @@ -361,15 +361,28 @@ status_t ProCamera::createStreamCpu(int width, int height, int format, } int ProCamera::getNumberOfCameras() { ALOGE("%s: not implemented yet", __FUNCTION__); return 1; const sp<ICameraService> cs = getCameraService(); if (!cs.get()) { return DEAD_OBJECT; } return cs->getNumberOfCameras(); } camera_metadata* ProCamera::getCameraInfo(int cameraId) { ALOGE("%s: not implemented yet", __FUNCTION__); ALOGV("%s: cameraId = %d", __FUNCTION__, cameraId); return NULL; sp <IProCameraUser> c = mCamera; if (c == 0) return NULL; camera_metadata* ptr = NULL; status_t status = c->getCameraInfo(cameraId, &ptr); if (status != OK) { ALOGE("%s: Failed to get camera info, error = %d", __FUNCTION__, status); } return ptr; } status_t ProCamera::createDefaultRequest(int templateId, Loading
camera/tests/ProCameraTests.cpp +30 −0 Original line number Diff line number Diff line Loading @@ -324,10 +324,40 @@ protected: ASSERT_NE((void*)NULL, surface.get()); } template <typename T> static bool FindItem(T needle, T* array, size_t count) { for (int i = 0; i < count; ++i) { if (array[i] == needle) { return true; } } return false; } }; sp<Thread> ProCameraTest::mTestThread; TEST_F(ProCameraTest, AvailableFormats) { if (HasFatalFailure()) { return; } camera_metadata_t* info = mCamera->getCameraInfo(CAMERA_ID); ASSERT_NE((void*)NULL, info); camera_metadata_entry_t entry; uint32_t tag = static_cast<uint32_t>(ANDROID_SCALER_AVAILABLE_FORMATS); EXPECT_EQ(OK, find_camera_metadata_entry(info, tag, &entry)); EXPECT_TRUE(FindItem<int32_t>(HAL_PIXEL_FORMAT_YV12, entry.data.i32, entry.count)); EXPECT_TRUE(FindItem<int32_t>(HAL_PIXEL_FORMAT_YCrCb_420_SP, entry.data.i32, entry.count)); free_camera_metadata(info); } // test around exclusiveTryLock (immediate locking) TEST_F(ProCameraTest, LockingImmediate) { Loading
include/camera/IProCameraUser.h +5 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,11 @@ public: camera_metadata** request) = 0; // Get static camera metadata virtual status_t getCameraInfo(int cameraId, /*out*/ camera_metadata** info) = 0; }; // ---------------------------------------------------------------------------- Loading
include/camera/ProCamera.h +1 −1 Original line number Diff line number Diff line Loading @@ -172,7 +172,7 @@ public: static int getNumberOfCameras(); // Get static camera metadata static camera_metadata* getCameraInfo(int cameraId); camera_metadata* getCameraInfo(int cameraId); sp<IProCameraUser> remote(); Loading