Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(269)

Side by Side Diff: webrtc/base/bufferqueue.cc

Issue 2877023002: Move webrtc/{base => rtc_base} (Closed)
Patch Set: update presubmit.py and DEPS include rules Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/base/bufferqueue.h ('k') | webrtc/base/bufferqueue_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 #include "webrtc/base/bufferqueue.h"
12
13 #include <algorithm>
14
15 namespace rtc {
16
17 BufferQueue::BufferQueue(size_t capacity, size_t default_size)
18 : capacity_(capacity), default_size_(default_size) {
19 }
20
21 BufferQueue::~BufferQueue() {
22 CritScope cs(&crit_);
23
24 for (Buffer* buffer : queue_) {
25 delete buffer;
26 }
27 for (Buffer* buffer : free_list_) {
28 delete buffer;
29 }
30 }
31
32 size_t BufferQueue::size() const {
33 CritScope cs(&crit_);
34 return queue_.size();
35 }
36
37 void BufferQueue::Clear() {
38 CritScope cs(&crit_);
39 while (!queue_.empty()) {
40 free_list_.push_back(queue_.front());
41 queue_.pop_front();
42 }
43 }
44
45 bool BufferQueue::ReadFront(void* buffer, size_t bytes, size_t* bytes_read) {
46 CritScope cs(&crit_);
47 if (queue_.empty()) {
48 return false;
49 }
50
51 bool was_writable = queue_.size() < capacity_;
52 Buffer* packet = queue_.front();
53 queue_.pop_front();
54
55 bytes = std::min(bytes, packet->size());
56 memcpy(buffer, packet->data(), bytes);
57 if (bytes_read) {
58 *bytes_read = bytes;
59 }
60 free_list_.push_back(packet);
61 if (!was_writable) {
62 NotifyWritableForTest();
63 }
64 return true;
65 }
66
67 bool BufferQueue::WriteBack(const void* buffer, size_t bytes,
68 size_t* bytes_written) {
69 CritScope cs(&crit_);
70 if (queue_.size() == capacity_) {
71 return false;
72 }
73
74 bool was_readable = !queue_.empty();
75 Buffer* packet;
76 if (!free_list_.empty()) {
77 packet = free_list_.back();
78 free_list_.pop_back();
79 } else {
80 packet = new Buffer(bytes, default_size_);
81 }
82
83 packet->SetData(static_cast<const uint8_t*>(buffer), bytes);
84 if (bytes_written) {
85 *bytes_written = bytes;
86 }
87 queue_.push_back(packet);
88 if (!was_readable) {
89 NotifyReadableForTest();
90 }
91 return true;
92 }
93
94 } // namespace rtc
OLDNEW
« no previous file with comments | « webrtc/base/bufferqueue.h ('k') | webrtc/base/bufferqueue_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698