From: hschang Date: Fri, 7 Mar 2014 09:54:56 +0000 (+0900) Subject: [AV Settings] add PCM Multichannel entry. X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=commitdiff_plain;h=79a3f3c8d0dbd5f99359a283cd33451c41f8c288 [AV Settings] add PCM Multichannel entry. --- diff --git a/data/setup.xml b/data/setup.xml index f5342ee..442fe13 100755 --- a/data/setup.xml +++ b/data/setup.xml @@ -15,7 +15,8 @@ config.av.defaultac3 config.av.generalAC3delay config.av.generalPCMdelay - config.av.downmix_ac3 + config.av.downmix_ac3 + config.av.pcm_multichannel config.av.downmix_aac config.av.vcrswitch diff --git a/lib/python/Components/AVSwitch.py b/lib/python/Components/AVSwitch.py index b5f6b1f..de12e00 100755 --- a/lib/python/Components/AVSwitch.py +++ b/lib/python/Components/AVSwitch.py @@ -3,6 +3,7 @@ from config import config, ConfigSlider, ConfigSelection, ConfigYesNo, \ from enigma import eAVSwitch, getDesktop from SystemInfo import SystemInfo from os import path as os_path +from os import access, W_OK class AVSwitch: def setInput(self, input): @@ -143,6 +144,19 @@ def InitAVSwitch(): SystemInfo["ScartSwitch"] = eAVSwitch.getInstance().haveScartSwitch() try: + can_pcm_multichannel = access("/proc/stb/audio/multichannel_pcm", W_OK) + except: + can_pcm_multichannel = False + + SystemInfo["supportPcmMultichannel"] = can_pcm_multichannel + + if can_pcm_multichannel: + def setPCMMultichannel(configElement): + open("/proc/stb/audio/multichannel_pcm", "w").write(configElement.value and "enable" or "disable") + config.av.pcm_multichannel = ConfigYesNo(default = False) + config.av.pcm_multichannel.addNotifier(setPCMMultichannel) + + try: can_downmix = open("/proc/stb/audio/ac3_choices", "r").read()[:-1].find("downmix") != -1 except: can_downmix = False @@ -151,6 +165,11 @@ def InitAVSwitch(): if can_downmix: def setAC3Downmix(configElement): open("/proc/stb/audio/ac3", "w").write(configElement.value and "downmix" or "passthrough") + if SystemInfo.get("supportPcmMultichannel", False) and (not configElement.value) : + SystemInfo["CanPcmMultichannel"] = True + else: + SystemInfo["CanPcmMultichannel"] = False + config.av.downmix_ac3 = ConfigYesNo(default = True) config.av.downmix_ac3.addNotifier(setAC3Downmix) diff --git a/lib/python/Plugins/SystemPlugins/Videomode/plugin.py b/lib/python/Plugins/SystemPlugins/Videomode/plugin.py index a13ef28..7c646b3 100755 --- a/lib/python/Plugins/SystemPlugins/Videomode/plugin.py +++ b/lib/python/Plugins/SystemPlugins/Videomode/plugin.py @@ -12,22 +12,23 @@ config.misc.videowizardenabled = ConfigBoolean(default = True) class avSetupScreen(ConfigListScreen, Screen): avSetupItems = [ - {"idx":1, "level":0, "text":"Video Output", "item":config.av.videoport}, - {"idx":2, "level":0, "text":"Mode", "item":config.av.videomode[config.av.videoport.value]}, - {"idx":3, "level":0, "text":"Refresh Rate", "item":config.av.videorate[config.av.videomode[config.av.videoport.value].value]}, - {"idx":4, "level":0, "text":"Aspect Ratio", "item":config.av.aspect}, - {"idx":5, "level":0, "text":"Display 4:3 content as", "item":config.av.policy_43}, - {"idx":6, "level":0, "text":"Display > 16:9 content as", "item":config.av.policy_169}, - {"idx":7, "level":0, "text":"Color Format", "item":config.av.colorformat}, - {"idx":8, "level":1, "text":"WSS on 4:3", "item":config.av.wss}, - {"idx":9, "level":1, "text":"Auto scart switching", "requires":"ScartSwitch", "item":config.av.vcrswitch}, - {"idx":0, "level":1, "text":"Dolby Digital default", "item":config.av.defaultac3}, - {"idx":0, "level":1, "text":"Dolby Digital / DTS downmix", "requires":"CanDownmixAC3", "item":config.av.downmix_ac3}, - {"idx":0, "level":1, "text":"AAC downmix", "requires":"CanDownmixAAC", "item":config.av.downmix_aac}, - {"idx":0, "level":1, "text":"General Dolby Digital delay(ms)", "item":config.av.generalAC3delay}, - {"idx":0, "level":1, "text":"General PCM delay(ms)", "item":config.av.generalPCMdelay}, - {"idx":0, "level":0, "text":"OSD visibility", "requires":"CanChangeOsdAlpha", "item":config.av.osd_alpha}, - {"idx":0, "level":0, "text":"Scaler sharpness", "item":config.av.scaler_sharpness}, + {"idx":1, "level":0, "text":"Video Output", "item":"config.av.videoport"}, + {"idx":2, "level":0, "text":"Mode", "item":"config.av.videomode[config.av.videoport.value]"}, + {"idx":3, "level":0, "text":"Refresh Rate", "item":"config.av.videorate[config.av.videomode[config.av.videoport.value].value]"}, + {"idx":4, "level":0, "text":"Aspect Ratio", "item":"config.av.aspect"}, + {"idx":5, "level":0, "text":"Display 4:3 content as", "item":"config.av.policy_43"}, + {"idx":6, "level":0, "text":"Display > 16:9 content as", "item":"config.av.policy_169"}, + {"idx":7, "level":0, "text":"Color Format", "item":"config.av.colorformat"}, + {"idx":8, "level":1, "text":"WSS on 4:3", "item":"config.av.wss"}, + {"idx":9, "level":1, "text":"Auto scart switching", "requires":"ScartSwitch", "item":"config.av.vcrswitch"}, + {"idx":0, "level":1, "text":"Dolby Digital default", "item":"config.av.defaultac3"}, + {"idx":0, "level":1, "text":"Dolby Digital / DTS downmix", "requires":"CanDownmixAC3", "item":"config.av.downmix_ac3"}, + {"idx":0, "level":1, "text":"PCM Multichannel", "requires":"CanPcmMultichannel", "item":"config.av.pcm_multichannel"}, + {"idx":0, "level":1, "text":"AAC downmix", "requires":"CanDownmixAAC", "item":"config.av.downmix_aac"}, + {"idx":0, "level":1, "text":"General Dolby Digital delay(ms)", "item":"config.av.generalAC3delay"}, + {"idx":0, "level":1, "text":"General PCM delay(ms)", "item":"config.av.generalPCMdelay"}, + {"idx":0, "level":0, "text":"OSD visibility", "requires":"CanChangeOsdAlpha", "item":"config.av.osd_alpha"}, + {"idx":0, "level":0, "text":"Scaler sharpness", "item":"config.av.scaler_sharpness"}, ] def __init__(self, session): @@ -95,9 +96,10 @@ class avSetupScreen(ConfigListScreen, Screen): item_text = _(x.get("text", "??").encode("UTF-8")) - item = x.get("item", None) - if item is None: + item_str = x.get("item", None) + if item_str is None: continue + item = eval(item_str) idx = x.get("idx", 0) if idx > 0: diff --git a/lib/python/Screens/Setup.py b/lib/python/Screens/Setup.py index 61e6fdd..2e83327 100755 --- a/lib/python/Screens/Setup.py +++ b/lib/python/Screens/Setup.py @@ -62,6 +62,17 @@ class Setup(ConfigListScreen, Screen): self.refill(list) self["config"].setList(list) + def removeEntryNotifier(self): + if self.needEntryChange: + for item in self.needEntryChange: + if self.entryChanged in item.notifiers: + item.notifiers.remove(self.entryChanged) + + def entryChanged(self, configElement): + list = [] + self.refill(list) + self["config"].setList(list) + def refill(self, list): xmldata = setupdom.getroot() for x in xmldata.findall("setup"): @@ -77,6 +88,8 @@ class Setup(ConfigListScreen, Screen): self.onChangedEntry = [ ] + self.needEntryChange = [ ] + self.setup = setup list = [] self.refill(list) @@ -114,6 +127,7 @@ class Setup(ConfigListScreen, Screen): return SetupSummary def addItems(self, list, parentNode): + self.needEntryChange = [ ] for x in parentNode: if x.tag == 'item': item_level = int(x.get("level", 0)) @@ -140,6 +154,14 @@ class Setup(ConfigListScreen, Screen): if not isinstance(item, ConfigNothing): list.append( (item_text, item) ) + needentrychange = x.get("entrychange") + if needentrychange == "yes": + self.needEntryChange.append(item) + if not self.entryChanged in item.notifiers: + item.notifiers.append(self.entryChanged) + if not self.removeEntryNotifier in self.onClose: + self.onClose.append(self.removeEntryNotifier) + def getSetupTitle(id): xmldata = setupdom.getroot() for x in xmldata.findall("setup"):