1 from AC3utils import AC3, PCM, AC3PCM, lFileDelay, dec2hex, hex2dec
2 from Components.config import config
3 from enigma import eTimer
4 from Tools.ISO639 import LanguageCodes
6 import NavigationInstance
9 def __init__(self, session):
11 self.iServiceReference = None
12 self.iAudioDelay = None
13 self.channelAudio = AC3
15 self.bIsRecording = False
17 # Current audio- delay
20 self.getAudioInformation()
22 # Current value for movie start behaviour
23 self.movieStart = config.usage.on_movie_start.getValue()
26 self.iService = NavigationInstance.instance.getCurrentService()
27 self.iServiceReference = NavigationInstance.instance.getCurrentlyPlayingServiceReference()
28 self.iAudioDelay = self.iService and self.iService.audioDelay()
29 self.iSeek = self.iService and self.iService.seek()
31 def deleteAudio(self):
33 self.iAudioDelay = None
36 def setChannelAudio(self, sAudio):
37 self.channelAudio = sAudio
39 def activateDelay(self):
41 if self.iService == None:
44 if self.iServiceReference is not None:
45 lCurPosition = self.cueGetCurrentPosition()
47 if self.whichAudio == self.channelAudio:
48 config.usage.on_movie_start.setValue("beginning")
49 NavigationInstance.instance.stopService()
50 NavigationInstance.instance.playService(self.iServiceReference)
51 config.usage.on_movie_start.setValue(self.movieStart)
52 if lCurPosition is not None:
53 self.lCurPosition = lCurPosition
55 self.timer.timeout.get().append(self.seekAfterWait)
56 self.timer.start(400, False)
60 def seekAfterWait(self):
63 if self.iSeek is not None:
64 self.iSeek.seekTo(self.lCurPosition)
67 def cueGetCurrentPosition(self):
68 if self.iSeek is None:
70 r = self.iSeek.getPlayPosition()
75 def getLamedbDelay(self, sAudio):
77 if self.iService == None:
81 if self.iAudioDelay is not None:
83 iDelay = self.iAudioDelay.getAC3Delay()
85 iDelay = self.iAudioDelay.getPCMDelay()
88 if bInitialized == True:
92 def getFileDelay(self, sAudio):
93 sFileName = lFileDelay[sAudio]
94 if os.path.exists(sFileName) == True:
95 delayfile = open(sFileName,"r")
97 delay = delayfile.readline()
99 iDelay = hex2dec(delay)/90
104 def setLamedbDelay(self, sAudio, iDelay):
106 if self.iAudioDelay is not None:
110 self.iAudioDelay.setAC3Delay(iDelay)
112 self.iAudioDelay.setPCMDelay(iDelay)
115 def setFileDelay(self, sAudio, iDelay):
116 hDelay = dec2hex(iDelay*90)
117 sFileName = lFileDelay[sAudio]
118 if os.path.exists(sFileName) == True:
119 delayfile = open(lFileDelay[sAudio],"w")
120 delayfile.write("%s\0" % hDelay)
124 def getAudioInformation(self):
126 if self.iService == None:
130 lCurPosition = self.cueGetCurrentPosition()
131 if lCurPosition is not None:
132 self.bIsRecording = True
133 oAudioTracks = self.iService and self.iService.audioTracks()
134 n = oAudioTracks and oAudioTracks.getNumberOfTracks() or 0
136 self.selectedAudioIndex = oAudioTracks.getCurrentTrack()
139 i = oAudioTracks.getTrackInfo(x)
140 language = i.getLanguage()
141 description = i.getDescription()
142 if LanguageCodes.has_key(language):
143 language = LanguageCodes[language][0]
145 description += " (" + language + ")"
147 description = language
149 tlist.append((description, x))
150 if x == self.selectedAudioIndex:
151 if description.find("AC3") != -1 or description.find("DTS") != -1:
152 self.whichAudio = AC3
153 self.channelAudio = AC3
155 self.whichAudio = PCM
156 self.channelAudio = PCM
157 self.selectedAudioInfo = (description, x)
158 tlist.sort(key=lambda x: x[0])
160 self.audioTrackList = tlist
161 for sAudio in AC3PCM:
162 self.lamedbDelay[sAudio]=self.getLamedbDelay(sAudio)
164 if bInitialized == True: