Index: webrtc/modules/rtp_rtcp/source/dtmf_queue.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/dtmf_queue.cc b/webrtc/modules/rtp_rtcp/source/dtmf_queue.cc |
index f73be079d5e17a87bd2634ffbfe8064ef1e4c658..7b1c61bddaa601ad504ca6f86602883c13d67dfb 100644 |
--- a/webrtc/modules/rtp_rtcp/source/dtmf_queue.cc |
+++ b/webrtc/modules/rtp_rtcp/source/dtmf_queue.cc |
@@ -10,53 +10,38 @@ |
#include "webrtc/modules/rtp_rtcp/source/dtmf_queue.h" |
-#include <string.h> |
+namespace { |
+constexpr size_t kDtmfOutbandMax = 20; |
+} |
namespace webrtc { |
-DTMFqueue::DTMFqueue() : next_empty_index_(0) { |
- memset(dtmf_key_, 0, sizeof(dtmf_key_)); |
- memset(dtmf_length, 0, sizeof(dtmf_length)); |
- memset(dtmf_level_, 0, sizeof(dtmf_level_)); |
-} |
+DtmfQueue::DtmfQueue() {} |
-DTMFqueue::~DTMFqueue() {} |
+DtmfQueue::~DtmfQueue() {} |
-int32_t DTMFqueue::AddDTMF(uint8_t key, uint16_t len, uint8_t level) { |
+bool DtmfQueue::AddDtmf(const Event& event) { |
rtc::CritScope lock(&dtmf_critsect_); |
- |
- if (next_empty_index_ >= DTMF_OUTBAND_MAX) { |
- return -1; |
+ if (queue_.size() >= kDtmfOutbandMax) { |
+ return false; |
} |
- int32_t index = next_empty_index_; |
- dtmf_key_[index] = key; |
- dtmf_length[index] = len; |
- dtmf_level_[index] = level; |
- next_empty_index_++; |
- return 0; |
+ queue_.push_back(event); |
+ return true; |
} |
-int8_t DTMFqueue::NextDTMF(uint8_t* dtmf_key, uint16_t* len, uint8_t* level) { |
+bool DtmfQueue::NextDtmf(Event* event) { |
+ RTC_DCHECK(event); |
rtc::CritScope lock(&dtmf_critsect_); |
- if (next_empty_index_ == 0) |
- return -1; |
- |
- *dtmf_key = dtmf_key_[0]; |
- *len = dtmf_length[0]; |
- *level = dtmf_level_[0]; |
- |
- memmove(&(dtmf_key_[0]), &(dtmf_key_[1]), |
- next_empty_index_ * sizeof(uint8_t)); |
- memmove(&(dtmf_length[0]), &(dtmf_length[1]), |
- next_empty_index_ * sizeof(uint16_t)); |
- memmove(&(dtmf_level_[0]), &(dtmf_level_[1]), |
- next_empty_index_ * sizeof(uint8_t)); |
- |
- next_empty_index_--; |
- return 0; |
+ if (queue_.empty()) { |
+ return false; |
+ } |
+ |
+ *event = queue_.front(); |
+ queue_.pop_front(); |
+ return true; |
} |
-bool DTMFqueue::PendingDTMF() { |
+bool DtmfQueue::PendingDtmf() const { |
rtc::CritScope lock(&dtmf_critsect_); |
- return next_empty_index_ > 0; |
+ return !queue_.empty(); |
} |
} // namespace webrtc |