// Copyright 2016 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MEDIA_CAPTURE_VIDEO_VIDEO_CAPTURE_BUFFER_POOL_H_ #define MEDIA_CAPTURE_VIDEO_VIDEO_CAPTURE_BUFFER_POOL_H_ #include "base/memory/ref_counted.h" #include "media/capture/capture_export.h" #include "media/capture/mojom/video_capture_buffer.mojom.h" #include "media/capture/mojom/video_capture_types.mojom.h" #include "media/capture/video/video_capture_device.h" #include "media/capture/video_capture_types.h" #include "mojo/public/cpp/system/buffer.h" #include "ui/gfx/geometry/size.h" #include "ui/gfx/gpu_memory_buffer.h" namespace media { class VideoCaptureBufferHandle; // A thread-safe class that does the bookkeeping and lifetime management for a // pool of pixel buffers cycled between an in-process producer (e.g. a // VideoCaptureDevice) and a set of out-of-process consumers. The pool is // intended to be orchestrated by a VideoCaptureDevice::Client, but is designed // to outlive the controller if necessary. The pixel buffers may be backed by a // SharedMemory, but this is not compulsory. // // Producers get a buffer by calling ReserveForProducer(), and may pass on their // ownership to the consumer by calling HoldForConsumers(), or drop the buffer // (without further processing) by calling RelinquishProducerReservation(). // Consumers signal that they are done with the buffer by calling // RelinquishConsumerHold(). // // Buffers are allocated on demand, but there will never be more than |count| // buffers in existence at any time. Buffers are identified by an int value // called |buffer_id|. -1 (kInvalidId) is never a valid ID, and is returned by // some methods to indicate failure. The active set of buffer ids may change // over the lifetime of the buffer pool, as existing buffers are freed and // reallocated at larger size. When reallocation occurs, new buffer IDs will // circulate. class CAPTURE_EXPORT VideoCaptureBufferPool : public base::RefCountedThreadSafe<VideoCaptureBufferPool> { … }; } // namespace media #endif // MEDIA_CAPTURE_VIDEO_VIDEO_CAPTURE_BUFFER_POOL_H_