ist im letzten unstable immer noch so.
Beiträge von alpha
-
-
hab den standard fhd skin
-
es geht darum, dass der versionsstring hinten abgeschnitten wird und man das datum nicht vollstaendig sieht.
-
-
-
arg... muss radio an erster stelle stehen? timer macht doch eigentlich mehr sinn fuer eine tv-settop box...
-
@juanito_perez: habe mich auch ein bisschen mit eit parsing beschaeftigt... und die beiden mir bekannten sources von emc und ams angeschaut.
die emc version scheint etwas universeller zu sein, waehrend die ams version objektorientierter ist.
deine version gibt's nicht als source, oder? -
hier mal als beispiel der emc eit parser in python:
Code
Alles anzeigendef __parse(self, data): EIT_LINKAGE_DESCRIPTOR = 0x4a EIT_SHORT_EVENT_DESCRIPTOR = 0x4d EIT_EXTENDED_EVENT_DESCRIPTOR = 0x4e EIT_COMPONENT_DESCRIPTOR = 0x50 EIT_CONTENT_DESCRIPTOR = 0x54 EIT_PARENTAL_RATING_DESCRIPTOR = 0x55 EIT_PDC_DESCRIPTOR = 0x69 def parse_header(data, pos): e = struct.unpack(">HHBBBBBBH", data[pos:pos + 12]) #event_id = e[0] date = parseMJD(e[1]) # Y, M, D time = unBCD(e[2]), unBCD(e[3]), unBCD(e[4]) # HH, MM, SS duration = unBCD(e[5]), unBCD(e[6]), unBCD(e[7]) # HH, MM, SS running_status = (e[8] & 0xe000) >> 13 #free_CA_mode = e[8] & 0x1000 #descriptors_len = e[8] & 0x0fff if running_status in [1, 2]: self.eit['when'] = "NEXT" elif running_status in [3, 4]: self.eit['when'] = "NOW" self.eit['startdate'] = date self.eit['starttime'] = time self.eit['duration'] = duration return self.eit = {} epglang = config.MVC.epglang.value lang = (language_iso639_2to3(epglang.lower()[:2])).upper() # Parse the data if len(data) >= 12: pos = 0 parse_header(data, pos) pos += 12 name_event_descriptor = [] name_event_descriptor_multi = [] name_event_codepage = None short_event_descriptor = [] short_event_descriptor_multi = [] short_event_codepage = None extended_event_descriptor = [] extended_event_descriptor_multi = [] extended_event_codepage = None component_descriptor = [] content_descriptor = [] linkage_descriptor = [] parental_rating_descriptor = [] pdc_descriptor = [] prev1_ISO_639_language_code = "x" prev2_ISO_639_language_code = "x" while pos < len(data) - 2: rec = ord(data[pos]) length = ord(data[pos + 1]) + 2 if rec == EIT_SHORT_EVENT_DESCRIPTOR: #descriptor_tag = ord(data[pos + 1]) #descriptor_length = ord(data[pos + 2]) ISO_639_language_code = str(data[pos + 2:pos + 5]).upper() event_name_length = ord(data[pos + 5]) name_event_description = "" for i in range(pos + 6, pos + 6 + event_name_length): if str(ord(data[i])) == "10" or int(str(ord(data[i]))) > 31: name_event_description += data[i] if not name_event_codepage: try: byte1 = str(ord(data[pos + 6])) except Exception: byte1 = '' name_event_codepage = self.__determineCodepage(byte1) # if name_event_codepage: # print("MVC: [EIT] Found name_event encoding-type: " + name_event_codepage) short_event_description = "" if not short_event_codepage: try: byte1 = str(ord(data[pos + 7 + event_name_length])) except Exception: byte1 = '' short_event_codepage = self.__determineCodepage(byte1) # if short_event_codepage: # print("MVC: [EIT] Found short_event encoding-type: " + short_event_codepage) for i in range(pos + 7 + event_name_length, pos + length): if ord(data[i]) == EIT_EXTENDED_EVENT_DESCRIPTOR: break if str(ord(data[i])) == "10" or int(str(ord(data[i]))) > 31: short_event_description += data[i] if ISO_639_language_code == lang: short_event_descriptor.append(short_event_description) name_event_descriptor.append(name_event_description) if (ISO_639_language_code == prev1_ISO_639_language_code) or (prev1_ISO_639_language_code == "x"): short_event_descriptor_multi.append(short_event_description) name_event_descriptor_multi.append(name_event_description) else: short_event_descriptor_multi.append("\n\n" + short_event_description) name_event_descriptor_multi.append(" " + name_event_description) prev1_ISO_639_language_code = ISO_639_language_code elif rec == EIT_EXTENDED_EVENT_DESCRIPTOR: ISO_639_language_code = "" for i in range(pos + 3, pos + 6): ISO_639_language_code += data[i] ISO_639_language_code = ISO_639_language_code.upper() extended_event_description = "" if not extended_event_codepage: try: byte1 = str(ord(data[pos + 8])) except Exception: byte1 = '' extended_event_codepage = self.__determineCodepage(byte1) # if extended_event_codepage: # print("MVC: [EIT] Found extended_event encoding-type: " + extended_event_codepage) for i in range(pos + 8, pos + length): if str(ord(data[i])) == "10" or int(str(ord(data[i]))) > 31: extended_event_description += data[i] if ISO_639_language_code == lang: extended_event_descriptor.append(extended_event_description) if (ISO_639_language_code == prev2_ISO_639_language_code) or (prev2_ISO_639_language_code == "x"): extended_event_descriptor_multi.append(extended_event_description) else: extended_event_descriptor_multi.append("\n\n" + extended_event_description) prev2_ISO_639_language_code = ISO_639_language_code elif rec == EIT_COMPONENT_DESCRIPTOR: component_descriptor.append(data[pos + 8:pos + length]) elif rec == EIT_CONTENT_DESCRIPTOR: content_descriptor.append(data[pos + 8:pos + length]) elif rec == EIT_LINKAGE_DESCRIPTOR: linkage_descriptor.append(data[pos + 8:pos + length]) elif rec == EIT_PARENTAL_RATING_DESCRIPTOR: parental_rating_descriptor.append(data[pos + 2:pos + length]) elif rec == EIT_PDC_DESCRIPTOR: pdc_descriptor.append(data[pos + 5:pos + length]) else: print("MVC: EitFile: __parse: unsupported descriptor: %x %x" % (rec, length)) print("MVC: EitFile: __parse: %s" % (data[pos:pos + length])) pass pos += length if name_event_descriptor: name_event_descriptor = "".join(name_event_descriptor) else: name_event_descriptor = ("".join(name_event_descriptor_multi)).strip() self.eit['name'] = convertToUtf8(name_event_descriptor, name_event_codepage) if short_event_descriptor: short_event_descriptor = "".join(short_event_descriptor) else: short_event_descriptor = ("".join(short_event_descriptor_multi)).strip() self.eit['short_description'] = convertToUtf8(short_event_descriptor, short_event_codepage) if extended_event_descriptor: extended_event_descriptor = "".join(extended_event_descriptor) else: extended_event_descriptor = ("".join(extended_event_descriptor_multi)).strip() extended_event_descriptor = convertToUtf8(extended_event_descriptor, extended_event_codepage) if extended_event_descriptor: # This will fix EIT data of RTL group with missing line breaks in extended event description extended_event_descriptor = re.sub('((?:Moderat(?:ion:|or(?:in){0,1})|Vorsitz: |Jur(?:isten|y): |G(?:\xC3\xA4|a)st(?:e){0,1}: |Mit (?:Staatsanwalt|Richter(?:in){0,1}|den Schadenregulierern) |Julia Leisch).*?[a-z]+)(\'{0,1}[0-9A-Z\'])', r'\1\n\n\2', extended_event_descriptor) self.eit['description'] = extended_event_descriptor
-
verstehe ich das richtig, dass das geminilocale deb nur den link zum gemini feed in der dream erweiterungsverwaltung installiert?
-
"play and watch all your media"
den bildbetrachter finde ich uebrigens "nicht schlecht"
-
bei laengeren sendungen tritt das nach meiner beobachtung nicht auf.
-
autotimer ist nicht beteiligt. ob in der infobar die korrekte sendung angezeigt wird, kann ich im moment nicht sagen... wuerde aber mal ja sagen, da mir noch nie eine falsche sendung in der infobar/lcd aufgefallen ist.
ich vermute mal, dass es mit der sendungslaenge und der nachlaufzeit zusammenhaengt und dreamos bei ner 15 minuetigen sendung mit 30 minuten nachlaufzeit einfach das falsche event in die eit schreibt. -
nein, an meinen aenderungen kann es nicht liegen... die greifen nur beim abspielen einer aufnahme... nicht bei der aufnahme selbst.
ich starte die aufnahme ueber epg, wobei die sendung schon begonnen hat. -
also ich kann das hier konsistent mit kurzen sendungen reproduzieren. deswegen denke ich, dass es nicht an falsch gesendetem epg liegt.
-
nachlaufzeit ist 30 min
-
hatte schon oefter den fall, dass im .eit file nicht die event info der aufnahme war sondern die der nachfolgenden sendung.
20180913 1955 - Das Erste HD - Tagesschau.eit.txt
habe tagesschau aufgenommen, aber im .eit file ist die info von "die fuechsin", die im anschluss an die tagesschau laeuft.
ist dieser bug bekannt? -
@Reichi:
vielen dank, dass du antwortest.
dachte, da es von beiden klassen jeweils nur eine instanz gibt und in der screen-klasse listenfunktionen implementiert sind, die quasi nur auf die listenfunktionen der guicomponent klasse zugreifen, wuerde eine konsolidierung in eine klasse die sache etwas uebersichtlicher machen.
aber wenn sich das nicht so einfach machen laesst, kann ich auch den code in 2 klassen lassen. so funktioniert es ja bisher. -
das ist mir schon klar... aber die frage ist, ob der prozess noch lange blockiert wird, da die arm-socs ja pfeilschnell son bildchen dekodiert haben.
spinner kommen jedenfalls keine. -
ich habe im code zwei arten z.b. fuer cover display gefunden:
- eine asynchrone, bei der nach startdecode returned wird und dann nach dem ende der dekodierung eine callback routine aufgerufen wird,
- und eine synchrone, bei der die dekodierung synchron gemacht und keine callback routine aufgerufen wird.
die frage ist, ob die asynchrone methode noch noetig ist. -
muss man eigentlich heutzutage noch jpeg-dekodierung mit callback machen?
die socs sollten mittlerweile leistungsfaehig genug sein, sodass man das nicht mehr braucht, oder?