git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix typo
[enigma2.git]
/
lib
/
dvb
/
radiotext.cpp
diff --git
a/lib/dvb/radiotext.cpp
b/lib/dvb/radiotext.cpp
index c165907cd095764b0a7d9d0391c5989ed5a6af58..87498da973e558b2c3170978cc567c354dbce879 100644
(file)
--- a/
lib/dvb/radiotext.cpp
+++ b/
lib/dvb/radiotext.cpp
@@
-7,6
+7,7
@@
DEFINE_REF(eDVBRadioTextParser);
eDVBRadioTextParser::eDVBRadioTextParser(iDVBDemux *demux)
:bytesread(0), ptr(0), p1(-1), p2(-1), msgPtr(0), state(0)
eDVBRadioTextParser::eDVBRadioTextParser(iDVBDemux *demux)
:bytesread(0), ptr(0), p1(-1), p2(-1), msgPtr(0), state(0)
+ ,m_abortTimer(eApp)
{
setStreamID(0xC0, 0xC0);
{
setStreamID(0xC0, 0xC0);
@@
-14,6
+15,7
@@
eDVBRadioTextParser::eDVBRadioTextParser(iDVBDemux *demux)
eDebug("failed to create PES reader!");
else
m_pes_reader->connectRead(slot(*this, &eDVBRadioTextParser::processData), m_read_connection);
eDebug("failed to create PES reader!");
else
m_pes_reader->connectRead(slot(*this, &eDVBRadioTextParser::processData), m_read_connection);
+ CONNECT(m_abortTimer.timeout, eDVBRadioTextParser::abortNonAvail);
}
#define SWAP(x) ((x<<8)|(x>>8))
}
#define SWAP(x) ((x<<8)|(x>>8))
@@
-125,6
+127,7
@@
void eDVBRadioTextParser::processPESPacket(__u8 *data, int len)
if (data[offs] == 0xFD)
{
if (data[offs] == 0xFD)
{
+ m_abortTimer.stop();
int ancillary_len = 1 + data[offs - 1];
offs -= ancillary_len;
while(offs < pos)
int ancillary_len = 1 + data[offs - 1];
offs -= ancillary_len;
while(offs < pos)
@@
-133,7
+136,7
@@
void eDVBRadioTextParser::processPESPacket(__u8 *data, int len)
}
}
}
}
-void eDVBRadioTextParser::gotAncillaryByte(__u8 data)
+
inline
void eDVBRadioTextParser::gotAncillaryByte(__u8 data)
{
buf[bytesread]=data;
bytesread+=1;
{
buf[bytesread]=data;
bytesread+=1;
@@
-259,9
+262,15
@@
void eDVBRadioTextParser::gotAncillaryByte(__u8 data)
int eDVBRadioTextParser::start(int pid)
{
int eDVBRadioTextParser::start(int pid)
{
- i
f (m_pes_reader)
- return m_pes_reader->start(pid);
- else
-
return -1
;
+ i
nt ret = -1;
+ if (m_pes_reader && !(ret = m_pes_reader->start(pid)))
+ m_abortTimer.startLongTimer(20);
+
return ret
;
}
}
+void eDVBRadioTextParser::abortNonAvail()
+{
+ eDebug("no ancillary data in audio stream... abort radiotext pes parser");
+ if (m_pes_reader)
+ m_pes_reader->stop();
+}