return 0;
}
+ int prio_order = eDVBFrontend::getTypePriorityOrder();
int cur=0;
eDVBChannelID chid, chid_ignore;
((const eServiceReferenceDVB&)ignore).getChannelID(chid_ignore);
for (std::list<eServiceReference>::iterator it(bouquet->m_services.begin()); it != bouquet->m_services.end(); ++it)
{
+ static unsigned char prio_map[6][3] = {
+ { 3, 2, 1 }, // -S -C -T
+ { 3, 1, 2 }, // -S -T -C
+ { 2, 3, 1 }, // -C -S -T
+ { 1, 3, 2 }, // -C -T -S
+ { 1, 2, 3 }, // -T -C -S
+ { 2, 1, 3 } // -T -S -C
+ };
((const eServiceReferenceDVB&)*it).getChannelID(chid);
int tmp=res->canAllocateChannel(chid, chid_ignore);
+ switch(tmp)
+ {
+ case 0:
+ break;
+ case 30000: // cached DVB-T channel
+ case 1: // DVB-T frontend
+ tmp = prio_map[prio_order][2];
+ break;
+ case 40000: // cached DVB-C channel
+ case 2:
+ tmp = prio_map[prio_order][1];
+ break;
+ default: // DVB-S
+ tmp = prio_map[prio_order][0];
+ break;
+ }
if (tmp > cur)
{
m_playable_service = *it;
m_subtitle_widget = 0;
m_tune_state = -1;
-
+
CONNECT(m_subtitle_sync_timer.timeout, eDVBServicePlay::checkSubtitleTiming);
}
anything in the best case, or destroy the default setting in
case the real default is not yet available.)
*/
- if (m_dvb_service && !m_is_pvr && (i != -1))
+ if (m_dvb_service && !m_is_pvr && ((i != -1)
+ || ((m_dvb_service->getCacheEntry(eDVBService::cAPID) == -1) && (m_dvb_service->getCacheEntry(eDVBService::cAC3PID)==-1))))
{
if (apidtype == eDVBAudio::aMPEG)
{
{
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();
}
void eDVBServicePlay::checkSubtitleTiming()
{
-// eDebug("checkSubtitleTiming");
+ eDebug("checkSubtitleTiming");
if (!m_subtitle_widget)
return;
while (1)
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);
+ eDebug("[late (%d ms)]", -diff / 90);
diff = 0;
}
// if (diff > 900000)
// diff = 0;
// }
- if (!diff)
+ if ((diff/90)<20)
{
if (type == TELETEXT)
{
-// eDebug("display teletext subtitle page");
+ eDebug("display teletext subtitle page %lld", show_time);
m_subtitle_widget->setPage(page);
m_subtitle_pages.pop_front();
}
else
{
-// eDebug("display dvb subtitle Page %lld", show_time);
+ 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;
}
{
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();
}