From patchwork Mon Apr 26 08:38:30 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hirokazu Honda X-Patchwork-Id: 12112 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 30AA3BDC99 for ; Mon, 26 Apr 2021 08:38:44 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id CF390688B9; Mon, 26 Apr 2021 10:38:43 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="JbWUTsO+"; dkim-atps=neutral Received: from mail-pl1-x630.google.com (mail-pl1-x630.google.com [IPv6:2607:f8b0:4864:20::630]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id E2F5A688B9 for ; Mon, 26 Apr 2021 10:38:41 +0200 (CEST) Received: by mail-pl1-x630.google.com with SMTP id t3so1252786plz.1 for ; Mon, 26 Apr 2021 01:38:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hB4U1qnLM8I7fOVF5tDADuTX+WeJdZ8FPLjDox9q8+Q=; b=JbWUTsO+LTYR9abJRbOnmVrfdfOVGsjwZG3iL0wRYptQLwCJGTi1SGGh8pc7rWNf2f VazEIQZfPAIGcnH99IaQEefW0RZPCNSIpGXqEmx3qluoUIq7QeG/m6AY0DhL2cBMLolN igFI1gaK8EgigOAVOKucoffAYxWJm6iqNjfmI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hB4U1qnLM8I7fOVF5tDADuTX+WeJdZ8FPLjDox9q8+Q=; b=Ky+dAz82jvYGq6vIx/Xv0KGi5xfziFEMw/Y0hqg9KFd3eaL5NsmUEbSn+SiGi+oB5w ongXRY+i5PnL7DqPZ45lB/N4OuYZOvGOqQ6oK2igSY7KGXVIjWqLWw9/AQbuYdpcjz9k 2utAxOLct8A/7lFD3M0ETgu6Q3/0qWUBu+GlQ7pak6/g8xVmIeLhWqQTPHO2EL5FtObP cMSQ1wc5jx6J5XRIMmxDWMpDGn3B9+kUTdD/AFikniBSjGdzSKoQ43/IKN5BQ+1+vYRk RvywYLWzmVHQo4SQ2eTTDZGgefr6h/N1L5L9ZZcrXbCeslFcnxQdoJCshrCpzQuBzfKv K8Rw== X-Gm-Message-State: AOAM532u4c1HpjQvdhTdvd7bcrwWOsZ/6mgOfAVtZIGEhxGdWe5kccSl Xf4+lsEYcmxs5NhhS7GzIySilkAkqohXeg== X-Google-Smtp-Source: ABdhPJxzDgE0FXq3jyW489rPYW+aVAIdSzSYzbLyRTrgm57h9hJuEISZ/55J0xzwPwjwLUQ+ERrCzA== X-Received: by 2002:a17:90b:88d:: with SMTP id bj13mr13815365pjb.192.1619426320361; Mon, 26 Apr 2021 01:38:40 -0700 (PDT) Received: from hiroh2.tok.corp.google.com ([2401:fa00:8f:2:a407:b8c2:d8b:a449]) by smtp.gmail.com with ESMTPSA id e18sm4873728pgr.8.2021.04.26.01.38.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Apr 2021 01:38:39 -0700 (PDT) From: Hirokazu Honda To: libcamera-devel@lists.libcamera.org Date: Mon, 26 Apr 2021 17:38:30 +0900 Message-Id: <20210426083830.2965095-4-hiroh@chromium.org> X-Mailer: git-send-email 2.31.1.498.g6c1eba8ee3d-goog In-Reply-To: <20210426083830.2965095-1-hiroh@chromium.org> References: <20210426083830.2965095-1-hiroh@chromium.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3 3/3] android: CameraDevice: Implement HAL3 API flush 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" This implements flush(). It is mostly the same as close() though the canceled events are reported with error messages. Signed-off-by: Hirokazu Honda --- src/android/camera_device.cpp | 28 ++++++++++++++++++++++++++++ src/android/camera_device.h | 1 + src/android/camera_ops.cpp | 8 ++++++-- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 96c8d4a9..fb89195e 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -750,6 +750,15 @@ void CameraDevice::close() camera_->release(); } +int CameraDevice::flush() +{ + std::scoped_lock halLock(halMutex_); + + stop(); + + return 0; +} + void CameraDevice::stop() { if (!running_) @@ -760,6 +769,25 @@ void CameraDevice::stop() { std::scoped_lock lock(mutex_); + + for (auto &[cookie, descriptor] : descriptors_) { + LOG(HAL, Debug) << "request is canceled: " << cookie; + + camera3_capture_result_t captureResult = {}; + captureResult.frame_number = descriptor.frameNumber_; + captureResult.num_output_buffers = descriptor.buffers_.size(); + for (camera3_stream_buffer_t &buffer : descriptor.buffers_) { + buffer.acquire_fence = -1; + buffer.release_fence = -1; + buffer.status = CAMERA3_BUFFER_STATUS_ERROR; + } + captureResult.output_buffers = descriptor.buffers_.data(); + + notifyError(descriptor.frameNumber_, + descriptor.buffers_[0].stream); + callbacks_->process_capture_result(callbacks_, &captureResult); + } + descriptors_.clear(); } diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 325fb967..fa652c3c 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -41,6 +41,7 @@ public: int open(const hw_module_t *hardwareModule); void close(); + int flush(); unsigned int id() const { return id_; } camera3_device_t *camera3Device() { return &camera3Device_; } diff --git a/src/android/camera_ops.cpp b/src/android/camera_ops.cpp index 696e8043..01458403 100644 --- a/src/android/camera_ops.cpp +++ b/src/android/camera_ops.cpp @@ -66,9 +66,13 @@ static void hal_dev_dump([[maybe_unused]] const struct camera3_device *dev, { } -static int hal_dev_flush([[maybe_unused]] const struct camera3_device *dev) +static int hal_dev_flush(const struct camera3_device *dev) { - return 0; + if (!dev) + return -EINVAL; + + CameraDevice *camera = reinterpret_cast(dev->priv); + return camera->flush(); } int hal_dev_close(hw_device_t *hw_device)