From c9b51d3de54920e930578de58c815c0eef13b68e Mon Sep 17 00:00:00 2001 From: venkat0907 <98999942+venkat0907@users.noreply.github.com> Date: Fri, 14 Jul 2023 13:49:53 +0530 Subject: [PATCH] Enhanced DMAllocator setMetadata (#239) * added pitch and offset values as args * changed cout to LOG_INFO --- base/include/DMAAllocator.h | 14 +++++++- base/test/frame_factory_test_dma.cpp | 51 ++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/base/include/DMAAllocator.h b/base/include/DMAAllocator.h index d3ab80aa6..7e913e205 100755 --- a/base/include/DMAAllocator.h +++ b/base/include/DMAAllocator.h @@ -98,7 +98,7 @@ class DMAAllocator : public HostAllocator } } - static void setMetadata(framemetadata_sp &metadata, int width, int height, ImageMetadata::ImageType imageType) + static void setMetadata(framemetadata_sp &metadata, int width, int height, ImageMetadata::ImageType imageType,size_t pitchValues[4] = nullptr, size_t offsetValues[4] = nullptr) { auto eglDisplay = ApraEGLDisplay::getEGLDisplay(); auto colorFormat = getColorFormat(imageType); @@ -144,6 +144,10 @@ class DMAAllocator : public HostAllocator auto inputRawMetadata = FrameMetadataFactory::downcast(metadata); RawImageMetadata rawMetadata(width, height, imageType, type, fdParams.pitch[0], CV_8U, FrameMetadata::MemType::DMABUF, false); inputRawMetadata->setData(rawMetadata); + if(pitchValues != nullptr) + { + pitchValues[0] = fdParams.pitch[0]; + } } break; case FrameMetadata::FrameType::RAW_IMAGE_PLANAR: @@ -153,6 +157,14 @@ class DMAAllocator : public HostAllocator for (auto i = 0; i < fdParams.num_planes; i++) { step[i] = fdParams.pitch[i]; + if(pitchValues != nullptr) + { + pitchValues[i] = fdParams.pitch[i]; + } + if(offsetValues != nullptr) + { + offsetValues[i] = fdParams.offset[i]; + } } RawImagePlanarMetadata rawMetadata(width, height, imageType, step, CV_8U, FrameMetadata::MemType::DMABUF); inputRawMetadata->setData(rawMetadata); diff --git a/base/test/frame_factory_test_dma.cpp b/base/test/frame_factory_test_dma.cpp index a1fa0ed0d..e2794b3db 100755 --- a/base/test/frame_factory_test_dma.cpp +++ b/base/test/frame_factory_test_dma.cpp @@ -3,6 +3,8 @@ #include "RawImageMetadata.h" #include "RawImagePlanarMetadata.h" #include "DMAFDWrapper.h" +#include "DMAAllocator.h" +#include "Logger.h" #include @@ -186,4 +188,53 @@ BOOST_AUTO_TEST_CASE(save_rgba) } } +BOOST_AUTO_TEST_CASE(setMetadata_rawimage) +{ + LoggerProps logprops; + logprops.logLevel = boost::log::trivial::severity_level::info; + Logger::initLogger(logprops); + + uint32_t width = 1280; + uint32_t height = 720; + size_t size = width * height * 4; + size_t pitch[4] = {0,0,0,0}; + auto metadata = framemetadata_sp(new RawImageMetadata(width, height, ImageMetadata::ImageType::RGBA, CV_8UC4, size_t(0), CV_8U, FrameMetadata::MemType::DMABUF, true)); + DMAAllocator::setMetadata(metadata,1280,720,ImageMetadata::ImageType::RGBA,pitch); + size_t mPitch[1] = { pitch[0] }; + LOG_INFO << "mPitch: " << mPitch[0]; +} + +BOOST_AUTO_TEST_CASE(setMetadata_rawplanarimage) +{ + LoggerProps logprops; + logprops.logLevel = boost::log::trivial::severity_level::info; + Logger::initLogger(logprops); + + uint32_t width = 1280; + uint32_t height = 720; + size_t size = width * height * 4; + size_t pitch[4] = {0,0,0,0}; + size_t offset[4] = {0,0,0,0}; + auto metadata = framemetadata_sp(new RawImagePlanarMetadata(width, height, ImageMetadata::ImageType::YUV420, size_t(0), CV_8U, FrameMetadata::MemType::DMABUF)); + DMAAllocator::setMetadata(metadata,1280,720,ImageMetadata::ImageType::YUV420,pitch,offset); + size_t mPitch[4]; + size_t mOffset[4]; + for (int i = 0; i < 4; i++) + { + mOffset[i] = offset[i]; + mPitch[i] = pitch[i]; + } + LOG_INFO << "mPitch values: "; + for (int i = 0; i < 4; i++) + { + LOG_INFO << mPitch[i] << " "; + } + + LOG_INFO << "mOffset values: "; + for (int i = 0; i < 4; i++) + { + LOG_INFO << mOffset[i] << " "; + } +} + BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file