blob: ed37b2df9ee3fe503534ebb03f69ef95af01f2bc [file] [log] [blame]
/*
* 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.
*/
package android.hardware;
import android.hardware.ICamera;
import android.hardware.ICameraClient;
import android.hardware.camera2.ICameraDeviceUser;
import android.hardware.camera2.ICameraDeviceCallbacks;
import android.hardware.camera2.ICameraInjectionCallback;
import android.hardware.camera2.ICameraInjectionSession;
import android.hardware.camera2.params.VendorTagDescriptor;
import android.hardware.camera2.params.VendorTagDescriptorCache;
import android.hardware.camera2.utils.ConcurrentCameraIdCombination;
import android.hardware.camera2.utils.CameraIdAndSessionConfiguration;
import android.hardware.camera2.impl.CameraMetadataNative;
import android.hardware.ICameraServiceListener;
import android.hardware.CameraInfo;
import android.hardware.CameraStatus;
import android.hardware.CameraExtensionSessionStats;
/**
* Binder interface for the native camera service running in mediaserver.
*
* @hide
*/
interface ICameraService
{
/**
* All camera service and device Binder calls may return a
* ServiceSpecificException with the following error codes
*/
const int ERROR_PERMISSION_DENIED = 1;
const int ERROR_ALREADY_EXISTS = 2;
const int ERROR_ILLEGAL_ARGUMENT = 3;
const int ERROR_DISCONNECTED = 4;
const int ERROR_TIMED_OUT = 5;
const int ERROR_DISABLED = 6;
const int ERROR_CAMERA_IN_USE = 7;
const int ERROR_MAX_CAMERAS_IN_USE = 8;
const int ERROR_DEPRECATED_HAL = 9;
const int ERROR_INVALID_OPERATION = 10;
/**
* Types for getNumberOfCameras
*/
const int CAMERA_TYPE_BACKWARD_COMPATIBLE = 0;
const int CAMERA_TYPE_ALL = 1;
/**
* Return the number of camera devices available in the system
*/
int getNumberOfCameras(int type);
/**
* Fetch basic camera information for a camera device
*/
CameraInfo getCameraInfo(int cameraId, boolean overrideToPortrait);
/**
* Default UID/PID values for non-privileged callers of
* connect() and connectDevice()
*/
const int USE_CALLING_UID = -1;
const int USE_CALLING_PID = -1;
/**
* Open a camera device through the old camera API
*/
ICamera connect(ICameraClient client,
int cameraId,
@utf8InCpp String opPackageName,
int clientUid, int clientPid,
int targetSdkVersion,
boolean overrideToPortrait,
boolean forceSlowJpegMode);
/**
* Open a camera device through the new camera API
* Only supported for device HAL versions >= 3.2
*/
ICameraDeviceUser connectDevice(ICameraDeviceCallbacks callbacks,
@utf8InCpp String cameraId,
@utf8InCpp String opPackageName,
@nullable @utf8InCpp String featureId,
int clientUid, int oomScoreOffset,
int targetSdkVersion,
boolean overrideToPortrait);
/**
* Add listener for changes to camera device and flashlight state.
*
* Also returns the set of currently-known camera IDs and state of each device.
* Adding a listener will trigger the torch status listener to fire for all
* devices that have a flash unit.
*/
CameraStatus[] addListener(ICameraServiceListener listener);
/**
* Get a list of combinations of camera ids which support concurrent streaming.
*
*/
ConcurrentCameraIdCombination[] getConcurrentCameraIds();
/**
* Check whether a particular set of session configurations are concurrently supported by the
* corresponding camera ids.
*
* @param sessions the set of camera id and session configuration pairs to be queried.
* @param targetSdkVersion the target sdk level of the application calling this function.
* @return true - the set of concurrent camera id and stream combinations is supported.
* false - the set of concurrent camera id and stream combinations is not supported
* OR the method was called with a set of camera ids not returned by
* getConcurrentCameraIds().
*/
boolean isConcurrentSessionConfigurationSupported(
in CameraIdAndSessionConfiguration[] sessions,
int targetSdkVersion);
/**
* Remove listener for changes to camera device and flashlight state.
*/
void removeListener(ICameraServiceListener listener);
/**
* Read the static camera metadata for a camera device.
* Only supported for device HAL versions >= 3.2
*/
CameraMetadataNative getCameraCharacteristics(@utf8InCpp String cameraId, int targetSdkVersion,
boolean overrideToPortrait);
/**
* Read in the vendor tag descriptors from the camera module HAL.
* Intended to be used by the native code of CameraMetadataNative to correctly
* interpret camera metadata with vendor tags.
*/
VendorTagDescriptor getCameraVendorTagDescriptor();
/**
* Retrieve the vendor tag descriptor cache which can have multiple vendor
* providers.
* Intended to be used by the native code of CameraMetadataNative to correctly
* interpret camera metadata with vendor tags.
*/
VendorTagDescriptorCache getCameraVendorTagCache();
/**
* Read the legacy camera1 parameters into a String
*/
@utf8InCpp String getLegacyParameters(int cameraId);
/**
* apiVersion constants for supportsCameraApi
*/
const int API_VERSION_1 = 1;
const int API_VERSION_2 = 2;
// Determines if a particular API version is supported directly for a cameraId.
boolean supportsCameraApi(@utf8InCpp String cameraId, int apiVersion);
// Determines if a cameraId is a hidden physical camera of a logical multi-camera.
boolean isHiddenPhysicalCamera(@utf8InCpp String cameraId);
// Inject the external camera to replace the internal camera session.
ICameraInjectionSession injectCamera(@utf8InCpp String packageName, @utf8InCpp String internalCamId,
@utf8InCpp String externalCamId, in ICameraInjectionCallback CameraInjectionCallback);
void setTorchMode(@utf8InCpp String cameraId, boolean enabled, IBinder clientBinder);
// Change the brightness level of the flash unit associated with cameraId to strengthLevel.
// If the torch is in OFF state and strengthLevel > 0 then the torch will also be turned ON.
void turnOnTorchWithStrengthLevel(@utf8InCpp String cameraId, int strengthLevel, IBinder clientBinder);
// Get the brightness level of the flash unit associated with cameraId.
int getTorchStrengthLevel(@utf8InCpp String cameraId);
/**
* Notify the camera service of a system event. Should only be called from system_server.
*
* Callers require the android.permission.CAMERA_SEND_SYSTEM_EVENTS permission.
*/
const int EVENT_NONE = 0;
const int EVENT_USER_SWITCHED = 1; // The argument is the set of new foreground user IDs.
const int EVENT_USB_DEVICE_ATTACHED = 2; // The argument is the deviceId and vendorId
const int EVENT_USB_DEVICE_DETACHED = 3; // The argument is the deviceId and vendorId
oneway void notifySystemEvent(int eventId, in int[] args);
/**
* Notify the camera service of a display configuration change.
*
* Callers require the android.permission.CAMERA_SEND_SYSTEM_EVENTS permission.
*/
oneway void notifyDisplayConfigurationChange();
/**
* Notify the camera service of a device physical status change. May only be called from
* a privileged process.
*
* newState is a bitfield consisting of DEVICE_STATE_* values combined together. Valid state
* combinations are device-specific. At device startup, the camera service will assume the device
* state is NORMAL until otherwise notified.
*
* Callers require the android.permission.CAMERA_SEND_SYSTEM_EVENTS permission.
*/
oneway void notifyDeviceStateChange(long newState);
/**
* Report Extension specific metrics to camera service for logging. This should only be called
* by CameraExtensionSession to log extension metrics. All calls after the first must set
* CameraExtensionSessionStats.key to the value returned by this function.
*
* Each subsequent call fully overwrites the existing CameraExtensionSessionStats for the
* current session, so the caller is responsible for keeping the stats complete.
*
* Due to cameraservice and cameraservice_proxy architecture, there is no guarantee that
* {@code stats} will be logged immediately (or at all). CameraService will log whatever
* extension stats it has at the time of camera session closing which may be before the app
* process receives a session/device closed callback; so CameraExtensionSession
* should send metrics to the cameraservice preriodically, and cameraservice must handle calls
* to this function from sessions that have not been logged yet and from sessions that have
* already been closed.
*
* @return the key that must be used to report updates to previously reported stats.
*/
@utf8InCpp String reportExtensionSessionStats(in CameraExtensionSessionStats stats);
// Bitfield constants for notifyDeviceStateChange
// All bits >= 32 are for custom vendor states
// Written as ints since AIDL does not support long constants.
const int DEVICE_STATE_NORMAL = 0;
const int DEVICE_STATE_BACK_COVERED = 1;
const int DEVICE_STATE_FRONT_COVERED = 2;
const int DEVICE_STATE_FOLDED = 4;
const int DEVICE_STATE_LAST_FRAMEWORK_BIT = 0x80000000; // 1 << 31;
}