X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d1e450f95a9b79b144a00dcf0f9356ff6cb9bfb2..7af17e298fb338d477f2d93ab230e395c656ea9f:/lib/dvb/radiotext.cpp diff --git a/lib/dvb/radiotext.cpp b/lib/dvb/radiotext.cpp index eff40e92..9f8cf5f0 100644 --- a/lib/dvb/radiotext.cpp +++ b/lib/dvb/radiotext.cpp @@ -7,17 +7,18 @@ DEFINE_REF(eDVBRdsDecoder); eDVBRdsDecoder::eDVBRdsDecoder(iDVBDemux *demux) :msgPtr(0), bsflag(0), qdar_pos(0), t_ptr(0), qdarmvi_show(0), state(0) - ,m_abortTimer(eApp) + ,m_abortTimer(eTimer::create(eApp)) { setStreamID(0xC0, 0xC0); memset(rass_picture_mask, 0, sizeof(rass_picture_mask)); + memset(rtp_item, 0, sizeof(rtp_item)); if (demux->createPESReader(eApp, m_pes_reader)) eDebug("failed to create PES reader!"); else m_pes_reader->connectRead(slot(*this, &eDVBRdsDecoder::processData), m_read_connection); - CONNECT(m_abortTimer.timeout, eDVBRdsDecoder::abortNonAvail); + CONNECT(m_abortTimer->timeout, eDVBRdsDecoder::abortNonAvail); } eDVBRdsDecoder::~eDVBRdsDecoder() @@ -138,7 +139,6 @@ void eDVBRdsDecoder::removeFromPictureMask(int id) void eDVBRdsDecoder::processPESPacket(__u8 *data, int len) { int pos=9+data[8];// skip pes header - int cnt=0; while (pos < len) { @@ -150,7 +150,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 protection_bit = data[pos + 1] & 1; + //int protection_bit = data[pos + 1] & 1; int rate = -1; int sample_freq = -1; int layer = -1; @@ -193,7 +193,7 @@ void eDVBRdsDecoder::processPESPacket(__u8 *data, int len) if (data[offs] == 0xFD) { - m_abortTimer.stop(); + m_abortTimer->stop(); int ancillary_len = 1 + data[offs - 1]; offs -= ancillary_len; gotAncillaryData(data+offs, ancillary_len); @@ -562,14 +562,20 @@ inline void eDVBRdsDecoder::gotAncillaryData(__u8 *buf, int len) rtp_len[1] = 0x1f & rtp_buf[4]; unsigned char rtplus_osd_tmp[64]; - - memcpy(rtp_item[rtp_typ[0]],lastmessage+rtp_start[0],rtp_len[0]+1); - rtp_item[rtp_typ[0]][rtp_len[0]+1]=0; + + if (rtp_start[0] < 66 && (rtp_len[0]+rtp_start[0]) < 66) + { + memcpy(rtp_item[rtp_typ[0]],lastmessage+rtp_start[0],rtp_len[0]+1); + rtp_item[rtp_typ[0]][rtp_len[0]+1]=0; + } if (rtp_typ[0] != rtp_typ[1]) { - memcpy(rtp_item[rtp_typ[1]],lastmessage+rtp_start[1],rtp_len[1]+1); - rtp_item[rtp_typ[1]][rtp_len[1]+1]=0; + if (rtp_start[1] < 66 && (rtp_len[1]+rtp_start[1]) < 66) + { + memcpy(rtp_item[rtp_typ[1]],lastmessage+rtp_start[1],rtp_len[1]+1); + rtp_item[rtp_typ[1]][rtp_len[1]+1]=0; + } } // main RTPlus item_types used by the radio stations: @@ -633,7 +639,7 @@ int eDVBRdsDecoder::start(int pid) { int ret = -1; if (m_pes_reader && !(ret = m_pes_reader->start(pid))) - m_abortTimer.startLongTimer(20); + m_abortTimer->startLongTimer(20); return ret; }