Loading src/Makefile +1 −1 Original line number Diff line number Diff line PROG = str CXXFLAGS += -Wall -O2 -I$(STAGING_DIR_HOST)/usr/include-uapi CXXFLAGS += -Wall -O2 -std=c++11 -I$(STAGING_DIR_HOST)/usr/include-uapi LDFLAGS += -s -lpthread -lasound SRCS = main.cpp streamer.cpp audio.cpp video.cpp socket.cpp rtsp.cpp rtp_stream.cpp helpers.cpp parameters.cpp Loading src/main.cpp +42 −12 Original line number Diff line number Diff line /** * @file FILENAME * @brief BRIEF DESCRIPTION * @copyright Copyright (C) YEAR Elphel Inc. * @file main.cpp * @brief Spawn single instance of streamer for each sensor port. * @copyright Copyright (C) 2017 Elphel Inc. * @author AUTHOR <EMAIL> * * @par License: Loading @@ -22,6 +22,7 @@ #include <iostream> #include <string> #include <map> #include <array> #include "streamer.h" Loading @@ -29,10 +30,25 @@ using namespace std; #include <unistd.h> #include <linux/sysctl.h> #include <elphel/c313a.h> #include <pthread.h> /** * Unconditionally cancel all threads. * @param threads an array of thread pointers * @return None */ void clean_up(array<pthread_t, SENSOR_PORTS> &threads) { for (array<pthread_t, SENSOR_PORTS>::iterator it = threads.begin(); it != threads.end(); it++) pthread_cancel(*it); } int main(int argc, char *argv[]) { string opt; map<string, string> args; array < pthread_t, SENSOR_PORTS > threads; array<Streamer *, SENSOR_PORTS> streamers; for (int i = 1; i < argc; i++) { if (argv[i][0] == '-' && argv[i][1] != '\0') { if (opt != "") Loading @@ -52,7 +68,21 @@ int main(int argc, char *argv[]) { cerr << "|" << (*it).first << "| == |" << (*it).second << "|" << endl; } Streamer *streamer = new Streamer(args); streamer->Main(); for (int i = 0; i < SENSOR_PORTS; i++) { pthread_attr_t attr; streamers[i] = new Streamer(args); pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if (!pthread_create(&threads[i], &attr, Streamer::pthread_f, (void *) streamers[i])) { cerr << "Can not spawn streamer thread for port " << to_string(i) << endl; clean_up(threads); exit(EXIT_FAILURE); } pthread_attr_destroy(&attr); } for (array<pthread_t, SENSOR_PORTS>::iterator it = threads.begin(); it != threads.end(); it++) pthread_join(*it, NULL); return 0; } Loading
src/Makefile +1 −1 Original line number Diff line number Diff line PROG = str CXXFLAGS += -Wall -O2 -I$(STAGING_DIR_HOST)/usr/include-uapi CXXFLAGS += -Wall -O2 -std=c++11 -I$(STAGING_DIR_HOST)/usr/include-uapi LDFLAGS += -s -lpthread -lasound SRCS = main.cpp streamer.cpp audio.cpp video.cpp socket.cpp rtsp.cpp rtp_stream.cpp helpers.cpp parameters.cpp Loading
src/main.cpp +42 −12 Original line number Diff line number Diff line /** * @file FILENAME * @brief BRIEF DESCRIPTION * @copyright Copyright (C) YEAR Elphel Inc. * @file main.cpp * @brief Spawn single instance of streamer for each sensor port. * @copyright Copyright (C) 2017 Elphel Inc. * @author AUTHOR <EMAIL> * * @par License: Loading @@ -22,6 +22,7 @@ #include <iostream> #include <string> #include <map> #include <array> #include "streamer.h" Loading @@ -29,10 +30,25 @@ using namespace std; #include <unistd.h> #include <linux/sysctl.h> #include <elphel/c313a.h> #include <pthread.h> /** * Unconditionally cancel all threads. * @param threads an array of thread pointers * @return None */ void clean_up(array<pthread_t, SENSOR_PORTS> &threads) { for (array<pthread_t, SENSOR_PORTS>::iterator it = threads.begin(); it != threads.end(); it++) pthread_cancel(*it); } int main(int argc, char *argv[]) { string opt; map<string, string> args; array < pthread_t, SENSOR_PORTS > threads; array<Streamer *, SENSOR_PORTS> streamers; for (int i = 1; i < argc; i++) { if (argv[i][0] == '-' && argv[i][1] != '\0') { if (opt != "") Loading @@ -52,7 +68,21 @@ int main(int argc, char *argv[]) { cerr << "|" << (*it).first << "| == |" << (*it).second << "|" << endl; } Streamer *streamer = new Streamer(args); streamer->Main(); for (int i = 0; i < SENSOR_PORTS; i++) { pthread_attr_t attr; streamers[i] = new Streamer(args); pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if (!pthread_create(&threads[i], &attr, Streamer::pthread_f, (void *) streamers[i])) { cerr << "Can not spawn streamer thread for port " << to_string(i) << endl; clean_up(threads); exit(EXIT_FAILURE); } pthread_attr_destroy(&attr); } for (array<pthread_t, SENSOR_PORTS>::iterator it = threads.begin(); it != threads.end(); it++) pthread_join(*it, NULL); return 0; }