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 / DTS downmix", "requires":"CanDownmixAC3", "item":"config.av.downmix_ac3"},
26 {"idx":0, "level":1, "text":"PCM Multichannel", "requires":"CanPcmMultichannel", "item":"config.av.pcm_multichannel"},
27 {"idx":0, "level":1, "text":"AAC downmix", "requires":"CanDownmixAAC", "item":"config.av.downmix_aac"},
28 {"idx":0, "level":1, "text":"General Dolby Digital delay(ms)", "item":"config.av.generalAC3delay"},
29 {"idx":0, "level":1, "text":"General PCM delay(ms)", "item":"config.av.generalPCMdelay"},
30 {"idx":0, "level":0, "text":"OSD visibility", "requires":"CanChangeOsdAlpha", "item":"config.av.osd_alpha"},
31 {"idx":0, "level":0, "text":"Scaler sharpness", "item":"config.av.scaler_sharpness"},
34 def __init__(self, session):
35 Screen.__init__(self, session)
36 # for the skin: first try a setup_avsetup, then Setup
37 self.skinName = ["setup_avsetup", "Setup"]
38 self.setup_title = _("A/V Settings")
40 self.video_cfg = video_hw
43 self.onChangedEntry = [ ]
45 # handle hotplug by re-createing setup
46 self.onShow.append(self.startHotplug)
47 self.onHide.append(self.stopHotplug)
51 self["key_red"] = StaticText( _("Cancel"))
52 self["key_green"] = StaticText( _("OK"))
54 self["action"] = NumberActionMap(["SetupActions"],
56 "cancel": self.keyCancel,
60 ConfigListScreen.__init__(self, self.list, session = session, on_change = self.changedEntry)
64 self.onLayoutFinish.append(self.layoutFinished)
66 def layoutFinished(self):
67 self.setTitle(self.setup_title)
70 def changedEntry(self):
71 for x in self.onChangedEntry:
74 def getCurrentEntry(self):
75 return self["config"].getCurrent()[0]
77 def getCurrentValue(self):
78 return str(self["config"].getCurrent()[1].getText())
80 def createSummary(self):
81 from Screens.Setup import SetupSummary
84 def createScreen(self):
88 for x in self.avSetupItems:
89 item_level = int(x.get("level", 0))
90 if item_level > config.usage.setup_level.index:
93 requires = x.get("requires")
94 if requires and not SystemInfo.get(requires, False):
97 item_text = _(x.get("text", "??").encode("UTF-8"))
99 item_str = x.get("item", None)
102 item = eval(item_str)
104 idx = x.get("idx", 0)
106 if idx == 1: # Video Output
107 current_port = item.value
108 elif idx == 2: # Mode
109 item = config.av.videomode[current_port]
110 current_mode = item.value
111 # some modes (720p, 1080i, 1080p) are always widescreen.
112 force_wide = self.video_cfg.isWidescreenMode(current_mode)
113 elif idx == 3: # Refresh Rate
114 item = config.av.videorate[current_mode]
115 current_rate = item.value
116 if current_mode == "PC":
117 item_text = _("Resolution")
118 elif idx == 4: # Aspect Ratio
119 current_aspect = item.value
122 elif idx == 5: # Display 4:3 content as
123 if current_aspect == "auto" and not force_wide:
125 elif current_aspect == "4_3":
127 elif idx == 6: # Display 16:9 > content as
128 if current_aspect == "auto" and not force_wide:
130 # Color Format, WSS on 4:3, Auto scart switching
131 elif (idx == 7 or idx == 8 or idx == 9) and not current_port == "Scart":
133 if idx == 0 and item_level == 1: # audio
134 self.audio_cfg.append(item_text)
137 if not isinstance(item, ConfigNothing):
138 self.list.append(getConfigListEntry(item_text, item))
140 self["config"].setList(self.list)
143 ConfigListScreen.keyLeft(self)
145 # show current value on VFD
146 if self.getCurrentEntry() not in self.audio_cfg:
147 self.summaries[0]["SetupTitle"].text = self.getCurrentValue()
150 ConfigListScreen.keyRight(self)
152 # show current value on VFD
153 if self.getCurrentEntry() not in self.audio_cfg:
154 self.summaries[0]["SetupTitle"].text = self.getCurrentValue()
156 def startHotplug(self):
157 self.video_cfg.on_hotplug.append(self.createScreen)
159 def stopHotplug(self):
160 self.video_cfg.on_hotplug.remove(self.createScreen)
163 def avSetupMain(session, **kwargs):
164 session.open(avSetupScreen)
166 def startAVsetup(menuid):
167 if menuid != "system":
170 return [( _("A/V Settings"), avSetupMain, "av_setup", 40)]
172 def startVideoWizard(*args, **kwargs):
173 from VideoWizard import VideoWizard
174 return VideoWizard(*args, **kwargs)
176 def Plugins(**kwargs):
179 name = "Videomode-K",
180 description = "Videomode-K based videomode",
181 where = PluginDescriptor.WHERE_MENU,
182 needsRestart = False,
186 if config.misc.videowizardenabled.value:
189 name = "Video Wizard",
190 where = PluginDescriptor.WHERE_WIZARD,
191 fnc=(0, startVideoWizard)