diff --git a/source/app/ModulesHandle.cpp b/source/app/ModulesHandle.cpp index d94706c..509bc70 100644 --- a/source/app/ModulesHandle.cpp +++ b/source/app/ModulesHandle.cpp @@ -106,7 +106,7 @@ SubWindowHandle* ModulesHandle::enableModuleIf( PlaYUVerModuleIf *pcCurrModuleIf subWindow = qobject_cast( m_pcMdiArea->subWindowList().at( i ) ); if( subWindow->getWindowName() == selectedWindows.at( j ) ) { - pcCurrModuleIf->m_pcSubWindow[j++] = subWindow; + pcCurrModuleIf->m_pcSubWindow[j] = subWindow; } } } @@ -176,31 +176,38 @@ Void ModulesHandle::destroyAllModulesIf() } } -Bool ModulesHandle::applyModuleIf( PlaYUVerModuleIf *pcCurrModuleIf ) +Bool ModulesHandle::applyModuleIf( PlaYUVerModuleIf *pcCurrModuleIf, Bool isPlaying ) { PlaYUVerFrame* processedFrame = NULL; Bool bRet = false; - switch( pcCurrModuleIf->m_cModuleDef.m_uiNumberOfFrames ) + if( !isPlaying || ( isPlaying && pcCurrModuleIf->m_cModuleDef.m_bApplyWhilePlaying ) ) { - case MODULE_REQUIRES_ONE_FRAME: - processedFrame = pcCurrModuleIf->process( pcCurrModuleIf->m_pcSubWindow[0]->getCurrFrame() ); - break; - case MODULE_REQUIRES_TWO_FRAMES: - processedFrame = pcCurrModuleIf->process( pcCurrModuleIf->m_pcSubWindow[0]->getCurrFrame(), pcCurrModuleIf->m_pcSubWindow[1]->getCurrFrame() ); - break; - case MODULE_REQUIRES_THREE_FRAMES: - processedFrame = pcCurrModuleIf->process( pcCurrModuleIf->m_pcSubWindow[0]->getCurrFrame(), pcCurrModuleIf->m_pcSubWindow[1]->getCurrFrame(), - pcCurrModuleIf->m_pcSubWindow[2]->getCurrFrame() ); - break; - } - if( pcCurrModuleIf->m_pcDisplaySubWindow ) - { - pcCurrModuleIf->m_pcDisplaySubWindow->setCurrFrame( processedFrame ); - bRet = true; + switch( pcCurrModuleIf->m_cModuleDef.m_uiNumberOfFrames ) + { + case MODULE_REQUIRES_ONE_FRAME: + processedFrame = pcCurrModuleIf->process( pcCurrModuleIf->m_pcSubWindow[0]->getCurrFrame() ); + break; + case MODULE_REQUIRES_TWO_FRAMES: + processedFrame = pcCurrModuleIf->process( pcCurrModuleIf->m_pcSubWindow[0]->getCurrFrame(), pcCurrModuleIf->m_pcSubWindow[1]->getCurrFrame() ); + break; + case MODULE_REQUIRES_THREE_FRAMES: + processedFrame = pcCurrModuleIf->process( pcCurrModuleIf->m_pcSubWindow[0]->getCurrFrame(), pcCurrModuleIf->m_pcSubWindow[1]->getCurrFrame(), + pcCurrModuleIf->m_pcSubWindow[2]->getCurrFrame() ); + break; + } + if( pcCurrModuleIf->m_pcDisplaySubWindow ) + { + pcCurrModuleIf->m_pcDisplaySubWindow->setCurrFrame( processedFrame ); + bRet = true; + } + else + { + pcCurrModuleIf->m_pcSubWindow[0]->setCurrFrame( processedFrame ); + } } else { - pcCurrModuleIf->m_pcSubWindow[0]->setCurrFrame( processedFrame ); + bRet = true; } return bRet; } diff --git a/source/app/ModulesHandle.h b/source/app/ModulesHandle.h index 5ed1746..c1a19c5 100644 --- a/source/app/ModulesHandle.h +++ b/source/app/ModulesHandle.h @@ -55,7 +55,7 @@ public: Void updateMenus( Bool hasSubWindow ); SubWindowHandle* toggleSelectedModuleIf(); - static Bool applyModuleIf( PlaYUVerModuleIf* pcCurrModuleIf ); + static Bool applyModuleIf( PlaYUVerModuleIf* pcCurrModuleIf, Bool isPlaying = false ); static Void destroyModuleIf( PlaYUVerModuleIf* pcCurrModuleIf ); private: diff --git a/source/app/PlaYUVerModuleIf.h b/source/app/PlaYUVerModuleIf.h index 5e6b475..7e55663 100644 --- a/source/app/PlaYUVerModuleIf.h +++ b/source/app/PlaYUVerModuleIf.h @@ -48,11 +48,17 @@ enum __PlaYUVerModuleTypes #define APPLY_WHILE_PLAYING true #define MAX_NUMBER_FRAMES 3 -enum __PlaYUVerModuleRequirements +enum __PlaYUVerModuleNumberOfFrames { + // Number of frames MODULE_REQUIRES_ONE_FRAME = 1, MODULE_REQUIRES_TWO_FRAMES = 2, MODULE_REQUIRES_THREE_FRAMES = 3, +}; + +enum __PlaYUVerModuleRequirements +{ + // Requirements MODULE_REQUIRES_NOTHING = 0, MODULE_REQUIRES_NEW_WINDOW = 2, MODULE_REQUIRES_SIDEBAR = 4, diff --git a/source/app/SubWindowHandle.cpp b/source/app/SubWindowHandle.cpp index bded3e4..d41f674 100644 --- a/source/app/SubWindowHandle.cpp +++ b/source/app/SubWindowHandle.cpp @@ -149,7 +149,7 @@ Void SubWindowHandle::refreshFrame() m_pcCurrFrame = m_pCurrStream->getCurrFrame(); if( m_pcCurrentModule ) { - bSetFrame = ModulesHandle::applyModuleIf( m_pcCurrentModule ); + bSetFrame = ModulesHandle::applyModuleIf( m_pcCurrentModule, m_bIsPlaying ); } if( bSetFrame ) { @@ -216,7 +216,7 @@ Int SubWindowHandle::playEvent() Void SubWindowHandle::pause() { m_bIsPlaying = false; - return; + refreshFrame(); } Void SubWindowHandle::seekAbsoluteEvent( UInt new_frame_num ) diff --git a/source/modules/FilterFrame.cpp b/source/modules/FilterFrame.cpp index 32edadb..53bc220 100644 --- a/source/modules/FilterFrame.cpp +++ b/source/modules/FilterFrame.cpp @@ -31,13 +31,15 @@ namespace plaYUVer { PlaYUVerModuleDefinition FilterFrameDef = { - FRAME_LEVEL_MODULE, - "Filters", - "Y_Filter", - "Filter Y matrix of YUV frame", - MODULE_REQUIRES_ONE_FRAME, - MODULE_REQUIRES_NOTHING, - APPLY_WHILE_PLAYING, + FRAME_LEVEL_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()