X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FPlugins%2FSystemPlugins%2FVideomode%2FVideoHardware.py;h=8425f42cc5c417e50b16edcf011ecde47d17ad9d;hp=aef9d8d025e37c6eef2d5e8ef88d6bd70dcbd5c5;hb=0fee8bdaa26f854460b63475c91f1f2cf762594b;hpb=dfb72b815d91d564557fc895c347531217ea2195;ds=sidebyside diff --git a/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py b/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py index aef9d8d..8425f42 100644 --- a/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py +++ b/lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py @@ -1,6 +1,7 @@ -from Components.config import config, ConfigSubDict, ConfigSelection +from Components.config import config, ConfigSubDict, ConfigSelection, ConfigNothing, NoSave from Tools.CList import CList from Tools.HardwareInfo import HardwareInfo +import os # VideoHardware is the interface to /proc/stb/video. class VideoHardware: @@ -38,6 +39,11 @@ class VideoHardware: "60Hz" : {60: "1080p"}, "multi": {50: "1080p50", 60: "1080p"} }, + "2160p": { + "50Hz" : {50: "2160p50"}, + "60Hz" : {60: "2160p"}, + "multi": {50: "2160p50", 60: "2160p"} + }, "PC": { "1024x768": {60: "1024x768"}, "800x600" : {60: "800x600"}, @@ -55,9 +61,11 @@ class VideoHardware: } } - widescreen_modes = set(["720p", "1080i", "1080p"]) - hdmi_hw_types = set(["dm500", "dm800se", "dm7020hd", "bm750", "solo", "uno", "ultimo", "solo2", "duo2"]) - hdmi_pc_hw_types = set(["dm500", "dm800se", "dm7020hd", "bm750", "solo", "uno", "ultimo", "solo2", "duo2"]) + widescreen_modes = set(["720p", "1080i", "1080p", "2160p"]) + hdmi_hw_types = set(["dm500", "dm800se", "dm7020hd", "bm750", "solo", "uno", "ultimo", "solo2", "duo2", "solose", "zero", "solo4k", "ultimo4k", "uno4k", "uno4kse", "zero4k", "duo4k"]) + hdmi_pc_hw_types = set(["dm500", "dm800se", "dm7020hd", "bm750", "solo", "uno", "ultimo", "solo2", "duo2", "solose", "zero", "solo4k", "ultimo4k", "uno4k", "uno4kse", "zero4k", "duo4k"]) + noscart_hw_types = set(["zero", "solo4k", "ultimo4k", "uno4k", "uno4kse", "zero4k", "duo4k"]) + noypbpr_hw_types = set(["solose", "zero", "solo4k", "ultimo4k", "uno4k", "uno4kse", "zero4k", "duo4k"]) def getDeviceName(self): device_name = "unknown" @@ -72,7 +80,10 @@ class VideoHardware: return device_name def isVumodel(self, hw_type): - return hw_type in set(["bm750", "solo", "uno", "ultimo", "solo2", "duo2"]) + return hw_type in set(["bm750", "solo", "uno", "ultimo", "solo2", "duo2", "solose", "zero", "solo4k", "ultimo4k", "uno4k", "uno4kse", "zero4k", "duo4k"]) + + def isVumodel4K(self, hw_type): + return hw_type in set(["solo4k", "ultimo4k", "uno4k", "uno4kse", "zero4k", "duo4k"]) # re-define AVSwitch.getOutputAspect def getOutputAspect(self): @@ -110,6 +121,16 @@ class VideoHardware: print "remove DVI-PC because it does not exist." del self.modes["DVI-PC"] + if self.isNoScart(self.getDeviceName()): + if self.modes.has_key("Scart"): + print "remove Scart because it does not exist." + del self.modes["Scart"] + + if self.isNoYPbPr(self.getDeviceName()): + if self.modes.has_key("YPbPr"): + print "remove YPbPr because it does not exist." + del self.modes["YPbPr"] + self.createConfig() self.readPreferredModes() @@ -168,6 +189,14 @@ class VideoHardware: def isWidescreenMode(self, mode): return mode in self.widescreen_modes + # check if Scart is not available + def isNoScart(self, hw_type): + return hw_type in self.noscart_hw_types + + # check if YPbPr is not available + def isNoYPbPr(self, hw_type): + return hw_type in self.noypbpr_hw_types + # check if rate is available for mode def isModeAvailable(self, port, mode, rate): rate = self.rates[mode][rate] @@ -212,6 +241,9 @@ class VideoHardware: # vu+ support 1080p if self.isVumodel(hw_type): self.modes["DVI"].insert(self.modes["DVI"].index("1080i")+1, "1080p") + # 4K support 2160p + if self.isVumodel4K(hw_type): + self.modes["DVI"].insert(self.modes["DVI"].index("1080p")+1, "2160p") portlist = [ ] port_choices = self.getPortList() @@ -242,6 +274,45 @@ class VideoHardware: config.av.videomode[port] = ConfigSelection(choices = modelist) config.av.videoport = ConfigSelection(choices = portlist) + if os.path.exists("/proc/stb/video/hdmi_colorspace"): + def setHdmiColorspace(config): + try: + print "set HDMI Colorspace : ",config.value + f = open("/proc/stb/video/hdmi_colorspace", "w") + f.write(config.value) + f.close() + except IOError: + print "set HDMI Colorspace failed!" + hdmicolorspace_choices = {} + hdmicolorspace_choices["Edid(Auto)"] = _("Auto") + hdmicolorspace_choices["Hdmi_Rgb"] = _("RGB") + hdmicolorspace_choices["444"] = _("YCbCr444") + hdmicolorspace_choices["422"] = _("YCbCr422") + hdmicolorspace_choices["420"] = _("YCbCr420") + config.av.hdmicolorspace = ConfigSelection(choices = hdmicolorspace_choices, default = "Edid(Auto)") + config.av.hdmicolorspace.addNotifier(setHdmiColorspace) + else: + config.av.hdmicolorspace = NoSave(ConfigNothing()) + + if os.path.exists("/proc/stb/video/hdmi_colordepth"): + def setHdmiColordepth(config): + try: + print "set HDMI Colordepth : ",config.value + f = open("/proc/stb/video/hdmi_colordepth", "w") + f.write(config.value) + f.close() + except IOError: + print "set HDMI Colordepth failed!" + hdmicolordepth_choices = {} + hdmicolordepth_choices["auto"] = _("Auto") + hdmicolordepth_choices["8bit"] = _("8bit") + hdmicolordepth_choices["10bit"] = _("10bit") + hdmicolordepth_choices["12bit"] = _("12bit") + config.av.hdmicolordepth = ConfigSelection(choices = hdmicolordepth_choices, default = "auto") + config.av.hdmicolordepth.addNotifier(setHdmiColordepth) + else: + config.av.hdmicolordepth = NoSave(ConfigNothing()) + def changedVideomode(self, configElement): if self.is_init: return