git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
allow switching between simple and complex (multiple) titleset authoring mode, move...
[enigma2.git]
/
lib
/
dvb
/
pesparse.cpp
diff --git
a/lib/dvb/pesparse.cpp
b/lib/dvb/pesparse.cpp
index 30e05894be105070478b805d3614b3a8ad084f92..b0352fe60faa7f20e72bab1b8c881fe0dc04f320 100644
(file)
--- a/
lib/dvb/pesparse.cpp
+++ b/
lib/dvb/pesparse.cpp
@@
-12,15
+12,14
@@
ePESParser::ePESParser()
setStreamID(0); /* must be overridden */
}
setStreamID(0); /* must be overridden */
}
-void ePESParser::setStreamID(unsigned char id)
+void ePESParser::setStreamID(unsigned char id
, unsigned char id_mask
)
{
m_header[3] = id;
{
m_header[3] = id;
+ m_stream_id_mask = id_mask;
}
void ePESParser::processData(const __u8 *p, int len)
{
}
void ePESParser::processData(const __u8 *p, int len)
{
- int i;
-
/* this is a state machine, handling arbitary amounts of pes-formatted data. */
while (len)
{
/* this is a state machine, handling arbitary amounts of pes-formatted data. */
while (len)
{
@@
-43,16
+42,21
@@
void ePESParser::processData(const __u8 *p, int len)
} else
{
if (m_pes_position < 4)
} else
{
if (m_pes_position < 4)
- if (*p != m_header[m_pes_position])
+ {
+ unsigned char ch = *p;
+ if (m_pes_position == 3)
+ ch &= m_stream_id_mask;
+ if (ch != m_header[m_pes_position])
{
// eDebug("sync lost at %d (%02x)", m_pes_position, *p);
m_pes_position = 0;
{
// eDebug("sync lost at %d (%02x)", m_pes_position, *p);
m_pes_position = 0;
- while (m_header[m_pes_position] ==
*p
) /* guaranteed to stop at the old m_pes_position */
+ while (m_header[m_pes_position] ==
ch
) /* guaranteed to stop at the old m_pes_position */
m_pes_position++;
p++;
len--;
continue;
}
m_pes_position++;
p++;
len--;
continue;
}
+ }
m_pes_buffer[m_pes_position++] = *p++; len--;
if (m_pes_position == 6)
{
m_pes_buffer[m_pes_position++] = *p++; len--;
if (m_pes_position == 6)
{