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:
parent
67d313240c
commit
71ef5532d9
4 changed files with 95 additions and 1 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue