/* * Video On Demand Samples * * Copyright (C) 2015 Microchip Technology Germany II GmbH & Co. KG * * 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, see . * * You may also obtain this software under a propriety license from Microchip. * Please contact Microchip for further information. * */ /*----------------------------------------------------------*/ /*! \file * \brief This file contains the CStreamList class. */ /*----------------------------------------------------------*/ #ifndef CSTREAMLIST_H #define CSTREAMLIST_H #include "Source.h" /*----------------------------------------------------------*/ /*! \brief Aggregator class to access all available stream with a single call. */ /*----------------------------------------------------------*/ class CStreamList { static const uint32_t MAX_STREAM_LIST_LEN = 30; static uint32_t m_nInstCnt; uint32_t m_nInst; CStream m_Stream[MAX_STREAM_LIST_LEN]; uint8_t m_nPatVersion; uint8_t m_nPatCont; uint32_t m_nNextStreamSending; void GetPat(uint8_t *pTs); public: /*----------------------------------------------------------*/ /*! \brief construct a list of streams */ /*----------------------------------------------------------*/ CStreamList(); /*----------------------------------------------------------*/ /*! \brief Read from all streams' HDD to fill ring buffer * * \return true, if something was read from any file */ /*----------------------------------------------------------*/ bool ReadHdd(); /*----------------------------------------------------------*/ /*! \brief sets the same source for all active streams * * \param pSource - source object to stream */ /*----------------------------------------------------------*/ void SetSource(CSource *pSource); /*----------------------------------------------------------*/ /*! \brief fills a packet with the PAT information. * \note this method, writes only PAT every 30ms. Otherwise nothing is done. * * \return true, if the PAT was written to the buffer. false, because of the 30ms rule, there was no data stored. */ /*----------------------------------------------------------*/ bool GetPatPacket(uint8_t *pTs); /*----------------------------------------------------------*/ /*! \brief fills a packet with packets coming from the * streams. * * \return true, if packet was available */ /*----------------------------------------------------------*/ bool GetTsPacket(uint8_t *pTs); /*----------------------------------------------------------*/ /*! \brief get bytes read from all streams * * \return total bytes read */ /*----------------------------------------------------------*/ uint32_t GetBytesRead(); /*----------------------------------------------------------*/ /*! \brief get amount of bytes sent by video streams from all streams * \note this function does not count the stuffed dummy packets. * * \return total bytes sent */ /*----------------------------------------------------------*/ uint32_t GetBytesSent(); /*----------------------------------------------------------*/ /*! \brief get PCR errors from all streams * * \return total bytes read */ /*----------------------------------------------------------*/ uint32_t GetErrPcr(); /*----------------------------------------------------------*/ /*! \brief get PCR errors from all streams * * \return total bytes read */ /*----------------------------------------------------------*/ uint32_t GetErrBufUnderflow(); /*----------------------------------------------------------*/ /*! \brief get PCR errors from all streams * * \return total bytes read */ /*----------------------------------------------------------*/ uint32_t GetErrTs(); /*----------------------------------------------------------*/ /*! \brief finds a stream with the given MAC address * \param pMacAddr - Pointer to the MAC address instance to search for. * \return pointer to found stream or NULL if not found */ /*----------------------------------------------------------*/ CStream *GetStream(CMacAddr *pMacAddr); /*----------------------------------------------------------*/ /*! \brief prints list of stream to console */ /*----------------------------------------------------------*/ void PrintStreamList(); }; #endif