From patchwork Thu Jun 4 09:50:47 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Milan Zamazal X-Patchwork-Id: 26826 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 0DE12C328C for ; Thu, 4 Jun 2026 09:51:32 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id B644063405; Thu, 4 Jun 2026 11:51:31 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="eaiLraev"; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id AE70C63320 for ; Thu, 4 Jun 2026 11:51:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780566689; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Pdj1d1iFnuLGusyDEGVbK/OY2aqBoDaArNpkJMmf3as=; b=eaiLraevCVRf719BQxfOa5nlPjFR+ryxlzbDeQdo3uoZqZNYo6HTXjyz5My+6Xqyk+WN8J zAykbOfnA49XA9MV/EVf53jPlyz9SHa+aRgsjz2n/AoInu2jw8eWqaXVyAnqgox8rMtiT7 0gjSw3JTMxZxvqP++Ga3HVYD56S2GQo= Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-670-Ot8PRYpxOgS4cG1D1qoCZQ-1; Thu, 04 Jun 2026 05:51:26 -0400 X-MC-Unique: Ot8PRYpxOgS4cG1D1qoCZQ-1 X-Mimecast-MFC-AGG-ID: Ot8PRYpxOgS4cG1D1qoCZQ_1780566685 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 20C6618002C1; Thu, 4 Jun 2026 09:51:25 +0000 (UTC) Received: from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.44.34.156]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2887A30001A1; Thu, 4 Jun 2026 09:51:22 +0000 (UTC) From: Milan Zamazal To: libcamera-devel@lists.libcamera.org Cc: Milan Zamazal , =?utf-8?b?QmFybmFiw6FzIFDFkWN6?= =?utf-8?q?e?= , johannes.goede@oss.qualcomm.com Subject: [RFC PATCH v3 04/17] libcamera: software_isp: Handle queueBuffers failure Date: Thu, 4 Jun 2026 11:50:47 +0200 Message-ID: <20260604095105.68798-6-mzamazal@redhat.com> In-Reply-To: <20260604095105.68798-1-mzamazal@redhat.com> References: <20260604095105.68798-1-mzamazal@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: ppc4LHw1lizz-X3BnQKkpbXpy9FOHsJC3FDUKAbio8I_1780566685 X-Mimecast-Originator: redhat.com content-type: text/plain; charset="US-ASCII"; x-default=true X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Currently, if a call to queueBuffers fails, the error is ignored. Which means buffers are not returned back, as would be the case at the end of normal processing. Let's cancel the request, which also returns the output buffers. The input buffer is returned as well in case of raw streams and must be returned manually in case of non-raw streams. Signed-off-by: Milan Zamazal --- src/libcamera/pipeline/simple/simple.cpp | 28 +++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp index c6fe12d65..93899699e 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -955,16 +955,34 @@ void SimpleCameraData::imageBufferReady(FrameBuffer *buffer) return; } - if (converter_) - converter_->queueBuffers(buffer, conversionQueue_.front().outputs); - else + int ret; + if (converter_) { + ret = converter_->queueBuffers(buffer, conversionQueue_.front().outputs); + } else { /* * request->sequence() cannot be retrieved from `buffer' inside * queueBuffers because unique_ptr's make buffer->request() invalid * already here. */ - swIsp_->queueBuffers(request->sequence(), buffer, - conversionQueue_.front().outputs); + ret = swIsp_->queueBuffers(request->sequence(), buffer, + conversionQueue_.front().outputs); + } + + if (ret < 0) { + LOG(SimplePipeline, Error) + << "Failed to queue buffers for conversion: " + << strerror(-ret); + /* + * The buffers were rejected before starting any processing, so the + * output buffers will not be returned via the normal done + * signals. Cancel the request; this handles the output buffers and + * also the input buffer if it's a raw stream buffer. For non-raw + * streams, return the input buffer to the video device manually. + */ + pipe->cancelRequest(request); + if (!rawStream_) + video_->queueBuffer(buffer); + } conversionQueue_.pop(); return;