add support for 2nd PCR, add support for 2nd ttx pid
authorghost <andreas.monzner@multimedia-labs.de>
Thu, 7 May 2009 07:35:45 +0000 (09:35 +0200)
committerghost <andreas.monzner@multimedia-labs.de>
Thu, 7 May 2009 07:35:45 +0000 (09:35 +0200)
lib/dvb/decoder.cpp
lib/dvb/decoder.h
lib/service/servicedvb.cpp

index bd52ea034051604202a748c756cca50748613a6b..92652a4bb45f582e39d707dfdd1bc1467df61b2d 100644 (file)
 #define dmxPesFilterParams dmx_pes_filter_params
 #define DMX_PES_VIDEO0 DMX_PES_VIDEO
 #define DMX_PES_AUDIO0 DMX_PES_AUDIO
+#define DMX_PES_PCR0 DMX_PES_PCR
 #define DMX_PES_VIDEO1 DMX_PES_VIDEO
 #define DMX_PES_AUDIO1 DMX_PES_AUDIO
+#define DMX_PES_PCR1 DMX_PES_PCR
 #include <ost/dmx.h>
 #include <ost/video.h>
 #include <ost/audio.h>
@@ -686,7 +688,7 @@ int eDVBVideo::getFrameRate()
 
 DEFINE_REF(eDVBPCR);
 
-eDVBPCR::eDVBPCR(eDVBDemux *demux): m_demux(demux)
+eDVBPCR::eDVBPCR(eDVBDemux *demux, int dev): m_demux(demux), m_dev(dev)
 {
        char filename[128];
 #if HAVE_DVB_API_VERSION < 3
@@ -745,7 +747,7 @@ int eDVBPCR::startPid(int pid)
        pes.pid      = pid;
        pes.input    = DMX_IN_FRONTEND;
        pes.output   = DMX_OUT_DECODER;
-       pes.pes_type = DMX_PES_PCR;
+       pes.pes_type = m_dev ? DMX_PES_PCR1 : DMX_PES_PCR0; /* FIXME */
        pes.flags    = 0;
        eDebugNoNewLine("DMX_SET_PES_FILTER(0x%02x) - pcr - ", pid);
        if (::ioctl(m_fd_demux, DMX_SET_PES_FILTER, &pes) < 0)
@@ -782,7 +784,8 @@ eDVBPCR::~eDVBPCR()
 
 DEFINE_REF(eDVBTText);
 
-eDVBTText::eDVBTText(eDVBDemux *demux): m_demux(demux)
+eDVBTText::eDVBTText(eDVBDemux *demux, int dev)
+    :m_demux(demux), m_dev(dev)
 {
        char filename[128];
 #if HAVE_DVB_API_VERSION < 3
@@ -804,7 +807,7 @@ int eDVBTText::startPid(int pid)
        pes.pid      = pid;
        pes.input    = DMX_IN_FRONTEND;
        pes.output   = DMX_OUT_DECODER;
-       pes.pes_type = DMX_PES_TELETEXT;
+       pes.pes_type = m_dev ? DMX_PES_TELETEXT1 : DMX_PES_TELETEXT0; // FIXME
        pes.flags    = 0;
 
        eDebugNoNewLine("DMX_SET_PES_FILTER(0x%02x) - ttx - ", pid);
@@ -960,7 +963,7 @@ int eTSMPEGDecoder::setState()
        {
                if ((m_pcrpid >= 0) && (m_pcrpid < 0x1FFF))
                {
-                       m_pcr = new eDVBPCR(m_demux);
+                       m_pcr = new eDVBPCR(m_demux, m_decoder);
                        if (m_pcr->startPid(m_pcrpid))
                                res = -1;
                }
@@ -991,7 +994,7 @@ int eTSMPEGDecoder::setState()
        {
                if ((m_textpid >= 0) && (m_textpid < 0x1FFF) && !nott)
                {
-                       m_text = new eDVBTText(m_demux);
+                       m_text = new eDVBTText(m_demux, m_decoder);
                        if (m_text->startPid(m_textpid))
                                res = -1;
                }
index 51be5141d1b27b624b6d0d00830e68a36ec22a24..3bfc70cb87c92988fba8831880a782f5d9559ad3 100644 (file)
@@ -80,9 +80,9 @@ class eDVBPCR: public iObject
        DECLARE_REF(eDVBPCR);
 private:
        ePtr<eDVBDemux> m_demux;
-       int m_fd_demux;
+       int m_fd_demux, m_dev;
 public:
-       eDVBPCR(eDVBDemux *demux);
+       eDVBPCR(eDVBDemux *demux, int dev);
 #if HAVE_DVB_API_VERSION < 3
        int setPid(int pid);
        int startPid();
@@ -98,9 +98,9 @@ class eDVBTText: public iObject
        DECLARE_REF(eDVBTText);
 private:
        ePtr<eDVBDemux> m_demux;
-       int m_fd_demux;
+       int m_fd_demux, m_dev;
 public:
-       eDVBTText(eDVBDemux *demux);
+       eDVBTText(eDVBDemux *demux, int dev);
        int startPid(int pid);
        void stop();
        virtual ~eDVBTText();
index c8442161e29fe6ec9606148d7990239619fc8e75..baebcde83db93a2c60af737dbeaca78f11253630 100644 (file)
@@ -2370,7 +2370,7 @@ void eDVBServicePlay::updateDecoder()
                m_decoder->setVideoPID(vpid, vpidtype);
                selectAudioStream();
 
-               if (!(m_is_pvr || m_timeshift_active || !m_is_primary))
+               if (!(m_is_pvr || m_timeshift_active /*|| !m_is_primary*/))
                        m_decoder->setSyncPCR(pcrpid);
                else
                        m_decoder->setSyncPCR(-1);