1 from Screens.Screen import Screen
2 from Components.ConfigList import ConfigListScreen
3 from Components.ActionMap import NumberActionMap
4 from Components.config import config, ConfigNothing, ConfigBoolean, getConfigListEntry
5 from Components.Sources.StaticText import StaticText
6 from Components.SystemInfo import SystemInfo
7 from Plugins.Plugin import PluginDescriptor
9 from VideoHardware import video_hw
11 config.misc.videowizardenabled = ConfigBoolean(default = True)
13 class avSetupScreen(ConfigListScreen, Screen):
15 {"idx":1, "level":0, "text":"Video Output", "item":"config.av.videoport"},
16 {"idx":2, "level":0, "text":"Mode", "item":"config.av.videomode[config.av.videoport.value]"},
17 {"idx":3, "level":0, "text":"Refresh Rate", "item":"config.av.videorate[config.av.videomode[config.av.videoport.value].value]"},
18 {"idx":4, "level":0, "text":"Aspect Ratio", "item":"config.av.aspect"},
19 {"idx":5, "level":0, "text":"Display 4:3 content as", "item":"config.av.policy_43"},
20 {"idx":6, "level":0, "text":"Display > 16:9 content as", "item":"config.av.policy_169"},
21 {"idx":7, "level":0, "text":"Color Format", "item":"config.av.colorformat"},
22 {"idx":8, "level":1, "text":"WSS on 4:3", "item":"config.av.wss"},
23 {"idx":9, "level":1, "text":"Auto scart switching", "requires":"ScartSwitch", "item":"config.av.vcrswitch"},
24 {"idx":10, "level":1, "text":"HDMI Colorspace", "item":"config.av.hdmicolorspace"},
25 {"idx":11, "level":1, "text":"HDMI Colordepth", "item":"config.av.hdmicolordepth"},
26 {"idx":0, "level":1, "text":"Dolby Digital default", "item":"config.av.defaultac3"},
27 {"idx":0, "level":1, "text":"Dolby Digital / DTS downmix", "requires":"CanDownmixAC3", "item":"config.av.downmix_ac3"},
28 {"idx":0, "level":1, "text":"PCM Multichannel", "requires":"CanPcmMultichannel", "item":"config.av.pcm_multichannel"},
29 {"idx":0, "level":1, "text":"AAC downmix", "requires":"CanDownmixAAC", "item":"config.av.downmix_aac"},
30 {"idx":0, "level":1, "text":"General Dolby Digital delay(ms)", "item":"config.av.generalAC3delay"},
31 {"idx":0, "level":1, "text":"General PCM delay(ms)", "item":"config.av.generalPCMdelay"},
32 {"idx":0, "level":0, "text":"OSD visibility", "requires":"CanChangeOsdAlpha", "item":"config.av.osd_alpha"},
33 {"idx":0, "level":0, "text":"Scaler sharpness", "item":"config.av.scaler_sharpness"},
36 def __init__(self, session):
37 Screen.__init__(self, session)
38 # for the skin: first try a setup_avsetup, then Setup
39 self.skinName = ["setup_avsetup", "Setup"]
40 self.setup_title = _("A/V Settings")
42 self.video_cfg = video_hw
45 self.onChangedEntry = [ ]
47 # handle hotplug by re-createing setup
48 self.onShow.append(self.startHotplug)
49 self.onHide.append(self.stopHotplug)
53 self["key_red"] = StaticText( _("Cancel"))
54 self["key_green"] = StaticText( _("OK"))
56 self["action"] = NumberActionMap(["SetupActions"],
58 "cancel": self.keyCancel,
62 ConfigListScreen.__init__(self, self.list, session = session, on_change = self.changedEntry)
66 self.onLayoutFinish.append(self.layoutFinished)
68 def layoutFinished(self):
69 self.setTitle(self.setup_title)
72 def changedEntry(self):
73 for x in self.onChangedEntry:
76 def getCurrentEntry(self):
77 return self["config"].getCurrent()[0]
79 def getCurrentValue(self):
80 return str(self["config"].getCurrent()[1].getText())
82 def createSummary(self):
83 from Screens.Setup import SetupSummary
86 def createScreen(self):
90 for x in self.avSetupItems:
91 item_level = int(x.get("level", 0))
92 if item_level > config.usage.setup_level.index:
95 requires = x.get("requires")
96 if requires and not SystemInfo.get(requires, False):
99 item_text = _(x.get("text", "??").encode("UTF-8"))
101 item_str = x.get("item", None)
104 item = eval(item_str)
106 idx = x.get("idx", 0)
108 if idx == 1: # Video Output
109 current_port = item.value
110 elif idx == 2: # Mode
111 item = config.av.videomode[current_port]
112 current_mode = item.value
113 # some modes (720p, 1080i, 1080p) are always widescreen.
114 force_wide = self.video_cfg.isWidescreenMode(current_mode)
115 elif idx == 3: # Refresh Rate
116 item = config.av.videorate[current_mode]
117 current_rate = item.value
118 if current_mode == "PC":
119 item_text = _("Resolution")
120 elif idx == 4: # Aspect Ratio
121 current_aspect = item.value
124 elif idx == 5: # Display 4:3 content as
125 if current_aspect == "auto" and not force_wide:
127 elif current_aspect == "4_3":
129 elif idx == 6: # Display 16:9 > content as
130 if current_aspect == "auto" and not force_wide:
132 # Color Format, WSS on 4:3, Auto scart switching
133 elif (idx == 7 or idx == 8 or idx == 9) and not current_port == "Scart":
135 elif (idx == 10 or idx == 11) and not current_port == "DVI": # HDMI Colorspace/Colordepth
137 if idx == 0 and item_level == 1: # audio
138 self.audio_cfg.append(item_text)
141 if not isinstance(item, ConfigNothing):
142 self.list.append(getConfigListEntry(item_text, item))
144 self["config"].setList(self.list)
147 ConfigListScreen.keyLeft(self)
149 # show current value on VFD
150 if self.getCurrentEntry() not in self.audio_cfg:
151 self.summaries[0]["SetupTitle"].text = self.getCurrentValue()
154 ConfigListScreen.keyRight(self)
156 # show current value on VFD
157 if self.getCurrentEntry() not in self.audio_cfg:
158 self.summaries[0]["SetupTitle"].text = self.getCurrentValue()
160 def startHotplug(self):
161 self.video_cfg.on_hotplug.append(self.createScreen)
163 def stopHotplug(self):
164 self.video_cfg.on_hotplug.remove(self.createScreen)
167 def avSetupMain(session, **kwargs):
168 session.open(avSetupScreen)
170 def startAVsetup(menuid):
171 if menuid != "system":
174 return [( _("A/V Settings"), avSetupMain, "av_setup", 40)]
176 def startVideoWizard(*args, **kwargs):
177 from VideoWizard import VideoWizard
178 return VideoWizard(*args, **kwargs)
180 def Plugins(**kwargs):
183 name = "Videomode-K",
184 description = "Videomode-K based videomode",
185 where = PluginDescriptor.WHERE_MENU,
186 needsRestart = False,
190 if config.misc.videowizardenabled.value:
193 name = "Video Wizard",
194 where = PluginDescriptor.WHERE_WIZARD,
195 fnc=(0, startVideoWizard)