diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-06-22 21:17:20 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2006-06-22 21:17:20 +0000 |
| commit | 8d0841a3c4d57ec102acc2a8ac09123b7ebdee27 (patch) | |
| tree | 0c0f517d78c0387e0c922819b1d7c207ca125c79 /lib/dvb/decoder.cpp | |
| parent | 943298497cca504a93122c6e41130c0c54da9079 (diff) | |
| download | enigma2-8d0841a3c4d57ec102acc2a8ac09123b7ebdee27.tar.gz enigma2-8d0841a3c4d57ec102acc2a8ac09123b7ebdee27.zip | |
add possibility to set per service ac3/pcm delay (not yet via gui)
to set a pcm or ac3 delay for a specific service edit your servicelist
(/etc/enigma2/lamedb)
example for pcm delay:
6dca:00c00000:044d:0001:1:0
Das Erste
p:ARD,c:000065,c:010066,c:020068,c:030065,c:060001,c:080060 <-- 0x60 = 96ms PCM delay
for AC3 delay set, c:07xxxx
Diffstat (limited to 'lib/dvb/decoder.cpp')
| -rw-r--r-- | lib/dvb/decoder.cpp | 54 |
1 files changed, 50 insertions, 4 deletions
diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index 362289f3..a05c837c 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -530,6 +530,37 @@ int eTSMPEGDecoder::setState() return res; } +int eTSMPEGDecoder::m_pcm_delay=-1, + eTSMPEGDecoder::m_ac3_delay=-1; + +RESULT eTSMPEGDecoder::setPCMDelay(int delay) +{ + if (m_decoder == 0 && delay != m_pcm_delay ) + { + FILE *fp = fopen("/proc/stb/audio/audio_delay_pcm", "w"); + if (fp) + { + fprintf(fp, "%x", delay*90); + fclose(fp); + m_pcm_delay = delay; + } + } +} + +RESULT eTSMPEGDecoder::setAC3Delay(int delay) +{ + if ( m_decoder == 0 && delay != m_ac3_delay ) + { + FILE *fp = fopen("/proc/stb/audio/audio_delay_bitstream", "w"); + if (fp) + { + fprintf(fp, "%x", delay*90); + fclose(fp); + m_ac3_delay = delay; + } + } +} + eTSMPEGDecoder::eTSMPEGDecoder(eDVBDemux *demux, int decoder): m_demux(demux), m_changed(0), m_decoder(decoder) { demux->connectEvent(slot(*this, &eTSMPEGDecoder::demux_event), m_demux_event); @@ -565,15 +596,30 @@ RESULT eTSMPEGDecoder::setAudioPID(int apid, int type) return 0; } +int eTSMPEGDecoder::m_audio_channel = -1; + RESULT eTSMPEGDecoder::setAudioChannel(int channel) { - if (m_audio) - m_audio->setChannel(channel); - else - eDebug("eTSMPEGDecoder::setAudioChannel but no audio decoder exist"); + if (channel == -1) + channel = ac_stereo; + if (m_decoder == 0 && m_audio_channel != channel) + { + if (m_audio) + { + m_audio->setChannel(channel); + m_audio_channel=channel; + } + else + eDebug("eTSMPEGDecoder::setAudioChannel but no audio decoder exist"); + } return 0; } +int eTSMPEGDecoder::getAudioChannel() +{ + return m_audio_channel == -1 ? ac_stereo : m_audio_channel; +} + RESULT eTSMPEGDecoder::setSyncPCR(int pcrpid) { if (m_pcrpid != pcrpid) |
