#include <lib/dvb/pmt.h>
#include <lib/dvb/specs.h>
#include <lib/dvb/dvb.h>
+#include <lib/dvb/metaparser.h>
eDVBServicePMTHandler::eDVBServicePMTHandler()
{
int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref)
{
RESULT res;
- m_channel = 0;
- m_channelStateChanged_connection = 0;
m_reference = ref;
- eDVBChannelID chid;
- ref.getChannelID(chid);
- res = m_resourceManager->allocateChannel(chid, m_channel);
- eDebug("eDVBServicePMTHandler: tune %d", res);
+
+// ref.path = "/viva.ts"; // hrhr.
+
+ /* is this a normal (non PVR) channel? */
+ if (ref.path.empty())
+ {
+ eDVBChannelID chid;
+ ref.getChannelID(chid);
+ res = m_resourceManager->allocateChannel(chid, m_channel);
+ } else
+ {
+ eDVBMetaParser parser;
+
+ if (parser.parseFile(ref.path))
+ eWarning("no .meta file found, trying original service ref.");
+ else
+ m_reference = parser.m_ref;
+
+ eDebug("alloc PVR");
+ /* allocate PVR */
+ res = m_resourceManager->allocatePVRChannel(m_pvr_channel);
+ if (res)
+ eDebug("allocatePVRChannel failed!\n");
+ m_channel = m_pvr_channel;
+ }
+
if (m_channel)
{
m_channel->connectStateChange(
m_last_channel_state = -1;
channelStateChanged(m_channel);
}
+
+ if (m_pvr_channel)
+ m_pvr_channel->playFile(ref.path.c_str());
+
return res;
}