1 /* 2 * Copyright (C) 2019 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 HARDWARE_GOOGLE_CAMERA_HAL_TESTS_MOCK_DEVICE_SESSION_HWL_H_ 18 #define HARDWARE_GOOGLE_CAMERA_HAL_TESTS_MOCK_DEVICE_SESSION_HWL_H_ 19 20 #include <camera_device_session.h> 21 #include <gmock/gmock.h> 22 23 #include "session_data_defs.h" 24 25 namespace android { 26 namespace google_camera_hal { 27 28 // Defines a fake CameraDeviceSessionHwl to be called by MockDeviceSessionHwl. 29 class FakeCameraDeviceSessionHwl : public CameraDeviceSessionHwl { 30 public: 31 // Initialize a fake camera device session HWL for a camera ID. 32 // If physical_camera_ids is not empty, it will consist of the physical camera 33 // IDs. 34 FakeCameraDeviceSessionHwl(uint32_t camera_id, 35 const std::vector<uint32_t>& physical_camera_ids); 36 37 virtual ~FakeCameraDeviceSessionHwl() = default; 38 39 status_t ConstructDefaultRequestSettings( 40 RequestTemplate type, 41 std::unique_ptr<HalCameraMetadata>* default_settings) override; 42 43 status_t PrepareConfigureStreams( 44 const StreamConfiguration& request_config) override; 45 46 status_t ConfigurePipeline(uint32_t camera_id, 47 HwlPipelineCallback hwl_pipeline_callback, 48 const StreamConfiguration& request_config, 49 const StreamConfiguration& overall_config, 50 uint32_t* pipeline_id) override; 51 52 status_t BuildPipelines() override; 53 54 // This fake method fills a few dummy streams to streams. 55 // Currently only supports kOfflineSmoothTransitionRole. 56 status_t GetRequiredIntputStreams(const StreamConfiguration& overall_config, 57 HwlOfflinePipelineRole pipeline_role, 58 std::vector<Stream>* streams) override; 59 PreparePipeline(uint32_t,uint32_t)60 status_t PreparePipeline(uint32_t /*pipeline_id*/, uint32_t /*frame_number*/) { 61 return OK; 62 } 63 64 status_t GetConfiguredHalStream( 65 uint32_t pipeline_id, std::vector<HalStream>* hal_streams) const override; 66 67 void DestroyPipelines() override; 68 69 status_t SubmitRequests( 70 uint32_t frame_number, 71 const std::vector<HwlPipelineRequest>& requests) override; 72 73 status_t Flush() override; 74 75 uint32_t GetCameraId() const override; 76 77 std::vector<uint32_t> GetPhysicalCameraIds() const override; 78 79 status_t GetCameraCharacteristics( 80 std::unique_ptr<HalCameraMetadata>* characteristics) const override; 81 82 status_t GetPhysicalCameraCharacteristics( 83 uint32_t physical_camera_id, 84 std::unique_ptr<HalCameraMetadata>* characteristics) const override; 85 86 void SetPhysicalCameraIds(const std::vector<uint32_t>& physical_camera_ids); 87 88 status_t SetSessionData(SessionDataKey key, void* value) override; 89 90 status_t GetSessionData(SessionDataKey key, void** value) const override; 91 92 void SetSessionCallback( 93 const HwlSessionCallback& hwl_session_callback) override; 94 95 status_t FilterResultMetadata(HalCameraMetadata* metadata) const override; 96 97 std::unique_ptr<IMulticamCoordinatorHwl> CreateMulticamCoordinatorHwl(); 98 99 status_t IsReconfigurationRequired( 100 const HalCameraMetadata* old_session, const HalCameraMetadata* new_session, 101 bool* reconfiguration_required) const override; 102 103 std::unique_ptr<ZoomRatioMapperHwl> GetZoomRatioMapperHwl() override; 104 105 private: 106 const uint32_t kCameraId; 107 const std::vector<uint32_t> kPhysicalCameraIds; 108 109 mutable std::mutex hwl_pipeline_lock_; 110 111 // Maps from pipeline ID to HWL pipeline callback. 112 // Protected by hwl_pipeline_lock_. 113 std::unordered_map<uint32_t, HwlPipelineCallback> hwl_pipeline_callbacks_; 114 115 // Maps from pipeline ID to HAL streams. Protected by hwl_pipeline_lock_. 116 std::unordered_map<uint32_t, std::vector<HalStream>> pipeline_hal_streams_map_; 117 }; 118 119 // Defines a CameraDeviceSessionHwl mock using gmock. 120 class MockDeviceSessionHwl : public CameraDeviceSessionHwl { 121 public: 122 // Initialize a mock camera device session HWL for a camera ID. 123 // If physical_camera_ids is not empty, it will consist of the physical camera 124 // IDs. 125 MockDeviceSessionHwl(uint32_t camera_id = 3, // Dummy camera ID 126 const std::vector<uint32_t>& physical_camera_ids = 127 std::vector<uint32_t>()); 128 129 MOCK_METHOD2(ConstructDefaultRequestSettings, 130 status_t(RequestTemplate type, 131 std::unique_ptr<HalCameraMetadata>* default_settings)); 132 133 MOCK_METHOD5(ConfigurePipeline, 134 status_t(uint32_t camera_id, 135 HwlPipelineCallback hwl_pipeline_callback, 136 const StreamConfiguration& request_config, 137 const StreamConfiguration& overall_config, 138 uint32_t* pipeline_id)); 139 140 MOCK_METHOD0(BuildPipelines, status_t()); 141 142 MOCK_METHOD2(PreparePipeline, 143 status_t(uint32_t pipeline_id, uint32_t frame_number)); 144 145 MOCK_METHOD3(GetRequiredIntputStreams, 146 status_t(const StreamConfiguration& overall_config, 147 HwlOfflinePipelineRole pipeline_role, 148 std::vector<Stream>* streams)); 149 150 MOCK_CONST_METHOD2(GetConfiguredHalStream, 151 status_t(uint32_t pipeline_id, 152 std::vector<HalStream>* hal_streams)); 153 154 MOCK_METHOD0(DestroyPipelines, void()); 155 156 MOCK_METHOD2(SubmitRequests, 157 status_t(uint32_t frame_number, 158 const std::vector<HwlPipelineRequest>& requests)); 159 160 MOCK_METHOD0(Flush, status_t()); 161 162 MOCK_CONST_METHOD0(GetCameraId, uint32_t()); 163 164 MOCK_CONST_METHOD0(GetPhysicalCameraIds, std::vector<uint32_t>()); 165 166 MOCK_CONST_METHOD1( 167 GetCameraCharacteristics, 168 status_t(std::unique_ptr<HalCameraMetadata>* characteristics)); 169 170 MOCK_CONST_METHOD2( 171 GetPhysicalCameraCharacteristics, 172 status_t(uint32_t physical_camera_id, 173 std::unique_ptr<HalCameraMetadata>* characteristics)); 174 175 MOCK_METHOD2(SetSessionData, status_t(SessionDataKey key, void* value)); 176 177 MOCK_CONST_METHOD2(GetSessionData, status_t(SessionDataKey key, void** value)); 178 179 MOCK_CONST_METHOD1(FilterResultMetadata, 180 status_t(HalCameraMetadata* metadata)); 181 182 MOCK_METHOD1(PrepareConfigureStreams, status_t(const StreamConfiguration&)); 183 184 MOCK_METHOD1(SetSessionCallback, 185 void(const HwlSessionCallback& hwl_session_callback)); 186 187 MOCK_METHOD0(CreateMulticamCoordinatorHwl, 188 std::unique_ptr<IMulticamCoordinatorHwl>()); 189 190 MOCK_CONST_METHOD3(IsReconfigurationRequired, 191 status_t(const HalCameraMetadata* old_session, 192 const HalCameraMetadata* new_session, 193 bool* reconfiguration_required)); 194 195 MOCK_METHOD0(GetZoomRatioMapperHwl, std::unique_ptr<ZoomRatioMapperHwl>()); 196 197 // Delegate all calls to FakeCameraDeviceSessionHwl. 198 void DelegateCallsToFakeSession(); 199 200 private: 201 FakeCameraDeviceSessionHwl fake_session_hwl_; 202 }; 203 204 } // namespace google_camera_hal 205 } // namespace android 206 207 #endif // HARDWARE_GOOGLE_CAMERA_HAL_TESTS_MOCK_DEVICE_SESSION_HWL_H_ 208