diff --git a/modules/ThreeSixtyFaceConcatenation.cpp b/modules/ThreeSixtyFaceConcatenation.cpp index 96b4567..db6acfc 100644 --- a/modules/ThreeSixtyFaceConcatenation.cpp +++ b/modules/ThreeSixtyFaceConcatenation.cpp @@ -45,13 +45,17 @@ ThreeSixtyFaceConcatenation::ThreeSixtyFaceConcatenation() m_uiNumberOfFrames = 1; m_uiModuleRequirements = CLP_MODULE_REQUIRES_SKIP_WHILE_PLAY | CLP_MODULES_VARIABLE_NUM_FRAMES; - m_cModuleOptions.addOptions() /**/ - ( "projection", m_uiProjectionType, "Projection [1] \n 1: Cubemap" ) /**/ + m_cModuleOptions.addOptions() /**/ + ( "projection", m_uiProjectionType, "Projection [1] \n 1: Cubemap (6 faces)" ) /**/ + ( "partitions", m_uiNumberOfPartitionsPerFace, "Number of partitions per face [1]" ) /**/ ; m_uiProjectionType = 1; + m_uiNumberOfPartitionsPerFace = 1; m_uiFacesX = 0; m_uiFacesY = 0; + + m_pcTmpFrame = NULL; } bool ThreeSixtyFaceConcatenation::create( std::vector apcFrameList ) @@ -69,8 +73,8 @@ bool ThreeSixtyFaceConcatenation::create( std::vector apcFrameList switch( m_uiProjectionType ) { case 1: - m_uiFacesX = 3; - m_uiFacesY = 2; + m_uiFacesX = 3 * m_uiNumberOfPartitionsPerFace; + m_uiFacesY = 2 * m_uiNumberOfPartitionsPerFace; break; default: assert( 0 ); @@ -88,13 +92,21 @@ CalypFrame* ThreeSixtyFaceConcatenation::process( std::vector apcFr { m_pcOutputFrame->reset(); - for( unsigned i = 0; i < m_uiFacesX * m_uiFacesY; i++ ) + switch( m_uiProjectionType ) { - CalypFrame* pcFrame = apcFrameList[i]; - unsigned x = i % m_uiFacesX * pcFrame->getWidth(); - unsigned y = i / m_uiFacesX * pcFrame->getHeight(); - m_pcOutputFrame->copyTo( pcFrame, x, y ); + case 1: // Cube-map + for( unsigned i = 0; i < m_uiFacesX * m_uiFacesY; i++ ) + { + CalypFrame* pcFrame = apcFrameList[i]; + unsigned x = i % m_uiFacesX * pcFrame->getWidth(); + unsigned y = i / m_uiFacesX * pcFrame->getHeight(); + m_pcOutputFrame->copyTo( pcFrame, x, y ); + } + break; + default: + assert( 0 ); } + return m_pcOutputFrame; } diff --git a/modules/ThreeSixtyFaceConcatenation.h b/modules/ThreeSixtyFaceConcatenation.h index 4f8c762..cfe002b 100644 --- a/modules/ThreeSixtyFaceConcatenation.h +++ b/modules/ThreeSixtyFaceConcatenation.h @@ -34,6 +34,7 @@ class ThreeSixtyFaceConcatenation : public CalypModuleIf private: CalypFrame* m_pcTmpFrame; unsigned m_uiProjectionType; + unsigned m_uiNumberOfPartitionsPerFace; unsigned m_uiFacesX; unsigned m_uiFacesY; diff --git a/modules/ThreeSixtyFaceExtraction.cpp b/modules/ThreeSixtyFaceExtraction.cpp index a7fbfdf..868187c 100644 --- a/modules/ThreeSixtyFaceExtraction.cpp +++ b/modules/ThreeSixtyFaceExtraction.cpp @@ -45,15 +45,19 @@ ThreeSixtyFaceExtraction::ThreeSixtyFaceExtraction() m_uiNumberOfFrames = 1; m_uiModuleRequirements = CLP_MODULE_REQUIRES_SKIP_WHILE_PLAY; - m_cModuleOptions.addOptions() /**/ - ( "faceNum", m_uiFaceNum, "360 proejction face to be outputed [0]" ) /**/ - ( "projection", m_uiProjectionType, "Projection [1] \n 1: Cubemap" ) /**/ + m_cModuleOptions.addOptions() /**/ + ( "faceNum", m_uiFaceNum, "360 proejction face to be outputed [0]" ) /**/ + ( "projection", m_uiProjectionType, "Projection [1] \n 1: Cubemap" ) /**/ + ( "partitions", m_uiNumberOfPartitionsPerFace, "Number of partitions per face [1]" ) /**/ ; m_uiFaceNum = 2; m_uiProjectionType = 1; + m_uiNumberOfPartitionsPerFace = 1; m_uiFacesX = 0; m_uiFacesY = 0; + + m_pcTmpFrame = NULL; } bool ThreeSixtyFaceExtraction::create( std::vector apcFrameList ) @@ -63,8 +67,8 @@ bool ThreeSixtyFaceExtraction::create( std::vector apcFrameList ) switch( m_uiProjectionType ) { case 1: - m_uiFacesX = 3; - m_uiFacesY = 2; + m_uiFacesX = 3 * m_uiNumberOfPartitionsPerFace; + m_uiFacesY = 2 * m_uiNumberOfPartitionsPerFace; break; default: assert( 0 ); @@ -82,8 +86,19 @@ CalypFrame* ThreeSixtyFaceExtraction::process( std::vector apcFrame { m_pcOutputFrame->reset(); - unsigned x = m_uiFaceNum % m_uiFacesX * m_pcOutputFrame->getWidth(); - unsigned y = ( m_uiFaceNum / m_uiFacesX ) * m_pcOutputFrame->getHeight(); + unsigned x = -1; + unsigned y = -1; + + switch( m_uiProjectionType ) + { + case 1: // Cube-map + x = m_uiFaceNum % m_uiFacesX * m_pcOutputFrame->getWidth(); + y = ( m_uiFaceNum / m_uiFacesX ) * m_pcOutputFrame->getHeight(); + break; + default: + assert( 0 ); + } + m_pcOutputFrame->copyFrom( apcFrameList[0], x, y ); return m_pcOutputFrame; } diff --git a/modules/ThreeSixtyFaceExtraction.h b/modules/ThreeSixtyFaceExtraction.h index 5ae6b5d..b974cef 100644 --- a/modules/ThreeSixtyFaceExtraction.h +++ b/modules/ThreeSixtyFaceExtraction.h @@ -35,6 +35,7 @@ private: CalypFrame* m_pcTmpFrame; unsigned m_uiFaceNum; unsigned m_uiProjectionType; + unsigned m_uiNumberOfPartitionsPerFace; unsigned m_uiFacesX; unsigned m_uiFacesY;