RESULT eServiceTS::start() { ePtr<eDVBResourceManager> rmgr; eDVBResourceManager::getInstance(rmgr); // FIXMEE hardcoded chid... this only works for one eServiceWebTS eDVBChannelID chid; chid.dvbnamespace = eDVBNamespace(0); chid.transport_stream_id = eTransportStreamID(0); chid.original_network_id = eOriginalNetworkID(0); chid.pvr_source = "/eServiceTS"; if (rmgr->allocateChannel(chid, m_channel)) { eDebug("Cannot allocate pvr channel"); return -1; } if (m_channel->getDemux(m_decodedemux, iDVBChannel::capDecode) != 0) { eDebug("Cannot allocate decode-demux"); return -1; } if (m_decodedemux->getMPEGDecoder(m_decoder, 1) != 0) { eDebug("Cannot allocate MPEGDecoder"); return -1; } if (m_destfd == -1) { m_destfd = m_decodedemux->openDVR(O_WRONLY); if (m_destfd < 0) { eDebug("openDVR failed"); return -1; } } m_decoder->setVideoPID(m_vpid, eDVBVideo::MPEG2); m_decoder->setAudioPID(m_apid, eDVBAudio::aMPEG); m_streamthread = new eStreamThread(); CONNECT(m_streamthread->m_event, eServiceTS::recv_event); m_decoder->pause(); if (unpause() != 0) return -1; m_event(this, evStart); return 0; }
void eEventDisplay::setEPGSearchEvent(eServiceReferenceDVB &Ref, EITEvent *event, eString Service) { ref = Ref; service = Service; time_t time = event->start_time+event->duration/2; EITEvent *tmp = event->event_id != -1 ? eEPGCache::getInstance()->lookupEvent( ref, event->event_id ) : 0; if ( !tmp ) tmp = eEPGCache::getInstance()->lookupEvent( ref, time ); evt = tmp; valid=0; long_description->hide(); long_description->move( ePoint(0,0) ); if (evt) { eString _title=0, _long_description=""; eString _eventDate=""; eString _eventTime=""; tm *begin=event->start_time!=-1?localtime(&event->start_time):0; if (begin) { valid |= 1; _eventTime.sprintf("%02d:%02d", begin->tm_hour, begin->tm_min); _eventDate=eString().sprintf("%02d.%02d.%4d", begin->tm_mday, begin->tm_mon+1, begin->tm_year+1900); } time_t endtime=event->start_time+event->duration; tm *end=event->start_time!=-1?localtime(&endtime):0; if (end) { valid |= 2; _eventTime+=eString().sprintf(" - %02d:%02d", end->tm_hour, end->tm_min); } for (ePtrList<Descriptor>::iterator d(evt->descriptor); d != evt->descriptor.end(); ++d) { if (d->Tag()==DESCR_SHORT_EVENT) { ShortEventDescriptor *s=(ShortEventDescriptor*)*d; valid |= 4; _title=s->event_name; #ifndef DISABLE_LCD if (LCDElement) LCDElement->setText(s->text); #endif if ((s->text.length() > 0) && (s->text!=_title)) { valid |= 8; _long_description+=s->text; _long_description+="\n\n"; } } else if (d->Tag()==DESCR_EXTENDED_EVENT) { ExtendedEventDescriptor *ss=(ExtendedEventDescriptor*)*d; valid |= 16; _long_description+=ss->text; } else if (d->Tag() == DESCR_LINKAGE) { if ( !ref.path ) { LinkageDescriptor *ld=(LinkageDescriptor*)*d; if (ld->linkage_type==0xB0) { eServiceReferenceDVB MySubService(ref.getDVBNamespace(), eTransportStreamID(ld->transport_stream_id), eOriginalNetworkID(ld->original_network_id), eServiceID(ld->service_id), 7); ref = MySubService; } } } } if (!_title) _title = _("no information is available"); if ( !ref.path ) channel->setText(service); eventTime->setText(_eventTime); eventDate->setText(_eventDate); setText(_title); if (!_long_description) long_description->setText(_("no description is available")); else long_description->setText(_long_description); checkTimerIcon(evt); } else { setText(service); long_description->setText(_("no description is available")); } updateScrollbar(); long_description->show(); }
eBitrateCalc::eBitrateCalc(int pid, int dvbnamespace, int tsid, int onid, int refreshintervall, int buffer_size): m_size(0), m_refresh_intervall(refreshintervall) { m_send_data_timer = eTimer::create(eApp); CONNECT(m_send_data_timer->timeout, eBitrateCalc::sendDataTimerTimeoutCB); eDVBChannelID chid; //(eDVBNamespace(dvbnamespace), eTransportStreamID(tsid), eOriginalNetworkID(onid)); <-- weird, that does not work chid.dvbnamespace = eDVBNamespace(dvbnamespace); chid.transport_stream_id = eTransportStreamID(tsid); chid.original_network_id = eOriginalNetworkID(onid); ePtr<eDVBResourceManager> res_mgr; eDVBResourceManager::getInstance(res_mgr); eUsePtr<iDVBChannel> channel; int success = 0; m_reader = NULL; if (!res_mgr->allocateChannel(chid, channel, false)) { ePtr<iDVBDemux> demux; if (!channel->getDemux(demux)) { if (!demux->createPESReader(eApp, m_reader)) { if (!m_reader->connectRead(slot(*this, &eBitrateCalc::dataReady), m_pes_connection)) { channel->connectStateChange(slot(*this, &eBitrateCalc::stateChange), m_channel_connection); success = 1; } else eDebug("[eBitrateCalc] connect pes reader failed..."); } else eDebug("[eBitrateCalc] create PES reader failed..."); } else eDebug("[eBitrateCalc] getDemux failed..."); } else { eDebug("[eBitrateCalc] allocate channel failed...trying pvr_allocate_demux"); ePtr<eDVBAllocatedDemux> pvr_allocated_demux; int i = 0; if (!res_mgr->allocateDemux(NULL,pvr_allocated_demux,i)) { eDVBDemux &demux = pvr_allocated_demux->get(); if (!demux.createPESReader(eApp, m_reader)) { if (!m_reader->connectRead(slot(*this, &eBitrateCalc::dataReady), m_pes_connection)) success = 1; else eDebug("[eBitrateCalc] connect pes reader failed..."); } else eDebug("[eBitrateCalc] create PES reader failed..."); } else eDebug("[eBitrateCalc] allocate pvr_allocated_demux failed..."); } if (m_reader && success) { clock_gettime(CLOCK_MONOTONIC, &m_start); m_reader->setBufferSize(buffer_size); m_reader->start(pid); m_send_data_timer->start(m_refresh_intervall, true); } else sendData(-1,0); }
static eServiceReferenceDVB getServiceByID(const char *id) { eTransponderList *tl=eDVB::getInstance()->settings->getTransponders(); if (!tl) return eServiceReferenceDVB(); int dvb_namespace, original_network_id, transport_stream_id, service_id, service_type; if (sscanf(id, "S:%x:%x:%x:%x:%x", &dvb_namespace, &original_network_id, &transport_stream_id, &service_id, &service_type)!=4) if (sscanf(id, "E:%x:%x:%x:%x:%x", &dvb_namespace, &original_network_id, &transport_stream_id, &service_id, &service_type)!=4) return eServiceReferenceDVB(); return eServiceReferenceDVB(eDVBNamespace(dvb_namespace), eTransportStreamID(transport_stream_id), eOriginalNetworkID(original_network_id), eServiceID(service_id), service_type); }