Line data Source code
1 : /*
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/constructormagic.h"
19 : #include "webrtc/base/criticalsection.h"
20 :
21 : namespace rtc {
22 :
23 : class BufferQueue {
24 : public:
25 : // Creates a buffer queue with a given capacity and default buffer size.
26 : BufferQueue(size_t capacity, size_t default_size);
27 : virtual ~BufferQueue();
28 :
29 : // Return number of queued buffers.
30 : size_t size() const;
31 :
32 : // Clear the BufferQueue by moving all Buffers from |queue_| to |free_list_|.
33 : void Clear();
34 :
35 : // ReadFront will only read one buffer at a time and will truncate buffers
36 : // that don't fit in the passed memory.
37 : // Returns true unless no data could be returned.
38 : bool ReadFront(void* data, size_t bytes, size_t* bytes_read);
39 :
40 : // WriteBack always writes either the complete memory or nothing.
41 : // Returns true unless no data could be written.
42 : bool WriteBack(const void* data, size_t bytes, size_t* bytes_written);
43 :
44 : protected:
45 : // These methods are called when the state of the queue changes.
46 0 : virtual void NotifyReadableForTest() {}
47 0 : virtual void NotifyWritableForTest() {}
48 :
49 : private:
50 : size_t capacity_;
51 : size_t default_size_;
52 : CriticalSection crit_;
53 : std::deque<Buffer*> queue_ GUARDED_BY(crit_);
54 : std::vector<Buffer*> free_list_ GUARDED_BY(crit_);
55 :
56 : RTC_DISALLOW_COPY_AND_ASSIGN(BufferQueue);
57 : };
58 :
59 : } // namespace rtc
60 :
61 : #endif // WEBRTC_BASE_BUFFERQUEUE_H_
|