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