diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2017-10-07 11:47:05 +0200 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2017-10-07 11:51:46 +0200 |
commit | 84febca8b268129cdd79ff0d1c4f8eeed092c5fb (patch) | |
tree | 3e75880241e0fcd2951c04aad77d7077b4ec130c /src/AlsaInput.cpp | |
parent | 9c2615425bb4f35a417eb04b1ceebfc77d8e2c8b (diff) | |
download | ODR-AudioEnc-84febca8b268129cdd79ff0d1c4f8eeed092c5fb.tar.gz ODR-AudioEnc-84febca8b268129cdd79ff0d1c4f8eeed092c5fb.tar.bz2 ODR-AudioEnc-84febca8b268129cdd79ff0d1c4f8eeed092c5fb.zip |
Use queue for all inputs and unify interface
This also changes the --fifo-silence option. Instead of inserting
silence separately, it uses the drift compensation to do that.
Diffstat (limited to 'src/AlsaInput.cpp')
-rw-r--r-- | src/AlsaInput.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/AlsaInput.cpp b/src/AlsaInput.cpp index af3c284..747814f 100644 --- a/src/AlsaInput.cpp +++ b/src/AlsaInput.cpp @@ -137,6 +137,12 @@ void AlsaInputThreaded::prepare() } } +bool AlsaInputThreaded::read_source(size_t num_bytes) +{ + // Reading done in separate thread, no normal termination condition possible + return true; +} + void AlsaInputThreaded::process() { uint8_t samplebuf[NUM_SAMPLES_PER_CALL * BYTES_PER_SAMPLE * m_channels]; @@ -158,14 +164,19 @@ void AlsaInputDirect::prepare() m_init_alsa(); } -ssize_t AlsaInputDirect::read(uint8_t* buf, size_t length) +bool AlsaInputDirect::read_source(size_t num_bytes) { - int bytes_per_frame = m_channels * BYTES_PER_SAMPLE; - assert(length % bytes_per_frame == 0); + const int bytes_per_frame = m_channels * BYTES_PER_SAMPLE; + assert(num_bytes % bytes_per_frame == 0); - ssize_t read = m_read(buf, length / bytes_per_frame); + const size_t num_frames = num_bytes / bytes_per_frame; + vector<uint8_t> buf(num_bytes); + ssize_t ret = m_read(buf.data(), num_frames); - return (read > 0) ? read * bytes_per_frame : read; + if (ret > 0) { + m_queue.push(buf.data(), ret * bytes_per_frame); + } + return ret == num_frames; } #endif // HAVE_ALSA |