X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/4c4eb6e44cfd920cf26155ec7303441c27e5ab31..dd29c93c225fc22f778e235c1e4a6310ad21ce6f:/lib/service/servicedvb.cpp diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 43a78bb4..a3450b89 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -1025,7 +1025,7 @@ eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref, eDVBService *serv m_subtitle_widget = 0; m_tune_state = -1; - + CONNECT(m_subtitle_sync_timer.timeout, eDVBServicePlay::checkSubtitleTiming); } @@ -1345,6 +1345,9 @@ RESULT eDVBServicePlay::seekTo(pts_t to) return -1; m_cue->seekTo(0, to); + m_dvb_subtitle_pages.clear(); + m_subtitle_pages.clear(); + return 0; } @@ -1372,6 +1375,8 @@ RESULT eDVBServicePlay::seekRelative(int direction, pts_t to) return 0; m_cue->seekTo(mode, to); + m_dvb_subtitle_pages.clear(); + m_subtitle_pages.clear(); return 0; } @@ -1694,6 +1699,8 @@ RESULT eDVBServicePlay::getTrackInfo(struct iAudioTrackInfo &info, unsigned int if (i >= program.audioStreams.size()) return -2; + info.m_pid = program.audioStreams[i].pid; + if (program.audioStreams[i].type == eDVBServicePMTHandler::audioStream::atMPEG) info.m_description = "MPEG"; else if (program.audioStreams[i].type == eDVBServicePMTHandler::audioStream::atAC3) @@ -2768,6 +2775,10 @@ void eDVBServicePlay::newSubtitlePage(const eDVBTeletextSubtitlePage &page) { if (m_subtitle_widget) { + pts_t pos = 0; + if (m_decoder) + m_decoder->getPTS(0, pos); + eDebug("got new subtitle page %lld %lld %d", pos, page.m_pts, page.m_have_pts); m_subtitle_pages.push_back(page); checkSubtitleTiming(); } @@ -2775,7 +2786,7 @@ void eDVBServicePlay::newSubtitlePage(const eDVBTeletextSubtitlePage &page) void eDVBServicePlay::checkSubtitleTiming() { -// eDebug("checkSubtitleTiming"); + eDebug("checkSubtitleTiming"); if (!m_subtitle_widget) return; while (1) @@ -2804,36 +2815,36 @@ void eDVBServicePlay::checkSubtitleTiming() if (m_decoder) m_decoder->getPTS(0, pos); -// eDebug("%lld %lld", pos, show_time); + eDebug("%lld %lld", pos, show_time); int diff = show_time - pos; if (diff < 0) { eDebug("[late (%d ms)]", -diff / 90); diff = 0; } - if (diff > 900000) - { - eDebug("[invalid]"); - diff = 0; - } +// if (diff > 900000) +// { +// eDebug("[invalid]"); +// diff = 0; +// } if (!diff) { if (type == TELETEXT) { - eDebug("display teletext subtitle page"); +// eDebug("display teletext subtitle page"); m_subtitle_widget->setPage(page); m_subtitle_pages.pop_front(); } else { - eDebug("display dvb subtitle Page"); + eDebug("display dvb subtitle Page %lld", show_time); m_subtitle_widget->setPage(dvb_page); m_dvb_subtitle_pages.pop_front(); } } else { -// eDebug("start subtitle delay %d", diff / 90); + eDebug("start subtitle delay %d", diff / 90); m_subtitle_sync_timer.start(diff / 90, 1); break; } @@ -2844,6 +2855,10 @@ void eDVBServicePlay::newDVBSubtitlePage(const eDVBSubtitlePage &p) { if (m_subtitle_widget) { + pts_t pos = 0; + if (m_decoder) + m_decoder->getPTS(0, pos); + eDebug("got new subtitle page %lld %lld", pos, p.m_show_time); m_dvb_subtitle_pages.push_back(p); checkSubtitleTiming(); }