summaryrefslogtreecommitdiff
path: root/test/signal.cpp
AgeCommit message (Expand)Author
2020-01-22test: signal: Add additional disconnection tests for ObjectLaurent Pinchart
2020-01-07test: signal: Test connecting to non-void slotsLaurent Pinchart
2019-07-11test: signal: Extend Signal test with multi-inheritance reeiverLaurent Pinchart
2019-04-27test: signal: Exercise the signal delivery code paths for ObjectLaurent Pinchart
2019-02-13libcamera: signal: Disconnect signal automatically on slot deletionLaurent Pinchart
2019-01-08test: Add signal/slot testLaurent Pinchart
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Copyright (C) 2019, Google Inc.
 *
 * main.cpp - qcam - The libcamera GUI test application
 */

#include <signal.h>
#include <string.h>

#include <QApplication>
#include <QtDebug>

#include <libcamera/camera_manager.h>

#include "../cam/options.h"
#include "../cam/stream_options.h"
#include "main_window.h"
#include "message_handler.h"

using namespace libcamera;

void signalHandler([[maybe_unused]] int signal)
{
	qInfo() << "Exiting";
	qApp->quit();
}

OptionsParser::Options parseOptions(int argc, char *argv[])
{
	StreamKeyValueParser streamKeyValue;

	OptionsParser parser;
	parser.addOption(OptCamera, OptionString,
			 "Specify which camera to operate on", "camera",
			 ArgumentRequired, "camera");
	parser.addOption(OptHelp, OptionNone, "Display this help message",
			 "help");
	parser.addOption(OptRenderer, OptionString,
			 "Choose the renderer type {qt,gles} (default: qt)",
			 "renderer", ArgumentRequired, "renderer");
	parser.addOption(OptStream, &streamKeyValue,
			 "Set configuration of a camera stream", "stream", true);
	parser.addOption(OptVerbose, OptionNone,
			 "Print verbose log messages", "verbose");

	OptionsParser::Options options = parser.parse(argc, argv);
	if (options.isSet(OptHelp))
		parser.usage();

	return options;
}

int main(int argc, char **argv)
{
	QApplication app(argc, argv);
	int ret;

	OptionsParser::Options options = parseOptions(argc, argv);
	if (!options.valid())
		return EXIT_FAILURE;
	if (options.isSet(OptHelp))
		return 0;

	MessageHandler msgHandler(options.isSet(OptVerbose));

	struct sigaction sa = {};
	sa.sa_handler = &signalHandler;
	sigaction(SIGINT, &sa, nullptr);

	CameraManager *cm = new libcamera::CameraManager();

	ret = cm->start();
	if (ret) {
		qInfo() << "Failed to start camera manager:"
			<< strerror(-ret);
		return EXIT_FAILURE;
	}

	MainWindow *mainWindow = new MainWindow(cm, options);
	mainWindow->show();
	ret = app.exec();
	delete mainWindow;

	cm->stop();
	delete cm;

	return ret;
}