1 #include <lib/dvb/pesparse.h>
4 ePESParser::ePESParser()
11 setStreamID(0); /* must be overridden */
14 void ePESParser::setStreamID(unsigned char id)
19 void ePESParser::processData(unsigned char *p, int len)
21 /* this is a state machine, handling arbitary amounts of pes-formatted data. */
24 if (m_pes_position >= 6) // length ok?
26 int max = m_pes_length - m_pes_position;
29 memcpy(m_pes_buffer + m_pes_position, p, max);
30 m_pes_position += max;
35 if (m_pes_position == m_pes_length)
37 processPESPacket(m_pes_buffer, m_pes_position);
42 if (m_pes_position < 4)
43 if (*p != "\x00\x00\x01\xbd"[m_pes_position])
50 m_pes_buffer[m_pes_position++] = *p++; len--;
51 if (m_pes_position == 6)
53 m_pes_length = ((m_pes_buffer[4] << 8) | m_pes_buffer[5]) + 6;