git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
PluginBrowser.py: react on language changes and clear/reload pluginlist to show the...
[enigma2.git]
/
lib
/
dvb
/
radiotext.cpp
diff --git
a/lib/dvb/radiotext.cpp
b/lib/dvb/radiotext.cpp
index d4cc23580d8c0b8447f33a4f05a218cfab9737ee..e9bdd63a860052f0261cdca9897355fe392ce7ed 100644
(file)
--- a/
lib/dvb/radiotext.cpp
+++ b/
lib/dvb/radiotext.cpp
@@
-5,9
+5,9
@@
DEFINE_REF(eDVBRdsDecoder);
DEFINE_REF(eDVBRdsDecoder);
-eDVBRdsDecoder::eDVBRdsDecoder(iDVBDemux *demux)
+eDVBRdsDecoder::eDVBRdsDecoder(iDVBDemux *demux
, int type
)
:msgPtr(0), bsflag(0), qdar_pos(0), t_ptr(0), qdarmvi_show(0), state(0)
:msgPtr(0), bsflag(0), qdar_pos(0), t_ptr(0), qdarmvi_show(0), state(0)
- ,m_
abortTimer(eApp
)
+ ,m_
type(type), m_pid(-1), m_abortTimer(eTimer::create(eApp)
)
{
setStreamID(0xC0, 0xC0);
{
setStreamID(0xC0, 0xC0);
@@
-16,9
+16,11
@@
eDVBRdsDecoder::eDVBRdsDecoder(iDVBDemux *demux)
if (demux->createPESReader(eApp, m_pes_reader))
eDebug("failed to create PES reader!");
if (demux->createPESReader(eApp, m_pes_reader))
eDebug("failed to create PES reader!");
- else
+ else
if (type == 0)
m_pes_reader->connectRead(slot(*this, &eDVBRdsDecoder::processData), m_read_connection);
m_pes_reader->connectRead(slot(*this, &eDVBRdsDecoder::processData), m_read_connection);
- CONNECT(m_abortTimer.timeout, eDVBRdsDecoder::abortNonAvail);
+ else
+ m_pes_reader->connectRead(slot(*this, &eDVBRdsDecoder::gotAncillaryData), m_read_connection);
+ CONNECT(m_abortTimer->timeout, eDVBRdsDecoder::abortNonAvail);
}
eDVBRdsDecoder::~eDVBRdsDecoder()
}
eDVBRdsDecoder::~eDVBRdsDecoder()
@@
-139,7
+141,6
@@
void eDVBRdsDecoder::removeFromPictureMask(int id)
void eDVBRdsDecoder::processPESPacket(__u8 *data, int len)
{
int pos=9+data[8];// skip pes header
void eDVBRdsDecoder::processPESPacket(__u8 *data, int len)
{
int pos=9+data[8];// skip pes header
- int cnt=0;
while (pos < len)
{
while (pos < len)
{
@@
-151,7
+152,7
@@
void eDVBRdsDecoder::processPESPacket(__u8 *data, int len)
int channel = mode == 3 ? 1 : 2;
int id = (data[pos + 1] >> 3) & 1;
int emphasis_bit = data[pos + 3] & 3;
int channel = mode == 3 ? 1 : 2;
int id = (data[pos + 1] >> 3) & 1;
int emphasis_bit = data[pos + 3] & 3;
- int protection_bit = data[pos + 1] & 1;
+
//
int protection_bit = data[pos + 1] & 1;
int rate = -1;
int sample_freq = -1;
int layer = -1;
int rate = -1;
int sample_freq = -1;
int layer = -1;
@@
-194,10
+195,10
@@
void eDVBRdsDecoder::processPESPacket(__u8 *data, int len)
if (data[offs] == 0xFD)
{
if (data[offs] == 0xFD)
{
- m_abortTimer
.
stop();
+ m_abortTimer
->
stop();
int ancillary_len = 1 + data[offs - 1];
offs -= ancillary_len;
int ancillary_len = 1 + data[offs - 1];
offs -= ancillary_len;
- gotAncillaryData(data+offs, ancillary_len);
+ gotAncillaryData(data+offs, ancillary_len
-1
);
}
}
}
}
}
}
@@
-311,13
+312,19
@@
void eDVBRdsDecoder::process_qdar(unsigned char *buf)
}
}
}
}
-
inline void eDVBRdsDecoder::gotAncillaryData(
__u8 *buf, int len)
+
void eDVBRdsDecoder::gotAncillaryData(const
__u8 *buf, int len)
{
{
- int cnt=buf[--len];
- while ( cnt-- > 0 )
+ if (len <= 0)
+ return;
+ int pos = m_type ? 0 : len-1;
+ while ( len )
{
{
- unsigned char c = buf[--len];
-
+ unsigned char c = buf[pos];
+
+ pos += m_type ? 1 : -1;
+
+ --len;
+
if (bsflag == 1) // byte stuffing
{
bsflag=2;
if (bsflag == 1) // byte stuffing
{
bsflag=2;
@@
-639,8
+646,9
@@
std::string eDVBRdsDecoder::getRassPicture(int page, int subpage)
int eDVBRdsDecoder::start(int pid)
{
int ret = -1;
int eDVBRdsDecoder::start(int pid)
{
int ret = -1;
- if (m_pes_reader && !(ret = m_pes_reader->start(pid)))
- m_abortTimer.startLongTimer(20);
+ if (m_pes_reader && !(ret = m_pes_reader->start(pid)) && m_type == 0)
+ m_abortTimer->startLongTimer(20);
+ m_pid = pid;
return ret;
}
return ret;
}