1f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org/* 2f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 3f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org * 4f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org * Use of this source code is governed by a BSD-style license 5f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 6f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 7f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org * in the file PATENTS. All contributing project authors may 8f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org */ 10f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org 11f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org#ifndef WEBRTC_MODULES_AUDIO_DEVICE_ANDROID_SINGLE_RW_FIFO_H_ 12f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org#define WEBRTC_MODULES_AUDIO_DEVICE_ANDROID_SINGLE_RW_FIFO_H_ 13f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org 14f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org#include "webrtc/system_wrappers/interface/atomic32.h" 15f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.h" 16f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org#include "webrtc/typedefs.h" 17f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org 18f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.orgnamespace webrtc { 19f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org 20f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org// Implements a lock-free FIFO losely based on 21f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org// http://src.chromium.org/viewvc/chrome/trunk/src/media/base/audio_fifo.cc 22f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org// Note that this class assumes there is one producer (writer) and one 23f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org// consumer (reader) thread. 24f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.orgclass SingleRwFifo { 25f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org public: 26f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org explicit SingleRwFifo(int capacity); 27f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org ~SingleRwFifo(); 28f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org 29f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org void Push(int8_t* mem); 30f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org int8_t* Pop(); 31f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org 32f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org void Clear(); 33f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org 34f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org int size() { return size_.Value(); } 35f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org int capacity() const { return capacity_; } 36f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org 37f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org private: 38ba47616ee5a8d8a4d94e160b64b79a56845e291bandrew@webrtc.org scoped_ptr<int8_t*[]> queue_; 39f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org int capacity_; 40f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org 41f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org Atomic32 size_; 42f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org 43f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org int read_pos_; 44f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org int write_pos_; 45f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org}; 46f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org 47f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org} // namespace webrtc 48f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org 49f46fff61745ab9bf19a7075a105e5d96308c5526henrike@webrtc.org#endif // WEBRTC_MODULES_AUDIO_DEVICE_ANDROID_SINGLE_RW_FIFO_H_ 50