EMIPLIB

mipvideoframestorage.h

Go to the documentation of this file.
00001 /*
00002     
00003   This file is a part of EMIPLIB, the EDM Media over IP Library.
00004   
00005   Copyright (C) 2006-2011  Hasselt University - Expertise Centre for
00006                       Digital Media (EDM) (http://www.edm.uhasselt.be)
00007 
00008   This library is free software; you can redistribute it and/or
00009   modify it under the terms of the GNU Lesser General Public
00010   License as published by the Free Software Foundation; either
00011   version 2.1 of the License, or (at your option) any later version.
00012 
00013   This library is distributed in the hope that it will be useful,
00014   but WITHOUT ANY WARRANTY; without even the implied warranty of
00015   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00016   Lesser General Public License for more details.
00017 
00018   You should have received a copy of the GNU Lesser General Public
00019   License along with this library; if not, write to the Free Software
00020   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  
00021   USA
00022 
00023 */
00024 
00029 #ifndef MIPVIDEOFRAMESTORAGE_H
00030 
00031 #define MIPVIDEOFRAMESTORAGE_H
00032 
00033 #include "mipconfig.h"
00034 #include "mipcomponent.h"
00035 #include "miptime.h"
00036 #include <list>
00037 #include <map>
00038 
00043 class EMIPLIB_IMPORTEXPORT MIPVideoFrameStorage : public MIPComponent
00044 {
00045 public:
00046         MIPVideoFrameStorage();
00047         ~MIPVideoFrameStorage();
00048 
00050         bool init();
00051 
00053         bool destroy();
00054         
00065         bool getData(uint64_t sourceID, uint8_t *pDest, int *width, int *height, MIPTime *t = 0);
00066 
00070         bool getSourceIDs(std::list<uint64_t> &sourceIDs);
00071 
00072         bool push(const MIPComponentChain &chain, int64_t iteration, MIPMessage *pMsg);
00073         bool pull(const MIPComponentChain &chain, int64_t iteration, MIPMessage **pMsg);
00074 private:
00075         class VideoFrameInfo
00076         {
00077         public:
00078                 VideoFrameInfo(uint8_t *pData, int width, int height, size_t length)                    { m_pData = pData; m_length = length; m_width = width; m_height = height; m_time = MIPTime::getCurrentTime(); }
00079                 ~VideoFrameInfo()                                                                       { delete [] m_pData; }
00080                 const uint8_t *getData() const                                                          { return m_pData; }
00081                 int getWidth() const                                                                    { return m_width; }
00082                 int getHeight() const                                                                   { return m_height; }
00083                 size_t getDataLength() const                                                            { return m_length; }
00084                 MIPTime getCreationTime() const                                                         { return m_time; }
00085         private:
00086                 uint8_t *m_pData;
00087                 int m_width, m_height;
00088                 size_t m_length;
00089                 
00090                 MIPTime m_time;
00091         };
00092 
00093         void expire();
00094         
00095         bool m_init;
00096         MIPTime m_lastExpireTime;
00097         std::map<uint64_t, VideoFrameInfo *> m_frames;
00098 };
00099 
00100 #endif // MIPVIDEOFRAMESTORAGE_H