From f60c5078484201e8aa61fbd3a48f7b3f4bdce68f Mon Sep 17 00:00:00 2001 From: VishwanathB45 Date: Wed, 24 May 2023 14:56:11 +0530 Subject: [PATCH] TestSignal Generator Updated Changes --- base/include/TestSignalGeneratorSrc.h | 33 +++--- base/src/TestSignalGeneratorSrc.cpp | 51 +++++----- base/test/testSignalGeneratorSrc_tests.cpp | 112 ++++++++++++--------- 3 files changed, 109 insertions(+), 87 deletions(-) diff --git a/base/include/TestSignalGeneratorSrc.h b/base/include/TestSignalGeneratorSrc.h index 766d161b0..ff90b017a 100644 --- a/base/include/TestSignalGeneratorSrc.h +++ b/base/include/TestSignalGeneratorSrc.h @@ -4,19 +4,25 @@ class TestSignalGeneratorProps : public ModuleProps { public: - TestSignalGeneratorProps() - { - } + TestSignalGeneratorProps() {} TestSignalGeneratorProps(int _width, int _height) - { - width = _width; - height = _height; - } - ~TestSignalGeneratorProps() - { - } + : width(_width), height(_height){} + + ~TestSignalGeneratorProps() {} + int width; int height; + +private: + friend class boost::serialization::access; + + template + void serialize(Archive& ar, const unsigned int version) + { + ar & boost::serialization::base_object(*this); + ar & width; + ar & height; + } }; class TestSignalGenerator : public Module @@ -24,15 +30,18 @@ class TestSignalGenerator : public Module public: TestSignalGenerator(TestSignalGeneratorProps _props); ~TestSignalGenerator(); + bool init(); bool term(); + void setProps(TestSignalGeneratorProps& props); + TestSignalGeneratorProps getProps(); protected: bool produce(); bool validateOutputPins(); - void setMetadata(framemetadata_sp &metadata); + void setMetadata(framemetadata_sp& metadata); private: class Detail; boost::shared_ptr mDetail; -}; \ No newline at end of file +}; diff --git a/base/src/TestSignalGeneratorSrc.cpp b/base/src/TestSignalGeneratorSrc.cpp index 6cd9fa4a7..57b38d071 100644 --- a/base/src/TestSignalGeneratorSrc.cpp +++ b/base/src/TestSignalGeneratorSrc.cpp @@ -6,34 +6,21 @@ class TestSignalGenerator::Detail { public: - Detail(TestSignalGeneratorProps &_props) : mProps(_props) - { - } + Detail(TestSignalGeneratorProps &_props) : mProps(_props), start_shade(0), end_shade(255), current_shade(start_shade){} + - ~Detail() - { - } - void setProps(TestSignalGeneratorProps _props) - { - mProps = _props; - } + ~Detail(){} + bool generate(frame_sp &frame) { auto *frame_ptr = frame->data(); - int start_shade = 0; - int end_shade = 255; - int steps = mProps.height / 3; - int step = (end_shade - start_shade) / steps; - int current_shade = start_shade; - int *x = static_cast(frame_ptr); - - for (int height = 0; height < steps; height++) + uint8_t *x = static_cast(frame_ptr); + + for (int height = 0; height < mProps.height; height++) { - // Loop of rows - memset(x, (uint8_t)current_shade, mProps.width); + memset(x, static_cast(current_shade), mProps.width); x += mProps.width; - // Update the shade value - current_shade += step; + current_shade += 1; if (current_shade > end_shade) { current_shade = start_shade; @@ -42,8 +29,10 @@ class TestSignalGenerator::Detail return true; } -public: TestSignalGeneratorProps mProps; + int start_shade; + int end_shade; + int current_shade; }; TestSignalGenerator::TestSignalGenerator(TestSignalGeneratorProps _props) @@ -85,7 +74,7 @@ bool TestSignalGenerator::init() bool TestSignalGenerator::produce() { - size_t read_size = (mDetail->mProps.width * mDetail->mProps.height * 3) >> 1; + size_t read_size = (getProps().width * getProps().height * 3) >> 1; auto mPinId = getOutputPinIdByType(FrameMetadata::RAW_IMAGE_PLANAR); frame_container frames; frame_sp frame = makeFrame(read_size); @@ -106,4 +95,16 @@ void TestSignalGenerator::setMetadata(framemetadata_sp &metadata) { return; } -} \ No newline at end of file +} + +TestSignalGeneratorProps TestSignalGenerator::getProps() +{ + return mDetail->mProps; +} + +void TestSignalGenerator::setProps(TestSignalGeneratorProps& _props) +{ + mDetail->mProps = _props; +} + + diff --git a/base/test/testSignalGeneratorSrc_tests.cpp b/base/test/testSignalGeneratorSrc_tests.cpp index ba86f8686..2b7f5f469 100644 --- a/base/test/testSignalGeneratorSrc_tests.cpp +++ b/base/test/testSignalGeneratorSrc_tests.cpp @@ -2,76 +2,88 @@ #include "Module.h" #include "RawImageMetadata.h" #include -#include "FileWriterModule.h" #include #include "PipeLine.h" -#include "StatSink.h" #include "test_utils.h" #include "ExternalSinkModule.h" +#include "FrameContainerQueue.h" BOOST_AUTO_TEST_SUITE(TestSignalGenerator_tests) +class SinkModuleProps : public ModuleProps +{ +public: + SinkModuleProps() : ModuleProps(){}; +}; + +class SinkModule : public Module +{ +public: + SinkModule(SinkModuleProps props) : Module(SINK, "sinkModule", props){}; + boost::shared_ptr getQue() { return Module::getQue(); } + +protected: + bool validateOutputPins() + { + return true; + } + bool validateInputPins() + { + return true; + } +}; + BOOST_AUTO_TEST_CASE(Basic) { - auto source = boost::shared_ptr(new TestSignalGenerator(TestSignalGeneratorProps(640, 360))); - auto metadata = framemetadata_sp(new RawImagePlanarMetadata(640, 360, ImageMetadata::ImageType::YUV420, size_t(0), CV_8U)); + auto source = boost::shared_ptr(new TestSignalGenerator(TestSignalGeneratorProps(400, 400))); + auto metadata = framemetadata_sp(new RawImagePlanarMetadata(400, 400, ImageMetadata::ImageType::YUV420, size_t(0), CV_8U)); source->addOutputPin(metadata); auto sink = boost::shared_ptr(new ExternalSinkModule()); source->setNext(sink); - source->init(); - sink->init(); + BOOST_TEST(source->init()); + BOOST_TEST(sink->init()); source->step(); - auto frame = sink->pop(); - auto frameMetadata = frame.begin()->second->getMetadata(); - BOOST_ASSERT(frameMetadata->getFrameType() == FrameMetadata::RAW_IMAGE_PLANAR); -} - -BOOST_AUTO_TEST_CASE(statsink) -{ - auto source = boost::shared_ptr(new TestSignalGenerator(TestSignalGeneratorProps())); - auto metadata = framemetadata_sp(new RawImagePlanarMetadata(640, 360, ImageMetadata::ImageType::YUV420, size_t(0), CV_8U)); - source->addOutputPin(metadata); - auto sink = boost::shared_ptr(new StatSink()); - source->setNext(sink); - boost::shared_ptr p; - p = boost::shared_ptr(new PipeLine("test")); - p->appendModule(source); - if (!p->init()) - { - throw AIPException(AIP_FATAL, "Engine Pipeline init failed. Check IPEngine Logs for more details."); - } - p->run_all_threaded(); - boost::this_thread::sleep_for(boost::chrono::seconds(2)); - p->stop(); - p->term(); - p->wait_for_all(); - p.reset(); + auto frames = sink->try_pop(); + BOOST_TEST(frames.size() == 1); + auto outputFrame = frames.cbegin()->second; + BOOST_TEST(outputFrame->getMetadata()->getFrameType() == FrameMetadata::RAW_IMAGE_PLANAR); + Test_Utils::saveOrCompare("./data/testOutput/TestSample.raw", const_cast(static_cast(outputFrame->data())), outputFrame->size(), 0); } -BOOST_AUTO_TEST_CASE(fileWriterSink) +BOOST_AUTO_TEST_CASE(PropsChange) { - std::vector Files = {"./data/testsample1.raw"}; - Test_Utils::FileCleaner f(Files); auto source = boost::shared_ptr(new TestSignalGenerator(TestSignalGeneratorProps(640, 360))); auto metadata = framemetadata_sp(new RawImagePlanarMetadata(640, 360, ImageMetadata::ImageType::YUV420, size_t(0), CV_8U)); source->addOutputPin(metadata); - - auto sink = boost::shared_ptr(new FileWriterModule(FileWriterModuleProps("./data/testsample1.raw"))); + auto sink = boost::shared_ptr(new SinkModule(SinkModuleProps())); source->setNext(sink); - - boost::shared_ptr p; - p = boost::shared_ptr(new PipeLine("test")); - p->appendModule(source); - if (!p->init()) - { - throw AIPException(AIP_FATAL, "Engine Pipeline init failed. Check IPEngine Logs for more details."); - } - p->run_all_threaded(); - boost::this_thread::sleep_for(boost::chrono::seconds(1)); - p->stop(); - p->term(); - p->wait_for_all(); - p.reset(); + source->init(); + sink->init(); + source->step(); + auto sinkQue = sink->getQue(); + auto framedata = sinkQue->pop(); + auto frameMetadata = framedata.begin()->second->getMetadata(); + auto size = frameMetadata->getDataSize() / 1.5; + auto currentProps = source->getProps(); + BOOST_ASSERT(size == currentProps.width * currentProps.height); + BOOST_TEST(framedata.size() == 1); + auto outputFrame = framedata.cbegin()->second; + BOOST_TEST(outputFrame->getMetadata()->getFrameType() == FrameMetadata::RAW_IMAGE_PLANAR); + Test_Utils::saveOrCompare("./data/testOutput/TestSample1.raw", const_cast(static_cast(outputFrame->data())), outputFrame->size(), 0); + TestSignalGeneratorProps propsChange(400, 400); + source->setProps(propsChange); + source->step(); + source->step(); + auto secondque = sink->getQue(); + auto framedata2 = secondque->pop(); + auto frameMetadata2 = framedata2.begin()->second->getMetadata(); + auto size2 = frameMetadata2->getDataSize() / 1.5; + auto currentProps2 = source->getProps(); + BOOST_ASSERT(size2 == currentProps2.width * currentProps2.height); + BOOST_TEST(framedata2.size() == 1); + auto outputFrame2 = framedata2.cbegin()->second; + BOOST_TEST(outputFrame2->getMetadata()->getFrameType() == FrameMetadata::RAW_IMAGE_PLANAR); + Test_Utils::saveOrCompare("./data/testOutput/TestSample2.raw", const_cast(static_cast(outputFrame2->data())), outputFrame2->size(), 0); } BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file