ProCamera2Client.h revision cb0652e5a850b2fcd919e977247e87239efaf70e
1/* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef ANDROID_SERVERS_CAMERA_PROCAMERA2CLIENT_H 18#define ANDROID_SERVERS_CAMERA_PROCAMERA2CLIENT_H 19 20#include "CameraService.h" 21#include "common/FrameProcessorBase.h" 22#include "common/Camera2ClientBase.h" 23#include "device2/Camera2Device.h" 24#include "camera/CaptureResult.h" 25 26namespace android { 27 28class IMemory; 29/** 30 * Implements the binder IProCameraUser API, 31 * meant for HAL2-level private API access. 32 */ 33class ProCamera2Client : 34 public Camera2ClientBase<CameraService::ProClient>, 35 public camera2::FrameProcessorBase::FilteredListener 36{ 37public: 38 /** 39 * IProCameraUser interface (see IProCameraUser for details) 40 */ 41 virtual status_t exclusiveTryLock(); 42 virtual status_t exclusiveLock(); 43 virtual status_t exclusiveUnlock(); 44 45 virtual bool hasExclusiveLock(); 46 47 // Note that the callee gets a copy of the metadata. 48 virtual int submitRequest(camera_metadata_t* metadata, 49 bool streaming = false); 50 virtual status_t cancelRequest(int requestId); 51 52 virtual status_t deleteStream(int streamId); 53 54 virtual status_t createStream( 55 int width, 56 int height, 57 int format, 58 const sp<IGraphicBufferProducer>& bufferProducer, 59 /*out*/ 60 int* streamId); 61 62 // Create a request object from a template. 63 // -- Caller owns the newly allocated metadata 64 virtual status_t createDefaultRequest(int templateId, 65 /*out*/ 66 camera_metadata** request); 67 68 // Get the static metadata for the camera 69 // -- Caller owns the newly allocated metadata 70 virtual status_t getCameraInfo(int cameraId, 71 /*out*/ 72 camera_metadata** info); 73 74 /** 75 * Interface used by CameraService 76 */ 77 78 ProCamera2Client(const sp<CameraService>& cameraService, 79 const sp<IProCameraCallbacks>& remoteCallback, 80 const String16& clientPackageName, 81 int cameraId, 82 int cameraFacing, 83 int clientPid, 84 uid_t clientUid, 85 int servicePid); 86 virtual ~ProCamera2Client(); 87 88 virtual status_t initialize(camera_module_t *module); 89 90 virtual status_t dump(int fd, const Vector<String16>& args); 91 92 // Callbacks from camera service 93 virtual void onExclusiveLockStolen(); 94 95 /** 96 * Interface used by independent components of ProCamera2Client. 97 */ 98 99protected: 100 /** FilteredListener implementation **/ 101 virtual void onResultAvailable(const CaptureResult& result); 102 103 virtual void detachDevice(); 104 105private: 106 /** IProCameraUser interface-related private members */ 107 108 /** Preview callback related members */ 109 sp<camera2::FrameProcessorBase> mFrameProcessor; 110 static const int32_t FRAME_PROCESSOR_LISTENER_MIN_ID = 0; 111 static const int32_t FRAME_PROCESSOR_LISTENER_MAX_ID = 0x7fffffffL; 112 113 /** Utility members */ 114 bool enforceRequestPermissions(CameraMetadata& metadata); 115 116 // Whether or not we have an exclusive lock on the device 117 // - if no we can't modify the request queue. 118 // note that creating/deleting streams we own is still OK 119 bool mExclusiveLock; 120}; 121 122}; // namespace android 123 124#endif 125