4 #define MAXNONUSEFULDATA (10*1024*1024)
6 class cTS2ES: public ipack {
7 friend void PutES(uint8_t *Buffer, int Size, void *Data);
10 uint8_t *m_ResultBuffer;
14 cTS2ES(uint8_t *ResultBuffer, int *ResultCount);
17 void PutTSPacket(const uint8_t *Buffer);
20 void PutES(uint8_t *Buffer, int Size, void *Data) {
21 cTS2ES *This = (cTS2ES*)Data;
22 uint8_t payl = Buffer[8] + 9 + This->start - 1;
23 int count = Size - payl;
25 if (*This->m_ResultCount + count > RESULTBUFFERSIZE) {
26 esyslog("ERROR: result buffer overflow (%d + %d > %d)",
27 *This->m_ResultCount, count, RESULTBUFFERSIZE);
28 count = RESULTBUFFERSIZE - *This->m_ResultCount;
30 memcpy(This->m_ResultBuffer + *This->m_ResultCount, Buffer + payl, count);
31 *This->m_ResultCount += count;
35 cTS2ES::cTS2ES(uint8_t *ResultBuffer, int *ResultCount) {
36 m_ResultBuffer = ResultBuffer;
37 m_ResultCount = ResultCount;
39 init_ipack(this, IPACKS, PutES, 0);
46 void cTS2ES::PutTSPacket(const uint8_t *Buffer) {
50 if (Buffer[1] & 0x80) { // ts error
54 if (Buffer[1] & 0x40) { // payload start
55 if (plength == MMAX_PLENGTH - 6) {
65 if (Buffer[3] & 0x20) { // adaptation field?
67 if (off + 4 > TS_SIZE - 1)
71 instant_repack((uint8_t*)(Buffer + 4 + off), TS_SIZE - 4 - off, this);
74 cTS2ESRemux::cTS2ESRemux(int Pid):
77 m_Remux = new cTS2ES(m_ResultBuffer, &m_ResultCount);
80 cTS2ESRemux::~cTS2ESRemux() {
84 void cTS2ESRemux::PutTSPacket(int Pid, const uint8_t *Data) {
85 if (Pid == m_Pid) m_Remux->PutTSPacket(Data);