1 // Copyright 2018 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef MEDIA_CAPTURE_VIDEO_CHROMEOS_REQUEST_BUILDER_H_ 6 #define MEDIA_CAPTURE_VIDEO_CHROMEOS_REQUEST_BUILDER_H_ 7 8 #include <memory> 9 #include <set> 10 #include <vector> 11 12 #include "base/optional.h" 13 #include "media/capture/video/chromeos/camera_device_delegate.h" 14 #include "media/capture/video/chromeos/mojom/camera3.mojom.h" 15 #include "media/capture/video_capture_types.h" 16 17 namespace media { 18 19 class CameraDeviceContext; 20 21 // BufferInfo is used to store information about the buffer that is needed when 22 // building buffers. 23 struct BufferInfo { 24 uint64_t ipc_id; 25 gfx::Size dimension; 26 gfx::GpuMemoryBufferHandle gpu_memory_buffer_handle; 27 uint32_t drm_format; 28 cros::mojom::HalPixelFormat hal_pixel_format; 29 }; 30 31 // RequestBuilder is used to build capture request that will be sent to camera 32 // HAL process. 33 class CAPTURE_EXPORT RequestBuilder { 34 public: 35 using RequestBufferCallback = base::RepeatingCallback< 36 base::Optional<BufferInfo>(StreamType, base::Optional<uint64_t>)>; 37 38 RequestBuilder(CameraDeviceContext* device_context, 39 // Callback to request buffer from StreamBufferManager. Having 40 // this callback, we do not need to include StreamBufferManager 41 // when requesting buffer. 42 RequestBufferCallback request_buffer_callback); 43 ~RequestBuilder(); 44 45 // Builds a capture request by given streams and settings. The 46 // |input_buffer_id| is used for reprocess request. 47 cros::mojom::Camera3CaptureRequestPtr BuildRequest( 48 std::set<StreamType> stream_types, 49 cros::mojom::CameraMetadataPtr settings, 50 base::Optional<uint64_t> input_buffer_id); 51 52 private: 53 cros::mojom::CameraBufferHandlePtr CreateCameraBufferHandle( 54 StreamType stream_type, 55 BufferInfo buffer_info); 56 57 cros::mojom::Camera3StreamBufferPtr CreateStreamBuffer( 58 StreamType stream_type, 59 uint64_t buffer_id, 60 cros::mojom::CameraBufferHandlePtr buffer_handle); 61 62 CameraDeviceContext* device_context_; 63 64 // The frame number. Increased by one for each capture request sent. 65 uint32_t frame_number_; 66 67 RequestBufferCallback request_buffer_callback_; 68 }; 69 } // namespace media 70 71 #endif // MEDIA_CAPTURE_VIDEO_CHROMEOS_REQUEST_BUILDER_H_ 72