From 09d90704f6cae05c67e08d10a46f28b2e2b0b1c7 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 7 May 2009 09:35:45 +0200 Subject: [PATCH] add support for 2nd PCR, add support for 2nd ttx pid --- lib/dvb/decoder.cpp | 15 +++++++++------ lib/dvb/decoder.h | 8 ++++---- lib/service/servicedvb.cpp | 2 +- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index bd52ea03..92652a4b 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -12,8 +12,10 @@ #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 #include #include @@ -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; } diff --git a/lib/dvb/decoder.h b/lib/dvb/decoder.h index 51be5141..3bfc70cb 100644 --- a/lib/dvb/decoder.h +++ b/lib/dvb/decoder.h @@ -80,9 +80,9 @@ class eDVBPCR: public iObject DECLARE_REF(eDVBPCR); private: ePtr 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 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(); diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index c8442161..baebcde8 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -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); -- 2.30.2