diff --git a/CMakeLists.txt b/CMakeLists.txt index b755155..5503446 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ ENDIF(UNIX) SET( PROJECT_NAME "playuver" ) PROJECT( ${PROJECT_NAME} ) -INCLUDE( PlaYUVerVersion.cmake ) +INCLUDE( cmake/PlaYUVerVersion.cmake ) INCLUDE( cmake/CMakeMacros.cmake ) @@ -83,7 +83,7 @@ INCLUDE( cmake/LibPixfc.cmake ) ###################################################################################### SET( MODULES_DIR ${SRC_DIR}/modules ) INCLUDE_DIRECTORIES( ${MODULES_DIR} ) -FILE( GLOB ModuleCMakeFiles cmake/Module*.cmake ) +FILE( GLOB ModuleCMakeFiles ModuleDefinition.cmake ) file( WRITE ${CMAKE_CURRENT_BINARY_DIR}/ModulesListMacro.h "// This files defines the macro to \n" "// define a list of modules\n" diff --git a/ModuleDefinition.cmake b/ModuleDefinition.cmake new file mode 100644 index 0000000..d6c85dd --- /dev/null +++ b/ModuleDefinition.cmake @@ -0,0 +1,13 @@ +###################################################################################### +# Default Modules +###################################################################################### + +ADD_MODULE( FilterComponentLuma "FilterComponentLuma" ) +ADD_MODULE( FilterComponentChromaU "FilterComponentLuma" ) +ADD_MODULE( FrameDifference "FrameDifference" ) +ADD_MODULE( MeasurePSNR "MeasurePSNR" ) + +IF( USE_OPENCV ) + ADD_MODULE( DisparityStereoVar "DisparityStereoVar" ) +ENDIF() + diff --git a/cmake/CMakeMacros.cmake b/cmake/CMakeMacros.cmake index f81bb7c..e3fb168 100644 --- a/cmake/CMakeMacros.cmake +++ b/cmake/CMakeMacros.cmake @@ -105,7 +105,7 @@ macro(ADD_MODULE name file ) set(MODULES_LIBS ${MODULES_LIBS} ${__modulename}) add_definitions( -DUSE_${name} ) LIST(APPEND MODULES_LIST ${name} ) - file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "#include \"${name}.h\"\n") + file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListHeader.h "#include \"${file}.h\"\n") file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/ModulesListMacro.h "\\\n REGISTER_MODULE( ${name} ); ") endif() unset(__modulename) diff --git a/cmake/ModuleDefault.cmake b/cmake/ModuleDefault.cmake deleted file mode 100644 index c8cba74..0000000 --- a/cmake/ModuleDefault.cmake +++ /dev/null @@ -1,12 +0,0 @@ -###################################################################################### -# Default Modules -###################################################################################### - -ADD_MODULE( FilterFrame "FilterFrame.cpp" ) -ADD_MODULE( FrameDifference "FrameDifference.cpp" ) -ADD_MODULE( MeasurePSNR "MeasurePSNR.cpp" ) - -IF( USE_OPENCV ) - ADD_MODULE( DisparityStereoVar "DisparityStereoVar.cpp" ) -ENDIF() - diff --git a/PlaYUVerVersion.cmake b/cmake/PlaYUVerVersion.cmake similarity index 100% rename from PlaYUVerVersion.cmake rename to cmake/PlaYUVerVersion.cmake diff --git a/source/app/PlaYUVerModuleIf.h b/source/app/PlaYUVerModuleIf.h index 12c8656..1a0025f 100644 --- a/source/app/PlaYUVerModuleIf.h +++ b/source/app/PlaYUVerModuleIf.h @@ -102,8 +102,6 @@ private: QDockWidget* m_pcDockWidget; ModuleHandleDock* m_pcModuleDock; - PlaYUVerModuleDefinition m_cModuleDef; - PlaYUVerStream* m_pcModuleStream; PlaYUVerFrame* m_pcProcessedFrame; Double m_dMeasurementResult; @@ -144,7 +142,8 @@ public: PlaYUVerModuleDefinition getModuleDefinition() { return m_cModuleDef; } protected: - virtual void run(); + PlaYUVerModuleDefinition m_cModuleDef; + virtual void run(); }; } // NAMESPACE diff --git a/source/modules/FilterComponentLuma.cpp b/source/modules/FilterComponentLuma.cpp new file mode 100644 index 0000000..a47bfe2 --- /dev/null +++ b/source/modules/FilterComponentLuma.cpp @@ -0,0 +1,115 @@ +/* This file is a part of plaYUVer project + * Copyright (C) 2014 by Luis Lucas (luisfrlucas@gmail.com) + * Joao Carreira (jfmcarreira@gmail.com) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +/** + * \file FilterComponentLuma.cpp + * \brief Filter frame module + */ + +#include + +#include "FilterComponentLuma.h" +#include "PlaYUVerFrame.h" + +namespace plaYUVer +{ + +FilterComponent::FilterComponent() +{ + m_pcFilteredFrame = NULL; +} + +Void FilterComponent::createFilter( UInt uiWidth, UInt uiHeight ) +{ + m_pcFilteredFrame = NULL; + m_pcFilteredFrame = new PlaYUVerFrame( uiWidth, uiHeight, PlaYUVerFrame::GRAY ); +} + +PlaYUVerFrame* FilterComponent::filterComponent( PlaYUVerFrame* InputFrame, Int Component ) +{ + Pel*** pppOutputPelYUV = m_pcFilteredFrame->getPelBufferYUV(); + Pel*** pppInputPelYUV = InputFrame->getPelBufferYUV(); + memcpy( pppOutputPelYUV[Component][0], pppInputPelYUV[Component][0], m_pcFilteredFrame->getWidth() * m_pcFilteredFrame->getHeight() * sizeof(Pel) ); + return m_pcFilteredFrame; +} + +Void FilterComponent::destroy() +{ + if( m_pcFilteredFrame ) + delete m_pcFilteredFrame; + m_pcFilteredFrame = NULL; +} + + +PlaYUVerModuleDefinition FilterComponentLumaDef = { + FRAME_PROCESSING_MODULE, // Apply module to the frames or to the whole sequence. + // Currently only support for frame + "Filter Component", // Category (sub-menu) + "Luma", // Name + "Filter Y matrix of YUV frame", // Description + MODULE_REQUIRES_ONE_FRAME, // Number of Frames required (ONE_FRAME, TWO_FRAMES, THREE_FRAMES) + MODULE_REQUIRES_NOTHING, // Module requirements (check PlaYUVerModulesIf.h). + // Several requirements should be "or" between each others. + APPLY_WHILE_PLAYING, // Apply module while playing +}; + +FilterComponentLuma::FilterComponentLuma() +{ + setModuleDefinition( FilterComponentLumaDef ); +} + +Void FilterComponentLuma::create( PlaYUVerFrame* InputFrame ) +{ + createFilter( InputFrame->getWidth(), InputFrame->getHeight() ); +} + +PlaYUVerFrame* FilterComponentLuma::process( PlaYUVerFrame* InputFrame ) +{ + return filterComponent( InputFrame, LUMA ); +} + +PlaYUVerModuleDefinition FilterComponentCrDef = { + FRAME_PROCESSING_MODULE, // Apply module to the frames or to the whole sequence. + // Currently only support for frame + "Filter Component", // Category (sub-menu) + "Chroma U", // Name + "Filter Y matrix of YUV frame", // Description + MODULE_REQUIRES_ONE_FRAME, // Number of Frames required (ONE_FRAME, TWO_FRAMES, THREE_FRAMES) + MODULE_REQUIRES_NOTHING, // Module requirements (check PlaYUVerModulesIf.h). + // Several requirements should be "or" between each others. + APPLY_WHILE_PLAYING, // Apply module while playing +}; + +FilterComponentChromaU::FilterComponentChromaU() +{ + setModuleDefinition( FilterComponentCrDef ); +} + +Void FilterComponentChromaU::create( PlaYUVerFrame* InputFrame ) +{ + createFilter( InputFrame->getWidth(), InputFrame->getHeight() ); +} + +PlaYUVerFrame* FilterComponentChromaU::process( PlaYUVerFrame* InputFrame ) +{ + return filterComponent( InputFrame, CHROMA_U ); +} + +} // NAMESPACE + diff --git a/source/modules/FilterFrame.h b/source/modules/FilterComponentLuma.h similarity index 66% rename from source/modules/FilterFrame.h rename to source/modules/FilterComponentLuma.h index 03d33d1..4a44ec3 100644 --- a/source/modules/FilterFrame.h +++ b/source/modules/FilterComponentLuma.h @@ -18,12 +18,12 @@ */ /** - * \file FilterFrame.h + * \file FilterComponentLuma.h * \brief Filter frame module */ -#ifndef __FILTERFRAME_H__ -#define __FILTERFRAME_H__ +#ifndef __FILTERCOMPONENT_H__ +#define __FILTERCOMPONENT_H__ #include "config.h" #include "PlaYUVerDefs.h" @@ -37,22 +37,40 @@ namespace plaYUVer { -class FilterFrame: public PlaYUVerModuleIf +class FilterComponent { private: PlaYUVerFrame* m_pcFilteredFrame; - public: - FilterFrame(); - virtual ~FilterFrame() + FilterComponent(); + virtual ~FilterComponent() { } - - Void create( PlaYUVerFrame* InputFrame ); - - PlaYUVerFrame* process( PlaYUVerFrame* InputFrame ); + Void createFilter( UInt uiWidth, UInt uiHeight ); + PlaYUVerFrame* filterComponent( PlaYUVerFrame* InputFrame, Int Component ); Void destroy(); +}; +class FilterComponentLuma: public FilterComponent, public PlaYUVerModuleIf +{ +public: + FilterComponentLuma(); + virtual ~FilterComponentLuma() + { + } + Void create( PlaYUVerFrame* InputFrame ); + PlaYUVerFrame* process( PlaYUVerFrame* InputFrame ); +}; + +class FilterComponentChromaU: public FilterComponent, public PlaYUVerModuleIf +{ +public: + FilterComponentChromaU(); + virtual ~FilterComponentChromaU() + { + } + Void create( PlaYUVerFrame* InputFrame ); + PlaYUVerFrame* process( PlaYUVerFrame* InputFrame ); }; } // NAMESPACE diff --git a/source/modules/FilterFrame.cpp b/source/modules/FilterFrame.cpp deleted file mode 100644 index fc97496..0000000 --- a/source/modules/FilterFrame.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* This file is a part of plaYUVer project - * Copyright (C) 2014 by Luis Lucas (luisfrlucas@gmail.com) - * Joao Carreira (jfmcarreira@gmail.com) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/** - * \file FilterFrame.cpp - * \brief Filter frame module - */ - -#include - -#include "FilterFrame.h" -#include "PlaYUVerFrame.h" - -namespace plaYUVer -{ - -PlaYUVerModuleDefinition FilterFrameDef = { - FRAME_PROCESSING_MODULE, // Apply module to the frames or to the whole sequence. - // Currently only support for frame - "Filters", // Category (sub-menu) - "Y_Filter", // Name - "Filter Y matrix of YUV frame", // Description - MODULE_REQUIRES_ONE_FRAME, // Number of Frames required (ONE_FRAME, TWO_FRAMES, THREE_FRAMES) - MODULE_REQUIRES_NOTHING, // Module requirements (check PlaYUVerModulesIf.h). - // Several requirements should be "or" between each others. - APPLY_WHILE_PLAYING, // Apply module while playing -}; - -FilterFrame::FilterFrame() -{ - setModuleDefinition( FilterFrameDef ); - m_pcFilteredFrame = NULL; -} - -Void FilterFrame::create( PlaYUVerFrame* InputFrame ) -{ - m_pcFilteredFrame = NULL; - m_pcFilteredFrame = new PlaYUVerFrame( InputFrame->getWidth(), InputFrame->getHeight(), PlaYUVerFrame::GRAY ); -} - -PlaYUVerFrame* FilterFrame::process( PlaYUVerFrame* InputFrame ) -{ - Pel*** pppOutputPelYUV = m_pcFilteredFrame->getPelBufferYUV(); - Pel*** pppInputPelYUV = InputFrame->getPelBufferYUV(); - memcpy( pppOutputPelYUV[LUMA][0], pppInputPelYUV[LUMA][0], m_pcFilteredFrame->getWidth() * m_pcFilteredFrame->getHeight() * sizeof(Pel) ); - return m_pcFilteredFrame; -} - -Void FilterFrame::destroy() -{ - if( m_pcFilteredFrame ) - delete m_pcFilteredFrame; - m_pcFilteredFrame = NULL; -} - -} // NAMESPACE -