X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/2485162921817162f75d6e4fa14c700f501512ab..da4b044a4c350e307bf3e8ee5a211eda4a6ebac6:/lib/dvb/decoder.cpp diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index bd52ea03..30a80d10 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; } @@ -999,7 +1002,7 @@ int eTSMPEGDecoder::setState() } #endif - if (m_changed & changeState) + if (m_changed & (changeState|changeVideo|changeAudio)) { /* play, slowmotion, fast-forward */ int state_table[6][4] = @@ -1012,7 +1015,7 @@ int eTSMPEGDecoder::setState() /* [stateSlowMotion] = */ {1, m_ff_sm_ratio, 0} }; int *s = state_table[m_state]; - if (m_video) + if (m_changed & (changeState|changeVideo) && m_video) { m_video->setSlowMotion(s[1]); m_video->setFastForward(s[2]); @@ -1021,7 +1024,7 @@ int eTSMPEGDecoder::setState() else m_video->freeze(); } - if (m_audio) + if (m_changed & (changeState|changeAudio) && m_audio) { if (s[0]) m_audio->unfreeze();