X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/cd548f05df305c56f7919685499c85998d7c0067..bd99abbd6982a1b30363a41fa28a01e18278cdfc:/lib/dvb/epgcache.cpp diff --git a/lib/dvb/epgcache.cpp b/lib/dvb/epgcache.cpp index 885ffc86..e70ed0ab 100644 --- a/lib/dvb/epgcache.cpp +++ b/lib/dvb/epgcache.cpp @@ -460,7 +460,14 @@ void eEPGCache::sectionRead(const __u8 *data, int source, channel_data *channel) if ( data[ptr-1] < 0x40 ) --ptr; - uniqueEPGKey service( HILO(eit->service_id), HILO(eit->original_network_id), HILO(eit->transport_stream_id) ); + // Cablecom HACK .. tsid / onid in eit data are incorrect.. so we use + // it from running channel (just for current transport stream eit data) + bool use_transponder_chid = source == SCHEDULE || (source == NOWNEXT && data[0] == 0x4E); + eDVBChannelID chid = channel->channel->getChannelID(); + uniqueEPGKey service( HILO(eit->service_id), + use_transponder_chid ? chid.original_network_id.get() : HILO(eit->original_network_id), + use_transponder_chid ? chid.transport_stream_id.get() : HILO(eit->transport_stream_id)); + eit_event_struct* eit_event = (eit_event_struct*) (data+ptr); int eit_event_size; int duration; @@ -1901,21 +1908,22 @@ PyObject *eEPGCache::lookupEvent(ePyObject list, ePyObject convertFunc) else { eServiceEvent evt; - Event *ev=0; + const eventData *ev_data=0; if (stime) { singleLock s(cache_lock); if (type == 2) - lookupEventId(ref, event_id, ev); + lookupEventId(ref, event_id, ev_data); else - lookupEventTime(ref, stime, ev, type); - if (ev) + lookupEventTime(ref, stime, ev_data, type); + if (ev_data) { const eServiceReferenceDVB &dref = (const eServiceReferenceDVB&)ref; - evt.parseFrom(ev, (dref.getTransportStreamID().get()<<16)|dref.getOriginalNetworkID().get()); + Event ev((uint8_t*)ev_data->get()); + evt.parseFrom(&ev, (dref.getTransportStreamID().get()<<16)|dref.getOriginalNetworkID().get()); } } - if (ev) + if (ev_data) { if (handleEvent(&evt, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs)) return 0; // error @@ -2277,15 +2285,16 @@ PyObject *eEPGCache::search(ePyObject arg) { // create servive event eServiceEvent ptr; - Event *ev=0; + const eventData *ev_data=0; if (needServiceEvent) { - if (lookupEventId(ref, evid, ev)) + if (lookupEventId(ref, evid, ev_data)) eDebug("event not found !!!!!!!!!!!"); else { const eServiceReferenceDVB &dref = (const eServiceReferenceDVB&)ref; - ptr.parseFrom(ev, (dref.getTransportStreamID().get()<<16)|dref.getOriginalNetworkID().get()); + Event ev((uint8_t*)ev_data->get()); + ptr.parseFrom(&ev, (dref.getTransportStreamID().get()<<16)|dref.getOriginalNetworkID().get()); } } // create service name @@ -2334,7 +2343,7 @@ PyObject *eEPGCache::search(ePyObject arg) // create tuple ePyObject tuple = PyTuple_New(argcount); // fill tuple - fillTuple2(tuple, argstring, argcount, evit->second, ev ? &ptr : 0, service_name, service_reference); + fillTuple2(tuple, argstring, argcount, evit->second, ev_data ? &ptr : 0, service_name, service_reference); PyList_Append(ret, tuple); Py_DECREF(tuple); --maxcount;