1985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin/* 2985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * Copyright (C) 2013 The Android Open Source Project 3985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * 4985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); 5985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * you may not use this file except in compliance with the License. 6985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * You may obtain a copy of the License at 7985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * 8985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 9985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * 10985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * Unless required by applicable law or agreed to in writing, software 11985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * distributed under the License is distributed on an "AS IS" BASIS, 12985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * See the License for the specific language governing permissions and 14985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * limitations under the License. 15985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin */ 16985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 17985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin#ifndef ANDROID_SERVERS_CAMERA_PROCAMERA2CLIENT_H 18985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin#define ANDROID_SERVERS_CAMERA_PROCAMERA2CLIENT_H 19985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 20985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin#include "CameraService.h" 217b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala#include "common/FrameProcessorBase.h" 227b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala#include "common/Camera2ClientBase.h" 237b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala#include "device2/Camera2Device.h" 24cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei#include "camera/CaptureResult.h" 25985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 26985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkinnamespace android { 27985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 28985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkinclass IMemory; 29985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin/** 30985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * Implements the binder IProCameraUser API, 31985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * meant for HAL2-level private API access. 32985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin */ 33985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkinclass ProCamera2Client : 3444cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin public Camera2ClientBase<CameraService::ProClient>, 357b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala public camera2::FrameProcessorBase::FilteredListener 36985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin{ 37985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkinpublic: 38985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin /** 39985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * IProCameraUser interface (see IProCameraUser for details) 40985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin */ 41985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin virtual status_t exclusiveTryLock(); 42985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin virtual status_t exclusiveLock(); 43985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin virtual status_t exclusiveUnlock(); 44985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 45985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin virtual bool hasExclusiveLock(); 46985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 47985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin // Note that the callee gets a copy of the metadata. 48985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin virtual int submitRequest(camera_metadata_t* metadata, 49985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin bool streaming = false); 50985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin virtual status_t cancelRequest(int requestId); 51985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 52fa4cf9d310685b4c25877cba772ff7da84caf517Igor Murashkin virtual status_t deleteStream(int streamId); 53985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 5444cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin virtual status_t createStream( 5544cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin int width, 5644cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin int height, 5744cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin int format, 5844cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin const sp<IGraphicBufferProducer>& bufferProducer, 5944cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin /*out*/ 6044cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin int* streamId); 61985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 62985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin // Create a request object from a template. 633261fd3f1d8f798fab2f1b3efaa92d5a35cd42e7Igor Murashkin // -- Caller owns the newly allocated metadata 64985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin virtual status_t createDefaultRequest(int templateId, 65985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin /*out*/ 66985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin camera_metadata** request); 67985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 687b33a74bbc514b99c16be7fff9a34e892bc19264Igor Murashkin // Get the static metadata for the camera 697b33a74bbc514b99c16be7fff9a34e892bc19264Igor Murashkin // -- Caller owns the newly allocated metadata 707b33a74bbc514b99c16be7fff9a34e892bc19264Igor Murashkin virtual status_t getCameraInfo(int cameraId, 717b33a74bbc514b99c16be7fff9a34e892bc19264Igor Murashkin /*out*/ 727b33a74bbc514b99c16be7fff9a34e892bc19264Igor Murashkin camera_metadata** info); 73985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 74985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin /** 75985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * Interface used by CameraService 76985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin */ 77985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 78985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin ProCamera2Client(const sp<CameraService>& cameraService, 79985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin const sp<IProCameraCallbacks>& remoteCallback, 80ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala const String16& clientPackageName, 81985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin int cameraId, 82985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin int cameraFacing, 83985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin int clientPid, 84ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala uid_t clientUid, 85985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin int servicePid); 86985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin virtual ~ProCamera2Client(); 87985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 8844cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin virtual status_t initialize(camera_module_t *module); 89985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 9044cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin virtual status_t dump(int fd, const Vector<String16>& args); 91985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 92bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin // Callbacks from camera service 93bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin virtual void onExclusiveLockStolen(); 94bfc9915f482520eb9676c6d2dbf7f1ac078d937dIgor Murashkin 95985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin /** 96985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin * Interface used by independent components of ProCamera2Client. 97985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin */ 98985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 99a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkinprotected: 100a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin /** FilteredListener implementation **/ 101cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei virtual void onResultAvailable(const CaptureResult& result); 102cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei 10344cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin virtual void detachDevice(); 104a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 105985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkinprivate: 106985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin /** IProCameraUser interface-related private members */ 107985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 108985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin /** Preview callback related members */ 1097b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala sp<camera2::FrameProcessorBase> mFrameProcessor; 110a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin static const int32_t FRAME_PROCESSOR_LISTENER_MIN_ID = 0; 111a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin static const int32_t FRAME_PROCESSOR_LISTENER_MAX_ID = 0x7fffffffL; 112a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 113985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin /** Utility members */ 11403ac850527ffb90348dcdaad95caceb97649fd6bIgor Murashkin bool enforceRequestPermissions(CameraMetadata& metadata); 115985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 116985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin // Whether or not we have an exclusive lock on the device 117985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin // - if no we can't modify the request queue. 118985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin // note that creating/deleting streams we own is still OK 119985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin bool mExclusiveLock; 120985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin}; 121985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 122985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin}; // namespace android 123985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin 124985fd30a10f6fec4293f071fd258c4726cff5a3dIgor Murashkin#endif 125