Loading camera/Android.mk +26 −5 Original line number Diff line number Diff line Loading @@ -18,7 +18,24 @@ include $(CLEAR_VARS) LOCAL_PATH := $(CAMERA_CLIENT_LOCAL_PATH) LOCAL_AIDL_INCLUDES := \ frameworks/av/camera/aidl \ frameworks/base/core/java \ frameworks/native/aidl/gui # AIDL files for camera interfaces # The headers for these interfaces will be available to any modules that # include libcamera_client, at the path "aidl/package/path/BnFoo.h" LOCAL_SRC_FILES := \ aidl/android/hardware/ICameraService.aidl \ aidl/android/hardware/ICameraServiceListener.aidl \ aidl/android/hardware/camera2/ICameraDeviceCallbacks.aidl \ aidl/android/hardware/camera2/ICameraDeviceUser.aidl # Source for camera interface parcelables, and manually-written interfaces LOCAL_SRC_FILES += \ Camera.cpp \ CameraMetadata.cpp \ CameraParameters.cpp \ Loading @@ -26,15 +43,12 @@ LOCAL_SRC_FILES:= \ CameraParameters2.cpp \ ICamera.cpp \ ICameraClient.cpp \ ICameraService.cpp \ ICameraServiceListener.cpp \ ICameraServiceProxy.cpp \ ICameraRecordingProxy.cpp \ ICameraRecordingProxyListener.cpp \ camera2/ICameraDeviceUser.cpp \ camera2/ICameraDeviceCallbacks.cpp \ camera2/CaptureRequest.cpp \ camera2/OutputConfiguration.cpp \ camera2/SubmitInfo.cpp \ CameraBase.cpp \ CameraUtils.cpp \ VendorTagDescriptor.cpp Loading @@ -53,6 +67,13 @@ LOCAL_C_INCLUDES += \ system/media/camera/include \ system/media/private/camera/include \ frameworks/native/include/media/openmax \ frameworks/av/include/camera LOCAL_EXPORT_C_INCLUDE_DIRS := \ system/media/camera/include \ frameworks/av/include/camera LOCAL_CFLAGS += -Werror -Wall -Wextra LOCAL_MODULE:= libcamera_client Loading camera/Camera.cpp +37 −35 Original line number Diff line number Diff line Loading @@ -24,10 +24,10 @@ #include <binder/IServiceManager.h> #include <binder/IMemory.h> #include <camera/Camera.h> #include <camera/ICameraRecordingProxyListener.h> #include <camera/ICameraService.h> #include <camera/ICamera.h> #include <Camera.h> #include <ICameraRecordingProxyListener.h> #include <android/hardware/ICameraService.h> #include <android/hardware/ICamera.h> #include <gui/IGraphicBufferProducer.h> #include <gui/Surface.h> Loading @@ -40,10 +40,10 @@ Camera::Camera(int cameraId) } CameraTraits<Camera>::TCamConnectService CameraTraits<Camera>::fnConnectService = &ICameraService::connect; &::android::hardware::ICameraService::connect; // construct a camera client from an existing camera remote sp<Camera> Camera::create(const sp<ICamera>& camera) sp<Camera> Camera::create(const sp<::android::hardware::ICamera>& camera) { ALOGV("create"); if (camera == 0) { Loading Loading @@ -84,21 +84,23 @@ status_t Camera::connectLegacy(int cameraId, int halVersion, { ALOGV("%s: connect legacy camera device", __FUNCTION__); sp<Camera> c = new Camera(cameraId); sp<ICameraClient> cl = c; sp<::android::hardware::ICameraClient> cl = c; status_t status = NO_ERROR; const sp<ICameraService>& cs = CameraBaseT::getCameraService(); const sp<::android::hardware::ICameraService>& cs = CameraBaseT::getCameraService(); if (cs != 0) { status = cs.get()->connectLegacy(cl, cameraId, halVersion, clientPackageName, clientUid, /*out*/c->mCamera); binder::Status ret; if (cs != nullptr) { ret = cs.get()->connectLegacy(cl, cameraId, halVersion, clientPackageName, clientUid, /*out*/&(c->mCamera)); } if (status == OK && c->mCamera != 0) { if (ret.isOk() && c->mCamera != nullptr) { IInterface::asBinder(c->mCamera)->linkToDeath(c); c->mStatus = NO_ERROR; camera = c; } else { ALOGW("An error occurred while connecting to camera %d: %d (%s)", cameraId, status, strerror(-status)); ALOGW("An error occurred while connecting to camera %d: %s", cameraId, (cs != nullptr) ? "Service not available" : ret.toString8().string()); status = -EINVAL; c.clear(); } return status; Loading @@ -107,21 +109,21 @@ status_t Camera::connectLegacy(int cameraId, int halVersion, status_t Camera::reconnect() { ALOGV("reconnect"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->connect(this); } status_t Camera::lock() { sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->lock(); } status_t Camera::unlock() { sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->unlock(); } Loading @@ -130,7 +132,7 @@ status_t Camera::unlock() status_t Camera::setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProducer) { ALOGV("setPreviewTarget(%p)", bufferProducer.get()); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; ALOGD_IF(bufferProducer == 0, "app passed NULL surface"); return c->setPreviewTarget(bufferProducer); Loading @@ -139,7 +141,7 @@ status_t Camera::setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProduc status_t Camera::setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer) { ALOGV("setVideoTarget(%p)", bufferProducer.get()); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; ALOGD_IF(bufferProducer == 0, "app passed NULL video surface"); return c->setVideoTarget(bufferProducer); Loading @@ -149,7 +151,7 @@ status_t Camera::setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer status_t Camera::startPreview() { ALOGV("startPreview"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->startPreview(); } Loading @@ -157,7 +159,7 @@ status_t Camera::startPreview() status_t Camera::setVideoBufferMode(int32_t videoBufferMode) { ALOGV("setVideoBufferMode: %d", videoBufferMode); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->setVideoBufferMode(videoBufferMode); } Loading @@ -166,7 +168,7 @@ status_t Camera::setVideoBufferMode(int32_t videoBufferMode) status_t Camera::startRecording() { ALOGV("startRecording"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->startRecording(); } Loading @@ -175,7 +177,7 @@ status_t Camera::startRecording() void Camera::stopPreview() { ALOGV("stopPreview"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return; c->stopPreview(); } Loading @@ -188,7 +190,7 @@ void Camera::stopRecording() Mutex::Autolock _l(mLock); mRecordingProxyListener.clear(); } sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return; c->stopRecording(); } Loading @@ -197,7 +199,7 @@ void Camera::stopRecording() void Camera::releaseRecordingFrame(const sp<IMemory>& mem) { ALOGV("releaseRecordingFrame"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return; c->releaseRecordingFrame(mem); } Loading @@ -206,7 +208,7 @@ void Camera::releaseRecordingFrame(const sp<IMemory>& mem) bool Camera::previewEnabled() { ALOGV("previewEnabled"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return false; return c->previewEnabled(); } Loading @@ -215,7 +217,7 @@ bool Camera::previewEnabled() bool Camera::recordingEnabled() { ALOGV("recordingEnabled"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return false; return c->recordingEnabled(); } Loading @@ -223,7 +225,7 @@ bool Camera::recordingEnabled() status_t Camera::autoFocus() { ALOGV("autoFocus"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->autoFocus(); } Loading @@ -231,7 +233,7 @@ status_t Camera::autoFocus() status_t Camera::cancelAutoFocus() { ALOGV("cancelAutoFocus"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->cancelAutoFocus(); } Loading @@ -240,7 +242,7 @@ status_t Camera::cancelAutoFocus() status_t Camera::takePicture(int msgType) { ALOGV("takePicture: 0x%x", msgType); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->takePicture(msgType); } Loading @@ -249,7 +251,7 @@ status_t Camera::takePicture(int msgType) status_t Camera::setParameters(const String8& params) { ALOGV("setParameters"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->setParameters(params); } Loading @@ -259,7 +261,7 @@ String8 Camera::getParameters() const { ALOGV("getParameters"); String8 params; sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c != 0) params = mCamera->getParameters(); return params; } Loading @@ -268,7 +270,7 @@ String8 Camera::getParameters() const status_t Camera::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) { ALOGV("sendCommand"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->sendCommand(cmd, arg1, arg2); } Loading @@ -288,7 +290,7 @@ void Camera::setRecordingProxyListener(const sp<ICameraRecordingProxyListener>& void Camera::setPreviewCallbackFlags(int flag) { ALOGV("setPreviewCallbackFlags"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return; mCamera->setPreviewCallbackFlag(flag); } Loading @@ -296,7 +298,7 @@ void Camera::setPreviewCallbackFlags(int flag) status_t Camera::setPreviewCallbackTarget( const sp<IGraphicBufferProducer>& callbackProducer) { sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->setPreviewCallbackTarget(callbackProducer); } Loading camera/CameraBase.cpp +56 −22 Original line number Diff line number Diff line Loading @@ -21,12 +21,13 @@ #include <utils/threads.h> #include <utils/Mutex.h> #include <android/hardware/ICameraService.h> #include <binder/IPCThreadState.h> #include <binder/IServiceManager.h> #include <binder/IMemory.h> #include <camera/CameraBase.h> #include <camera/ICameraService.h> // needed to instantiate #include <camera/Camera.h> Loading @@ -35,8 +36,28 @@ namespace android { namespace hardware { status_t CameraInfo::writeToParcel(Parcel* parcel) const { status_t res; res = parcel->writeInt32(facing); if (res != OK) return res; res = parcel->writeInt32(orientation); return res; } status_t CameraInfo::readFromParcel(const Parcel* parcel) { status_t res; res = parcel->readInt32(&facing); if (res != OK) return res; res = parcel->readInt32(&orientation); return res; } } namespace { sp<ICameraService> gCameraService; sp<::android::hardware::ICameraService> gCameraService; const int kCameraServicePollDelay = 500000; // 0.5s const char* kCameraServiceName = "media.camera"; Loading Loading @@ -65,7 +86,7 @@ namespace { // establish binder interface to camera service template <typename TCam, typename TCamTraits> const sp<ICameraService>& CameraBase<TCam, TCamTraits>::getCameraService() const sp<::android::hardware::ICameraService>& CameraBase<TCam, TCamTraits>::getCameraService() { Mutex::Autolock _l(gLock); if (gCameraService.get() == 0) { Loading @@ -83,7 +104,7 @@ const sp<ICameraService>& CameraBase<TCam, TCamTraits>::getCameraService() gDeathNotifier = new DeathNotifier(); } binder->linkToDeath(gDeathNotifier); gCameraService = interface_cast<ICameraService>(binder); gCameraService = interface_cast<::android::hardware::ICameraService>(binder); } ALOGE_IF(gCameraService == 0, "no CameraService!?"); return gCameraService; Loading @@ -97,19 +118,20 @@ sp<TCam> CameraBase<TCam, TCamTraits>::connect(int cameraId, ALOGV("%s: connect", __FUNCTION__); sp<TCam> c = new TCam(cameraId); sp<TCamCallbacks> cl = c; status_t status = NO_ERROR; const sp<ICameraService>& cs = getCameraService(); const sp<::android::hardware::ICameraService>& cs = getCameraService(); if (cs != 0) { binder::Status ret; if (cs != nullptr) { TCamConnectService fnConnectService = TCamTraits::fnConnectService; status = (cs.get()->*fnConnectService)(cl, cameraId, clientPackageName, clientUid, clientPid, /*out*/ c->mCamera); ret = (cs.get()->*fnConnectService)(cl, cameraId, clientPackageName, clientUid, clientPid, /*out*/ &c->mCamera); } if (status == OK && c->mCamera != 0) { if (ret.isOk() && c->mCamera != nullptr) { IInterface::asBinder(c->mCamera)->linkToDeath(c); c->mStatus = NO_ERROR; } else { ALOGW("An error occurred while connecting to camera: %d", cameraId); ALOGW("An error occurred while connecting to camera %d: %s", cameraId, (cs != nullptr) ? "Service not available" : ret.toString8().string()); c.clear(); } return c; Loading Loading @@ -182,38 +204,50 @@ void CameraBase<TCam, TCamTraits>::notifyCallback(int32_t msgType, template <typename TCam, typename TCamTraits> int CameraBase<TCam, TCamTraits>::getNumberOfCameras() { const sp<ICameraService> cs = getCameraService(); const sp<::android::hardware::ICameraService> cs = getCameraService(); if (!cs.get()) { // as required by the public Java APIs return 0; } return cs->getNumberOfCameras(); int32_t count; binder::Status res = cs->getNumberOfCameras( ::android::hardware::ICameraService::CAMERA_TYPE_BACKWARD_COMPATIBLE, &count); if (!res.isOk()) { ALOGE("Error reading number of cameras: %s", res.toString8().string()); count = 0; } return count; } // this can be in BaseCamera but it should be an instance method template <typename TCam, typename TCamTraits> status_t CameraBase<TCam, TCamTraits>::getCameraInfo(int cameraId, struct CameraInfo* cameraInfo) { const sp<ICameraService>& cs = getCameraService(); struct hardware::CameraInfo* cameraInfo) { const sp<::android::hardware::ICameraService>& cs = getCameraService(); if (cs == 0) return UNKNOWN_ERROR; return cs->getCameraInfo(cameraId, cameraInfo); binder::Status res = cs->getCameraInfo(cameraId, cameraInfo); return res.isOk() ? OK : res.serviceSpecificErrorCode(); } template <typename TCam, typename TCamTraits> status_t CameraBase<TCam, TCamTraits>::addServiceListener( const sp<ICameraServiceListener>& listener) { const sp<ICameraService>& cs = getCameraService(); const sp<::android::hardware::ICameraServiceListener>& listener) { const sp<::android::hardware::ICameraService>& cs = getCameraService(); if (cs == 0) return UNKNOWN_ERROR; return cs->addListener(listener); binder::Status res = cs->addListener(listener); return res.isOk() ? OK : res.serviceSpecificErrorCode(); } template <typename TCam, typename TCamTraits> status_t CameraBase<TCam, TCamTraits>::removeServiceListener( const sp<ICameraServiceListener>& listener) { const sp<ICameraService>& cs = getCameraService(); const sp<::android::hardware::ICameraServiceListener>& listener) { const sp<::android::hardware::ICameraService>& cs = getCameraService(); if (cs == 0) return UNKNOWN_ERROR; return cs->removeListener(listener); binder::Status res = cs->removeListener(listener); return res.isOk() ? OK : res.serviceSpecificErrorCode(); } template class CameraBase<Camera>; Loading camera/CameraMetadata.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -621,7 +621,7 @@ status_t CameraMetadata::writeToParcel(Parcel& data, return res; } status_t CameraMetadata::readFromParcel(Parcel *parcel) { status_t CameraMetadata::readFromParcel(const Parcel *parcel) { ALOGV("%s: parcel = %p", __FUNCTION__, parcel); Loading camera/CameraParameters2.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -351,7 +351,7 @@ const char *CameraParameters2::getPictureFormat() const void CameraParameters2::dump() const { ALOGD("dump: mMap.size = %d", mMap.size()); ALOGD("dump: mMap.size = %zu", mMap.size()); for (size_t i = 0; i < mMap.size(); i++) { String8 k, v; k = mMap.keyAt(i); Loading Loading
camera/Android.mk +26 −5 Original line number Diff line number Diff line Loading @@ -18,7 +18,24 @@ include $(CLEAR_VARS) LOCAL_PATH := $(CAMERA_CLIENT_LOCAL_PATH) LOCAL_AIDL_INCLUDES := \ frameworks/av/camera/aidl \ frameworks/base/core/java \ frameworks/native/aidl/gui # AIDL files for camera interfaces # The headers for these interfaces will be available to any modules that # include libcamera_client, at the path "aidl/package/path/BnFoo.h" LOCAL_SRC_FILES := \ aidl/android/hardware/ICameraService.aidl \ aidl/android/hardware/ICameraServiceListener.aidl \ aidl/android/hardware/camera2/ICameraDeviceCallbacks.aidl \ aidl/android/hardware/camera2/ICameraDeviceUser.aidl # Source for camera interface parcelables, and manually-written interfaces LOCAL_SRC_FILES += \ Camera.cpp \ CameraMetadata.cpp \ CameraParameters.cpp \ Loading @@ -26,15 +43,12 @@ LOCAL_SRC_FILES:= \ CameraParameters2.cpp \ ICamera.cpp \ ICameraClient.cpp \ ICameraService.cpp \ ICameraServiceListener.cpp \ ICameraServiceProxy.cpp \ ICameraRecordingProxy.cpp \ ICameraRecordingProxyListener.cpp \ camera2/ICameraDeviceUser.cpp \ camera2/ICameraDeviceCallbacks.cpp \ camera2/CaptureRequest.cpp \ camera2/OutputConfiguration.cpp \ camera2/SubmitInfo.cpp \ CameraBase.cpp \ CameraUtils.cpp \ VendorTagDescriptor.cpp Loading @@ -53,6 +67,13 @@ LOCAL_C_INCLUDES += \ system/media/camera/include \ system/media/private/camera/include \ frameworks/native/include/media/openmax \ frameworks/av/include/camera LOCAL_EXPORT_C_INCLUDE_DIRS := \ system/media/camera/include \ frameworks/av/include/camera LOCAL_CFLAGS += -Werror -Wall -Wextra LOCAL_MODULE:= libcamera_client Loading
camera/Camera.cpp +37 −35 Original line number Diff line number Diff line Loading @@ -24,10 +24,10 @@ #include <binder/IServiceManager.h> #include <binder/IMemory.h> #include <camera/Camera.h> #include <camera/ICameraRecordingProxyListener.h> #include <camera/ICameraService.h> #include <camera/ICamera.h> #include <Camera.h> #include <ICameraRecordingProxyListener.h> #include <android/hardware/ICameraService.h> #include <android/hardware/ICamera.h> #include <gui/IGraphicBufferProducer.h> #include <gui/Surface.h> Loading @@ -40,10 +40,10 @@ Camera::Camera(int cameraId) } CameraTraits<Camera>::TCamConnectService CameraTraits<Camera>::fnConnectService = &ICameraService::connect; &::android::hardware::ICameraService::connect; // construct a camera client from an existing camera remote sp<Camera> Camera::create(const sp<ICamera>& camera) sp<Camera> Camera::create(const sp<::android::hardware::ICamera>& camera) { ALOGV("create"); if (camera == 0) { Loading Loading @@ -84,21 +84,23 @@ status_t Camera::connectLegacy(int cameraId, int halVersion, { ALOGV("%s: connect legacy camera device", __FUNCTION__); sp<Camera> c = new Camera(cameraId); sp<ICameraClient> cl = c; sp<::android::hardware::ICameraClient> cl = c; status_t status = NO_ERROR; const sp<ICameraService>& cs = CameraBaseT::getCameraService(); const sp<::android::hardware::ICameraService>& cs = CameraBaseT::getCameraService(); if (cs != 0) { status = cs.get()->connectLegacy(cl, cameraId, halVersion, clientPackageName, clientUid, /*out*/c->mCamera); binder::Status ret; if (cs != nullptr) { ret = cs.get()->connectLegacy(cl, cameraId, halVersion, clientPackageName, clientUid, /*out*/&(c->mCamera)); } if (status == OK && c->mCamera != 0) { if (ret.isOk() && c->mCamera != nullptr) { IInterface::asBinder(c->mCamera)->linkToDeath(c); c->mStatus = NO_ERROR; camera = c; } else { ALOGW("An error occurred while connecting to camera %d: %d (%s)", cameraId, status, strerror(-status)); ALOGW("An error occurred while connecting to camera %d: %s", cameraId, (cs != nullptr) ? "Service not available" : ret.toString8().string()); status = -EINVAL; c.clear(); } return status; Loading @@ -107,21 +109,21 @@ status_t Camera::connectLegacy(int cameraId, int halVersion, status_t Camera::reconnect() { ALOGV("reconnect"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->connect(this); } status_t Camera::lock() { sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->lock(); } status_t Camera::unlock() { sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->unlock(); } Loading @@ -130,7 +132,7 @@ status_t Camera::unlock() status_t Camera::setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProducer) { ALOGV("setPreviewTarget(%p)", bufferProducer.get()); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; ALOGD_IF(bufferProducer == 0, "app passed NULL surface"); return c->setPreviewTarget(bufferProducer); Loading @@ -139,7 +141,7 @@ status_t Camera::setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProduc status_t Camera::setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer) { ALOGV("setVideoTarget(%p)", bufferProducer.get()); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; ALOGD_IF(bufferProducer == 0, "app passed NULL video surface"); return c->setVideoTarget(bufferProducer); Loading @@ -149,7 +151,7 @@ status_t Camera::setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer status_t Camera::startPreview() { ALOGV("startPreview"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->startPreview(); } Loading @@ -157,7 +159,7 @@ status_t Camera::startPreview() status_t Camera::setVideoBufferMode(int32_t videoBufferMode) { ALOGV("setVideoBufferMode: %d", videoBufferMode); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->setVideoBufferMode(videoBufferMode); } Loading @@ -166,7 +168,7 @@ status_t Camera::setVideoBufferMode(int32_t videoBufferMode) status_t Camera::startRecording() { ALOGV("startRecording"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->startRecording(); } Loading @@ -175,7 +177,7 @@ status_t Camera::startRecording() void Camera::stopPreview() { ALOGV("stopPreview"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return; c->stopPreview(); } Loading @@ -188,7 +190,7 @@ void Camera::stopRecording() Mutex::Autolock _l(mLock); mRecordingProxyListener.clear(); } sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return; c->stopRecording(); } Loading @@ -197,7 +199,7 @@ void Camera::stopRecording() void Camera::releaseRecordingFrame(const sp<IMemory>& mem) { ALOGV("releaseRecordingFrame"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return; c->releaseRecordingFrame(mem); } Loading @@ -206,7 +208,7 @@ void Camera::releaseRecordingFrame(const sp<IMemory>& mem) bool Camera::previewEnabled() { ALOGV("previewEnabled"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return false; return c->previewEnabled(); } Loading @@ -215,7 +217,7 @@ bool Camera::previewEnabled() bool Camera::recordingEnabled() { ALOGV("recordingEnabled"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return false; return c->recordingEnabled(); } Loading @@ -223,7 +225,7 @@ bool Camera::recordingEnabled() status_t Camera::autoFocus() { ALOGV("autoFocus"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->autoFocus(); } Loading @@ -231,7 +233,7 @@ status_t Camera::autoFocus() status_t Camera::cancelAutoFocus() { ALOGV("cancelAutoFocus"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->cancelAutoFocus(); } Loading @@ -240,7 +242,7 @@ status_t Camera::cancelAutoFocus() status_t Camera::takePicture(int msgType) { ALOGV("takePicture: 0x%x", msgType); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->takePicture(msgType); } Loading @@ -249,7 +251,7 @@ status_t Camera::takePicture(int msgType) status_t Camera::setParameters(const String8& params) { ALOGV("setParameters"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->setParameters(params); } Loading @@ -259,7 +261,7 @@ String8 Camera::getParameters() const { ALOGV("getParameters"); String8 params; sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c != 0) params = mCamera->getParameters(); return params; } Loading @@ -268,7 +270,7 @@ String8 Camera::getParameters() const status_t Camera::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) { ALOGV("sendCommand"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->sendCommand(cmd, arg1, arg2); } Loading @@ -288,7 +290,7 @@ void Camera::setRecordingProxyListener(const sp<ICameraRecordingProxyListener>& void Camera::setPreviewCallbackFlags(int flag) { ALOGV("setPreviewCallbackFlags"); sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return; mCamera->setPreviewCallbackFlag(flag); } Loading @@ -296,7 +298,7 @@ void Camera::setPreviewCallbackFlags(int flag) status_t Camera::setPreviewCallbackTarget( const sp<IGraphicBufferProducer>& callbackProducer) { sp <ICamera> c = mCamera; sp <::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->setPreviewCallbackTarget(callbackProducer); } Loading
camera/CameraBase.cpp +56 −22 Original line number Diff line number Diff line Loading @@ -21,12 +21,13 @@ #include <utils/threads.h> #include <utils/Mutex.h> #include <android/hardware/ICameraService.h> #include <binder/IPCThreadState.h> #include <binder/IServiceManager.h> #include <binder/IMemory.h> #include <camera/CameraBase.h> #include <camera/ICameraService.h> // needed to instantiate #include <camera/Camera.h> Loading @@ -35,8 +36,28 @@ namespace android { namespace hardware { status_t CameraInfo::writeToParcel(Parcel* parcel) const { status_t res; res = parcel->writeInt32(facing); if (res != OK) return res; res = parcel->writeInt32(orientation); return res; } status_t CameraInfo::readFromParcel(const Parcel* parcel) { status_t res; res = parcel->readInt32(&facing); if (res != OK) return res; res = parcel->readInt32(&orientation); return res; } } namespace { sp<ICameraService> gCameraService; sp<::android::hardware::ICameraService> gCameraService; const int kCameraServicePollDelay = 500000; // 0.5s const char* kCameraServiceName = "media.camera"; Loading Loading @@ -65,7 +86,7 @@ namespace { // establish binder interface to camera service template <typename TCam, typename TCamTraits> const sp<ICameraService>& CameraBase<TCam, TCamTraits>::getCameraService() const sp<::android::hardware::ICameraService>& CameraBase<TCam, TCamTraits>::getCameraService() { Mutex::Autolock _l(gLock); if (gCameraService.get() == 0) { Loading @@ -83,7 +104,7 @@ const sp<ICameraService>& CameraBase<TCam, TCamTraits>::getCameraService() gDeathNotifier = new DeathNotifier(); } binder->linkToDeath(gDeathNotifier); gCameraService = interface_cast<ICameraService>(binder); gCameraService = interface_cast<::android::hardware::ICameraService>(binder); } ALOGE_IF(gCameraService == 0, "no CameraService!?"); return gCameraService; Loading @@ -97,19 +118,20 @@ sp<TCam> CameraBase<TCam, TCamTraits>::connect(int cameraId, ALOGV("%s: connect", __FUNCTION__); sp<TCam> c = new TCam(cameraId); sp<TCamCallbacks> cl = c; status_t status = NO_ERROR; const sp<ICameraService>& cs = getCameraService(); const sp<::android::hardware::ICameraService>& cs = getCameraService(); if (cs != 0) { binder::Status ret; if (cs != nullptr) { TCamConnectService fnConnectService = TCamTraits::fnConnectService; status = (cs.get()->*fnConnectService)(cl, cameraId, clientPackageName, clientUid, clientPid, /*out*/ c->mCamera); ret = (cs.get()->*fnConnectService)(cl, cameraId, clientPackageName, clientUid, clientPid, /*out*/ &c->mCamera); } if (status == OK && c->mCamera != 0) { if (ret.isOk() && c->mCamera != nullptr) { IInterface::asBinder(c->mCamera)->linkToDeath(c); c->mStatus = NO_ERROR; } else { ALOGW("An error occurred while connecting to camera: %d", cameraId); ALOGW("An error occurred while connecting to camera %d: %s", cameraId, (cs != nullptr) ? "Service not available" : ret.toString8().string()); c.clear(); } return c; Loading Loading @@ -182,38 +204,50 @@ void CameraBase<TCam, TCamTraits>::notifyCallback(int32_t msgType, template <typename TCam, typename TCamTraits> int CameraBase<TCam, TCamTraits>::getNumberOfCameras() { const sp<ICameraService> cs = getCameraService(); const sp<::android::hardware::ICameraService> cs = getCameraService(); if (!cs.get()) { // as required by the public Java APIs return 0; } return cs->getNumberOfCameras(); int32_t count; binder::Status res = cs->getNumberOfCameras( ::android::hardware::ICameraService::CAMERA_TYPE_BACKWARD_COMPATIBLE, &count); if (!res.isOk()) { ALOGE("Error reading number of cameras: %s", res.toString8().string()); count = 0; } return count; } // this can be in BaseCamera but it should be an instance method template <typename TCam, typename TCamTraits> status_t CameraBase<TCam, TCamTraits>::getCameraInfo(int cameraId, struct CameraInfo* cameraInfo) { const sp<ICameraService>& cs = getCameraService(); struct hardware::CameraInfo* cameraInfo) { const sp<::android::hardware::ICameraService>& cs = getCameraService(); if (cs == 0) return UNKNOWN_ERROR; return cs->getCameraInfo(cameraId, cameraInfo); binder::Status res = cs->getCameraInfo(cameraId, cameraInfo); return res.isOk() ? OK : res.serviceSpecificErrorCode(); } template <typename TCam, typename TCamTraits> status_t CameraBase<TCam, TCamTraits>::addServiceListener( const sp<ICameraServiceListener>& listener) { const sp<ICameraService>& cs = getCameraService(); const sp<::android::hardware::ICameraServiceListener>& listener) { const sp<::android::hardware::ICameraService>& cs = getCameraService(); if (cs == 0) return UNKNOWN_ERROR; return cs->addListener(listener); binder::Status res = cs->addListener(listener); return res.isOk() ? OK : res.serviceSpecificErrorCode(); } template <typename TCam, typename TCamTraits> status_t CameraBase<TCam, TCamTraits>::removeServiceListener( const sp<ICameraServiceListener>& listener) { const sp<ICameraService>& cs = getCameraService(); const sp<::android::hardware::ICameraServiceListener>& listener) { const sp<::android::hardware::ICameraService>& cs = getCameraService(); if (cs == 0) return UNKNOWN_ERROR; return cs->removeListener(listener); binder::Status res = cs->removeListener(listener); return res.isOk() ? OK : res.serviceSpecificErrorCode(); } template class CameraBase<Camera>; Loading
camera/CameraMetadata.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -621,7 +621,7 @@ status_t CameraMetadata::writeToParcel(Parcel& data, return res; } status_t CameraMetadata::readFromParcel(Parcel *parcel) { status_t CameraMetadata::readFromParcel(const Parcel *parcel) { ALOGV("%s: parcel = %p", __FUNCTION__, parcel); Loading
camera/CameraParameters2.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -351,7 +351,7 @@ const char *CameraParameters2::getPictureFormat() const void CameraParameters2::dump() const { ALOGD("dump: mMap.size = %d", mMap.size()); ALOGD("dump: mMap.size = %zu", mMap.size()); for (size_t i = 0; i < mMap.size(); i++) { String8 k, v; k = mMap.keyAt(i); Loading