diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2016-01-10 17:02:50 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2016-01-10 17:18:45 +0100 |
commit | e4821033a325b748c1c69848554b349c76ba6f59 (patch) | |
tree | 5626e72fc145e23ea5766984720c5adf643730d5 /src/VLCInput.cpp | |
parent | c36c65f341429d8b6412be23205f6f9d1b0c864c (diff) | |
download | ODR-AudioEnc-e4821033a325b748c1c69848554b349c76ba6f59.tar.gz ODR-AudioEnc-e4821033a325b748c1c69848554b349c76ba6f59.tar.bz2 ODR-AudioEnc-e4821033a325b748c1c69848554b349c76ba6f59.zip |
Add VLC variant with drift compensation
Diffstat (limited to 'src/VLCInput.cpp')
-rw-r--r-- | src/VLCInput.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/VLCInput.cpp b/src/VLCInput.cpp index 7f6aae8..890de01 100644 --- a/src/VLCInput.cpp +++ b/src/VLCInput.cpp @@ -354,6 +354,40 @@ void VLCInput::write_icy_text(const std::string& filename) } } + +// ==================== VLCInputThreaded ==================== + +void VLCInputThreaded::start() +{ + if (m_fault) { + fprintf(stderr, "Cannot start VLC input. Fault detected previsouly!\n"); + } + else { + m_running = true; + m_thread = std::thread(&VLCInputThreaded::process, this); + } +} + +void VLCInputThreaded::process() +{ + uint8_t samplebuf[NUM_SAMPLES_PER_CALL * BYTES_PER_SAMPLE * m_channels]; + while (m_running) { + ssize_t n = m_read(samplebuf, NUM_SAMPLES_PER_CALL); + + if (n < 0) { + m_running = false; + m_fault = true; + break; + } + + m_queue.push(samplebuf, BYTES_PER_SAMPLE*m_channels*n); + } +} + + + + + /* VLC up to version 2.1.0 used a different callback function signature. * VLC 2.2.0 uses size_t * |