summaryrefslogtreecommitdiffstats
path: root/include/camera
diff options
context:
space:
mode:
authorIgor Murashkin <iam@google.com>2013-02-27 12:55:20 -0800
committerIgor Murashkin <iam@google.com>2013-02-28 15:55:15 -0800
commitbfc9915f482520eb9676c6d2dbf7f1ac078d937d (patch)
tree1353c3f2f63777397770edfd1f146c691e5684e2 /include/camera
parent3fa4891f54bbfdbe8ee652930d22c96639964eff (diff)
downloadframeworks_av-bfc9915f482520eb9676c6d2dbf7f1ac078d937d.zip
frameworks_av-bfc9915f482520eb9676c6d2dbf7f1ac078d937d.tar.gz
frameworks_av-bfc9915f482520eb9676c6d2dbf7f1ac078d937d.tar.bz2
Camera: Drop ProCamera connections when a Camera connection happens
* Also adds an ICameraServiceListener with available/not available statuses Bug: 8291653 Change-Id: I24680f1a2dc109510caf451cf7c7bd180b670d84
Diffstat (limited to 'include/camera')
-rw-r--r--include/camera/CameraBase.h6
-rw-r--r--include/camera/ICameraService.h18
-rw-r--r--include/camera/ICameraServiceListener.h64
-rw-r--r--include/camera/ProCamera.h3
4 files changed, 88 insertions, 3 deletions
diff --git a/include/camera/CameraBase.h b/include/camera/CameraBase.h
index fed28ea..2735a86 100644
--- a/include/camera/CameraBase.h
+++ b/include/camera/CameraBase.h
@@ -71,6 +71,12 @@ public:
/*out*/
struct CameraInfo* cameraInfo);
+ static status_t addServiceListener(
+ const sp<ICameraServiceListener>& listener);
+
+ static status_t removeServiceListener(
+ const sp<ICameraServiceListener>& listener);
+
sp<TCamUser> remote();
// Status is set to 'UNKNOWN_ERROR' after successful (re)connection
diff --git a/include/camera/ICameraService.h b/include/camera/ICameraService.h
index ef2b685..aaf6eb3 100644
--- a/include/camera/ICameraService.h
+++ b/include/camera/ICameraService.h
@@ -27,6 +27,7 @@ class ICamera;
class ICameraClient;
class IProCameraUser;
class IProCameraCallbacks;
+class ICameraServiceListener;
class ICameraService : public IInterface
{
@@ -35,7 +36,9 @@ public:
GET_NUMBER_OF_CAMERAS = IBinder::FIRST_CALL_TRANSACTION,
GET_CAMERA_INFO,
CONNECT,
- CONNECT_PRO
+ CONNECT_PRO,
+ ADD_LISTENER,
+ REMOVE_LISTENER,
};
enum {
@@ -45,9 +48,18 @@ public:
public:
DECLARE_META_INTERFACE(CameraService);
- virtual int32_t getNumberOfCameras() = 0;
- virtual status_t getCameraInfo(int cameraId,
+ virtual int32_t getNumberOfCameras() = 0;
+ virtual status_t getCameraInfo(int cameraId,
struct CameraInfo* cameraInfo) = 0;
+
+ // Returns 'OK' if operation succeeded
+ // - Errors: ALREADY_EXISTS if the listener was already added
+ virtual status_t addListener(const sp<ICameraServiceListener>& listener)
+ = 0;
+ // Returns 'OK' if operation succeeded
+ // - Errors: BAD_VALUE if specified listener was not in the listener list
+ virtual status_t removeListener(const sp<ICameraServiceListener>& listener)
+ = 0;
/**
* clientPackageName and clientUid are used for permissions checking. if
* clientUid == USE_CALLING_UID, then the calling UID is used instead. Only
diff --git a/include/camera/ICameraServiceListener.h b/include/camera/ICameraServiceListener.h
new file mode 100644
index 0000000..207116a
--- /dev/null
+++ b/include/camera/ICameraServiceListener.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_HARDWARE_ICAMERASERVICE_LISTENER_H
+#define ANDROID_HARDWARE_ICAMERASERVICE_LISTENER_H
+
+#include <utils/RefBase.h>
+#include <binder/IInterface.h>
+#include <binder/Parcel.h>
+#include <hardware/camera_common.h>
+
+namespace android {
+
+class ICameraServiceListener : public IInterface
+{
+public:
+
+ enum Status {
+ // Device physically unplugged
+ STATUS_PRESENT = CAMERA_DEVICE_STATUS_PRESENT,
+ // Device physically re-plugged
+ STATUS_NOT_PRESENT = CAMERA_DEVICE_STATUS_NOT_PRESENT,
+
+ // Camera can be used exclusively
+ STATUS_AVAILABLE = 0x80000000,
+ // Camera is in use by another app and cannot be used exclusively
+ STATUS_NOT_AVAILABLE,
+
+ // Use to initialize variables only
+ STATUS_UNKNOWN = 0xFFFFFFFF,
+ };
+
+ DECLARE_META_INTERFACE(CameraServiceListener);
+
+ virtual void onStatusChanged(Status status, int32_t cameraId) = 0;
+};
+
+// ----------------------------------------------------------------------------
+
+class BnCameraServiceListener : public BnInterface<ICameraServiceListener>
+{
+public:
+ virtual status_t onTransact( uint32_t code,
+ const Parcel& data,
+ Parcel* reply,
+ uint32_t flags = 0);
+};
+
+}; // namespace android
+
+#endif
diff --git a/include/camera/ProCamera.h b/include/camera/ProCamera.h
index b228145..e8dcdef 100644
--- a/include/camera/ProCamera.h
+++ b/include/camera/ProCamera.h
@@ -169,6 +169,9 @@ public:
/**
* Delete a stream.
* Lock free.
+ *
+ * NOTE: As a side effect this cancels ALL streaming requests.
+ *
* Errors: BAD_VALUE if unknown stream ID.
* PERMISSION_DENIED if the stream wasn't yours
*/