summaryrefslogtreecommitdiffstats
path: root/src/VLCInput.h
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2016-06-24 10:48:06 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2016-06-24 10:48:23 +0200
commit31c8fca44d11d44b70d90721c27a77ec5a83faa1 (patch)
treebb57f0996fa866b8ea55aaca01ad198792aa6f25 /src/VLCInput.h
parent9183cd317bebe96b54a227da13d8e7c70b4ae67f (diff)
downloadODR-AudioEnc-31c8fca44d11d44b70d90721c27a77ec5a83faa1.tar.gz
ODR-AudioEnc-31c8fca44d11d44b70d90721c27a77ec5a83faa1.tar.bz2
ODR-AudioEnc-31c8fca44d11d44b70d90721c27a77ec5a83faa1.zip
Add blocking sample queue and adapt VLC input
Diffstat (limited to 'src/VLCInput.h')
-rw-r--r--src/VLCInput.h93
1 files changed, 27 insertions, 66 deletions
diff --git a/src/VLCInput.h b/src/VLCInput.h
index 3467525..ad23c4d 100644
--- a/src/VLCInput.h
+++ b/src/VLCInput.h
@@ -1,5 +1,5 @@
/* ------------------------------------------------------------------
- * Copyright (C) 2015 Matthias P. Braendli
+ * Copyright (C) 2016 Matthias P. Braendli
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -53,7 +53,8 @@ class VLCInput
unsigned verbosity,
std::string& gain,
std::string& cache,
- std::vector<std::string>& additional_opts) :
+ std::vector<std::string>& additional_opts,
+ SampleQueue<uint8_t>& queue) :
m_uri(uri),
m_verbosity(verbosity),
m_channels(channels),
@@ -62,13 +63,29 @@ class VLCInput
m_additional_opts(additional_opts),
m_gain(gain),
m_vlc(nullptr),
- m_mp(nullptr) { }
+ m_mp(nullptr),
+ m_fault(false),
+ m_running(false),
+ m_samplequeue(queue) {}
+
+ VLCInput(const VLCInput& other) = delete;
+ VLCInput& operator=(const VLCInput& other) = delete;
+ ~VLCInput()
+ {
+ if (m_running) {
+ m_running = false;
+ m_thread.join();
+ }
- ~VLCInput() { cleanup(); }
+ cleanup();
+ }
/* Prepare the audio input */
int prepare();
+ /* Start the libVLC thread that fills the samplequeue */
+ void start();
+
/* Write the last received ICY-Text to the
* file.
*/
@@ -92,7 +109,9 @@ class VLCInput
int getChannels() { return m_channels; }
- protected:
+ bool fault_detected() { return m_fault; };
+
+ private:
void cleanup(void);
// Fill exactly length bytes into buf. Blocking.
@@ -126,73 +145,15 @@ class VLCInput
libvlc_instance_t *m_vlc;
libvlc_media_player_t *m_mp;
- private:
- VLCInput(const VLCInput& other) {}
-};
-
-class VLCInputDirect : public VLCInput
-{
- public:
- VLCInputDirect(const std::string& uri,
- int rate,
- unsigned channels,
- unsigned verbosity,
- std::string& gain,
- std::string& cache,
- std::vector<std::string>& additional_opts) :
- VLCInput(uri, rate, channels, verbosity, gain, cache, additional_opts) {}
-
- /* Read exactly length bytes into buf.
- * Blocks if not enough data is available,
- * or returns zero if EOF reached.
- *
- * Returns the number of bytes written into
- * the buffer.
- */
- ssize_t read(uint8_t* buf, size_t length);
-
-};
-
-class VLCInputThreaded : public VLCInput
-{
- public:
- VLCInputThreaded(const std::string& uri,
- int rate,
- unsigned channels,
- unsigned verbosity,
- std::string& gain,
- std::string& cache,
- std::vector<std::string>& additional_opts,
- SampleQueue<uint8_t>& queue) :
- VLCInput(uri, rate, channels, verbosity, gain, cache, additional_opts),
- m_fault(false),
- m_running(false),
- m_queue(queue) {}
-
- ~VLCInputThreaded()
- {
- if (m_running) {
- m_running = false;
- m_thread.join();
- }
- }
-
- /* Start the libVLC thread that fills the queue */
- virtual void start();
-
- bool fault_detected() { return m_fault; };
-
- private:
- VLCInputThreaded(const VLCInputThreaded& other) = delete;
- VLCInputThreaded& operator=(const VLCInputThreaded& other) = delete;
+ // For the thread
+ /* The function runnin in the thread */
void process();
std::atomic<bool> m_fault;
std::atomic<bool> m_running;
std::thread m_thread;
- SampleQueue<uint8_t>& m_queue;
-
+ SampleQueue<uint8_t>& m_samplequeue;
};
#endif // HAVE_VLC