CONNECT(m_event_handler.m_eit_changed, eDVBServicePlay::gotNewEvent);
m_cuesheet_changed = 0;
-
- if (m_is_pvr)
- loadCuesheet();
+ m_cutlist_enabled = 1;
}
eDVBServicePlay::~eDVBServicePlay()
two (one for decoding, one for data source), as we must be prepared
to start recording from the data demux. */
m_cue = new eCueSheet();
+
m_first_program_info = 1;
eServiceReferenceDVB &service = (eServiceReferenceDVB&)m_reference;
r = m_service_handler.tune(service, m_is_pvr, m_cue);
+
+ /* inject EIT if there is a stored one */
if (m_is_pvr)
{
std::string filename = service.path;
}
}
}
+
+ if (m_is_pvr)
+ loadCuesheet();
+
m_event(this, evStart);
m_event((iPlayableService*)this, evSeekableStatusChanged);
return 0;
if ((m_timeshift_enabled ? m_service_handler_timeshift : m_service_handler).getPVRChannel(pvr_channel))
return -1;
+ int mode = 1;
+
+ /* HACK until we have skip-AP api */
+ if ((to > 0) && (to < 100))
+ mode = 2;
+
to *= direction;
if (!m_cue)
return 0;
- m_cue->seekTo(1, to);
+ m_cue->seekTo(mode, to);
return 0;
}
return fe->readFrontendData(w);
}
+PyObject *eDVBServicePlay::getFrontendTransponderData()
+{
+ PyObject *ret=0;
+
+ eUsePtr<iDVBChannel> channel;
+ if(!m_service_handler.getChannel(channel))
+ {
+ ePtr<iDVBFrontend> fe;
+ if(!channel->getFrontend(fe))
+ ret = fe->readTransponderData();
+ }
+
+ if (!ret)
+ {
+ ret = Py_None;
+ Py_INCREF(ret);
+ }
+ return ret;
+}
+
int eDVBServicePlay::getNumberOfSubservices()
{
ePtr<eServiceEvent> evt;
}
m_cuesheet_changed = 1;
+ cutlistToCuesheet();
m_event((iPlayableService*)this, evCuesheetChanged);
}
+void eDVBServicePlay::setCutListEnable(int enable)
+{
+ m_cutlist_enabled = enable;
+ cutlistToCuesheet();
+}
+
void eDVBServicePlay::updateTimeshiftPids()
{
if (!m_record)
eDebug("cutfile not found!");
m_cuesheet_changed = 0;
+ cutlistToCuesheet();
m_event((iPlayableService*)this, evCuesheetChanged);
}
m_cuesheet_changed = 0;
}
+void eDVBServicePlay::cutlistToCuesheet()
+{
+ if (!m_cue)
+ {
+ eDebug("no cue sheet");
+ return;
+ }
+ m_cue->clear();
+
+ if (!m_cutlist_enabled)
+ {
+ m_cue->commitSpans();
+ eDebug("cutlists where disabled");
+ return;
+ }
+
+ pts_t in = 0, out = 0, length = 0;
+
+ getLength(length);
+
+ std::multiset<cueEntry>::iterator i(m_cue_entries.begin());
+
+ while (1)
+ {
+ if (i == m_cue_entries.end())
+ out = length;
+ else {
+ if (i->what == 0) /* in */
+ {
+ in = i++->where;
+ continue;
+ } else if (i->what == 1) /* out */
+ out = i++->where;
+ else /* mark */
+ {
+ i++;
+ continue;
+ }
+ }
+
+ if (in != out)
+ m_cue->addSourceSpan(in, out);
+
+ in = length;
+
+ if (i == m_cue_entries.end())
+ break;
+ }
+ m_cue->commitSpans();
+}
+
DEFINE_REF(eDVBServicePlay)
eAutoInitPtr<eServiceFactoryDVB> init_eServiceFactoryDVB(eAutoInitNumbers::service+1, "eServiceFactoryDVB");