diff --git a/lib/StreamHandlerPortableMap.cpp b/lib/StreamHandlerPortableMap.cpp new file mode 100644 index 0000000..699637a --- /dev/null +++ b/lib/StreamHandlerPortableMap.cpp @@ -0,0 +1,103 @@ +/* This file is a part of plaYUVer project + * Copyright (C) 2014-2015 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 StreamHandlerPortableMap.cpp + * \ingroup PlaYUVerLib + * \brief Interface with opencv lib + */ + +#include +#include "StreamHandlerPortableMap.h" +#include "PlaYUVerFrame.h" +#include "PlaYUVerFramePixelFormats.h" +#include "LibMemory.h" + +namespace plaYUVer +{ + +std::vector StreamHandlerPortableMap::supportedReadFormats() +{ + INI_REGIST_PLAYUVER_SUPPORTED_FMT; + REGIST_PLAYUVER_SUPPORTED_FMT( &StreamHandlerPortableMap::Create, "Portable Grayscale Map ", "pgm" ); + REGIST_PLAYUVER_SUPPORTED_FMT( &StreamHandlerPortableMap::Create, "Portable Pix Map ", "ppm" ); + END_REGIST_PLAYUVER_SUPPORTED_FMT; +} + +std::vector StreamHandlerPortableMap::supportedWriteFormats() +{ + INI_REGIST_PLAYUVER_SUPPORTED_FMT; +// APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerPortableMap, Read ); + END_REGIST_PLAYUVER_SUPPORTED_FMT; +} + +Bool StreamHandlerPortableMap::openHandler( std::string strFilename, Bool bInput ) +{ + m_cFilename = strFilename; + return true; +} + +Void StreamHandlerPortableMap::closeHandler() +{ + +} + +Bool StreamHandlerPortableMap::configureBuffer( PlaYUVerFrame* pcFrame ) +{ + return true; +} + +Void StreamHandlerPortableMap::getFormat( UInt& rWidth, UInt& rHeight, Int& rInputFormat, UInt& rBitsPerPel, Int& rEndianness, Double& rFrameRate ) +{ +// rWidth = m_uiWidth; +// rHeight = m_uiHeight; +// rInputFormat = m_iPixelFormat; +// rBitsPerPel = m_uiBitsPerPixel; +// rEndianness = m_iEndianness; + rFrameRate = 1; +} + +UInt64 StreamHandlerPortableMap::calculateFrameNumber() +{ + return 1; +} + +Bool StreamHandlerPortableMap::seek( UInt64 iFrameNum ) +{ + return true; +} + +Bool StreamHandlerPortableMap::read( PlaYUVerFrame* pcFrame ) +{ + return false; +} + +Bool StreamHandlerPortableMap::write( PlaYUVerFrame* pcFrame ) +{ + Bool bRet = false; + cv::Mat* pcCvFrame = pcFrame->getCvMat(); + if( pcCvFrame ) + { + bRet = cv::imwrite( m_cFilename.c_str(), *pcCvFrame ); + delete pcCvFrame; + } + return bRet; +} + +} // NAMESPACE diff --git a/lib/StreamHandlerPortableMap.h b/lib/StreamHandlerPortableMap.h new file mode 100644 index 0000000..44a64ba --- /dev/null +++ b/lib/StreamHandlerPortableMap.h @@ -0,0 +1,70 @@ +/* This file is a part of plaYUVer project + * Copyright (C) 2014-2015 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 StreamHandlerPortableMap.h + * \ingroup PlaYUVerLib + * \brief Interface with opencv lib + */ + +#ifndef __STREAMHANDLERPORTABLEMAP_H__ +#define __STREAMHANDLERPORTABLEMAP_H__ + +#include +#include +#include +#include +#include "PlaYUVerDefs.h" +#include "PlaYUVerStream.h" +#include "PlaYUVerStreamHandlerIf.h" + +namespace plaYUVer +{ + +class PlaYUVerFrame; + +class StreamHandlerPortableMap: public PlaYUVerStreamHandlerIf +{ + REGISTER_STREAM_HANDLER( StreamHandlerPortableMap ) + +public: + + static std::vector supportedReadFormats(); + static std::vector supportedWriteFormats(); + + StreamHandlerPortableMap() {} + ~StreamHandlerPortableMap() {} + + Bool openHandler( std::string strFilename, Bool bInput ); + Void closeHandler(); + Bool configureBuffer( PlaYUVerFrame* pcFrame ); + UInt64 calculateFrameNumber(); + Bool seek( UInt64 iFrameNum ); + Bool read( PlaYUVerFrame* pcFrame ); + Bool write( PlaYUVerFrame* pcFrame ); + + Void getFormat( UInt& rWidth, UInt& rHeight, Int& rInputFormat, UInt& rBitsPerPel, Int& rEndianness, Double& rFrameRate ); + +private: + std::string m_cFilename; +}; + +} // NAMESPACE + +#endif // __STREAMHANDLERPORTABLEMAP_H__ diff --git a/lib/StreamHandlerRaw.cpp b/lib/StreamHandlerRaw.cpp new file mode 100644 index 0000000..a669108 --- /dev/null +++ b/lib/StreamHandlerRaw.cpp @@ -0,0 +1,99 @@ +/* This file is a part of plaYUVer project + * Copyright (C) 2014-2015 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 StreamHandlerRaw.cpp + * \ingroup PlaYUVerLib + * \brief Interface for raw (yuv) streams + */ + +#include +#include "StreamHandlerRaw.h" +#include "PlaYUVerFrame.h" +#include "PlaYUVerFramePixelFormats.h" +#include "LibMemory.h" + +namespace plaYUVer +{ + +Bool PlaYUVerRawHandler::openHandler( std::string strFilename, Bool bInput ) +{ + m_bIsInput = bInput; + m_pFile = NULL; + m_pFile = fopen( strFilename.c_str(), bInput ? "rb" : "wb" ); + if( m_pFile == NULL ) + { + return false; + } + m_strFormatName = "YUV"; + m_strCodecName = "Raw Video"; + return true; +} + +Void PlaYUVerRawHandler::closeHandler() +{ + if( m_pFile ) + fclose( m_pFile ); +} + +Bool PlaYUVerRawHandler::configureBuffer( PlaYUVerFrame* pcFrame ) +{ + return getMem1D( &m_pStreamBuffer, pcFrame->getBytesPerFrame() ); +} + + +UInt64 PlaYUVerRawHandler::calculateFrameNumber() +{ + if( !m_pFile || m_uiNBytesPerFrame == 0 ) + return 0; + fseek( m_pFile, 0, SEEK_END ); + UInt64 fileSize = ftell( m_pFile ); + fseek( m_pFile, 0, SEEK_SET ); + return ( fileSize / m_uiNBytesPerFrame ); +} + +Bool PlaYUVerRawHandler::seek( UInt64 iFrameNum ) +{ + if( m_bIsInput && m_pFile ) + { + fseek( m_pFile, iFrameNum >= 0 ? iFrameNum * m_uiNBytesPerFrame : 0, SEEK_SET ); + return true; + } + return false; +} + +Bool PlaYUVerRawHandler::read( PlaYUVerFrame* pcFrame ) +{ + UInt64 processed_bytes = fread( m_pStreamBuffer, sizeof( Byte ), m_uiNBytesPerFrame, m_pFile ); + if( processed_bytes != m_uiNBytesPerFrame ) + return false; + pcFrame->frameFromBuffer( m_pStreamBuffer ); + return true; +} + +Bool PlaYUVerRawHandler::write( PlaYUVerFrame* pcFrame ) +{ + pcFrame->frameToBuffer( m_pStreamBuffer ); + UInt64 processed_bytes = fwrite( m_pStreamBuffer, sizeof( Byte ), m_uiNBytesPerFrame, m_pFile ); + if( processed_bytes != m_uiNBytesPerFrame ) + return false; + return true; +} + +} // NAMESPACE