You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
2.4 KiB

#include <stdio.h>
#include <stdlib.h>
#include <sysexits.h>
#include <signal.h>
#include <string>
#include "configuration.h"
#include "miniwebcam.h"
int running = 1;
static void sig_int(int);
int SetupSignals();
VideoFrame currentimage;
void ErrorExit(std::string text, int errorcode) {
printf ("Error: %s\n", text.c_str());
exit (errorcode);
};
int main(int argc, char **argv) {
printf ("MiniWebCam:\n");
if (SetupSignals() == 0) return 0;
config.LoadArgs (argc, argv);
config.LoadFile (config.GetFilename());
if (config.GetInitFlags() & CONF_INITFLAGS_PRINT) {
config.PrintConfig();
return 0;
}
if (config.GetInitFlags() & CONF_INITFLAGS_HELP) {
config.Help();
return 0;
}
VideoDevice_V4L2 vdev;
WebCamServer webserver;
currentimage.TestScreen(1920, 1080);
webserver.SetupPorts(config.http_port, config.https_port);
webserver.SetupSSL(config.ssl_key, config.ssl_cert);
webserver.Start();
if (vdev.SetDevice (config.vdev_device, config.vdev_width, config.vdev_height) == 0) {
debug ("could not setup device.\n");
return 0;
}
if (vdev.SetIOMode (config.vdev_iomode) == 0) {
debug ("could not setup iomode.\n");
return 0;
}
if (vdev.Start() == 0) {
debug ("Error: could not start video.\n");
return 0;
}
while (running) {
if (vdev.GetFrame(&currentimage) == 0) {
vdev.Stop();
vdev.Start();
}
webserver.Loop();
usleep (1000);
}
vdev.Stop();
webserver.Stop();
return 0;
};
int SetupSignals() {
if (signal(SIGINT, sig_int) == SIG_ERR) {
errorexit ("%s:%d could not set signal for SIGINT\n", __FILE__, __LINE__);
return 0;
}
if (signal(SIGTERM, sig_int) == SIG_ERR) {
errorexit ("%s:%d could not set signal for SIGTERM\n", __FILE__, __LINE__);
return 0;
}
if (signal(SIGHUP, sig_int) == SIG_ERR) {
errorexit ("%s:%d could not set signal for SIGHUB\n", __FILE__, __LINE__);
return 0;
}
if (signal(SIGUSR1, sig_int) == SIG_ERR) {
errorexit ("%s:%d could not set signal for SIGHUB\n", __FILE__, __LINE__);
return 0;
}
return 1;
};
static void sig_int(int sig) {
if (signal (SIGINT, sig_int) == SIG_ERR) errorexit ("could not set up signal SIGINT\n");
printf ("\n\nSignal Int\n\n");
running = 0;
}