blob: 4adae416ad7064bc4c5b95184f7d43d1680697a2 [file] [log] [blame]
Joachim Bauch6f2ef742015-05-21 17:52:01 +02001/*
2 * Copyright 2015 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_BASE_BUFFERQUEUE_H_
12#define WEBRTC_BASE_BUFFERQUEUE_H_
13
14#include <deque>
15#include <vector>
16
17#include "webrtc/base/buffer.h"
18#include "webrtc/base/criticalsection.h"
19
20namespace rtc {
21
22class BufferQueue {
23 public:
24 // Creates a buffer queue queue with a given capacity and default buffer size.
25 BufferQueue(size_t capacity, size_t default_size);
26 ~BufferQueue();
27
28 // Return number of queued buffers.
29 size_t size() const;
30
31 // ReadFront will only read one buffer at a time and will truncate buffers
32 // that don't fit in the passed memory.
33 bool ReadFront(void* data, size_t bytes, size_t* bytes_read);
34
35 // WriteBack always writes either the complete memory or nothing.
36 bool WriteBack(const void* data, size_t bytes, size_t* bytes_written);
37
38 private:
39 size_t capacity_;
40 size_t default_size_;
41 std::deque<Buffer*> queue_;
42 std::vector<Buffer*> free_list_;
43 mutable CriticalSection crit_; // object lock
44
45 DISALLOW_COPY_AND_ASSIGN(BufferQueue);
46};
47
48} // namespace rtc
49
50#endif // WEBRTC_BASE_BUFFERQUEUE_H_