summaryrefslogtreecommitdiffstats
path: root/Src/Multiplexer/StreamList.h
blob: 8770a8680cb6e30f5c1e3fb4391e4914e75f3df1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/*
 * 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 3 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 <http://www.gnu.org/licenses/>.
 *
 * 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