diff --git a/cmake/ModuleDefault.cmake b/cmake/ModuleDefault.cmake index cefe152..c8cba74 100644 --- a/cmake/ModuleDefault.cmake +++ b/cmake/ModuleDefault.cmake @@ -4,7 +4,7 @@ ADD_MODULE( FilterFrame "FilterFrame.cpp" ) ADD_MODULE( FrameDifference "FrameDifference.cpp" ) -#ADD_MODULE( MeasurePSNR "MeasurePSNR.cpp" ) +ADD_MODULE( MeasurePSNR "MeasurePSNR.cpp" ) IF( USE_OPENCV ) ADD_MODULE( DisparityStereoVar "DisparityStereoVar.cpp" ) diff --git a/source/app/ModulesHandle.cpp b/source/app/ModulesHandle.cpp index 47c1ddd..6e968f9 100644 --- a/source/app/ModulesHandle.cpp +++ b/source/app/ModulesHandle.cpp @@ -106,7 +106,7 @@ SubWindowHandle* ModulesHandle::enableModuleIf( PlaYUVerModuleIf *pcCurrModuleIf QString windowName; UInt numberOfFrames = pcCurrModuleIf->m_cModuleDef.m_uiNumberOfFrames; - if( numberOfFrames > MODULE_REQUIRES_ONE_FRAME ) + if( numberOfFrames > MODULE_REQUIRES_ONE_FRAME ) // Show dialog to select sub windows { DialogSubWindowSelector dialogWindowsSelection( m_pcParent, m_pcMdiArea, numberOfFrames ); if( dialogWindowsSelection.exec() == QDialog::Accepted ) @@ -141,18 +141,30 @@ SubWindowHandle* ModulesHandle::enableModuleIf( PlaYUVerModuleIf *pcCurrModuleIf windowName.append( ">" ); pcCurrModuleIf->m_pcDisplaySubWindow = NULL; - if( ( pcCurrModuleIf->m_cModuleDef.m_uiModuleRequirements & MODULE_REQUIRES_NEW_WINDOW ) || bShowModulesNewWindow ) + if( pcCurrModuleIf->m_cModuleDef.m_iModuleType == FRAME_PROCESSING_MODULE ) { - interfaceChild = new SubWindowHandle( m_pcParent, true ); - interfaceChild->setWindowName( windowName ); - connect( interfaceChild->getViewArea(), SIGNAL( positionChanged(const QPoint &, PlaYUVerFrame *) ), m_pcParent, - SLOT( updatePixelValueStatusBar(const QPoint &, PlaYUVerFrame *) ) ); - pcCurrModuleIf->m_pcDisplaySubWindow = interfaceChild; - pcCurrModuleIf->m_pcDisplaySubWindow->setModule( pcCurrModuleIf ); + if( ( pcCurrModuleIf->m_cModuleDef.m_uiModuleRequirements & MODULE_REQUIRES_NEW_WINDOW ) || bShowModulesNewWindow ) + { + interfaceChild = new SubWindowHandle( m_pcParent, true ); + interfaceChild->setWindowName( windowName ); + connect( interfaceChild->getViewArea(), SIGNAL( positionChanged(const QPoint &, PlaYUVerFrame *) ), m_pcParent, + SLOT( updatePixelValueStatusBar(const QPoint &, PlaYUVerFrame *) ) ); + pcCurrModuleIf->m_pcDisplaySubWindow = interfaceChild; + pcCurrModuleIf->m_pcDisplaySubWindow->setModule( pcCurrModuleIf ); + } + } + if( pcCurrModuleIf->m_cModuleDef.m_iModuleType == FRAME_MEASUREMENT_MODULE ) + { + if( pcCurrModuleIf->m_cModuleDef.m_uiModuleRequirements & MODULE_REQUIRES_SIDEBAR ) + { + pcCurrModuleIf->m_pcModuleDock = new ModuleHandleDock( m_pcParent ); + } } + // Create Module pcCurrModuleIf->create( pcCurrModuleIf->m_pcSubWindow[0]->getCurrFrame() ); + // Associate module with subwindows for( UInt i = 0; i < numberOfFrames; i++ ) { pcCurrModuleIf->m_pcSubWindow[i]->enableModule( pcCurrModuleIf ); @@ -251,7 +263,6 @@ Void ModulesHandle::openModuleIfStream( PlaYUVerModuleIf *pcCurrModuleIf ) UInt Width = 0, Height = 0, FrameRate = 30; Int InputFormat = -1; - QString supported = tr( "Supported Files (" ); QStringList formatsList; QStringList formatsExt = PlaYUVerStream::supportedWriteFormatsExt(); diff --git a/source/app/PlaYUVerModuleIf.cpp b/source/app/PlaYUVerModuleIf.cpp index 96e531a..48ca425 100644 --- a/source/app/PlaYUVerModuleIf.cpp +++ b/source/app/PlaYUVerModuleIf.cpp @@ -31,6 +31,7 @@ namespace plaYUVer PlaYUVerModuleIf::PlaYUVerModuleIf() : m_pcAction( NULL ), m_pcDisplaySubWindow( NULL ), + m_pcModuleDock( NULL ), m_pcModuleStream( NULL ), m_pcProcessedFrame( NULL ) { diff --git a/source/app/PlaYUVerModuleIf.h b/source/app/PlaYUVerModuleIf.h index 7c45b42..1eaceee 100644 --- a/source/app/PlaYUVerModuleIf.h +++ b/source/app/PlaYUVerModuleIf.h @@ -31,6 +31,7 @@ #include #include "PlaYUVerFrame.h" #include "PlaYUVerStream.h" +#include "ModuleHandleDock.h" class QAction; @@ -40,7 +41,6 @@ namespace plaYUVer enum // Module type { FRAME_PROCESSING_MODULE, - VIDEO_PROCESSING_MODULE, FRAME_MEASUREMENT_MODULE, }; @@ -96,7 +96,10 @@ class PlaYUVerModuleIf private: QAction* m_pcAction; SubWindowHandle* m_pcSubWindow[MAX_NUMBER_FRAMES]; + SubWindowHandle* m_pcDisplaySubWindow; + ModuleHandleDock* m_pcModuleDock; + PlaYUVerModuleDefinition m_cModuleDef; PlaYUVerStream* m_pcModuleStream; @@ -126,11 +129,14 @@ public: virtual Void create() {} virtual Void create( PlaYUVerFrame* ) {} - virtual Void process() {} virtual PlaYUVerFrame* process( PlaYUVerFrame* ) { return NULL; } virtual PlaYUVerFrame* process( PlaYUVerFrame*, PlaYUVerFrame* ) { return NULL; } virtual PlaYUVerFrame* process( PlaYUVerFrame*, PlaYUVerFrame*, PlaYUVerFrame* ) { return NULL; } + virtual Double measure( PlaYUVerFrame* ) { return 0; } + virtual Double measure( PlaYUVerFrame*, PlaYUVerFrame* ) { return 0; } + virtual Double measure( PlaYUVerFrame*, PlaYUVerFrame*, PlaYUVerFrame* ) { return 0; } + virtual Void destroy() { } Void setModuleDefinition( PlaYUVerModuleDefinition def ) { m_cModuleDef = def; } diff --git a/source/modules/MeasurePSNR.cpp b/source/modules/MeasurePSNR.cpp index e20dfd3..d344c5b 100644 --- a/source/modules/MeasurePSNR.cpp +++ b/source/modules/MeasurePSNR.cpp @@ -19,7 +19,7 @@ /** * \file MeasurePSNR.cpp - * \brief Measure PSNR module + * \brief Frame Difference module */ #include @@ -37,32 +37,41 @@ static PlaYUVerModuleDefinition MeasurePSNRDef = "PSNR", "Measure the PSNR between two images", MODULE_REQUIRES_TWO_FRAMES, - MODULE_REQUIRES_NEW_WINDOW, + MODULE_REQUIRES_SIDEBAR, APPLY_WHILE_PLAYING, }; MeasurePSNR::MeasurePSNR() { - m_pcFilteredFrame = NULL; setModuleDefinition( MeasurePSNRDef ); } -Void MeasurePSNR::create( PlaYUVerFrame* InputFrame ) +Void MeasurePSNR::create( PlaYUVerFrame* Org ) { - m_pcFilteredFrame = NULL; - m_pcFilteredFrame = new PlaYUVerFrame( InputFrame->getWidth(), InputFrame->getHeight(), PlaYUVerFrame::GRAY ); } -PlaYUVerFrame* MeasurePSNR::process( PlaYUVerFrame* InputFrame ) +Double MeasurePSNR::measure( PlaYUVerFrame* Org, PlaYUVerFrame* Rec ) { - return m_pcFilteredFrame; + Pel* pInput1PelYUV = Org->getPelBufferYUV()[0][0]; + Pel* pInput2PelYUV = Rec->getPelBufferYUV()[0][0]; + + Int aux_pel_1, aux_pel_2; + Double diff = 0; + + for( UInt y = 0; y < Org->getHeight(); y++ ) + for( UInt x = 0; x < Org->getWidth(); x++ ) + { + aux_pel_1 = *pInput1PelYUV++; + aux_pel_2 = *pInput2PelYUV++; + diff += abs( aux_pel_1 - aux_pel_2 ); + } + + return diff; } Void MeasurePSNR::destroy() { - if( m_pcFilteredFrame ) - delete m_pcFilteredFrame; - m_pcFilteredFrame = NULL; + } } // NAMESPACE diff --git a/source/modules/MeasurePSNR.h b/source/modules/MeasurePSNR.h index 5de073c..84c5fc7 100644 --- a/source/modules/MeasurePSNR.h +++ b/source/modules/MeasurePSNR.h @@ -19,17 +19,16 @@ /** * \file MeasurePSNR.h - * \brief Measure PSNR module + * \brief Frame Difference module */ #ifndef __MEASUREPSNR_H__ #define __MEASUREPSNR_H__ #include "config.h" - +#include "PlaYUVerDefs.h" #include #include -#include "TypeDef.h" #include "PlaYUVerFrame.h" #include "PlaYUVerModuleIf.h" @@ -47,10 +46,8 @@ public: virtual ~MeasurePSNR() { } - - Void create( PlaYUVerFrame* InputFrame ); - - PlaYUVerFrame* process( PlaYUVerFrame* InputFrame ); + Void create( PlaYUVerFrame* ); + Double measure( PlaYUVerFrame*, PlaYUVerFrame* ); Void destroy(); };