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   * | 
