fix calculation in calculateDifference for cable and terrestrial which should complet...
[enigma2.git] / lib / service / servicedvb.cpp
index 3487c3e64bfceda28d0cb0bb34f829a61a02bea6..124916b805f29046c191c8157d36c4a143454197 100644 (file)
@@ -246,6 +246,8 @@ RESULT eDVBPVRServiceOfflineOperations::getListOfFilenames(std::list<std::string
        res.clear();
        res.push_back(m_ref.path);
        res.push_back(m_ref.path + ".meta");
+       res.push_back(m_ref.path + ".ap");
+       res.push_back(m_ref.path + ".cuts");
        return 0;
 }
 
@@ -604,6 +606,11 @@ void eDVBServicePlay::serviceEvent(int event)
                        updateTimeshiftPids();
                if (!m_timeshift_active)
                        updateDecoder();
+               if (m_first_program_info && m_is_pvr)
+               {
+                       m_first_program_info = 0;
+                       seekTo(0);
+               }
                m_event((iPlayableService*)this, evUpdatedInfo);
                break;
        }
@@ -637,6 +644,7 @@ RESULT eDVBServicePlay::start()
                   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;
        r = m_service_handler.tune((eServiceReferenceDVB&)m_reference, m_is_pvr, m_cue);
        m_event(this, evStart);
        m_event((iPlayableService*)this, evSeekableStatusChanged);
@@ -815,7 +823,18 @@ RESULT eDVBServicePlay::getPlayPosition(pts_t &pos)
        if ((m_timeshift_enabled ? m_service_handler_timeshift : m_service_handler).getPVRChannel(pvr_channel))
                return -1;
        
-       return pvr_channel->getCurrentPosition(m_decode_demux, pos, 1);
+       int r = 0;
+
+               /* if there is a decoder, use audio or video PTS */
+       if (m_decoder)
+       {
+               r = m_decoder->getPTS(0, pos);
+               if (r)
+                       return r;
+       }
+       
+               /* fixup */
+       return pvr_channel->getCurrentPosition(m_decode_demux, pos, m_decoder ? 1 : 0);
 }
 
 RESULT eDVBServicePlay::setTrickmode(int trick)
@@ -1241,6 +1260,8 @@ void eDVBServicePlay::setCutList(PyObject *list)
                eDebug("adding %08llx, %d", pts, type);
        }
        m_cuesheet_changed = 1;
+       
+       m_event((iPlayableService*)this, evCuesheetChanged);
 }
 
 void eDVBServicePlay::updateTimeshiftPids()
@@ -1382,7 +1403,7 @@ void eDVBServicePlay::updateDecoder()
                if (m_decode_demux)
                        m_decode_demux->getMPEGDecoder(m_decoder);
                if (m_cue)
-                       m_cue->setDecodingDemux(m_decode_demux);
+                       m_cue->setDecodingDemux(m_decode_demux, m_decoder);
        }
 
        if (m_decoder)