cam: Add event loop
Add a simple event loop to the cam application and use it in the main() function, with an example of how to handle SIGINT to gracefully stop the loop. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
@@ -7,10 +7,12 @@
|
||||
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <libcamera/libcamera.h>
|
||||
|
||||
#include "event_loop.h"
|
||||
#include "options.h"
|
||||
|
||||
using namespace libcamera;
|
||||
@@ -23,6 +25,14 @@ enum {
|
||||
OptList = 'l',
|
||||
};
|
||||
|
||||
EventLoop *loop;
|
||||
|
||||
void signalHandler(int signal)
|
||||
{
|
||||
std::cout << "Exiting" << std::endl;
|
||||
loop->exit();
|
||||
}
|
||||
|
||||
static int parseOptions(int argc, char *argv[])
|
||||
{
|
||||
OptionsParser parser;
|
||||
@@ -79,7 +89,17 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
loop = new EventLoop(cm->eventDispatcher());
|
||||
|
||||
struct sigaction sa = {};
|
||||
sa.sa_handler = &signalHandler;
|
||||
sigaction(SIGINT, &sa, nullptr);
|
||||
|
||||
ret = loop->exec();
|
||||
|
||||
delete loop;
|
||||
|
||||
cm->stop();
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user