- Fixed a few bugs with ringbuffer, and some cleanup.
- Reworked audio system to use semaphores instead of events for waiting. Should fix rare issues where the XAudio2 driver would run out of buffers even though it was supposed to be guarded against that.
This commit is contained in:
@@ -18,38 +18,47 @@ namespace xe {
|
||||
|
||||
class RingBuffer {
|
||||
public:
|
||||
RingBuffer(uint8_t* raw_buffer, size_t size, size_t read_offset, size_t write_offset);
|
||||
RingBuffer(uint8_t* buffer, size_t capacity);
|
||||
|
||||
size_t Read(uint8_t* buffer, size_t num_bytes);
|
||||
size_t Skip(size_t num_bytes);
|
||||
size_t Write(uint8_t* buffer, size_t num_bytes);
|
||||
size_t Read(uint8_t* buffer, size_t count);
|
||||
size_t Write(uint8_t* buffer, size_t count);
|
||||
|
||||
uint8_t* buffer() { return buffer_; }
|
||||
size_t capacity() { return capacity_; }
|
||||
|
||||
size_t read_offset() { return read_offset_; }
|
||||
size_t write_offset() { return write_offset_; }
|
||||
|
||||
size_t read_size() {
|
||||
size_t read_count() {
|
||||
if (read_offset_ == write_offset_) {
|
||||
return 0;
|
||||
} else if (read_offset_ < write_offset_) {
|
||||
return write_offset_ - read_offset_;
|
||||
} else {
|
||||
return (capacity_ - read_offset_) + write_offset_;
|
||||
}
|
||||
if (read_offset_ < write_offset_) {
|
||||
return write_offset_ - read_offset_;
|
||||
}
|
||||
return (size_ - read_offset_) + write_offset_;
|
||||
}
|
||||
|
||||
size_t write_size() {
|
||||
if (write_offset_ == read_offset_) {
|
||||
return size_;
|
||||
}
|
||||
if (write_offset_ < read_offset_) {
|
||||
size_t write_offset() { return write_offset_; }
|
||||
size_t write_count() {
|
||||
if (read_offset_ == write_offset_) {
|
||||
return capacity_;
|
||||
} else if (write_offset_ < read_offset_) {
|
||||
return read_offset_ - write_offset_;
|
||||
} else {
|
||||
return (capacity_ - write_offset_) + read_offset_;
|
||||
}
|
||||
return (size_ - write_offset_) + read_offset_;
|
||||
}
|
||||
|
||||
void set_read_offset(size_t offset) {
|
||||
read_offset_ = offset % capacity_;
|
||||
}
|
||||
|
||||
void set_write_offset(size_t offset) {
|
||||
write_offset_ = offset % capacity_;
|
||||
}
|
||||
|
||||
private:
|
||||
uint8_t* raw_buffer_;
|
||||
size_t size_;
|
||||
uint8_t* buffer_;
|
||||
size_t capacity_;
|
||||
size_t read_offset_;
|
||||
size_t write_offset_;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user