{
m_have_cached_program = false;
serviceEvent(eventNewProgramInfo);
- eEPGCache::getInstance()->PMTready(this);
if (!m_pvr_channel) // don't send campmt to camd.socket for playbacked services
{
+ eEPGCache::getInstance()->PMTready(this);
if(!m_ca_servicePtr)
{
int demuxes[2] = {0,0};
} else
{
eDVBMetaParser parser;
-
- if (parser.parseFile(ref.path))
+
+ int ret=parser.parseFile(ref.path);
+ if (ret || !parser.m_ref.getServiceID().get() /* incorrect sid in meta file or recordings.epl*/ )
{
eWarning("no .meta file found, trying to find PMT pid");
eDVBTSTools tstools;
return r;
}
+static inline void PyList_AppendSteal(PyObject *list, PyObject *item)
+{
+ PyList_Append(list, item);
+ Py_DECREF(item);
+}
+
PyObject *eDVBServicePMTHandler::program::createPythonObject()
{
PyObject *r = PyDict_New();
PyObject *l = PyList_New(0);
- PyList_Append(l, createTuple(0, "pat"));
+ PyList_AppendSteal(l, createTuple(0, "pat"));
if (pmtPid != -1)
- PyList_Append(l, createTuple(pmtPid, "pmt"));
+ PyList_AppendSteal(l, createTuple(pmtPid, "pmt"));
for (std::vector<eDVBServicePMTHandler::videoStream>::const_iterator
i(videoStreams.begin());
i != videoStreams.end(); ++i)
- PyList_Append(l, createTuple(i->pid, "video"));
+ PyList_AppendSteal(l, createTuple(i->pid, "video"));
for (std::vector<eDVBServicePMTHandler::audioStream>::const_iterator
i(audioStreams.begin());
i != audioStreams.end(); ++i)
- PyList_Append(l, createTuple(i->pid, "audio"));
+ PyList_AppendSteal(l, createTuple(i->pid, "audio"));
for (std::vector<eDVBServicePMTHandler::subtitleStream>::const_iterator
i(subtitleStreams.begin());
i != subtitleStreams.end(); ++i)
- PyList_Append(l, createTuple(i->pid, "subtitle"));
+ PyList_AppendSteal(l, createTuple(i->pid, "subtitle"));
- PyList_Append(l, createTuple(pcrPid, "pcr"));
+ PyList_AppendSteal(l, createTuple(pcrPid, "pcr"));
if (textPid != -1)
- PyList_Append(l, createTuple(textPid, "text"));
+ PyList_AppendSteal(l, createTuple(textPid, "text"));
PyDict_SetItemString(r, "pids", l);
return r;