diff options
author | Goran Mekić <meka@tilda.center> | 2017-04-30 11:48:36 +0200 |
---|---|---|
committer | Goran Mekić <meka@tilda.center> | 2017-04-30 12:16:01 +0200 |
commit | a9256048bf2d9ec3ff6004a6dd6bf9e3a3f88294 (patch) | |
tree | c35494c9a7b4379bc811fdf6e21b8e11408ca486 | |
parent | fc8d2e31e79782e219259a1ab6782a39edc18516 (diff) |
Get OSS buffer size
-rw-r--r-- | drumgizmo/output/oss.cc | 12 | ||||
-rw-r--r-- | drumgizmo/output/oss.h | 1 |
2 files changed, 12 insertions, 1 deletions
diff --git a/drumgizmo/output/oss.cc b/drumgizmo/output/oss.cc index ee13a84..9815460 100644 --- a/drumgizmo/output/oss.cc +++ b/drumgizmo/output/oss.cc @@ -40,6 +40,7 @@ OSSOutputEngine::OSSOutputEngine() , data{} , max_fragments{4} , fragment_size{8} + , buffer_size{1024} { data.clear(); data.resize(1024 * num_channels); @@ -64,6 +65,15 @@ bool OSSOutputEngine::init(const Channels& channels) exit(-1); } + audio_buf_info info; + if(ioctl(fd, SNDCTL_DSP_GETOSPACE, &info) == -1) + { + std::cerr << "Can not get buffer info: "; + std::cerr << std::strerror(errno) << std::endl; + return false; + } + buffer_size = info.bytes / 4; + tmp = format; if(ioctl(fd, SNDCTL_DSP_SETFMT, &tmp) == -1 || tmp != format) { @@ -195,7 +205,7 @@ void OSSOutputEngine::post(size_t nsamples) std::size_t OSSOutputEngine::getBufferSize() const { - return data.size() / num_channels; + return buffer_size; } std::size_t OSSOutputEngine::getSamplerate() const diff --git a/drumgizmo/output/oss.h b/drumgizmo/output/oss.h index 889021f..1233ec1 100644 --- a/drumgizmo/output/oss.h +++ b/drumgizmo/output/oss.h @@ -54,5 +54,6 @@ private: unsigned int format; unsigned int max_fragments; unsigned int fragment_size; + unsigned int buffer_size; std::vector<std::int32_t> data; }; |