Show a patch.

GET /api/patches/2460/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2460,
    "url": "https://patchwork.libcamera.org/api/patches/2460/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/2460/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/projects/1/?format=api",
        "name": "libcamera",
        "link_name": "libcamera",
        "list_id": "libcamera_core",
        "list_email": "libcamera-devel@lists.libcamera.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20191230120510.938333-11-niklas.soderlund@ragnatech.se>",
    "date": "2019-12-30T12:04:55",
    "name": "[libcamera-devel,v2,10/25] libcamera: buffer: Move captured metadata to FrameMetadata",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "a181d421eb2928ae2301cf74179130cb377c9f9e",
    "submitter": {
        "id": 5,
        "url": "https://patchwork.libcamera.org/api/people/5/?format=api",
        "name": "Niklas Söderlund",
        "email": "niklas.soderlund@ragnatech.se"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/2460/mbox/",
    "series": [
        {
            "id": 593,
            "url": "https://patchwork.libcamera.org/api/series/593/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=593",
            "date": "2019-12-30T12:04:45",
            "name": "libcamera: Rework buffer API",
            "version": 2,
            "mbox": "https://patchwork.libcamera.org/series/593/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/2460/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/2460/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<niklas.soderlund@ragnatech.se>",
        "Received": [
            "from bin-mail-out-05.binero.net (bin-mail-out-05.binero.net\n\t[195.74.38.228])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E9E906046C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 30 Dec 2019 13:05:57 +0100 (CET)",
            "from bismarck.berto.se (p4fca2fd0.dip0.t-ipconnect.de\n\t[79.202.47.208]) by bin-vsp-out-01.atm.binero.net (Halon) with ESMTPA\n\tid bc182cdf-2afc-11ea-a00b-005056917a89;\n\tMon, 30 Dec 2019 13:05:56 +0100 (CET)"
        ],
        "X-Halon-ID": "bc182cdf-2afc-11ea-a00b-005056917a89",
        "Authorized-sender": "niklas@soderlund.pp.se",
        "From": "=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Mon, 30 Dec 2019 13:04:55 +0100",
        "Message-Id": "<20191230120510.938333-11-niklas.soderlund@ragnatech.se>",
        "X-Mailer": "git-send-email 2.24.1",
        "In-Reply-To": "<20191230120510.938333-1-niklas.soderlund@ragnatech.se>",
        "References": "<20191230120510.938333-1-niklas.soderlund@ragnatech.se>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v2 10/25] libcamera: buffer: Move captured\n\tmetadata to FrameMetadata",
        "X-BeenThere": "libcamera-devel@lists.libcamera.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "<libcamera-devel.lists.libcamera.org>",
        "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>",
        "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>",
        "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>",
        "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>",
        "X-List-Received-Date": "Mon, 30 Dec 2019 12:05:58 -0000"
    },
    "content": "Move the metadata retrieved when dequeuing a V4L2 buffer into a\nFrameMetadata object. This is done as a step to migrate to the\nFrameBuffer interface as the functions added to Buffer around\nFrameMetadata match the ones in FrameBuffer.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n---\n* Changes since v1\n- Rework to match FrameMetadata being a struct instead of a class\n- Align statements broken over multiple lines\n- Spiffy up bytesused printing in cam\n- Merged with patch who removes the old fields in Buffer.\n---\n include/libcamera/buffer.h               | 16 +----\n src/android/camera_device.cpp            |  4 +-\n src/cam/buffer_writer.cpp                |  2 +-\n src/cam/capture.cpp                      | 13 +++-\n src/libcamera/buffer.cpp                 | 75 ++++++------------------\n src/libcamera/pipeline/ipu3/ipu3.cpp     |  4 +-\n src/libcamera/pipeline/rkisp1/rkisp1.cpp |  8 +--\n src/libcamera/request.cpp                |  2 +-\n src/libcamera/v4l2_videodevice.cpp       | 24 ++++----\n src/qcam/main_window.cpp                 | 13 ++--\n test/camera/buffer_import.cpp            |  2 +-\n test/camera/capture.cpp                  |  2 +-\n test/v4l2_videodevice/buffer_sharing.cpp |  8 ++-\n 13 files changed, 70 insertions(+), 103 deletions(-)",
    "diff": "diff --git a/include/libcamera/buffer.h b/include/libcamera/buffer.h\nindex 8dd9f91272291648..8bd61f786748af5f 100644\n--- a/include/libcamera/buffer.h\n+++ b/include/libcamera/buffer.h\n@@ -93,12 +93,6 @@ private:\n class Buffer final\n {\n public:\n-\tenum Status {\n-\t\tBufferSuccess,\n-\t\tBufferError,\n-\t\tBufferCancelled,\n-\t};\n-\n \tBuffer(unsigned int index = -1, const Buffer *metadata = nullptr);\n \tBuffer(const Buffer &) = delete;\n \tBuffer &operator=(const Buffer &) = delete;\n@@ -107,11 +101,8 @@ public:\n \tconst std::array<int, 3> &dmabufs() const { return dmabuf_; }\n \tBufferMemory *mem() { return mem_; }\n \n-\tunsigned int bytesused() const { return bytesused_; }\n-\tuint64_t timestamp() const { return timestamp_; }\n-\tunsigned int sequence() const { return sequence_; }\n+\tconst FrameMetadata &metadata() const { return metadata_; };\n \n-\tStatus status() const { return status_; }\n \tRequest *request() const { return request_; }\n \tStream *stream() const { return stream_; }\n \n@@ -127,11 +118,8 @@ private:\n \tstd::array<int, 3> dmabuf_;\n \tBufferMemory *mem_;\n \n-\tunsigned int bytesused_;\n-\tuint64_t timestamp_;\n-\tunsigned int sequence_;\n+\tFrameMetadata metadata_;\n \n-\tStatus status_;\n \tRequest *request_;\n \tStream *stream_;\n };\ndiff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\nindex 09588c16a6301649..ebe91ea8af4f6436 100644\n--- a/src/android/camera_device.cpp\n+++ b/src/android/camera_device.cpp\n@@ -803,11 +803,11 @@ void CameraDevice::requestComplete(Request *request)\n \n \tif (status == CAMERA3_BUFFER_STATUS_OK) {\n \t\tnotifyShutter(descriptor->frameNumber,\n-\t\t\t      libcameraBuffer->timestamp());\n+\t\t\t      libcameraBuffer->metadata().timestamp);\n \n \t\tcaptureResult.partial_result = 1;\n \t\tresultMetadata = getResultMetadata(descriptor->frameNumber,\n-\t\t\t\t\t\t   libcameraBuffer->timestamp());\n+\t\t\t\t\t\t   libcameraBuffer->metadata().timestamp);\n \t\tcaptureResult.result = resultMetadata->get();\n \t}\n \ndiff --git a/src/cam/buffer_writer.cpp b/src/cam/buffer_writer.cpp\nindex 3e84068e66bb4dd7..7c58a1f50829f290 100644\n--- a/src/cam/buffer_writer.cpp\n+++ b/src/cam/buffer_writer.cpp\n@@ -33,7 +33,7 @@ int BufferWriter::write(Buffer *buffer, const std::string &streamName)\n \tif (pos != std::string::npos) {\n \t\tstd::stringstream ss;\n \t\tss << streamName << \"-\" << std::setw(6)\n-\t\t   << std::setfill('0') << buffer->sequence();\n+\t\t   << std::setfill('0') << buffer->metadata().sequence;\n \t\tfilename.replace(pos, 1, ss.str());\n \t}\n \ndiff --git a/src/cam/capture.cpp b/src/cam/capture.cpp\nindex 1a4dbe7ce4a15a2d..da942f56118983bd 100644\n--- a/src/cam/capture.cpp\n+++ b/src/cam/capture.cpp\n@@ -154,9 +154,18 @@ void Capture::requestComplete(Request *request)\n \t\tBuffer *buffer = it->second;\n \t\tconst std::string &name = streamName_[stream];\n \n+\t\tconst FrameMetadata &metadata = buffer->metadata();\n+\n \t\tinfo << \" \" << name\n-\t\t     << \" seq: \" << std::setw(6) << std::setfill('0') << buffer->sequence()\n-\t\t     << \" bytesused: \" << buffer->bytesused();\n+\t\t     << \" seq: \" << std::setw(6) << std::setfill('0') << metadata.sequence\n+\t\t     << \" bytesused: \";\n+\n+\t\tunsigned int nplane = 0;\n+\t\tfor (const FrameMetadata::Plane &plane : metadata.planes) {\n+\t\t\tinfo << plane.bytesused;\n+\t\t\tif (++nplane < metadata.planes.size())\n+\t\t\t\tinfo << \"/\";\n+\t\t}\n \n \t\tif (writer_)\n \t\t\twriter_->write(buffer, name);\ndiff --git a/src/libcamera/buffer.cpp b/src/libcamera/buffer.cpp\nindex 4a77f20751408b7c..686d0412bf54b2c1 100644\n--- a/src/libcamera/buffer.cpp\n+++ b/src/libcamera/buffer.cpp\n@@ -166,20 +166,6 @@ void BufferPool::destroyBuffers()\n  * deleted automatically after the request complete handler returns.\n  */\n \n-/**\n- * \\enum Buffer::Status\n- * Buffer completion status\n- * \\var Buffer::BufferSuccess\n- * The buffer has completed with success and contains valid data. All its other\n- * metadata (such as bytesused(), timestamp() or sequence() number) are valid.\n- * \\var Buffer::BufferError\n- * The buffer has completed with an error and doesn't contain valid data. Its\n- * other metadata are valid.\n- * \\var Buffer::BufferCancelled\n- * The buffer has been cancelled due to capture stop. Its other metadata are\n- * invalid and shall not be used.\n- */\n-\n /**\n  * \\brief Construct a buffer not associated with any stream\n  *\n@@ -188,18 +174,19 @@ void BufferPool::destroyBuffers()\n  * for a stream with Stream::createBuffer().\n  */\n Buffer::Buffer(unsigned int index, const Buffer *metadata)\n-\t: index_(index), dmabuf_({ -1, -1, -1 }),\n-\t  status_(Buffer::BufferSuccess), request_(nullptr),\n+\t: index_(index), dmabuf_({ -1, -1, -1 }), request_(nullptr),\n \t  stream_(nullptr)\n {\n+\tmetadata_.status = FrameMetadata::FrameSuccess;\n+\n \tif (metadata) {\n-\t\tbytesused_ = metadata->bytesused_;\n-\t\tsequence_ = metadata->sequence_;\n-\t\ttimestamp_ = metadata->timestamp_;\n+\t\tmetadata_.sequence = metadata->metadata().sequence;\n+\t\tmetadata_.timestamp = metadata->metadata().timestamp;\n+\t\tmetadata_.planes = metadata->metadata().planes;\n \t} else {\n-\t\tbytesused_ = 0;\n-\t\tsequence_ = 0;\n-\t\ttimestamp_ = 0;\n+\t\tmetadata_.sequence = 0;\n+\t\tmetadata_.timestamp = 0;\n+\t\tmetadata_.planes = { { 0 } };\n \t}\n }\n \n@@ -231,39 +218,13 @@ Buffer::Buffer(unsigned int index, const Buffer *metadata)\n  */\n \n /**\n- * \\fn Buffer::bytesused()\n- * \\brief Retrieve the number of bytes occupied by the data in the buffer\n- * \\return Number of bytes occupied in the buffer\n- */\n-\n-/**\n- * \\fn Buffer::timestamp()\n- * \\brief Retrieve the time when the buffer was processed\n- *\n- * The timestamp is expressed as a number of nanoseconds since the epoch.\n- *\n- * \\return Timestamp when the buffer was processed\n- */\n-\n-/**\n- * \\fn Buffer::sequence()\n- * \\brief Retrieve the buffer sequence number\n- *\n- * The sequence number is a monotonically increasing number assigned to the\n- * buffer processed by the stream. Gaps in the sequence numbers indicate\n- * dropped frames.\n- *\n- * \\return Sequence number of the buffer\n- */\n-\n-/**\n- * \\fn Buffer::status()\n- * \\brief Retrieve the buffer status\n+ * \\fn Buffer::metadata()\n+ * \\brief Retrieve the buffer metadata\n  *\n- * The buffer status reports whether the buffer has completed successfully\n- * (BufferSuccess) or if an error occurred (BufferError).\n+ * The buffer metadata is update every time the buffer contained are changed,\n+ * for example when it is dequeued from hardware.\n  *\n- * \\return The buffer status\n+ * \\return Metadata for the buffer\n  */\n \n /**\n@@ -299,10 +260,10 @@ Buffer::Buffer(unsigned int index, const Buffer *metadata)\n  */\n void Buffer::cancel()\n {\n-\tbytesused_ = 0;\n-\ttimestamp_ = 0;\n-\tsequence_ = 0;\n-\tstatus_ = BufferCancelled;\n+\tmetadata_.status = FrameMetadata::FrameCancelled;\n+\tmetadata_.sequence = 0;\n+\tmetadata_.timestamp = 0;\n+\tmetadata_.planes = {};\n }\n \n /**\ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex 6d8c3fada127310e..34fc792977d151be 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -928,7 +928,7 @@ int PipelineHandlerIPU3::registerCameras()\n void IPU3CameraData::imguInputBufferReady(Buffer *buffer)\n {\n \t/* \\todo Handle buffer failures when state is set to BufferError. */\n-\tif (buffer->status() == Buffer::BufferCancelled)\n+\tif (buffer->metadata().status == FrameMetadata::FrameCancelled)\n \t\treturn;\n \n \tcio2_.output_->queueBuffer(buffer);\n@@ -962,7 +962,7 @@ void IPU3CameraData::imguOutputBufferReady(Buffer *buffer)\n void IPU3CameraData::cio2BufferReady(Buffer *buffer)\n {\n \t/* \\todo Handle buffer failures when state is set to BufferError. */\n-\tif (buffer->status() == Buffer::BufferCancelled)\n+\tif (buffer->metadata().status == FrameMetadata::FrameCancelled)\n \t\treturn;\n \n \timgu_->input_->queueBuffer(buffer);\ndiff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex bb652d0da9c6df52..46df871a51105ee4 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n@@ -100,10 +100,10 @@ public:\n \t\tASSERT(frameOffset(SOE) == 0);\n \n \t\tutils::time_point soe = std::chrono::time_point<utils::clock>()\n-\t\t\t+ std::chrono::nanoseconds(buffer->timestamp())\n+\t\t\t+ std::chrono::nanoseconds(buffer->metadata().timestamp)\n \t\t\t+ timeOffset(SOE);\n \n-\t\tnotifyStartOfExposure(buffer->sequence(), soe);\n+\t\tnotifyStartOfExposure(buffer->metadata().sequence, soe);\n \t}\n \n \tvoid setDelay(unsigned int type, int frame, int msdelay)\n@@ -1002,8 +1002,8 @@ void PipelineHandlerRkISP1::bufferReady(Buffer *buffer)\n \n \tdata->timeline_.bufferReady(buffer);\n \n-\tif (data->frame_ <= buffer->sequence())\n-\t\tdata->frame_ = buffer->sequence() + 1;\n+\tif (data->frame_ <= buffer->metadata().sequence)\n+\t\tdata->frame_ = buffer->metadata().sequence + 1;\n \n \tcompleteBuffer(activeCamera_, request, buffer);\n \ttryCompleteRequest(request);\ndiff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp\nindex 3b49e52510918eee..b17a6c2278361f00 100644\n--- a/src/libcamera/request.cpp\n+++ b/src/libcamera/request.cpp\n@@ -260,7 +260,7 @@ bool Request::completeBuffer(Buffer *buffer)\n \n \tbuffer->request_ = nullptr;\n \n-\tif (buffer->status() == Buffer::BufferCancelled)\n+\tif (buffer->metadata().status == FrameMetadata::FrameCancelled)\n \t\tcancelled_ = true;\n \n \treturn !hasPendingBuffers();\ndiff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp\nindex 7d585ce03ed9a45a..51112d197068cf0a 100644\n--- a/src/libcamera/v4l2_videodevice.cpp\n+++ b/src/libcamera/v4l2_videodevice.cpp\n@@ -1015,10 +1015,12 @@ int V4L2VideoDevice::queueBuffer(Buffer *buffer)\n \t}\n \n \tif (V4L2_TYPE_IS_OUTPUT(buf.type)) {\n-\t\tbuf.bytesused = buffer->bytesused_;\n-\t\tbuf.sequence = buffer->sequence_;\n-\t\tbuf.timestamp.tv_sec = buffer->timestamp_ / 1000000000;\n-\t\tbuf.timestamp.tv_usec = (buffer->timestamp_ / 1000) % 1000000;\n+\t\tconst FrameMetadata &metadata = buffer->metadata();\n+\n+\t\tbuf.bytesused = metadata.planes[0].bytesused;\n+\t\tbuf.sequence = metadata.sequence;\n+\t\tbuf.timestamp.tv_sec = metadata.timestamp / 1000000000;\n+\t\tbuf.timestamp.tv_usec = (metadata.timestamp / 1000) % 1000000;\n \t}\n \n \tLOG(V4L2, Debug) << \"Queueing buffer \" << buf.index;\n@@ -1125,12 +1127,14 @@ Buffer *V4L2VideoDevice::dequeueBuffer()\n \t\tfdEvent_->setEnabled(false);\n \n \tbuffer->index_ = buf.index;\n-\tbuffer->bytesused_ = buf.bytesused;\n-\tbuffer->timestamp_ = buf.timestamp.tv_sec * 1000000000ULL\n-\t\t\t   + buf.timestamp.tv_usec * 1000ULL;\n-\tbuffer->sequence_ = buf.sequence;\n-\tbuffer->status_ = buf.flags & V4L2_BUF_FLAG_ERROR\n-\t\t\t? Buffer::BufferError : Buffer::BufferSuccess;\n+\n+\tbuffer->metadata_.status = buf.flags & V4L2_BUF_FLAG_ERROR\n+\t\t\t\t ? FrameMetadata::FrameError\n+\t\t\t\t : FrameMetadata::FrameSuccess;\n+\tbuffer->metadata_.sequence = buf.sequence;\n+\tbuffer->metadata_.timestamp = buf.timestamp.tv_sec * 1000000000ULL\n+\t\t\t\t    + buf.timestamp.tv_usec * 1000ULL;\n+\tbuffer->metadata_.planes = { { buf.bytesused } };\n \n \treturn buffer;\n }\ndiff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp\nindex 5dec9252898100db..47793702b9aa0ee9 100644\n--- a/src/qcam/main_window.cpp\n+++ b/src/qcam/main_window.cpp\n@@ -259,14 +259,15 @@ void MainWindow::requestComplete(Request *request)\n \tframesCaptured_++;\n \n \tBuffer *buffer = buffers.begin()->second;\n+\tconst FrameMetadata &metadata = buffer->metadata();\n \n-\tdouble fps = buffer->timestamp() - lastBufferTime_;\n+\tdouble fps = metadata.timestamp - lastBufferTime_;\n \tfps = lastBufferTime_ && fps ? 1000000000.0 / fps : 0.0;\n-\tlastBufferTime_ = buffer->timestamp();\n+\tlastBufferTime_ = metadata.timestamp;\n \n-\tstd::cout << \"seq: \" << std::setw(6) << std::setfill('0') << buffer->sequence()\n-\t\t  << \" bytesused: \" << buffer->bytesused()\n-\t\t  << \" timestamp: \" << buffer->timestamp()\n+\tstd::cout << \"seq: \" << std::setw(6) << std::setfill('0') << metadata.sequence\n+\t\t  << \" bytesused: \" << metadata.planes[0].bytesused\n+\t\t  << \" timestamp: \" << metadata.timestamp\n \t\t  << \" fps: \" << std::fixed << std::setprecision(2) << fps\n \t\t  << std::endl;\n \n@@ -306,7 +307,7 @@ int MainWindow::display(Buffer *buffer)\n \t\t\t    plane.fd.fd(), 0);\n \n \tunsigned char *raw = static_cast<unsigned char *>(memory);\n-\tviewfinder_->display(raw, buffer->bytesused());\n+\tviewfinder_->display(raw, buffer->metadata().planes[0].bytesused);\n \n \tmunmap(memory, plane.length);\n \ndiff --git a/test/camera/buffer_import.cpp b/test/camera/buffer_import.cpp\nindex e5c010d81b8d6e0e..3ba6ce9690f29329 100644\n--- a/test/camera/buffer_import.cpp\n+++ b/test/camera/buffer_import.cpp\n@@ -275,7 +275,7 @@ public:\n protected:\n \tvoid bufferComplete(Request *request, Buffer *buffer)\n \t{\n-\t\tif (buffer->status() != Buffer::BufferSuccess)\n+\t\tif (buffer->metadata().status != FrameMetadata::FrameSuccess)\n \t\t\treturn;\n \n \t\tunsigned int index = buffer->index();\ndiff --git a/test/camera/capture.cpp b/test/camera/capture.cpp\nindex ca1ebe419946dd4d..0d9ffc476650f414 100644\n--- a/test/camera/capture.cpp\n+++ b/test/camera/capture.cpp\n@@ -28,7 +28,7 @@ protected:\n \n \tvoid bufferComplete(Request *request, Buffer *buffer)\n \t{\n-\t\tif (buffer->status() != Buffer::BufferSuccess)\n+\t\tif (buffer->metadata().status != FrameMetadata::FrameSuccess)\n \t\t\treturn;\n \n \t\tcompleteBuffersCount_++;\ndiff --git a/test/v4l2_videodevice/buffer_sharing.cpp b/test/v4l2_videodevice/buffer_sharing.cpp\nindex 3a56862cb2b77d38..fe48b2e98fdada8d 100644\n--- a/test/v4l2_videodevice/buffer_sharing.cpp\n+++ b/test/v4l2_videodevice/buffer_sharing.cpp\n@@ -92,9 +92,11 @@ protected:\n \n \tvoid captureBufferReady(Buffer *buffer)\n \t{\n+\t\tconst FrameMetadata &metadata = buffer->metadata();\n+\n \t\tstd::cout << \"Received capture buffer\" << std::endl;\n \n-\t\tif (buffer->status() != Buffer::BufferSuccess)\n+\t\tif (metadata.status != FrameMetadata::FrameSuccess)\n \t\t\treturn;\n \n \t\toutput_->queueBuffer(buffer);\n@@ -103,9 +105,11 @@ protected:\n \n \tvoid outputBufferReady(Buffer *buffer)\n \t{\n+\t\tconst FrameMetadata &metadata = buffer->metadata();\n+\n \t\tstd::cout << \"Received output buffer\" << std::endl;\n \n-\t\tif (buffer->status() != Buffer::BufferSuccess)\n+\t\tif (metadata.status != FrameMetadata::FrameSuccess)\n \t\t\treturn;\n \n \t\tcapture_->queueBuffer(buffer);\n",
    "prefixes": [
        "libcamera-devel",
        "v2",
        "10/25"
    ]
}