Commit 594cf1ed authored by Mikhail Karpenko's avatar Mikhail Karpenko

WIP: spawn several streamers from main

parent 6e2f0b2d
PROG = str 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 LDFLAGS += -s -lpthread -lasound
SRCS = main.cpp streamer.cpp audio.cpp video.cpp socket.cpp rtsp.cpp rtp_stream.cpp helpers.cpp parameters.cpp SRCS = main.cpp streamer.cpp audio.cpp video.cpp socket.cpp rtsp.cpp rtp_stream.cpp helpers.cpp parameters.cpp
......
/** /**
* @file FILENAME * @file main.cpp
* @brief BRIEF DESCRIPTION * @brief Spawn single instance of streamer for each sensor port.
* @copyright Copyright (C) YEAR Elphel Inc. * @copyright Copyright (C) 2017 Elphel Inc.
* @author AUTHOR <EMAIL> * @author AUTHOR <EMAIL>
* *
* @par License: * @par License:
...@@ -17,11 +17,12 @@ ...@@ -17,11 +17,12 @@
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <map> #include <map>
#include <array>
#include "streamer.h" #include "streamer.h"
...@@ -29,30 +30,59 @@ using namespace std; ...@@ -29,30 +30,59 @@ using namespace std;
#include <unistd.h> #include <unistd.h>
#include <linux/sysctl.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[]) { int main(int argc, char *argv[]) {
string opt; string opt;
map<string, string> args; map<string, string> args;
for(int i = 1; i < argc; i++) { array < pthread_t, SENSOR_PORTS > threads;
if(argv[i][0] == '-' && argv[i][1] != '\0') { array<Streamer *, SENSOR_PORTS> streamers;
if(opt != "")
for (int i = 1; i < argc; i++) {
if (argv[i][0] == '-' && argv[i][1] != '\0') {
if (opt != "")
args[opt] = ""; args[opt] = "";
opt = &argv[i][1]; opt = &argv[i][1];
continue; continue;
} else { } else {
if(opt != "") { if (opt != "") {
args[opt] = argv[i]; args[opt] = argv[i];
opt = ""; opt = "";
} }
} }
} }
if(opt != "") if (opt != "")
args[opt] = ""; args[opt] = "";
for(map<string, string>::iterator it = args.begin(); it != args.end(); it++) { for (map<string, string>::iterator it = args.begin(); it != args.end(); it++) {
cerr << "|" << (*it).first << "| == |" << (*it).second << "|" << endl; cerr << "|" << (*it).first << "| == |" << (*it).second << "|" << endl;
} }
Streamer *streamer = new Streamer(args); for (int i = 0; i < SENSOR_PORTS; i++) {
streamer->Main(); 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; return 0;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment