- add tstools to evaluate PTS values from TS files for playback
[enigma2.git] / lib / dvb / pmt.cpp
index c1ac5dd8ff345a5bfbcfcbd038df0837e09a7f91..d80897b95e48754245c45d624fc9585e5e314f4c 100644 (file)
@@ -2,6 +2,7 @@
 #include <lib/dvb/pmt.h>
 #include <lib/dvb/specs.h>
 #include <lib/dvb/dvb.h>
+#include <lib/dvb/metaparser.h>
 
 eDVBServicePMTHandler::eDVBServicePMTHandler()
 {
@@ -131,13 +132,33 @@ int eDVBServicePMTHandler::getDemux(ePtr<iDVBDemux> &demux)
 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(
@@ -146,5 +167,9 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref)
                m_last_channel_state = -1;
                channelStateChanged(m_channel);
        }
+       
+       if (m_pvr_channel)
+               m_pvr_channel->playFile(ref.path.c_str());
+       
        return res;
 }