summaryrefslogtreecommitdiff
path: root/src/libcamera/ipa_data_serializer.cpp
diff options
context:
space:
mode:
authorHirokazu Honda <hiroh@chromium.org>2021-08-26 20:25:31 +0900
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-08-30 18:08:02 +0300
commit86a47fdcd97350bd979a4d6b00124330a3b02441 (patch)
tree5019efc31e378911c92ffe2b052f3ab9b60faa63 /src/libcamera/ipa_data_serializer.cpp
parenta000a1f6e3208515200aaae6ca8128471c6ed9f3 (diff)
libcamera: framebuffer: Add offset to FrameBuffer::Plane
This adds offset to FrameBuffer::Plane. It enables representing frame buffers that store planes in the same dmabuf at different offsets, as for instance required by the V4L2 NV12 pixel format. Signed-off-by: Hirokazu Honda <hiroh@chromium.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/libcamera/ipa_data_serializer.cpp')
-rw-r--r--src/libcamera/ipa_data_serializer.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/libcamera/ipa_data_serializer.cpp b/src/libcamera/ipa_data_serializer.cpp
index 5b183c70..82ec9b20 100644
--- a/src/libcamera/ipa_data_serializer.cpp
+++ b/src/libcamera/ipa_data_serializer.cpp
@@ -569,6 +569,7 @@ FileDescriptor IPADataSerializer<FileDescriptor>::deserialize(const std::vector<
* FrameBuffer::Plane is serialized as:
*
* 4 byte - FileDescriptor
+ * 4 bytes - uint32_t Offset
* 4 bytes - uint32_t Length
*/
template<>
@@ -586,6 +587,7 @@ IPADataSerializer<FrameBuffer::Plane>::serialize(const FrameBuffer::Plane &data,
dataVec.insert(dataVec.end(), fdBuf.begin(), fdBuf.end());
fdsVec.insert(fdsVec.end(), fdFds.begin(), fdFds.end());
+ appendPOD<uint32_t>(dataVec, data.offset);
appendPOD<uint32_t>(dataVec, data.length);
return { dataVec, fdsVec };
@@ -603,7 +605,8 @@ IPADataSerializer<FrameBuffer::Plane>::deserialize(std::vector<uint8_t>::const_i
ret.fd = IPADataSerializer<FileDescriptor>::deserialize(dataBegin, dataBegin + 4,
fdsBegin, fdsBegin + 1);
- ret.length = readPOD<uint32_t>(dataBegin, 4, dataEnd);
+ ret.offset = readPOD<uint32_t>(dataBegin, 4, dataEnd);
+ ret.length = readPOD<uint32_t>(dataBegin, 8, dataEnd);
return ret;
}