| // Copyright 2017 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CAMERA_CAMERA3_TEST_CAMERA3_STILL_CAPTURE_FIXTURE_H_ |
| #define CAMERA_CAMERA3_TEST_CAMERA3_STILL_CAPTURE_FIXTURE_H_ |
| |
| #include <semaphore.h> |
| #include <stdio.h> |
| |
| #include <unordered_map> |
| #include <vector> |
| |
| #include "camera3_test/camera3_exif_validator.h" |
| #include "camera3_test/camera3_preview_fixture.h" |
| |
| namespace camera3_test { |
| |
| class Camera3StillCaptureFixture : public Camera3PreviewFixture { |
| public: |
| explicit Camera3StillCaptureFixture(std::vector<int> cam_ids) |
| : Camera3PreviewFixture(cam_ids), cam_ids_(cam_ids) {} |
| Camera3StillCaptureFixture(const Camera3StillCaptureFixture&) = delete; |
| Camera3StillCaptureFixture& operator=(const Camera3StillCaptureFixture&) = |
| delete; |
| |
| void SetUp() override; |
| |
| // Process still capture result metadata and output buffer. Tests can |
| // override this function to handle the results to suit their purpose. Note |
| // that the metadata |metadata| and output buffer |buffer| will be freed |
| // after returning from this call. |
| virtual void ProcessStillCaptureResult(int cam_id, |
| uint32_t frame_number, |
| ScopedCameraMetadata metadata, |
| cros::ScopedBufferHandle buffer); |
| |
| // Wait for still capture result with timeout |
| int WaitStillCaptureResult(int cam_id, const struct timespec& timeout); |
| |
| protected: |
| using JpegExifInfo = Camera3ExifValidator::JpegExifInfo; |
| |
| struct StillCaptureResult { |
| sem_t capture_result_sem; |
| |
| std::vector<ScopedCameraMetadata> result_metadatas; |
| |
| std::vector<time_t> result_date_time; |
| |
| std::vector<cros::ScopedBufferHandle> buffer_handles; |
| |
| StillCaptureResult(); |
| |
| ~StillCaptureResult(); |
| }; |
| |
| std::unordered_map<int, StillCaptureResult> still_capture_results_; |
| |
| // Max JPEG size with camera device id as the index |
| std::unordered_map<int, size_t> jpeg_max_sizes_; |
| |
| private: |
| std::vector<int> cam_ids_; |
| }; |
| |
| } // namespace camera3_test |
| |
| #endif // CAMERA_CAMERA3_TEST_CAMERA3_STILL_CAPTURE_FIXTURE_H_ |