summaryrefslogtreecommitdiff
path: root/utils/gen-formats.py
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-05-03 03:08:20 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-05-03 17:58:43 +0300
commite0318c4776549a0db0a06682e906310970c8caf9 (patch)
tree9cb6f87b00ed4baad070952071e7597ac0d9e4d1 /utils/gen-formats.py
parent7235248d38434f4c3e8a163ab03637ac115bdda8 (diff)
libcamera: utils: Avoid infinite recursion with strtod()
When the C library doesn't provide local object support, the utils::strtod() function simply calls strtod() from the C library. The current implementation does so incorrectly, and calls utils::strtod() instead, resulting in infinite recursion. Fix it with a proper namespace qualifier. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
Diffstat (limited to 'utils/gen-formats.py')
0 files changed, 0 insertions, 0 deletions
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Copyright (C) 2019, Google Inc.
 *
 * ipu3_pipeline_test.cpp - Intel IPU3 pipeline test
 */

#include <iostream>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

#include <libcamera/camera.h>
#include <libcamera/camera_manager.h>

#include "device_enumerator.h"
#include "media_device.h"
#include "media_object.h"
#include "test.h"

using namespace std;
using namespace libcamera;

/*
 * Verify that the Intel IPU3 pipeline handler gets matched and cameras
 * are enumerated correctly.
 *
 * The test is supposed to be run on an IPU3 platform, otherwise it gets
 * skipped.
 *
 * The test lists all cameras registered in the system, if any camera is
 * available at all.
 */
class IPU3PipelineTest : public Test
{
protected:
	int init();
	int run();
	void cleanup();

private:
	CameraManager *cameraManager_;
	unsigned int sensors_;
};

int IPU3PipelineTest::init()
{
	unique_ptr<DeviceEnumerator> enumerator = DeviceEnumerator::create();
	if (!enumerator) {
		cerr << "Failed to create device enumerator" << endl;
		return TestFail;
	}

	if (enumerator->enumerate()) {
		cerr << "Failed to enumerate media devices" << endl;
		return TestFail;
	}

	DeviceMatch imgu_dm("ipu3-imgu");
	DeviceMatch cio2_dm("ipu3-cio2");

	if (!enumerator->search(imgu_dm)) {
		cerr << "Failed to find IPU3 IMGU: test skip" << endl;
		return TestSkip;
	}

	std::shared_ptr<MediaDevice> cio2 = enumerator->search(cio2_dm);
	if (!cio2) {
		cerr << "Failed to find IPU3 CIO2: test skip" << endl;
		return TestSkip;
	}

	/*
	 * Camera sensor are connected to the CIO2 unit.
	 * Count how many sensors are connected in the system
	 * and later verify this matches the number of registered
	 * cameras.
	 */
	int ret = cio2->populate();
	if (ret) {
		cerr << "Failed to populate media device " << cio2->deviceNode() << endl;
		return TestFail;
	}

	sensors_ = 0;
	const vector<MediaEntity *> &entities = cio2->entities();
	for (MediaEntity *entity : entities) {
		if (entity->function() == MEDIA_ENT_F_CAM_SENSOR)
			sensors_++;
	}

	enumerator.reset(nullptr);

	cameraManager_ = new CameraManager();
	ret = cameraManager_->start();
	if (ret) {
		cerr << "Failed to start the CameraManager" << endl;
		return TestFail;
	}

	return 0;
}

int IPU3PipelineTest::run()
{