Skip to content

Commit

Permalink
Revert "[ServiceInfo] update"
Browse files Browse the repository at this point in the history
This reverts commit 976b381.
  • Loading branch information
koivo committed Apr 23, 2020
1 parent cafc03c commit 2ce8a5a
Showing 1 changed file with 87 additions and 161 deletions.
248 changes: 87 additions & 161 deletions lib/python/Components/Converter/ServiceInfo.py
@@ -1,9 +1,8 @@
from Components.Converter.Converter import Converter
from enigma import iServiceInformation, iPlayableService, eServiceReference
from enigma import iServiceInformation, iPlayableService
from Screens.InfoBarGenerics import hasActiveSubservicesForCurrentChannel
from Components.Element import cached
from Poll import Poll
from Tools.Transponder import ConvertToHumanReadable

from os import path

Expand Down Expand Up @@ -47,65 +46,54 @@ class ServiceInfo(Poll, Converter, object):
IS_HDR10 = 35
IS_HLG = 36
IS_HDHDR = 37
FREQ_INFO = 38
PROGRESSIVE = 39
VIDEO_INFO = 40

def __init__(self, type):
Poll.__init__(self)
Converter.__init__(self, type)
self.poll_interval = 10000
self.poll_enabled = True
self.type, self.interesting_events = {
"HasTelext": (self.HAS_TELETEXT, (iPlayableService.evUpdatedInfo,)),
"IsMultichannel": (self.IS_MULTICHANNEL, (iPlayableService.evUpdatedInfo,)),
"IsStereo": (self.AUDIO_STEREO, (iPlayableService.evUpdatedInfo,)),
"IsCrypted": (self.IS_CRYPTED, (iPlayableService.evUpdatedInfo,)),
"IsWidescreen": (self.IS_WIDESCREEN, (iPlayableService.evVideoSizeChanged,)),
"IsNotWidescreen": (self.IS_NOT_WIDESCREEN, (iPlayableService.evVideoSizeChanged,)),
"SubservicesAvailable": (self.SUBSERVICES_AVAILABLE, (iPlayableService.evUpdatedEventInfo,)),
"VideoWidth": (self.XRES, (iPlayableService.evVideoSizeChanged,)),
"VideoHeight": (self.YRES, (iPlayableService.evVideoSizeChanged,)),
"AudioPid": (self.APID, (iPlayableService.evUpdatedInfo,)),
"VideoPid": (self.VPID, (iPlayableService.evUpdatedInfo,)),
"PcrPid": (self.PCRPID, (iPlayableService.evUpdatedInfo,)),
"PmtPid": (self.PMTPID, (iPlayableService.evUpdatedInfo,)),
"TxtPid": (self.TXTPID, (iPlayableService.evUpdatedInfo,)),
"TsId": (self.TSID, (iPlayableService.evUpdatedInfo,)),
"OnId": (self.ONID, (iPlayableService.evUpdatedInfo,)),
"Sid": (self.SID, (iPlayableService.evUpdatedInfo,)),
"Framerate": (self.FRAMERATE, (iPlayableService.evVideoSizeChanged,iPlayableService.evUpdatedInfo,)),
"Progressive": (self.PROGRESSIVE, (iPlayableService.evVideoProgressiveChanged, iPlayableService.evUpdatedInfo,)),
"VideoInfo": (self.VIDEO_INFO, (iPlayableService.evVideoSizeChanged, iPlayableService.evVideoFramerateChanged, iPlayableService.evVideoProgressiveChanged, iPlayableService.evUpdatedInfo,)),
"TransferBPS": (self.TRANSFERBPS, (iPlayableService.evUpdatedInfo,)),
"HasHBBTV": (self.HAS_HBBTV, (iPlayableService.evUpdatedInfo,iPlayableService.evHBBTVInfo,)),
"AudioTracksAvailable": (self.AUDIOTRACKS_AVAILABLE, (iPlayableService.evUpdatedInfo,)),
"SubtitlesAvailable": (self.SUBTITLES_AVAILABLE, (iPlayableService.evUpdatedInfo,)),
"Freq_Info": (self.FREQ_INFO, (iPlayableService.evUpdatedInfo,)),
"Editmode": (self.EDITMODE, (iPlayableService.evUpdatedInfo,)),
"IsStream": (self.IS_STREAM, (iPlayableService.evUpdatedInfo,)),
"IsSD": (self.IS_SD, (iPlayableService.evVideoSizeChanged,)),
"IsHD": (self.IS_HD, (iPlayableService.evVideoSizeChanged,iPlayableService.evVideoGammaChanged,)),
"Is1080": (self.IS_1080, (iPlayableService.evVideoSizeChanged,)),
"Is720": (self.IS_720, (iPlayableService.evVideoSizeChanged,)),
"Is576": (self.IS_576, (iPlayableService.evVideoSizeChanged,)),
"Is480": (self.IS_480, (iPlayableService.evVideoSizeChanged,)),
"Is4K": (self.IS_4K, (iPlayableService.evVideoSizeChanged,iPlayableService.evVideoGammaChanged,)),
"IsIPStream": (self.IS_IPSTREAM, (iPlayableService.evUpdatedInfo,)),
"IsSDR": (self.IS_SDR, (iPlayableService.evVideoSizeChanged,iPlayableService.evVideoGammaChanged,)),
"IsHDR": (self.IS_HDR, (iPlayableService.evVideoSizeChanged,iPlayableService.evVideoGammaChanged,)),
"IsHDR10": (self.IS_HDR10, (iPlayableService.evVideoSizeChanged,iPlayableService.evVideoGammaChanged,)),
"IsHLG": (self.IS_HLG, (iPlayableService.evVideoSizeChanged,iPlayableService.evVideoGammaChanged,)),
"IsHDHDR": (self.IS_HDHDR, (iPlayableService.evVideoSizeChanged,iPlayableService.evVideoGammaChanged,)),
}[type]
self.interesting_events += (iPlayableService.evStart,)

def _isHDMIIn(self, info):
return eServiceReference(info.getInfoString(iServiceInformation.sServiceref)).type == eServiceReference.idServiceHDMIIn

def getServiceInfoString(self, info, what, convert=lambda x: "%d" % x):
if self._isHDMIIn(info):
return "N/A"
self.type, self.interesting_events = {
"HasTelext": (self.HAS_TELETEXT, (iPlayableService.evUpdatedInfo,)),
"IsMultichannel": (self.IS_MULTICHANNEL, (iPlayableService.evUpdatedInfo,)),
"IsStereo": (self.AUDIO_STEREO, (iPlayableService.evUpdatedInfo,)),
"IsCrypted": (self.IS_CRYPTED, (iPlayableService.evUpdatedInfo,)),
"IsWidescreen": (self.IS_WIDESCREEN, (iPlayableService.evVideoSizeChanged,)),
"IsNotWidescreen": (self.IS_NOT_WIDESCREEN, (iPlayableService.evVideoSizeChanged,)),
"SubservicesAvailable": (self.SUBSERVICES_AVAILABLE, (iPlayableService.evUpdatedEventInfo,)),
"VideoWidth": (self.XRES, (iPlayableService.evVideoSizeChanged,)),
"VideoHeight": (self.YRES, (iPlayableService.evVideoSizeChanged,)),
"AudioPid": (self.APID, (iPlayableService.evUpdatedInfo,)),
"VideoPid": (self.VPID, (iPlayableService.evUpdatedInfo,)),
"PcrPid": (self.PCRPID, (iPlayableService.evUpdatedInfo,)),
"PmtPid": (self.PMTPID, (iPlayableService.evUpdatedInfo,)),
"TxtPid": (self.TXTPID, (iPlayableService.evUpdatedInfo,)),
"TsId": (self.TSID, (iPlayableService.evUpdatedInfo,)),
"OnId": (self.ONID, (iPlayableService.evUpdatedInfo,)),
"Sid": (self.SID, (iPlayableService.evUpdatedInfo,)),
"Framerate": (self.FRAMERATE, (iPlayableService.evVideoSizeChanged,iPlayableService.evUpdatedInfo,)),
"TransferBPS": (self.TRANSFERBPS, (iPlayableService.evUpdatedInfo,)),
"HasHBBTV": (self.HAS_HBBTV, (iPlayableService.evUpdatedInfo,iPlayableService.evHBBTVInfo,)),
"AudioTracksAvailable": (self.AUDIOTRACKS_AVAILABLE, (iPlayableService.evUpdatedInfo,)),
"SubtitlesAvailable": (self.SUBTITLES_AVAILABLE, (iPlayableService.evUpdatedInfo,)),
"Editmode": (self.EDITMODE, (iPlayableService.evUpdatedInfo,)),
"IsStream": (self.IS_STREAM, (iPlayableService.evUpdatedInfo,)),
"IsSD": (self.IS_SD, (iPlayableService.evVideoSizeChanged,)),
"IsHD": (self.IS_HD, (iPlayableService.evVideoSizeChanged,iPlayableService.evVideoGammaChanged,)),
"Is1080": (self.IS_1080, (iPlayableService.evVideoSizeChanged,)),
"Is720": (self.IS_720, (iPlayableService.evVideoSizeChanged,)),
"Is576": (self.IS_576, (iPlayableService.evVideoSizeChanged,)),
"Is480": (self.IS_480, (iPlayableService.evVideoSizeChanged,)),
"Is4K": (self.IS_4K, (iPlayableService.evVideoSizeChanged,iPlayableService.evVideoGammaChanged,)),
"IsIPStream": (self.IS_IPSTREAM, (iPlayableService.evUpdatedInfo,)),
"IsSDR": (self.IS_SDR, (iPlayableService.evVideoSizeChanged,iPlayableService.evVideoGammaChanged,)),
"IsHDR": (self.IS_HDR, (iPlayableService.evVideoSizeChanged,iPlayableService.evVideoGammaChanged,)),
"IsHDR10": (self.IS_HDR10, (iPlayableService.evVideoSizeChanged,iPlayableService.evVideoGammaChanged,)),
"IsHLG": (self.IS_HLG, (iPlayableService.evVideoSizeChanged,iPlayableService.evVideoGammaChanged,)),
"IsHDHDR": (self.IS_HDHDR, (iPlayableService.evVideoSizeChanged,iPlayableService.evVideoGammaChanged,)),
}[type]

def getServiceInfoString(self, info, what, convert = lambda x: "%d" % x):
v = info.getInfo(what)
if v == -1:
return "N/A"
Expand All @@ -119,61 +107,7 @@ def getServiceInfoHexString(self, info, what, convert = lambda x: "%04x" % x):
return "N/A"
if v == -2:
return info.getInfoString(what)
return convert(v)

def _getProcVal(self, pathname, base=10):
val = None
try:
f = open(pathname, "r")
val = int(f.read(), base)
f.close()
if val >= 2 ** 31:
val -= 2 ** 32
except Exception, e:
pass
return val

def _getVal(self, pathname, info, infoVal, base=10):
if self._isHDMIIn(info):
return None
val = self._getProcVal(pathname, base=base)

return val if val is not None else info.getInfo(infoVal)

def _getValInt(self, pathname, info, infoVal, base=10, default=-1):
val = self._getVal(pathname, info, infoVal, base)
return val if val is not None else default

def _getValStr(self, pathname, info, infoVal, base=10, convert=lambda x: "%d" % x):
if self._isHDMIIn(info):
return "N/A"
val = self._getProcVal(pathname, base=base)

return convert(val) if val is not None else self.getServiceInfoString(info, infoVal, convert)

def _getVideoHeight(self, info):
return self._getValInt("/proc/stb/vmpeg/0/yres", info, iServiceInformation.sVideoHeight, base=16)

def _getVideoHeightStr(self, info, convert=lambda x: "%d" % x if x > 0 else "?"):
return self._getValStr("/proc/stb/vmpeg/0/yres", info, iServiceInformation.sVideoHeight, base=16, convert=convert)

def _getVideoWidth(self, info):
return self._getValInt("/proc/stb/vmpeg/0/xres", info, iServiceInformation.sVideoWidth, base=16)

def _getVideoWidthStr(self, info, convert=lambda x: "%d" % x if x > 0 else "?"):
return self._getValStr("/proc/stb/vmpeg/0/xres", info, iServiceInformation.sVideoWidth, base=16, convert=convert)

def _getFrameRate(self, info):
return self._getValInt("/proc/stb/vmpeg/0/framerate", info, iServiceInformation.sFrameRate)

def _getFrameRateStr(self, info, convert=lambda x: "%d" % x if x > 0 else ""):
return self._getValStr("/proc/stb/vmpeg/0/framerate", info, iServiceInformation.sFrameRate, convert=convert)

def _getProgressive(self, info):
return self._getValInt("/proc/stb/vmpeg/0/progressive", info, iServiceInformation.sProgressive, default=0)

def _getProgressiveStr(self, info, convert=lambda x: "" if x else "i"):
return self._getValStr("/proc/stb/vmpeg/0/progressive", info, iServiceInformation.sProgressive, convert=convert)
return convert(v)

@cached
def getBoolean(self):
Expand All @@ -185,8 +119,21 @@ def getBoolean(self):
video_height = None
video_width = None
video_aspect = None
video_height = self._getVideoHeight(info)
video_width = self._getVideoWidth(info)
if path.exists("/proc/stb/vmpeg/0/yres"):
f = open("/proc/stb/vmpeg/0/yres", "r")
try:
video_height = int(f.read(),16)
except:
pass
f.close()

if path.exists("/proc/stb/vmpeg/0/xres"):
f = open("/proc/stb/vmpeg/0/xres", "r")
try:
video_width = int(f.read(),16)
except:
pass
f.close()

if path.exists("/proc/stb/vmpeg/0/aspect"):
f = open("/proc/stb/vmpeg/0/aspect", "r")
Expand All @@ -213,6 +160,7 @@ def getBoolean(self):
while idx < n:
i = audio.getTrackInfo(idx)
description = i.getDescription()
#if description in ("AC3", "AC-3", "AC3+", "DTS"):
if description and description.split()[0] in ("AC3", "AC-3", "AC3+", "DTS"): # some audio description has 'audio' as additional value (e.g. 'AC-3 audio')
if self.type == self.IS_MULTICHANNEL:
return True
Expand Down Expand Up @@ -279,8 +227,6 @@ def getBoolean(self):
return video_width > 2160 and video_width <= 3840 and info.getInfo(iServiceInformation.sGamma) == 3
elif self.type == self.IS_HDHDR:
return video_width >= 721 and video_width < 1980 and info.getInfo(iServiceInformation.sGamma) > 0
elif self.PROGRESSIVE:
return bool(self._getProgressive(info))
return False

boolean = property(getBoolean)
Expand All @@ -293,9 +239,35 @@ def getText(self):
return ""

if self.type == self.XRES:
return self._getVideoWidthStr(info)
video_width = None
if path.exists("/proc/stb/vmpeg/0/xres"):
f = open("/proc/stb/vmpeg/0/xres", "r")
try:
video_width = int(f.read(),16)
except:
pass
f.close()
if not video_width:
try:
video_width = int(self.getServiceInfoString(info, iServiceInformation.sVideoWidth))
except:
return ""
return "%d" % video_width
elif self.type == self.YRES:
return self._getVideoHeightStr(info)
video_height = None
if path.exists("/proc/stb/vmpeg/0/yres"):
f = open("/proc/stb/vmpeg/0/yres", "r")
try:
video_height = int(f.read(),16)
except:
pass
f.close()
if not video_height:
try:
video_height = int(self.getServiceInfoString(info, iServiceInformation.sVideoHeight))
except:
return ""
return "%d" % video_height
elif self.type == self.APID:
return self.getServiceInfoString(info, iServiceInformation.sAudioPID)
elif self.type == self.VPID:
Expand Down Expand Up @@ -327,48 +299,10 @@ def getText(self):
except:
return "N/A fps"
return video_rate, lambda x: "%d fps" % ((x+500)/1000)
elif self.type == self.PROGRESSIVE:
return self._getProgressiveStr(info)
elif self.type == self.TRANSFERBPS:
return self.getServiceInfoString(info, iServiceInformation.sTransferBPS, lambda x: "%d kB/s" % (x/1024))
elif self.type == self.HAS_HBBTV:
return info.getInfoString(iServiceInformation.sHBBTVUrl)
elif self.type == self.FREQ_INFO:
feinfo = service.frontendInfo()
if feinfo is None:
return ""
feraw = feinfo.getAll(False)
if feraw is None:
return ""
fedata = ConvertToHumanReadable(feraw)
if fedata is None:
return ""
frequency = fedata.get("frequency")
sr_txt = "Sr:"
polarization = fedata.get("polarization_abbreviation")
if polarization is None:
polarization = ""
symbolrate = str(int(fedata.get("symbol_rate", 0)))
if symbolrate == "0":
sr_txt = ""
symbolrate = ""
fec = fedata.get("fec_inner")
if fec is None:
fec = ""
out = "Freq: %s %s %s %s %s" % (frequency, polarization, sr_txt, symbolrate, fec)
return out
elif self.type == self.VIDEO_INFO:
if self._isHDMIIn(info):
return ""
progressive = self._getProgressiveStr(info)
fieldrate = self._getFrameRate(info)
if fieldrate > 0:
if progressive == 'i':
fieldrate *= 2
fieldrate = "%dHz" % ((fieldrate + 500) / 1000,)
else:
fieldrate = ""
return "%sx%s%s %s" % (self._getVideoWidthStr(info), self._getVideoHeightStr(info), progressive, fieldrate)
return ""

text = property(getText)
Expand Down Expand Up @@ -423,12 +357,4 @@ def getValue(self):

def changed(self, what):
if what[0] != self.CHANGED_SPECIFIC or what[1] in self.interesting_events:
# Only want to update on iPlayableService.evStart
# if the service is HDMI IN.
if len(what) > 1 and what[1] == iPlayableService.evStart:
service = self.source.service
info = service and service.info()
if info and not self._isHDMIIn(info):
return

Converter.changed(self, what)

0 comments on commit 2ce8a5a

Please sign in to comment.