1 #include <lib/base/eerror.h>
2 #include <lib/dvb/pesparse.h>
5 ePESParser::ePESParser()
12 setStreamID(0); /* must be overridden */
15 void ePESParser::setStreamID(unsigned char id)
20 void ePESParser::processData(const __u8 *p, int len)
23 eDebug("process %d bytes of pes data, %02x, %02x, %02x, %02x, %02x, %02x", len, p[0], p[1], p[2], p[3], p[4], p[5]);
25 /* this is a state machine, handling arbitary amounts of pes-formatted data. */
28 if (m_pes_position >= 6) // length ok?
30 int max = m_pes_length - m_pes_position;
33 memcpy(m_pes_buffer + m_pes_position, p, max);
34 m_pes_position += max;
39 if (m_pes_position == m_pes_length)
41 processPESPacket(m_pes_buffer, m_pes_position);
46 if (m_pes_position < 4)
47 if (*p != m_header[m_pes_position])
49 eDebug("sync lost at %d (%02x)", m_pes_position, *p);
51 while (m_header[m_pes_position] == *p) /* guaranteed to stop at the old m_pes_position */
57 m_pes_buffer[m_pes_position++] = *p++; len--;
58 if (m_pes_position == 6)
60 m_pes_length = ((m_pes_buffer[4] << 8) | m_pes_buffer[5]) + 6;
61 eDebug("pes length: %d", m_pes_length);