X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb%2Fdecoder.cpp;h=ef8dadc387bdcb59b306ab573d83ebe69e836b31;hp=6845602d6f77573ca4998ec1983147b28e9359c8;hb=c352487661e7927d0068ef8fa69765055ff488d8;hpb=51e789a04f758941668b095fd8b051db2ce58281 diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index 6845602..ef8dadc 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -13,9 +13,11 @@ #define DMX_PES_VIDEO0 DMX_PES_VIDEO #define DMX_PES_AUDIO0 DMX_PES_AUDIO #define DMX_PES_PCR0 DMX_PES_PCR +#define DMX_PES_TELETEXT0 DMX_PES_TELETEXT #define DMX_PES_VIDEO1 DMX_PES_VIDEO #define DMX_PES_AUDIO1 DMX_PES_AUDIO #define DMX_PES_PCR1 DMX_PES_PCR +#define DMX_PES_TELETEXT1 DMX_PES_TELETEXT #include #include #include @@ -220,9 +222,6 @@ int eDVBAudio::startPid(int pid, int type) void eDVBAudio::stop() { -#if HAVE_DVB_API_VERSION > 2 - flush(); -#endif eDebugNoNewLine("AUDIO_STOP - "); if (::ioctl(m_fd, AUDIO_STOP) < 0) eDebug("failed (%m)"); @@ -863,7 +862,7 @@ int eTSMPEGDecoder::setState() const char *decoder_states[] = {"stop", "pause", "play", "decoderfastforward", "trickmode", "slowmotion"}; eDebug("decoder state: %s, vpid=%d, apid=%d", decoder_states[m_state], m_vpid, m_apid); - bool changed = m_changed; + int changed = m_changed; #if HAVE_DVB_API_VERSION < 3 bool checkAVSync = m_changed & (changeAudio|changeVideo|changePCR); if (m_changed & changeAudio && m_audio) @@ -901,7 +900,7 @@ int eTSMPEGDecoder::setState() } if (m_changed & changePCR) { - m_pcr = new eDVBPCR(m_demux); + m_pcr = new eDVBPCR(m_demux, m_decoder); if (m_pcr->setPid(m_pcrpid)) res = -1; } @@ -1046,9 +1045,9 @@ int eTSMPEGDecoder::setState() int eTSMPEGDecoder::m_pcm_delay=-1, eTSMPEGDecoder::m_ac3_delay=-1; -RESULT eTSMPEGDecoder::setPCMDelay(int delay) +RESULT eTSMPEGDecoder::setHwPCMDelay(int delay) { - if (m_decoder == 0 && delay != m_pcm_delay ) + if (delay != m_pcm_delay ) { FILE *fp = fopen("/proc/stb/audio/audio_delay_pcm", "w"); if (fp) @@ -1062,9 +1061,9 @@ RESULT eTSMPEGDecoder::setPCMDelay(int delay) return -1; } -RESULT eTSMPEGDecoder::setAC3Delay(int delay) +RESULT eTSMPEGDecoder::setHwAC3Delay(int delay) { - if ( m_decoder == 0 && delay != m_ac3_delay ) + if ( delay != m_ac3_delay ) { FILE *fp = fopen("/proc/stb/audio/audio_delay_bitstream", "w"); if (fp) @@ -1078,6 +1077,17 @@ RESULT eTSMPEGDecoder::setAC3Delay(int delay) return -1; } + +RESULT eTSMPEGDecoder::setPCMDelay(int delay) +{ + return m_decoder == 0 ? setHwPCMDelay(delay) : -1; +} + +RESULT eTSMPEGDecoder::setAC3Delay(int delay) +{ + return m_decoder == 0 ? setHwAC3Delay(delay) : -1; +} + eTSMPEGDecoder::eTSMPEGDecoder(eDVBDemux *demux, int decoder) : m_demux(demux), m_vpid(-1), m_vtype(-1), m_apid(-1), m_atype(-1), m_pcrpid(-1), m_textpid(-1),