• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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