abu baniaz (12-03-21)
As far as I am aware, CrossEPG reads the Sky EPG transponder data and stores it in its own database and then populates the EPG cache afterwards. I don't know whether it shares or uses the same code used by the OpenTV reader that EPGRefresh or OpenTVzapper calls. So, it may not encounter the same corruption issue.
GB Quad Plus, Mut@nt HD51, AX HD61, 80cm dish and Supreme Dark motor. Sony STR-DN 1060, Sony UHP-H1 Bluray, Odroid N2+ (CoreElec), Monitor Audio Bronze 5.1 speakers
bbbuk (12-03-21)
If you install RadiotimesXmltvEmulator from the feed, as it is based on CrossEPG, you should also see these bogus events in the xmltv file that it generated in /tmp
Andy_Hazza (12-03-21),Huevos (12-03-21)
I never noticed before... No event_id in that format.
Code:<programme start="20210316110000 +0100" stop="20210316120000 +0100" channel="282_2_6155"> <title lang="en">Lorraine</title> <sub-title lang="en">Entertainment - Magazine</sub-title> <desc lang="en">Lorraine Kelly presents a topical mix of entertainment, discussion and showbiz glamour as well as the latest fashion, food and celebrity gossip.</desc> </programme>
Andy_Hazza (12-03-21),Joe_90 (12-03-21)
Any sign of the ghost events in that format?
GB Quad Plus, Mut@nt HD51, AX HD61, 80cm dish and Supreme Dark motor. Sony STR-DN 1060, Sony UHP-H1 Bluray, Odroid N2+ (CoreElec), Monitor Audio Bronze 5.1 speakers
"tvheadend" has some interesting (and very old) comments about event_id's. eg...
Code:https://github.com/tvheadend/tvheadend/commit/be1a42d9092550ffa892e39ef91026e1405192d2Try to detect duplicate EPG entries from the DVB feed and adjust
EPG accordingly. The EPG code will search for events with the same
DVB event ID +- 2 events from the current one. If the event id is
equal, the prvious (old) entry will be removed in favor of the new one.
Reason for not blindingly trusting the event id is that some networks
seem to (incorrectly) reuse IDs.
Sorry - I couldn't work on this last night - I had to get up early this morning for something.
Tonight however I have:
This is the section of opentv.cpp I changed to log stuff, the lines I have added/changed are marked with //BB
Just after midnight I see the "ghost events" showing with startMjd corresponding to today (the day that started just some minutes ago) and startSecond corresponding to start times of over 24:00.Code:OpenTvTitle::OpenTvTitle(const uint8_t * const buffer, uint16_t startMjd) { uint8_t descriptor_tag = buffer[0]; if (descriptor_tag == OPENTV_EVENT_TITLE_DESCRIPTOR) { uint8_t descriptor_length = buffer[1]; uint8_t titleLength = descriptor_length > 7 ? descriptor_length-7 : 0; uint32_t startSecond = (UINT16(&buffer[2]) << 1); //BB startTimeBcd = ((startMjd - 40587) * 86400) + startSecond; //BB duration = UINT16(&buffer[4]) << 1; //genre content //uint8_t flag1 = buffer[6]; //uint8_t flag2 = buffer[7]; //uint8_t flag3 = buffer[8]; char tmp[OPENTV_EVENT_TITLE_LENGTH]; memset(tmp, '\0', OPENTV_EVENT_TITLE_LENGTH); if (!huffman_decode (buffer + 9, titleLength, tmp, OPENTV_EVENT_TITLE_LENGTH * 2, false)) tmp[0] = '\0'; title = convertDVBUTF8(tmp, sizeof(tmp), 5); eDebug("[OpenTV] +titl:\"%s\" SMJD:%i Ss:%i SBD:%i len:%i", tmp, startMjd, startSecond, startTimeBcd, duration); //BB /* storing all the crc unique titles in the title reader phase, would give us a titles reduction of 155,000 down to 13,000! we currently add/delete as we go with reduction size ~5000 */ uint8_t *otvt = new uint8_t[titleLength]; memcpy(otvt, buffer + 9, titleLength); crc32 = opentv_crc(otvt, titleLength); delete [] otvt; } }
The start times seem to be the old original start time plus 2^17 seconds which is 131072 (or 0x20000) seconds which is 2184 (or 0x888) minutes and 32 seconds.
but thinking hard.
Code:https://www.brian-gregory.me.uk/GDL/Putty%20zgemmah7.lan%2020210312-124826.log https://www.brian-gregory.me.uk/GDL/Putty%20zgemmah7.lan%2020210312-233623.log https://www.brian-gregory.me.uk/GDL/Putty%20zgemmah7.lan%2020210313-000145.log
Last edited by BrokenUnusableAccount; 13-03-21 at 02:25.
MiracleBox Prem Twin HD - 2@DVB-T2 + Xtrend et8000 - 5(incl. 2 different USBs)@DVB-T2[terrestrial - UK Freeview HD, Sandy Heath] - LAN/USB-stick/HDD
I think it is as if it's a signed number but where as a normal x bit signed number when incremented the meaning goes from +(2^x)-1 to -(2^x) here the meaning changes from +ve to -ve at a different point, probably when it's over 86400 seconds.
The 0x20000 error is because the program currently just always interprets it as a positive unsigned value.
Last edited by BrokenUnusableAccount; 13-03-21 at 02:35. Reason: typo, rephrase
Last edited by birdman; 13-03-21 at 02:40.
MiracleBox Prem Twin HD - 2@DVB-T2 + Xtrend et8000 - 5(incl. 2 different USBs)@DVB-T2[terrestrial - UK Freeview HD, Sandy Heath] - LAN/USB-stick/HDD
I think I must have explained it badly. Did my second message make it clearer?
They are in a funny format.
Say something yesterday really started at 23:50 on 12th March.
I think they're trying to send it as 13th March starting at minus 00:10 but the software doesn't currently realise sky think negative start times are a thing.
Or maybe something earlier in the software is messing it up, but I don't think that's likely.
Last edited by BrokenUnusableAccount; 13-03-21 at 02:53.
No.
The relevant thing is that (assuming UINT16 returns a 16-bit unsigned int)
should never be able to set the 0x20000 bit. Regardless of who intends what.Code:(UINT16(&buffer[2]) << 1);
The problem is that I cannot find a definition of UINT16 anywhere.
EDIT: Found it. It's in the dvbsi++ bytestream.h header file.
Code:// deprecated #define UINT16(p) r16(p) #if __BYTE_ORDER == __BIG_ENDIAN #define r16(p) (*(const uint16_t * const)(p)) ... #else #define r16(p) bswap_16(*(const uint16_t * const)p)
Last edited by birdman; 13-03-21 at 03:05.
MiracleBox Prem Twin HD - 2@DVB-T2 + Xtrend et8000 - 5(incl. 2 different USBs)@DVB-T2[terrestrial - UK Freeview HD, Sandy Heath] - LAN/USB-stick/HDD
Last edited by BrokenUnusableAccount; 13-03-21 at 03:11. Reason: remove erroneous bit