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":0, "level":1, "text":"Dolby Digital default", "item":config.av.defaultac3},
25 {"idx":0, "level":1, "text":"Dolby Digital downmix", "requires":"CanDownmixAC3", "item":config.av.downmix_ac3},
26 {"idx":0, "level":1, "text":"General Dolby Digital delay(ms)", "item":config.av.generalAC3delay},
27 {"idx":0, "level":1, "text":"General PCM delay(ms)", "item":config.av.generalPCMdelay},
28 {"idx":0, "level":0, "text":"OSD visibility", "requires":"CanChangeOsdAlpha", "item":config.av.osd_alpha},
29 {"idx":0, "level":0, "text":"Scaler sharpness", "item":config.av.scaler_sharpness},
32 def __init__(self, session):
33 Screen.__init__(self, session)
34 # for the skin: first try a setup_avsetup, then Setup
35 self.skinName = ["setup_avsetup", "Setup"]
36 self.setup_title = _("A/V Settings")
38 self.video_cfg = video_hw
41 self.onChangedEntry = [ ]
43 # handle hotplug by re-createing setup
44 self.onShow.append(self.startHotplug)
45 self.onHide.append(self.stopHotplug)
49 self["key_red"] = StaticText( _("Cancel"))
50 self["key_green"] = StaticText( _("OK"))
52 self["action"] = NumberActionMap(["SetupActions"],
54 "cancel": self.keyCancel,
58 ConfigListScreen.__init__(self, self.list, session = session, on_change = self.changedEntry)
62 self.onLayoutFinish.append(self.layoutFinished)
64 def layoutFinished(self):
65 self.setTitle(self.setup_title)
68 def changedEntry(self):
69 for x in self.onChangedEntry:
72 def getCurrentEntry(self):
73 return self["config"].getCurrent()[0]
75 def getCurrentValue(self):
76 return str(self["config"].getCurrent()[1].getText())
78 def createSummary(self):
79 from Screens.Setup import SetupSummary
82 def createScreen(self):
86 for x in self.avSetupItems:
87 item_level = int(x.get("level", 0))
88 if item_level > config.usage.setup_level.index:
91 requires = x.get("requires")
92 if requires and not SystemInfo.get(requires, False):
95 item_text = _(x.get("text", "??").encode("UTF-8"))
97 item = x.get("item", None)
101 idx = x.get("idx", 0)
103 if idx == 1: # Video Output
104 current_port = item.value
105 elif idx == 2: # Mode
106 item = config.av.videomode[current_port]
107 current_mode = item.value
108 # some modes (720p, 1080i, 1080p) are always widescreen.
109 force_wide = self.video_cfg.isWidescreenMode(current_mode)
110 elif idx == 3: # Refresh Rate
111 item = config.av.videorate[current_mode]
112 current_rate = item.value
113 if current_mode == "PC":
114 item_text = _("Resolution")
115 elif idx == 4: # Aspect Ratio
116 current_aspect = item.value
119 elif idx == 5: # Display 4:3 content as
120 if current_aspect == "auto" and not force_wide:
122 elif current_aspect == "4_3":
124 elif idx == 6: # Display 16:9 > content as
125 if current_aspect == "auto" and not force_wide:
127 # Color Format, WSS on 4:3, Auto scart switching
128 elif (idx == 7 or idx == 8 or idx == 9) and not current_port == "Scart":
130 if idx == 0 and item_level == 1: # audio
131 self.audio_cfg.append(item_text)
134 if not isinstance(item, ConfigNothing):
135 self.list.append(getConfigListEntry(item_text, item))
137 self["config"].setList(self.list)
140 ConfigListScreen.keyLeft(self)
142 # show current value on VFD
143 if self.getCurrentEntry() not in self.audio_cfg:
144 self.summaries[0]["SetupTitle"].text = self.getCurrentValue()
147 ConfigListScreen.keyRight(self)
149 # show current value on VFD
150 if self.getCurrentEntry() not in self.audio_cfg:
151 self.summaries[0]["SetupTitle"].text = self.getCurrentValue()
153 def startHotplug(self):
154 self.video_cfg.on_hotplug.append(self.createScreen)
156 def stopHotplug(self):
157 self.video_cfg.on_hotplug.remove(self.createScreen)
160 def avSetupMain(session, **kwargs):
161 session.open(avSetupScreen)
163 def startAVsetup(menuid):
164 if menuid != "system":
167 return [( _("A/V Settings"), avSetupMain, "av_setup", 40)]
169 def startVideoWizard(*args, **kwargs):
170 from VideoWizard import VideoWizard
171 return VideoWizard(*args, **kwargs)
173 def Plugins(**kwargs):
176 name = "Videomode-K",
177 description = "Videomode-K based videomode",
178 where = PluginDescriptor.WHERE_MENU,
179 needsRestart = False,
183 if config.misc.videowizardenabled.value:
186 name = "Video Wizard",
187 where = PluginDescriptor.WHERE_WIZARD,
188 fnc=(0, startVideoWizard)