From: Torsten Link Date: Tue, 28 Jul 2009 23:26:11 +0000 (+0000) Subject: Allow negative delays X-Git-Url: http://code.vuplus.com/gitweb/?a=commitdiff_plain;h=9913ce323333a4a5f733b9fe0235daaea81461b3;p=vuplus_dvbapp-plugin Allow negative delays --- diff --git a/ac3lipsync/.project b/ac3lipsync/.project new file mode 100644 index 0000000..9dd17c1 --- /dev/null +++ b/ac3lipsync/.project @@ -0,0 +1,11 @@ + + + ac3lipsync + + + + + + + + diff --git a/ac3lipsync/img/AC3LipSyncBar.png b/ac3lipsync/img/AC3LipSyncBar.png index e23d347..e21bffe 100644 Binary files a/ac3lipsync/img/AC3LipSyncBar.png and b/ac3lipsync/img/AC3LipSyncBar.png differ diff --git a/ac3lipsync/img/AC3LipSyncBarBG.png b/ac3lipsync/img/AC3LipSyncBarBG.png index e16dd71..1f51835 100644 Binary files a/ac3lipsync/img/AC3LipSyncBarBG.png and b/ac3lipsync/img/AC3LipSyncBarBG.png differ diff --git a/ac3lipsync/po/AC3LipSync.pot b/ac3lipsync/po/AC3LipSync.pot index 8ea8597..ee78d87 100644 --- a/ac3lipsync/po/AC3LipSync.pot +++ b/ac3lipsync/po/AC3LipSync.pot @@ -1,159 +1,164 @@ msgid "" msgstr "" -"Project-Id-Version: enigma2 - AC3lipsync\n" +"Project-Id-Version: AC3LipSync\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-05 00:27+0100\n" +"POT-Creation-Date: 2009-07-29 01:13+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Poedit-Basepath: .\n" -"X-Poedit-SearchPath-0: L:\\Dreambox\\Eclipse\\enigma2-plugins\\ac3lipsync\\src\n" +"X-Poedit-Basepath: L:\\Dreambox\\Eclipse\\ac3lipsync\\\n" +"X-Poedit-SearchPath-0: src\n" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/plugin.py:30 -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/plugin.py:34 -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/plugin.py:36 +#: src/plugin.py:28 +#: src/plugin.py:32 +#: src/plugin.py:34 msgid "AC3 Lip Sync" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/plugin.py:34 -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/plugin.py:36 +#: src/plugin.py:32 +#: src/plugin.py:34 msgid "sets the AC3 audio Delay (LipSync)" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/plugin.py:35 +#: src/plugin.py:33 msgid "AC3 Lip Sync Setup" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/plugin.py:35 +#: src/plugin.py:33 msgid "Setup for the AC3 Lip Sync Plugin" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:72 -msgid "Switch to user key- delays" -msgstr "" - -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:73 -msgid "Switch to calculated key- delays" -msgstr "" - -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:81 -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:84 -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:141 -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:305 -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:309 -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:310 +#: src/AC3main.py:82 +#: src/AC3main.py:85 +#: src/AC3main.py:88 +#: src/AC3main.py:146 +#: src/AC3main.py:152 +#: src/AC3main.py:172 +#: src/AC3main.py:296 +#: src/AC3main.py:298 +#: src/AC3main.py:302 +#: src/AC3main.py:303 #, python-format msgid "%i ms" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:82 +#: src/AC3main.py:83 +#: src/AC3main.py:89 +#: src/AC3main.py:173 #, python-format msgid "%s delay:" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:83 +#: src/AC3main.py:84 #, python-format msgid "%s:" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:87 +#: src/AC3main.py:92 msgid "Channel audio:" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:92 -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3setup.py:58 +#: src/AC3main.py:97 +#: src/AC3setup.py:58 msgid "Cancel" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:93 +#: src/AC3main.py:98 msgid "OK" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:94 +#: src/AC3main.py:99 msgid "Switch audio" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:98 -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3setup.py:59 +#: src/AC3main.py:103 +#: src/AC3setup.py:59 msgid "Save" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:215 +#: src/AC3main.py:221 #, python-format msgid "Save current %(audio)s delay of %(delay)i ms to key" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:219 +#: src/AC3main.py:224 msgid "Menu" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:228 -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:288 +#: src/AC3main.py:231 +#: src/AC3main.py:285 +#: src/AC3main.py:346 msgid "Invalid selection" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:247 -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:248 +#: src/AC3main.py:244 +#: src/AC3main.py:245 #, python-format msgid "Save %s delay" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:249 +#: src/AC3main.py:246 msgid "Save both delays" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:252 +#: src/AC3main.py:249 msgid "Which delays do you want to set" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:284 +#: src/AC3main.py:281 #, python-format msgid "Saved %(audio)s value: %(delay)i ms" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:326 -msgid "Select the key you want to set" +#: src/AC3main.py:321 +#, python-format +msgid "Select the key you want to set to %i ms" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:332 +#: src/AC3main.py:327 #, python-format -msgid "Key %(key)i (current value: %(value)i ms)" +msgid "Key %(key)s (current value: %(value)i ms)" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:337 +#: src/AC3main.py:332 msgid "Setting key canceled" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3main.py:341 +#: src/AC3main.py:344 #, python-format -msgid "%(Key)s successfully set to %(delay)i ms" +msgid "Key %(Key)s successfully set to %(delay)i ms" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3setup.py:42 -msgid "Minimum delay" +#: src/AC3setup.py:42 +msgid "Outer Bound (+/-)" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3setup.py:43 -msgid "Maximum delay" -msgstr "" - -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3setup.py:44 +#: src/AC3setup.py:43 msgid "Step in ms for arrow keys" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3setup.py:45 +#: src/AC3setup.py:44 msgid "Wait time in ms before activation:" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3setup.py:49 +#: src/AC3setup.py:45 +#: src/AC3setup.py:46 +#: src/AC3setup.py:47 +#, python-format +msgid "Step in ms for keys '%s'" +msgstr "" + +#: src/AC3setup.py:48 +#: src/AC3setup.py:49 +#: src/AC3setup.py:50 #, python-format msgid "Step in ms for key %i" msgstr "" -#: L:\Dreambox\Eclipse\enigma2-plugins\ac3lipsync\src/AC3setup.py:60 -msgid "Recalculate..." +#: src/AC3setup.py:60 +msgid " " msgstr "" diff --git a/ac3lipsync/po/de.po b/ac3lipsync/po/de.po index a2ddf0f..f841d32 100644 --- a/ac3lipsync/po/de.po +++ b/ac3lipsync/po/de.po @@ -2,173 +2,185 @@ msgid "" msgstr "" "Project-Id-Version: enigma2 - AC3lipsync\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-03-05 00:33+0100\n" +"POT-Creation-Date: 2009-07-29 01:17+0100\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Tode \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Poedit-Basepath: L:\\Dreambox\\Eclipse\\enigma2-plugins\\ac3lipsync\\po\n" +"X-Poedit-Basepath: L:\\Dreambox\\Eclipse\\ac3lipsync\\po\n" "X-Poedit-Language: German\n" "X-Poedit-Country: GERMANY\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-SearchPath-0: ..\\src\n" -#: ..\src/plugin.py:30 +#: ..\src/plugin.py:28 +#: ..\src/plugin.py:32 #: ..\src/plugin.py:34 -#: ..\src/plugin.py:36 msgid "AC3 Lip Sync" msgstr "AC3 Lip Sync" +#: ..\src/plugin.py:32 #: ..\src/plugin.py:34 -#: ..\src/plugin.py:36 msgid "sets the AC3 audio Delay (LipSync)" msgstr "setzt die Audio- Verzögerung (Lippensynchronität)" -#: ..\src/plugin.py:35 +#: ..\src/plugin.py:33 msgid "AC3 Lip Sync Setup" msgstr "AC3 Lip Sync Setup" -#: ..\src/plugin.py:35 +#: ..\src/plugin.py:33 msgid "Setup for the AC3 Lip Sync Plugin" msgstr "Setup für das AC3 Lip Sync Plugin" -#: ..\src/AC3main.py:72 -msgid "Switch to user key- delays" -msgstr "Verwende benutzerdefinierte Werte für Zahlentasten" - -#: ..\src/AC3main.py:73 -msgid "Switch to calculated key- delays" -msgstr "Verwende berechnete Werte für Zahlentasten" - -#: ..\src/AC3main.py:81 -#: ..\src/AC3main.py:84 -#: ..\src/AC3main.py:141 -#: ..\src/AC3main.py:305 -#: ..\src/AC3main.py:309 -#: ..\src/AC3main.py:310 +#: ..\src/AC3main.py:82 +#: ..\src/AC3main.py:85 +#: ..\src/AC3main.py:88 +#: ..\src/AC3main.py:146 +#: ..\src/AC3main.py:152 +#: ..\src/AC3main.py:172 +#: ..\src/AC3main.py:296 +#: ..\src/AC3main.py:298 +#: ..\src/AC3main.py:302 +#: ..\src/AC3main.py:303 #, python-format msgid "%i ms" msgstr "%i ms" -#: ..\src/AC3main.py:82 +#: ..\src/AC3main.py:83 +#: ..\src/AC3main.py:89 +#: ..\src/AC3main.py:173 #, python-format msgid "%s delay:" msgstr "%s Verzögerung:" -#: ..\src/AC3main.py:83 +#: ..\src/AC3main.py:84 #, python-format msgid "%s:" msgstr "%s:" -#: ..\src/AC3main.py:87 +#: ..\src/AC3main.py:92 msgid "Channel audio:" msgstr "Tonspur Sender: " -#: ..\src/AC3main.py:92 +#: ..\src/AC3main.py:97 #: ..\src/AC3setup.py:58 msgid "Cancel" msgstr "Abbrechen" -#: ..\src/AC3main.py:93 +#: ..\src/AC3main.py:98 msgid "OK" msgstr "OK" -#: ..\src/AC3main.py:94 +#: ..\src/AC3main.py:99 msgid "Switch audio" msgstr "Tonspur ..." -#: ..\src/AC3main.py:98 +#: ..\src/AC3main.py:103 #: ..\src/AC3setup.py:59 msgid "Save" msgstr "Speichern" -#: ..\src/AC3main.py:215 +#: ..\src/AC3main.py:221 #, python-format msgid "Save current %(audio)s delay of %(delay)i ms to key" msgstr "Aktuelle %(audio)s Verzögerung (%(delay)i ms) auf Taste legen" -#: ..\src/AC3main.py:219 +#: ..\src/AC3main.py:224 msgid "Menu" msgstr "Menu" -#: ..\src/AC3main.py:228 -#: ..\src/AC3main.py:288 +#: ..\src/AC3main.py:231 +#: ..\src/AC3main.py:285 +#: ..\src/AC3main.py:346 msgid "Invalid selection" msgstr "Ungültige Auswahl" -#: ..\src/AC3main.py:247 -#: ..\src/AC3main.py:248 +#: ..\src/AC3main.py:244 +#: ..\src/AC3main.py:245 #, python-format msgid "Save %s delay" msgstr "%s Delay speichern" -#: ..\src/AC3main.py:249 +#: ..\src/AC3main.py:246 msgid "Save both delays" msgstr "Beide Verzögerungen speichern" -#: ..\src/AC3main.py:252 +#: ..\src/AC3main.py:249 msgid "Which delays do you want to set" msgstr "Wählen Sie, was Sie speichern wollen" -#: ..\src/AC3main.py:284 +#: ..\src/AC3main.py:281 #, python-format msgid "Saved %(audio)s value: %(delay)i ms" msgstr "Gespeicherter %(audio)s Wert: %(delay)i ms" -#: ..\src/AC3main.py:326 +#: ..\src/AC3main.py:321 #, python-format msgid "Select the key you want to set to %i ms" msgstr "Wählen Sie die Taste, die Sie mit %i ms belegen wollen" -#: ..\src/AC3main.py:332 +#: ..\src/AC3main.py:327 #, python-format -msgid "Key %(key)i (current value: %(value)i ms)" -msgstr "Taste %(key)i (aktueller Wert: %(value)i ms)" +msgid "Key %(key)s (current value: %(value)i ms)" +msgstr "Taste %(key)s (aktueller Wert: %(value)i ms)" -#: ..\src/AC3main.py:337 +#: ..\src/AC3main.py:332 msgid "Setting key canceled" msgstr "Setzen der Taste abgebrochen" -#: ..\src/AC3main.py:341 +#: ..\src/AC3main.py:344 #, python-format -msgid "%(Key)s successfully set to %(delay)i ms" +msgid "Key %(Key)s successfully set to %(delay)i ms" msgstr "%(Key)s erfolgreich auf %(delay)i ms gesetzt" #: ..\src/AC3setup.py:42 -msgid "Minimum delay" -msgstr "Minimale Verzögerung" +msgid "Outer Bound (+/-)" +msgstr "Maximale Verzögerung (+/-)" #: ..\src/AC3setup.py:43 -msgid "Maximum delay" -msgstr "Maximale Verzögerung" - -#: ..\src/AC3setup.py:44 msgid "Step in ms for arrow keys" msgstr "Schrittweite in ms für Pfeiltasten" -#: ..\src/AC3setup.py:45 +#: ..\src/AC3setup.py:44 msgid "Wait time in ms before activation:" msgstr "Wartezeit in ms vor Aktivierung" +#: ..\src/AC3setup.py:45 +#: ..\src/AC3setup.py:46 +#: ..\src/AC3setup.py:47 +#, python-format +msgid "Step in ms for keys '%s'" +msgstr "Schrittweite in ms für Taste %s" + +#: ..\src/AC3setup.py:48 #: ..\src/AC3setup.py:49 +#: ..\src/AC3setup.py:50 #, python-format msgid "Step in ms for key %i" msgstr "Schrittweite in ms für Taste %i" #: ..\src/AC3setup.py:60 -msgid "Recalculate..." -msgstr "Neuberechnen" - +msgid " " +msgstr " " + +#~ msgid "Switch to user key- delays" +#~ msgstr "Verwende benutzerdefinierte Werte für Zahlentasten" +#~ msgid "Switch to calculated key- delays" +#~ msgstr "Verwende berechnete Werte für Zahlentasten" +#~ msgid "Minimum delay" +#~ msgstr "Minimale Verzögerung" +#~ msgid "Maximum delay" +#~ msgstr "Maximale Verzögerung" +#~ msgid "Recalculate..." +#~ msgstr "Neuberechnen" #~ msgid "Use user delays" #~ msgstr "Benutzer Verz." #~ msgid "Use calc. delays" #~ msgstr "autom. Verz." #~ msgid "Key" #~ msgstr "Taste" -#~ msgid " " -#~ msgstr " " #~ msgid "ms" #~ msgstr "ms" #~ msgid "Bitstream delay:" diff --git a/ac3lipsync/src/AC3main.py b/ac3lipsync/src/AC3main.py index 3adf142..28f507b 100644 --- a/ac3lipsync/src/AC3main.py +++ b/ac3lipsync/src/AC3main.py @@ -17,35 +17,31 @@ import os class AC3LipSync(Screen,InfoBarAudioSelection): skin = """ - - + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - - """ @@ -58,20 +54,25 @@ class AC3LipSync(Screen,InfoBarAudioSelection): InfoBarAudioSelection.__init__(self) # Configuration values - self.lowerBound = int(config.plugins.AC3LipSync.lowerBound.getValue()) - self.upperBound = int(config.plugins.AC3LipSync.upperBound.getValue()) + self.upperBound = int(config.plugins.AC3LipSync.outerBounds.getValue()) + self.lowerBound = -1 * self.upperBound self.arrowStepSize = int(config.plugins.AC3LipSync.arrowStepSize.getValue()) - self.stepSize = int(config.plugins.AC3LipSync.stepSize.getValue()) + self.stepSize = {} + self.stepSize["3"] = int(config.plugins.AC3LipSync.stepSize13.getValue()) + self.stepSize["1"] = -1 * self.stepSize["3"] + self.stepSize["6"] = int(config.plugins.AC3LipSync.stepSize46.getValue()) + self.stepSize["4"] = -1 * self.stepSize["6"] + self.stepSize["9"] = int(config.plugins.AC3LipSync.stepSize79.getValue()) + self.stepSize["7"] = -1 * self.stepSize["9"] + self.keyStep = {} + self.keyStep["0"] = 0 + self.keyStep["2"] = int(config.plugins.AC3LipSync.absoluteStep2.getValue()) + self.keyStep["5"] = int(config.plugins.AC3LipSync.absoluteStep5.getValue()) + self.keyStep["8"] = int(config.plugins.AC3LipSync.absoluteStep8.getValue()) # AC3delay instance self.AC3delay = AC3delay(self.session) - #Which Values do the number keys use - self.whichKeys = "Computed" # Computed = computed Values of keys, User = User set values of keys - self.whichKeyText = {} - self.whichKeyText["Computed"] = _("Switch to user key- delays") - self.whichKeyText["User"] = _("Switch to calculated key- delays") - #Screen elements #Slider @@ -83,6 +84,10 @@ class AC3LipSync(Screen,InfoBarAudioSelection): self[sAudio+"DelayInfoText"] = Label( _("%s:")%sAudio) self[sAudio+"DelayInfo"] = Label(_("%i ms")%0) + self["AudioSlider"] = ProgressBar() + self["AudioSliderText"] = Label(_("%i ms")%0) + self["AudioDelayText"] = MultiColorLabel( _("%s delay:")%self.AC3delay.whichAudio) + #Service Information self["ServiceInfoText"] = Label(_("Channel audio:")) self["ServiceInfo"] = Label() @@ -121,16 +126,16 @@ class AC3LipSync(Screen,InfoBarAudioSelection): "green": self.keyOk, "yellow": self.keyAudioSelection, "blue": self.keySaveToLamedb, - "1": self.keyNumberGlobal, - "2": self.keyNumberGlobal, - "3": self.keyNumberGlobal, - "4": self.keyNumberGlobal, - "5": self.keyNumberGlobal, - "6": self.keyNumberGlobal, - "7": self.keyNumberGlobal, - "8": self.keyNumberGlobal, - "9": self.keyNumberGlobal, - "0": self.keyNumberGlobal + "1": self.keyNumberRelative, + "3": self.keyNumberRelative, + "4": self.keyNumberRelative, + "6": self.keyNumberRelative, + "7": self.keyNumberRelative, + "9": self.keyNumberRelative, + "0": self.keyNumberAbsolute, + "2": self.keyNumberAbsolute, + "5": self.keyNumberAbsolute, + "8": self.keyNumberAbsolute }, -1) def __onShow(self): @@ -141,58 +146,59 @@ class AC3LipSync(Screen,InfoBarAudioSelection): self[sAudio + "SliderText"].setText(_("%i ms") %iDelay) self.savedValue[sAudio] = iDelay self.currentValue[sAudio] = iDelay - if self.AC3delay.whichAudio == AC3: - self["AC3DelayText"].setForegroundColorNum(1) - self["PCMDelayText"].setForegroundColorNum(0) - else: - self["AC3DelayText"].setForegroundColorNum(0) - self["PCMDelayText"].setForegroundColorNum(1) + if sAudio == self.AC3delay.whichAudio: + self["AudioSlider"].setRange([(self.lowerBound), (self.upperBound)]) + self["AudioSlider"].setValue(iDelay-self.lowerBound) + self["AudioSliderText"].setText(_("%i ms")%iDelay) def keyUp(self): self.AC3delay.whichAudio = AC3 - self["AC3DelayText"].setForegroundColorNum(1) - self["PCMDelayText"].setForegroundColorNum(0) + self.setActiveSlider(AC3) def keyDown(self): self.AC3delay.whichAudio = PCM - self["AC3DelayText"].setForegroundColorNum(0) - self["PCMDelayText"].setForegroundColorNum(1) + self.setActiveSlider(PCM) - def keyLeft(self): - sAudio = self.AC3delay.whichAudio - iSliderValue = int(self[sAudio+"Slider"].getValue()) - iSliderValue -= self.arrowStepSize - if iSliderValue < 0: - iSliderValue = 0 - self.setSliderInfo(iSliderValue) - self.AC3delay.setFileDelay(sAudio, self.currentValue[sAudio], True) + def setActiveSlider(self,sAudio): + if self.AC3delay.whichAudio == AC3: + self["AC3DelayText"].setForegroundColorNum(1) + self["PCMDelayText"].setForegroundColorNum(0) + else: + self["AC3DelayText"].setForegroundColorNum(0) + self["PCMDelayText"].setForegroundColorNum(1) + iDelay = self[sAudio+"Slider"].getValue() + iCurDelay = iDelay + self.lowerBound + self["AudioSlider"].setValue(iDelay) + self["AudioSliderText"].setText(_("%i ms")%iCurDelay) + self["AudioDelayText"].setText(_("%s delay:")%sAudio) + def keyLeft(self): + self.changeSliderValue(-1 * self.arrowStepSize) + def keyRight(self): + self.changeSliderValue(self.arrowStepSize) + + def keyNumberAbsolute(self, number): sAudio = self.AC3delay.whichAudio - iSliderValue = int(self[sAudio+"Slider"].getValue()) - if self.currentValue[sAudio] == 0: - iSliderValue = 0 - iSliderValue += self.arrowStepSize - if iSliderValue > self.upperBound: - iSliderValue = self.upperBound + sNumber = str(number) + iSliderValue = self.keyStep[sNumber]-self.lowerBound self.setSliderInfo(iSliderValue) self.AC3delay.setFileDelay(sAudio, self.currentValue[sAudio], True) - def keyNumberGlobal(self, number): + def keyNumberRelative(self, number): + sNumber = str(number) + self.changeSliderValue(self.stepSize[sNumber]) + + def changeSliderValue(self,iValue): sAudio = self.AC3delay.whichAudio - iNumber = int(number) - if iNumber == 0: + iSliderValue = int(self[sAudio+"Slider"].getValue()) + iSliderValue += iValue + if iSliderValue < 0: iSliderValue = 0 - self.currentValue[sAudio] = 0 - else: - if self.whichKeys == "Computed": - iSliderValue = self.stepSize*iNumber - else: - iSliderValue = int(config.plugins.AC3LipSync.keySteps[iNumber].stepSize.getValue())-self.lowerBound - if iSliderValue < 0: - iSliderValue = 0 + elif iSliderValue > (self.upperBound - self.lowerBound): + iSliderValue = (self.upperBound - self.lowerBound) self.setSliderInfo(iSliderValue) - self.AC3delay.setFileDelay(sAudio, self.currentValue[sAudio], True) + self.AC3delay.setFileDelay(sAudio, self.currentValue[sAudio], True) def keyAudioSelection(self): self.audioSelection() @@ -212,35 +218,26 @@ class AC3LipSync(Screen,InfoBarAudioSelection): sAudio = self.AC3delay.whichAudio iDelay = self[sAudio+"Slider"].getValue()+self.lowerBound keyList = [ - (_("Save current %(audio)s delay of %(delay)i ms to key") %dict(audio=sAudio , delay=iDelay),"1"), - (self.whichKeyText[self.whichKeys],"2") + (_("Save current %(audio)s delay of %(delay)i ms to key") %dict(audio=sAudio , delay=iDelay),"1") ] self.session.openWithCallback(self.DoShowMenu,ChoiceBox,_("Menu"),keyList) - + def DoShowMenu(self, answer): if answer is not None: if answer[1] == "1": self.menuSaveDelayToKey() - elif answer[1] == "2": - self.menuSwitchKeyValues() else: sResponse = _("Invalid selection") iType = MessageBox.TYPE_ERROR self.session.open(MessageBox, sResponse , iType) - def menuSwitchKeyValues(self): - if self.whichKeys == "Computed": - self.whichKeys = "User" - else: - self.whichKeys = "Computed" - self["key_blue"].setText(self.whichKeyText[self.whichKeys]) - def menuSaveDelayToKey(self): sAudio = self.AC3delay.whichAudio iDelay = self[sAudio+"Slider"].getValue()+self.lowerBound - AC3SetCustomValue(self.session,iDelay) + AC3SetCustomValue(self.session,iDelay,self.keyStep) + def keySaveToLamedb(self): if self.AC3delay.bIsRecording == False: keyList = [ @@ -293,16 +290,12 @@ class AC3LipSync(Screen,InfoBarAudioSelection): def setSliderInfo(self, iDelay): sAudio = self.AC3delay.whichAudio - if iDelay == 0: - if self.currentValue[sAudio] >= self.lowerBound: - self.currentValue[sAudio] = self.lowerBound - else: - self.currentValue = 0 - else: - self.currentValue[sAudio] = iDelay + self.lowerBound - self[sAudio+"Slider"].setValue(iDelay) + self.currentValue[sAudio] = iDelay + self.lowerBound iCurDelay = self.currentValue[sAudio] + self[sAudio+"Slider"].setValue(iDelay) self[sAudio+"SliderText"].setText(_("%i ms")%iCurDelay) + self["AudioSlider"].setValue(iDelay) + self["AudioSliderText"].setText(_("%i ms")%iCurDelay) def setChannelInfoText(self): sActiveAudio = str(self.AC3delay.selectedAudioInfo[0]) @@ -318,25 +311,36 @@ class AC3LipSync(Screen,InfoBarAudioSelection): if audio is not None: self.AC3delay.getAudioInformation() self.setChannelInfoText() - + self.setActiveSlider(self.AC3delay.whichAudio) + class AC3SetCustomValue: - def __init__(self, session, iDelay): + def __init__(self, session, iDelay, keyStep): + self.keyStep = keyStep self.session = session self.iDelay = iDelay self.session.openWithCallback(self.DoSetCustomValue,ChoiceBox,_("Select the key you want to set to %i ms") %(iDelay),self.getKeyList()) def getKeyList(self): keyList = [] - for i in range(1, 10): - iValue = int(config.plugins.AC3LipSync.keySteps[i].stepSize.getValue()) - keyList.append((_("Key %(key)i (current value: %(value)i ms)") %dict(key=i, value=iValue),str(i))) + for i,iValue in self.keyStep.iteritems(): + if i != "0": + keyList.append((_("Key %(key)s (current value: %(value)i ms)") %dict(key=i, value=iValue),i)) return keyList def DoSetCustomValue(self,answer): if answer is None: self.session.open(MessageBox,_("Setting key canceled"), MessageBox.TYPE_INFO) + elif answer[1] in ("2" , "5" , "8"): + if answer[1] == "2": + config.plugins.AC3LipSync.absoluteStep2.setValue(self.iDelay) + config.plugins.AC3LipSync.absoluteStep2.save() + elif answer[1] == "5": + config.plugins.AC3LipSync.absoluteStep5.setValue(self.iDelay) + config.plugins.AC3LipSync.absoluteStep5.save() + elif answer[1] == "8": + config.plugins.AC3LipSync.absoluteStep8.setValue(self.iDelay) + config.plugins.AC3LipSync.absoluteStep8.save() + self.keyStep[answer[1]] = self.iDelay + self.session.open(MessageBox,_("Key %(Key)s successfully set to %(delay)i ms") %dict(Key=answer[1],delay=self.iDelay), MessageBox.TYPE_INFO, 5) else: - config.plugins.AC3LipSync.keySteps[int(answer[1])].stepSize.setValue(self.iDelay) - config.plugins.AC3LipSync.keySteps.save() - self.session.open(MessageBox,_("%(Key)s successfully set to %(delay)i ms") %dict(Key=answer[0],delay=self.iDelay), MessageBox.TYPE_INFO, 5) - + self.session.open(MessageBox,_("Invalid selection"), MessageBox.TYPE_ERROR, 5) diff --git a/ac3lipsync/src/AC3setup.py b/ac3lipsync/src/AC3setup.py index a9ac009..30d421e 100644 --- a/ac3lipsync/src/AC3setup.py +++ b/ac3lipsync/src/AC3setup.py @@ -39,17 +39,17 @@ class AC3LipSyncSetup(ConfigListScreen, Screen): # nun erzeugen wir eine liste von elementen fuer die menu liste. self.list = [ - getConfigListEntry(_("Minimum delay"), config.plugins.AC3LipSync.lowerBound), - getConfigListEntry(_("Maximum delay"), config.plugins.AC3LipSync.upperBound), + getConfigListEntry(_("Outer Bound (+/-)"), config.plugins.AC3LipSync.outerBounds), getConfigListEntry(_("Step in ms for arrow keys"), config.plugins.AC3LipSync.arrowStepSize), - getConfigListEntry(_("Wait time in ms before activation:"), config.plugins.AC3LipSync.activationDelay) + getConfigListEntry(_("Wait time in ms before activation:"), config.plugins.AC3LipSync.activationDelay), + getConfigListEntry(_("Step in ms for keys '%s'") % ("1/3"), config.plugins.AC3LipSync.stepSize13), + getConfigListEntry(_("Step in ms for keys '%s'") % ("4/6"), config.plugins.AC3LipSync.stepSize46), + getConfigListEntry(_("Step in ms for keys '%s'") % ("7/9"), config.plugins.AC3LipSync.stepSize79), + getConfigListEntry(_("Step in ms for key %i") % (2), config.plugins.AC3LipSync.absoluteStep2), + getConfigListEntry(_("Step in ms for key %i") % (5), config.plugins.AC3LipSync.absoluteStep5), + getConfigListEntry(_("Step in ms for key %i") % (8), config.plugins.AC3LipSync.absoluteStep8) ] - self.list.extend([ - getConfigListEntry(_("Step in ms for key %i") % (i), config.plugins.AC3LipSync.keySteps[i].stepSize) - for i in range(1 , 10) - ]) - ConfigListScreen.__init__(self, self.list) self["config"].list = self.list @@ -57,7 +57,7 @@ class AC3LipSyncSetup(ConfigListScreen, Screen): # DO NOT ASK. self["key_red"] = Button(_("Cancel")) self["key_green"] = Button(_("Save")) - self["key_yellow"] = Button(_("Recalculate...")) + self["key_yellow"] = Button(_(" ")) self["key_blue"] = Button(" ") self["setupActions"] = NumberActionMap(["SetupActions", "ColorActions"], @@ -66,26 +66,10 @@ class AC3LipSyncSetup(ConfigListScreen, Screen): "cancel": self.cancel, "green": self.save, "red": self.cancel, - "yellow": self.recalculateKeys, "ok": self.save, }, -2) - def recalculateKeys(self): - iLowerBound = int(config.plugins.AC3LipSync.lowerBound.getValue()) - iUpperBound = int(config.plugins.AC3LipSync.upperBound.getValue()) - iStepSize = (iUpperBound - iLowerBound)/9 - for i in range(1 , 10): - config.plugins.AC3LipSync.keySteps[i].stepSize.setValue(i*iStepSize+iLowerBound) - self["config"].setList(self.list) - def save(self): - iLowerBound = int(config.plugins.AC3LipSync.lowerBound.getValue()) - iUpperBound = int(config.plugins.AC3LipSync.upperBound.getValue()) - iStepSize = (iUpperBound - iLowerBound)/9 - config.plugins.AC3LipSync.stepSize.setValue(iStepSize) - config.plugins.AC3LipSync.stepSize.save() - iUpperBound = iLowerBound + (iStepSize*9) - config.plugins.AC3LipSync.upperBound.setValue(iUpperBound) for x in self.list: x[1].save() self.close() @@ -94,4 +78,3 @@ class AC3LipSyncSetup(ConfigListScreen, Screen): for x in self["config"].list: x[1].cancel() self.close() - diff --git a/ac3lipsync/src/AC3utils.py b/ac3lipsync/src/AC3utils.py index 514a571..bf64aa9 100644 --- a/ac3lipsync/src/AC3utils.py +++ b/ac3lipsync/src/AC3utils.py @@ -7,10 +7,21 @@ lFileDelay[AC3] = "/proc/stb/audio/audio_delay_bitstream" lFileDelay[PCM] = "/proc/stb/audio/audio_delay_pcm" def dec2hex(n): - """return the hexadecimal string representation of integer n""" - return "%X" % n + """return the signed hexadecimal string representation of integer n""" + if n >= 0: + s = "%X" % n + else: + n2 = 2**32 + n + 1 + s = "%X" % n2 + return s def hex2dec(s): - """return the integer value of a hexadecimal string s""" - return int(s, 16) - + """return the signed integer value of a hexadecimal string s""" + print "[AC3LipSync] hex2dec String: ",s + if s[:2] == "0x": + s = s[2:] + if s[:1] < '8': + i = int(s,16) + else: + i = int(long(s,16)-2**32) + return i diff --git a/ac3lipsync/src/__init__.py b/ac3lipsync/src/__init__.py index 92df526..64bde72 100644 --- a/ac3lipsync/src/__init__.py +++ b/ac3lipsync/src/__init__.py @@ -14,7 +14,7 @@ def localeInit(): def _(txt): t = gettext.dgettext(PluginLanguageDomain, txt) if t == txt: - print "[AC3LipSync] fallback to default translation for", txt + print "[AC3LipSync] fallback to default translation for ", txt t = gettext.gettext(txt) return t diff --git a/ac3lipsync/src/plugin.py b/ac3lipsync/src/plugin.py index da9bd99..00d50e2 100644 --- a/ac3lipsync/src/plugin.py +++ b/ac3lipsync/src/plugin.py @@ -5,17 +5,15 @@ import AC3main import AC3setup config.plugins.AC3LipSync = ConfigSubsection() -config.plugins.AC3LipSync.lowerBound = ConfigInteger(default = 0, limits = (0,10000)) -config.plugins.AC3LipSync.upperBound = ConfigInteger(default = 405, limits = (0,10000)) -config.plugins.AC3LipSync.arrowStepSize = ConfigInteger(default = 5, limits = (0,10000)) -config.plugins.AC3LipSync.stepSize = ConfigInteger(default = 45, limits = (0,10000)) -config.plugins.AC3LipSync.activationDelay = ConfigInteger(default = 800, limits = (0,10000)) -config.plugins.AC3LipSync.keySteps = ConfigSubList() -for i in range(0, 10): - s = ConfigSubsection() - s.stepSize = ConfigInteger(default = i*45, limits = (0,10000)) - config.plugins.AC3LipSync.keySteps.append(s) - del s +config.plugins.AC3LipSync.outerBounds = ConfigInteger(default = 1000, limits = (-10000,10000)) +config.plugins.AC3LipSync.arrowStepSize = ConfigInteger(default = 5, limits = (-10000,10000)) +config.plugins.AC3LipSync.activationDelay = ConfigInteger(default = 800, limits = (-10000,10000)) +config.plugins.AC3LipSync.stepSize13 = ConfigInteger(default = 50, limits = (-10000,10000)) +config.plugins.AC3LipSync.stepSize46 = ConfigInteger(default = 200, limits = (-10000,10000)) +config.plugins.AC3LipSync.stepSize79 = ConfigInteger(default = 500, limits = (-10000,10000)) +config.plugins.AC3LipSync.absoluteStep2 = ConfigInteger(default = 0, limits = (-10000,10000)) +config.plugins.AC3LipSync.absoluteStep5 = ConfigInteger(default = 0, limits = (-10000,10000)) +config.plugins.AC3LipSync.absoluteStep8 = ConfigInteger(default = 0, limits = (-10000,10000)) def main(session, **kwargs): # reload(AC3main)