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 "Camera2Device.h" 21 #include "CameraService.h" 22 #include "camera2/ProFrameProcessor.h" 23 #include "Camera2ClientBase.h" 24 25 namespace android { 26 27 class IMemory; 28 /** 29 * Implements the binder IProCameraUser API, 30 * meant for HAL2-level private API access. 31 */ 32 class ProCamera2Client : 33 public Camera2ClientBase<CameraService::ProClient>, 34 public camera2::ProFrameProcessor::FilteredListener 35 { 36 public: 37 /** 38 * IProCameraUser interface (see IProCameraUser for details) 39 */ 40 virtual status_t exclusiveTryLock(); 41 virtual status_t exclusiveLock(); 42 virtual status_t exclusiveUnlock(); 43 44 virtual bool hasExclusiveLock(); 45 46 // Note that the callee gets a copy of the metadata. 47 virtual int submitRequest(camera_metadata_t* metadata, 48 bool streaming = false); 49 virtual status_t cancelRequest(int requestId); 50 51 virtual status_t deleteStream(int streamId); 52 53 virtual status_t createStream( 54 int width, 55 int height, 56 int format, 57 const sp<IGraphicBufferProducer>& bufferProducer, 58 /*out*/ 59 int* streamId); 60 61 // Create a request object from a template. 62 // -- Caller owns the newly allocated metadata 63 virtual status_t createDefaultRequest(int templateId, 64 /*out*/ 65 camera_metadata** request); 66 67 // Get the static metadata for the camera 68 // -- Caller owns the newly allocated metadata 69 virtual status_t getCameraInfo(int cameraId, 70 /*out*/ 71 camera_metadata** info); 72 73 /** 74 * Interface used by CameraService 75 */ 76 77 ProCamera2Client(const sp<CameraService>& cameraService, 78 const sp<IProCameraCallbacks>& remoteCallback, 79 const String16& clientPackageName, 80 int cameraId, 81 int cameraFacing, 82 int clientPid, 83 uid_t clientUid, 84 int servicePid); 85 virtual ~ProCamera2Client(); 86 87 virtual status_t initialize(camera_module_t *module); 88 89 virtual status_t dump(int fd, const Vector<String16>& args); 90 91 // Callbacks from camera service 92 virtual void onExclusiveLockStolen(); 93 94 /** 95 * Interface used by independent components of ProCamera2Client. 96 */ 97 98 protected: 99 /** FilteredListener implementation **/ 100 virtual void onFrameAvailable(int32_t frameId, 101 const CameraMetadata& frame); 102 virtual void detachDevice(); 103 104 private: 105 /** IProCameraUser interface-related private members */ 106 107 /** Preview callback related members */ 108 sp<camera2::ProFrameProcessor> mFrameProcessor; 109 static const int32_t FRAME_PROCESSOR_LISTENER_MIN_ID = 0; 110 static const int32_t FRAME_PROCESSOR_LISTENER_MAX_ID = 0x7fffffffL; 111 112 /** Utility members */ 113 bool enforceRequestPermissions(CameraMetadata& metadata); 114 115 // Whether or not we have an exclusive lock on the device 116 // - if no we can't modify the request queue. 117 // note that creating/deleting streams we own is still OK 118 bool mExclusiveLock; 119 }; 120 121 }; // namespace android 122 123 #endif 124