From 8654739391001e76f8a6e571537f8b0f42999294 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 17 Feb 2006 16:59:54 +0000 Subject: [PATCH] fix relative jumps --- lib/dvb/dvb.cpp | 15 ++++++++++++--- lib/dvb/idvb.h | 4 +++- lib/service/servicedvb.cpp | 2 +- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 4a3adf5..a126aae 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -766,8 +766,16 @@ void eDVBChannel::getNextSourceSpan(off_t current_offset, size_t bytes_read, off if (relative) { pts_t now; - /* we're using the decoder's timestamp here. this - won't work for radio (ouch). */ + if (!m_cue->m_decoder) + { + eDebug("no decoder - can't seek relative"); + continue; + } + if (m_cue->m_decoder->getPTS(0, now)) + { + eDebug("decoder getPTS failed, can't seek relative"); + continue; + } if (getCurrentPosition(m_cue->m_decoding_demux, now, 1)) { eDebug("seekTo: getCurrentPosition failed!"); @@ -1092,9 +1100,10 @@ void eCueSheet::setSkipmode(const pts_t &ratio) m_event(evtSkipmode); } -void eCueSheet::setDecodingDemux(iDVBDemux *demux) +void eCueSheet::setDecodingDemux(iDVBDemux *demux, iTSMPEGDecoder *decoder) { m_decoding_demux = demux; + m_decoder = decoder; } RESULT eCueSheet::connectEvent(const Slot1 &event, ePtr &connection) diff --git a/lib/dvb/idvb.h b/lib/dvb/idvb.h index 2f9d7d9..2090d18 100644 --- a/lib/dvb/idvb.h +++ b/lib/dvb/idvb.h @@ -426,6 +426,7 @@ public: typedef long long pts_t; class iFilePushScatterGather; +class iTSMPEGDecoder; /* note that a cue sheet describes the logical positions. thus everything is specified in pts and not file positions */ @@ -444,7 +445,7 @@ public: void addSourceSpan(const pts_t &begin, const pts_t &end); void setSkipmode(const pts_t &ratio); /* 90000 is 1:1 */ - void setDecodingDemux(iDVBDemux *demux); + void setDecodingDemux(iDVBDemux *demux, iTSMPEGDecoder *decoder); /* frontend and backend */ eSingleLock m_lock; @@ -458,6 +459,7 @@ public: pts_t m_skipmode_ratio; Signal1 m_event; ePtr m_decoding_demux; + ePtr m_decoder; }; class iDVBPVRChannel: public iDVBChannel diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 5f5aae6..248a548 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -1399,7 +1399,7 @@ void eDVBServicePlay::updateDecoder() if (m_decode_demux) m_decode_demux->getMPEGDecoder(m_decoder); if (m_cue) - m_cue->setDecodingDemux(m_decode_demux); + m_cue->setDecodingDemux(m_decode_demux, m_decoder); } if (m_decoder) -- 2.7.4