From patchwork Sun Apr 14 01:34:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Niklas_S=C3=B6derlund?= X-Patchwork-Id: 971 Return-Path: Received: from vsp-unauthed02.binero.net (vsp-unauthed02.binero.net [195.74.38.227]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 1138960DB4 for ; Sun, 14 Apr 2019 03:35:16 +0200 (CEST) X-Halon-ID: 8cd43bf5-5e55-11e9-8e2c-005056917f90 Authorized-sender: niklas@soderlund.pp.se Received: from bismarck.berto.se (unknown [89.233.230.99]) by bin-vsp-out-02.atm.binero.net (Halon) with ESMTPA id 8cd43bf5-5e55-11e9-8e2c-005056917f90; Sun, 14 Apr 2019 03:35:15 +0200 (CEST) From: =?utf-8?q?Niklas_S=C3=B6derlund?= To: libcamera-devel@lists.libcamera.org Date: Sun, 14 Apr 2019 03:34:57 +0200 Message-Id: <20190414013506.10515-3-niklas.soderlund@ragnatech.se> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190414013506.10515-1-niklas.soderlund@ragnatech.se> References: <20190414013506.10515-1-niklas.soderlund@ragnatech.se> MIME-Version: 1.0 Subject: [libcamera-devel] [RFC 02/11] libcamera: media_device: Open and close media device inside populate() X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Apr 2019 01:35:16 -0000 Remove the need for the caller to open and close the media device when populating the MediaDeivce. This is done as an effort to make the usage of the MediaDevice less error prone and the interface stricter. Signed-off-by: Niklas Söderlund --- src/libcamera/device_enumerator.cpp | 8 +------- src/libcamera/media_device.cpp | 10 ++++++++-- test/media_device/media_device_print_test.cpp | 6 ------ test/pipeline/ipu3/ipu3_pipeline_test.cpp | 5 ----- 4 files changed, 9 insertions(+), 20 deletions(-) diff --git a/src/libcamera/device_enumerator.cpp b/src/libcamera/device_enumerator.cpp index 58b81c354a706f03..6c08806d17dbfeec 100644 --- a/src/libcamera/device_enumerator.cpp +++ b/src/libcamera/device_enumerator.cpp @@ -212,11 +212,7 @@ int DeviceEnumerator::addDevice(const std::string &deviceNode) { std::shared_ptr media = std::make_shared(deviceNode); - int ret = media->open(); - if (ret < 0) - return ret; - - ret = media->populate(); + int ret = media->populate(); if (ret < 0) { LOG(DeviceEnumerator, Info) << "Unable to populate media device " << deviceNode @@ -243,8 +239,6 @@ int DeviceEnumerator::addDevice(const std::string &deviceNode) return ret; } - media->close(); - LOG(DeviceEnumerator, Debug) << "Added device " << deviceNode << ": " << media->driver(); diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp index 1e9024bf97217bcf..ecb00a1d5abffe80 100644 --- a/src/libcamera/media_device.cpp +++ b/src/libcamera/media_device.cpp @@ -220,6 +220,10 @@ int MediaDevice::populate() clear(); + ret = open(); + if (ret) + return ret; + /* * Keep calling G_TOPOLOGY until the version number stays stable. */ @@ -236,7 +240,7 @@ int MediaDevice::populate() LOG(MediaDevice, Error) << "Failed to enumerate topology: " << strerror(-ret); - return ret; + goto err_out; } if (version == topology.topology_version) @@ -260,6 +264,8 @@ int MediaDevice::populate() populatePads(topology) && populateLinks(topology)) valid_ = true; +err_out: + close(); delete[] ents; delete[] interfaces; @@ -268,7 +274,7 @@ int MediaDevice::populate() if (!valid_) { clear(); - return -EINVAL; + return ret ? ret : -EINVAL; } return 0; diff --git a/test/media_device/media_device_print_test.cpp b/test/media_device/media_device_print_test.cpp index 3eef973939201b27..ceffd538e13fca73 100644 --- a/test/media_device/media_device_print_test.cpp +++ b/test/media_device/media_device_print_test.cpp @@ -124,10 +124,6 @@ int MediaDevicePrintTest::testMediaDevice(const string deviceNode) dev.close(); - ret = dev.open(); - if (ret) - return ret; - ret = dev.populate(); if (ret) return ret; @@ -135,8 +131,6 @@ int MediaDevicePrintTest::testMediaDevice(const string deviceNode) /* Print out the media graph. */ printMediaGraph(dev, cerr); - dev.close(); - return 0; } diff --git a/test/pipeline/ipu3/ipu3_pipeline_test.cpp b/test/pipeline/ipu3/ipu3_pipeline_test.cpp index 953f0233cde485cb..1d4cc4d4950b8391 100644 --- a/test/pipeline/ipu3/ipu3_pipeline_test.cpp +++ b/test/pipeline/ipu3/ipu3_pipeline_test.cpp @@ -71,11 +71,6 @@ int IPU3PipelineTest::init() return TestSkip; } - if (cio2->open()) { - cerr << "Failed to open media device " << cio2->deviceNode() << endl; - return TestFail; - } - /* * Camera sensor are connected to the CIO2 unit. * Count how many sensors are connected in the system