aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/decoder.cpp
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-06-22 21:17:20 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-06-22 21:17:20 +0000
commit8d0841a3c4d57ec102acc2a8ac09123b7ebdee27 (patch)
tree0c0f517d78c0387e0c922819b1d7c207ca125c79 /lib/dvb/decoder.cpp
parent943298497cca504a93122c6e41130c0c54da9079 (diff)
downloadenigma2-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.cpp54
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)