aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2016-03-04 21:02:15 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2016-03-04 21:02:15 +0100
commit61b5ba527efef75565336dfa87f0a2432dd5f50b (patch)
tree611f00a2b1a9b9f1e6a5a4b71eff3f5a027485bd /src
parent891bb2592944aa2be2d81e1583e73e632e70537f (diff)
downloadODR-AudioEnc-61b5ba527efef75565336dfa87f0a2432dd5f50b.tar.gz
ODR-AudioEnc-61b5ba527efef75565336dfa87f0a2432dd5f50b.tar.bz2
ODR-AudioEnc-61b5ba527efef75565336dfa87f0a2432dd5f50b.zip
Add -L option to give arbitrary options to VLC
Diffstat (limited to 'src')
-rw-r--r--src/VLCInput.cpp14
-rw-r--r--src/VLCInput.h15
-rw-r--r--src/dabplus-enc.cpp13
3 files changed, 33 insertions, 9 deletions
diff --git a/src/VLCInput.cpp b/src/VLCInput.cpp
index f527f20..468ef70 100644
--- a/src/VLCInput.cpp
+++ b/src/VLCInput.cpp
@@ -159,8 +159,8 @@ int VLCInput::prepare()
prepareRender_address,
(long long int)(intptr_t)this);
-
- const char* vlc_args[6];
+#define VLC_ARGS_LEN 32
+ const char* vlc_args[VLC_ARGS_LEN];
size_t arg_ix = 0;
std::stringstream arg_verbose;
arg_verbose << "--verbose=" << m_verbosity;
@@ -185,6 +185,16 @@ int VLCInput::prepare()
vlc_args[arg_ix++] = "--sout";
vlc_args[arg_ix++] = smem_options; // Stream to memory
+ for (const auto& opt : m_additional_opts) {
+ if (arg_ix < VLC_ARGS_LEN) {
+ vlc_args[arg_ix++] = opt.c_str();
+ }
+ else {
+ fprintf(stderr, "Too many VLC options given");
+ return 1;
+ }
+ }
+
if (m_verbosity) {
fprintf(stderr, "Initialising VLC with options:\n");
for (size_t i = 0; i < arg_ix; i++) {
diff --git a/src/VLCInput.h b/src/VLCInput.h
index 27d6237..d583008 100644
--- a/src/VLCInput.h
+++ b/src/VLCInput.h
@@ -49,12 +49,14 @@ class VLCInput
unsigned channels,
unsigned verbosity,
std::string& gain,
- std::string& cache) :
+ std::string& cache,
+ std::vector<std::string>& additional_opts) :
m_uri(uri),
m_verbosity(verbosity),
m_channels(channels),
m_rate(rate),
m_cache(cache),
+ m_additional_opts(additional_opts),
m_gain(gain),
m_vlc(nullptr),
m_mp(nullptr) { }
@@ -106,6 +108,9 @@ class VLCInput
// Whether to enable network caching in VLC or not
std::string m_cache;
+ // Given as-is to libvlc
+ std::vector<std::string> m_additional_opts;
+
// value for the VLC compressor filter
std::string m_gain;
@@ -130,8 +135,9 @@ class VLCInputDirect : public VLCInput
unsigned channels,
unsigned verbosity,
std::string& gain,
- std::string& cache) :
- VLCInput(uri, rate, channels, verbosity, gain, cache) {}
+ 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,
@@ -153,8 +159,9 @@ class VLCInputThreaded : public VLCInput
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),
+ VLCInput(uri, rate, channels, verbosity, gain, cache, additional_opts),
m_fault(false),
m_running(false),
m_queue(queue) {}
diff --git a/src/dabplus-enc.cpp b/src/dabplus-enc.cpp
index d0130fd..0f34d65 100644
--- a/src/dabplus-enc.cpp
+++ b/src/dabplus-enc.cpp
@@ -103,6 +103,8 @@ void usage(const char* name) {
" much too loud.\n"
" -V Increase the VLC verbosity by one (can be given \n"
" multiple times)\n"
+ " -L OPTION Give an additional options to VLC (can be given\n"
+ " multiple times)\n"
" -w, --write-icy-text=filename Write the ICY Text into the file, so that mot-encoder can read it.\n"
#else
" The VLC input was disabled at compile-time\n"
@@ -255,6 +257,7 @@ int main(int argc, char *argv[])
std::string vlc_icytext_file = "";
std::string vlc_gain = "";
std::string vlc_cache = "";
+ std::vector<std::string> vlc_additional_opts;
unsigned verbosity = 0;
// For the file output
@@ -312,6 +315,7 @@ int main(int argc, char *argv[])
{"vlc-cache", required_argument, 0, 'C'},
{"vlc-gain", required_argument, 0, 'g'},
{"vlc-uri", required_argument, 0, 'v'},
+ {"vlc-opt", required_argument, 0, 'L'},
{"write-icy-text", required_argument, 0, 'w'},
{"aaclc", no_argument, 0, 0 },
{"afterburner", no_argument, 0, 'a'},
@@ -346,7 +350,7 @@ int main(int argc, char *argv[])
int index;
while(ch != -1) {
- ch = getopt_long(argc, argv, "aAhDlVb:c:f:i:j:k:o:r:d:p:P:s:v:w:g:C:", longopts, &index);
+ ch = getopt_long(argc, argv, "aAhDlVb:c:f:i:j:k:L:o:r:d:p:P:s:v:w:g:C:", longopts, &index);
switch (ch) {
case 0: // AAC-LC
aot = AOT_DABPLUS_AAC_LC;
@@ -437,6 +441,9 @@ int main(int argc, char *argv[])
case 'C':
vlc_cache = optarg;
break;
+ case 'L':
+ vlc_additional_opts.push_back(optarg);
+ break;
#else
case 'v':
case 'w':
@@ -608,8 +615,8 @@ int main(int argc, char *argv[])
JackInput jack_in(jack_name, channels, sample_rate, queue);
#endif
#if HAVE_VLC
- VLCInputDirect vlc_in_direct(vlc_uri, sample_rate, channels, verbosity, vlc_gain, vlc_cache);
- VLCInputThreaded vlc_in_threaded(vlc_uri, sample_rate, channels, verbosity, vlc_gain, vlc_cache, queue);
+ VLCInputDirect vlc_in_direct(vlc_uri, sample_rate, channels, verbosity, vlc_gain, vlc_cache, vlc_additional_opts);
+ VLCInputThreaded vlc_in_threaded(vlc_uri, sample_rate, channels, verbosity, vlc_gain, vlc_cache, vlc_additional_opts, queue);
#endif
if (infile) {