From patchwork Thu Jun 4 09:50:51 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Milan Zamazal X-Patchwork-Id: 26830 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 8CF0CC328C for ; Thu, 4 Jun 2026 09:51:41 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 4B0D66347A; Thu, 4 Jun 2026 11:51:41 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="iwauqoSQ"; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 90BF063403 for ; Thu, 4 Jun 2026 11:51:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780566697; 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=iwauqoSQBFXYwPATwcAs78+rcc5bZnLJcHywSBmmo8t6iaKgdLO9HA6v4nC3/jcWiIuaq0 LFGAXWUSuJjDB7n3Y0yJ9StphiPir80+oxF4GJZiBea5WvF3mdL02O0PuwBy4tanORWvv6 OxNU2+FIcdRXUe2CuqS/M/QXBtSGsM0= Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-77-QsGTM7gyNmaZHlmaQWMBDw-1; Thu, 04 Jun 2026 05:51:36 -0400 X-MC-Unique: QsGTM7gyNmaZHlmaQWMBDw-1 X-Mimecast-MFC-AGG-ID: QsGTM7gyNmaZHlmaQWMBDw_1780566695 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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 44035195608B; Thu, 4 Jun 2026 09:51:35 +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 49E5D30001A1; Thu, 4 Jun 2026 09:51:32 +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 06/17] libcamera: software_isp: Handle queueBuffers failure Date: Thu, 4 Jun 2026 11:50:51 +0200 Message-ID: <20260604095105.68798-10-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: 5eKS6iPOvZs0AzcdvDduIlLpIlBZxrKNuFyynFvqh3M_1780566695 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;