diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/odr-audioenc.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/odr-audioenc.cpp b/src/odr-audioenc.cpp index db3447b..068c8a3 100644 --- a/src/odr-audioenc.cpp +++ b/src/odr-audioenc.cpp @@ -1,6 +1,6 @@ /* ------------------------------------------------------------------ * Copyright (C) 2011 Martin Storsjo - * Copyright (C) 2020 Matthias P. Braendli + * Copyright (C) 2021 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. @@ -200,6 +200,7 @@ static void usage(const char* name) " --fec=FEC Set EDI output FEC\n" " -T, --timestamp-delay=DELAY_MS Enabled timestamps in EDI (requires TAI clock bulletin download) and\n" " add a delay (in milliseconds) to the timestamps carried in EDI\n" + " --startup-check=SCRIPT_PATH Before starting, run the given script, and only start if it returns 0.\n" " -k, --secret-key=FILE Enable ZMQ encryption with the given secret key.\n" " -p, --pad=BYTES Enable PAD insertion and set PAD size in bytes.\n" " -P, --pad-socket=IDENTIFIER Use the given identifier to communicate with ODR-PadEnc.\n" @@ -1371,6 +1372,7 @@ int main(int argc, char *argv[]) {"rate", required_argument, 0, 'r'}, {"secret-key", required_argument, 0, 'k'}, {"silence", required_argument, 0, 's'}, + {"startup-check", required_argument, 0, 9 }, {"stats", required_argument, 0, 'S'}, {"vlc-cache", required_argument, 0, 'C'}, {"vlc-gain", required_argument, 0, 'g'}, @@ -1423,6 +1425,8 @@ int main(int argc, char *argv[]) AudioEnc audio_enc; + std::string startupcheck; + int ch=0; int index; while(ch != -1) { @@ -1472,6 +1476,9 @@ int main(int argc, char *argv[]) case 8: // EDI output FEC audio_enc.edi_output.set_fec(std::stoi(optarg)); break; + case 9: // --startup-check + startupcheck = optarg; + break; case 'a': audio_enc.selected_encoder = encoder_selection_t::toolame_dab; break; @@ -1594,6 +1601,25 @@ int main(int argc, char *argv[]) } } + if (not startupcheck.empty()) { + etiLog.level(info) << "Running startup check '" << startupcheck << "'"; + int wstatus = system(startupcheck.c_str()); + + if (WIFEXITED(wstatus)) { + if (WEXITSTATUS(wstatus) == 0) { + etiLog.level(info) << "Startup check ok"; + } + else { + etiLog.level(error) << "Startup check failed, returned " << WEXITSTATUS(wstatus); + return 1; + } + } + else { + etiLog.level(error) << "Startup check failed, child didn't terminate normally"; + return 1; + } + } + try { return audio_enc.run(); } |