12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // Copyright 2017 The Chromium 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 MEDIA_CAPTURE_VIDEO_SCOPED_BUFFER_POOL_RESERVATION_H_
- #define MEDIA_CAPTURE_VIDEO_SCOPED_BUFFER_POOL_RESERVATION_H_
- #include "media/capture/capture_export.h"
- #include "media/capture/video/video_capture_buffer_pool.h"
- #include "media/capture/video/video_capture_device_client.h"
- namespace media {
- template <typename ReleaseTraits>
- class CAPTURE_EXPORT ScopedBufferPoolReservation
- : public VideoCaptureDevice::Client::Buffer::ScopedAccessPermission {
- public:
- ScopedBufferPoolReservation(scoped_refptr<VideoCaptureBufferPool> buffer_pool,
- int buffer_id)
- : buffer_pool_(std::move(buffer_pool)), buffer_id_(buffer_id) {}
- ~ScopedBufferPoolReservation() {
- ReleaseTraits::Release(buffer_pool_, buffer_id_);
- }
- private:
- const scoped_refptr<VideoCaptureBufferPool> buffer_pool_;
- const int buffer_id_;
- };
- class CAPTURE_EXPORT ProducerReleaseTraits {
- public:
- static void Release(const scoped_refptr<VideoCaptureBufferPool>& buffer_pool,
- int buffer_id) {
- buffer_pool->RelinquishProducerReservation(buffer_id);
- }
- };
- class CAPTURE_EXPORT ConsumerReleaseTraits {
- public:
- static void Release(const scoped_refptr<VideoCaptureBufferPool>& buffer_pool,
- int buffer_id) {
- buffer_pool->RelinquishConsumerHold(buffer_id, 1 /* num_clients */);
- }
- };
- } // namespace media
- #endif // MEDIA_CAPTURE_VIDEO_SCOPED_BUFFER_POOL_RESERVATION_H_
|