本文整理汇总了C++中eDebug函数的典型用法代码示例。如果您正苦于以下问题:C++ eDebug函数的具体用法?C++ eDebug怎么用?C++ eDebug使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了eDebug函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: eDebug
void eSocket::notifier(int what)
{
if ((what & eSocketNotifier::Read) && (mystate == Connection))
{
int bytesavail=256;
if (issocket)
if (ioctl(getDescriptor(), FIONREAD, &bytesavail)<0)
eDebug("FIONREAD failed.\n");
{
if (issocket)
{
if (!bytesavail) // does the REMOTE END has closed the connection? (no Hungup here!)
{
writebuffer.clear();
close();
return;
}
}
else // when operating on terminals, check for break
{
serial_icounter_struct icount;
memset(&icount, 0, sizeof(icount));
if (!ioctl(getDescriptor(), TIOCGICOUNT, &icount))
{
if (last_break == -1)
last_break = icount.brk;
else if (last_break != icount.brk)
{
last_break = icount.brk;
readbuffer.fromfile(getDescriptor(), bytesavail);
readbuffer.clear();
writebuffer.clear();
rsn->setRequested(rsn->getRequested()&~eSocketNotifier::Write);
write(getDescriptor(), "BREAK!", 6);
hangup();
return;
}
}
else
eDebug("TIOCGICOUNT failed(%m)");
}
int r;
if ((r=readbuffer.fromfile(getDescriptor(), bytesavail)) != bytesavail)
if (issocket)
eDebug("fromfile failed!");
readyRead_();
}
} else if (what & eSocketNotifier::Write)
{
if ((mystate == Connection) || (mystate == Closing))
{
if (!writebuffer.empty())
{
bytesWritten_(writebuffer.tofile(getDescriptor(), 65536));
if (writebuffer.empty())
{
rsn->setRequested(rsn->getRequested()&~eSocketNotifier::Write);
if (mystate == Closing)
{
close(); // warning, we might get destroyed after close.
return;
}
}
} else
eDebug("got ready to write, but nothin in buffer. strange.");
if (mystate == Closing)
close();
} else if (mystate == Connecting)
{
mystate=Connection;
rsn->setRequested(rsn->getRequested()&~eSocketNotifier::Write);
int res;
socklen_t size=sizeof(res);
::getsockopt(getDescriptor(), SOL_SOCKET, SO_ERROR, &res, &size);
if (!res)
connected_();
else
{
close();
error_(res);
}
}
} else if (what & eSocketNotifier::Hungup)
{
if (mystate == Connection || (mystate == Closing && issocket) )
{
writebuffer.clear();
close();
} else if (mystate == Connecting)
{
int res;
socklen_t size=sizeof(res);
::getsockopt(getDescriptor(), SOL_SOCKET, SO_ERROR, &res, &size);
close();
error_(res);
}
}
}
开发者ID:dazulrich,项目名称:dvbapp,代码行数:100,代码来源:socket.cpp
示例2: eDebug
RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBAllocatedDemux> &demux, int &cap)
{
/* find first unused demux which is on same adapter as frontend (or any, if PVR)
never use the first one unless we need a decoding demux. */
eDebug("allocate demux");
eSmartPtrList<eDVBRegisteredDemux>::iterator i(m_demux.begin());
if (i == m_demux.end())
return -1;
ePtr<eDVBRegisteredDemux> unused;
if (m_boxtype == DM7025) // ATI
{
/* FIXME: hardware demux policy */
int n=0;
if (!(cap & iDVBChannel::capDecode))
{
if (m_demux.size() > 2) /* assumed to be true, otherwise we have lost anyway */
{
++i, ++n;
++i, ++n;
}
}
for (; i != m_demux.end(); ++i, ++n)
{
int is_decode = n < 2;
int in_use = is_decode ? (i->m_demux->getRefCount() != 2) : i->m_inuse;
if ((!in_use) && ((!fe) || (i->m_adapter == fe->m_adapter)))
{
if ((cap & iDVBChannel::capDecode) && !is_decode)
continue;
unused = i;
break;
}
}
}
else
{
iDVBAdapter *adapter = fe ? fe->m_adapter : m_adapter.begin(); /* look for a demux on the same adapter as the frontend, or the first adapter for dvr playback */
int source = fe ? fe->m_frontend->getDVBID() : -1;
cap |= capHoldDecodeReference; // this is checked in eDVBChannel::getDemux
if (!fe)
{
/*
* For pvr playback, start with the last demux.
* On some hardware, we have less ca devices than demuxes,
* so we should try to leave the first demuxes for live tv,
* and start with the last for pvr playback
*/
i = m_demux.end();
--i;
}
while (i != m_demux.end())
{
if (i->m_adapter == adapter)
{
if (!i->m_inuse)
{
/* mark the first unused demux, we'll use that when we do not find a better match */
if (!unused) unused = i;
}
else
{
/* demux is in use, see if we can share it */
if (i->m_demux->getSource() == source)
{
/*
* TODO: when allocating a dvr demux, we cannot share a used demux.
* We should probably always pick a free demux, to start a new pvr playback.
* Each demux is fed by its own dvr device, so each has a different memory source
*/
demux = new eDVBAllocatedDemux(i);
return 0;
}
}
}
if (fe)
{
++i;
}
else
{
--i;
}
}
}
if (unused)
{
demux = new eDVBAllocatedDemux(unused);
if (fe)
demux->get().setSourceFrontend(fe->m_frontend->getDVBID());
else
demux->get().setSourcePVR(0);
return 0;
//.........这里部分代码省略.........
开发者ID:katapip,项目名称:enigma2,代码行数:101,代码来源:dvb.cpp
示例3: doPrepare
int eDVBServiceRecord::doRecord()
{
int err = doPrepare();
if (err)
{
m_error = errTuneFailed;
m_event((iRecordableService*)this, evRecordFailed);
return err;
}
if (!m_tuned)
return 0; /* try it again when we are tuned in */
if (!m_record && m_tuned && !m_streaming && !m_simulate)
{
eDebug("Recording to %s...", m_filename.c_str());
::remove(m_filename.c_str());
int fd = ::open(m_filename.c_str(), O_WRONLY | O_CREAT | O_LARGEFILE | O_CLOEXEC, 0666);
if (fd == -1)
{
eDebug("eDVBServiceRecord - can't open recording file!");
m_error = errOpenRecordFile;
m_event((iRecordableService*)this, evRecordFailed);
return errOpenRecordFile;
}
ePtr<iDVBDemux> demux;
if (m_service_handler.getDataDemux(demux))
{
eDebug("eDVBServiceRecord - NO DEMUX available!");
m_error = errNoDemuxAvailable;
m_event((iRecordableService*)this, evRecordFailed);
return errNoDemuxAvailable;
}
demux->createTSRecorder(m_record);
if (!m_record)
{
eDebug("eDVBServiceRecord - no ts recorder available.");
m_error = errNoTsRecorderAvailable;
m_event((iRecordableService*)this, evRecordFailed);
return errNoTsRecorderAvailable;
}
m_record->setTargetFD(fd);
m_record->setTargetFilename(m_filename);
m_record->connectEvent(slot(*this, &eDVBServiceRecord::recordEvent), m_con_record_event);
m_target_fd = fd;
}
if (m_streaming)
{
m_state = stateRecording;
eDebug("start streaming...");
} else
{
eDebugNoNewLineStart("start recording...");
eDVBServicePMTHandler::program program;
if (m_service_handler.getProgramInfo(program))
eDebug("getting program info failed.");
else
{
std::set<int> pids_to_record;
pids_to_record.insert(0); // PAT
if (program.pmtPid != -1)
pids_to_record.insert(program.pmtPid); // PMT
int timing_pid = -1, timing_stream_type = -1;
iDVBTSRecorder::timing_pid_type timing_pid_type = iDVBTSRecorder::none;
eDebugNoNewLine("RECORD: have %zd video stream(s)", program.videoStreams.size());
if (!program.videoStreams.empty())
{
eDebugNoNewLine(" (");
for (std::vector<eDVBServicePMTHandler::videoStream>::const_iterator
i(program.videoStreams.begin());
i != program.videoStreams.end(); ++i)
{
pids_to_record.insert(i->pid);
if (timing_pid == -1)
{
timing_pid = i->pid;
timing_stream_type = i->type;
timing_pid_type = iDVBTSRecorder::video_pid;
}
if (i != program.videoStreams.begin())
eDebugNoNewLine(", ");
eDebugNoNewLine("%04x", i->pid);
}
eDebugNoNewLine(")");
}
eDebugNoNewLine(", and %zd audio stream(s)", program.audioStreams.size());
if (!program.audioStreams.empty())
{
eDebugNoNewLine(" (");
for (std::vector<eDVBServicePMTHandler::audioStream>::const_iterator
//.........这里部分代码省略.........
开发者ID:OpenLD,项目名称:enigma2-wetek,代码行数:101,代码来源:servicedvbrecord.cpp
示例4: main
int main(int argc, char **argv)
{
#if TMTWIN|1
MiniFTP_Thread *miniftp;
miniftp=new MiniFTP_Thread();
eSystemInfo *systeminfo;
systeminfo = new eSystemInfo();
#endif
#ifdef MEMLEAK_CHECK
atexit(DumpUnfreed);
#endif
#ifdef OBJECT_DEBUG
atexit(object_dump);
#endif
gst_init(&argc, &argv);
// set pythonpath if unset
setenv("PYTHONPATH", eEnv::resolve("${libdir}/enigma2/python").c_str(), 0);
printf("PYTHONPATH: %s\n", getenv("PYTHONPATH"));
bsodLogInit();
ePython python;
eMain main;
#if 1
ePtr<gMainDC> my_dc;
gMainDC::getInstance(my_dc);
//int double_buffer = my_dc->haveDoubleBuffering();
ePtr<gLCDDC> my_lcd_dc;
gLCDDC::getInstance(my_lcd_dc);
/* ok, this is currently hardcoded for arabic. */
/* some characters are wrong in the regular font, force them to use the replacement font */
for (int i = 0x60c; i <= 0x66d; ++i)
eTextPara::forceReplacementGlyph(i);
eTextPara::forceReplacementGlyph(0xfdf2);
for (int i = 0xfe80; i < 0xff00; ++i)
eTextPara::forceReplacementGlyph(i);
eWidgetDesktop dsk(my_dc->size());
eWidgetDesktop dsk_lcd(my_lcd_dc->size());
dsk.setStyleID(0);
dsk_lcd.setStyleID(my_lcd_dc->size().width() == 96 ? 2 : 1);
/* if (double_buffer)
{
eDebug(" - double buffering found, enable buffered graphics mode.");
dsk.setCompositionMode(eWidgetDesktop::cmBuffered);
} */
wdsk = &dsk;
lcddsk = &dsk_lcd;
dsk.setDC(my_dc);
dsk_lcd.setDC(my_lcd_dc);
dsk.setBackgroundColor(gRGB(0,0,0,0xFF));
#endif
/* redrawing is done in an idle-timer, so we have to set the context */
dsk.setRedrawTask(main);
dsk_lcd.setRedrawTask(main);
eDebug("Loading spinners...");
{
int i;
#define MAX_SPINNER 64
ePtr<gPixmap> wait[MAX_SPINNER];
for (i=0; i<MAX_SPINNER; ++i)
{
char filename[64];
std::string rfilename;
snprintf(filename, sizeof(filename), "${datadir}/enigma2/skin_default/spinner/wait%d.png", i + 1);
rfilename = eEnv::resolve(filename);
loadPNG(wait[i], rfilename.c_str());
if (!wait[i])
{
if (!i)
eDebug("failed to load %s! (%m)", rfilename.c_str());
else
eDebug("found %d spinner!\n", i);
break;
}
}
if (i)
my_dc->setSpinner(eRect(ePoint(100, 100), wait[0]->size()), wait, i);
else
my_dc->setSpinner(eRect(100, 100, 0, 0), wait, 1);
//.........这里部分代码省略.........
开发者ID:4doe,项目名称:enigma2-old,代码行数:101,代码来源:enigma.cpp
示例5: perror
fbClass::fbClass(const char *fb)
{
m_manual_blit=-1;
instance=this;
locked=0;
lfb = 0;
available=0;
cmap.start=0;
cmap.len=256;
cmap.red=red;
cmap.green=green;
cmap.blue=blue;
cmap.transp=trans;
fbFd=open(fb, O_RDWR);
if (fbFd<0)
{
perror(fb);
goto nolfb;
}
#if not defined(__sh__)
if (ioctl(fbFd, FBIOGET_VSCREENINFO, &screeninfo)<0)
{
perror("FBIOGET_VSCREENINFO");
goto nolfb;
}
#endif
fb_fix_screeninfo fix;
if (ioctl(fbFd, FBIOGET_FSCREENINFO, &fix)<0)
{
perror("FBIOGET_FSCREENINFO");
goto nolfb;
}
available=fix.smem_len;
m_phys_mem = fix.smem_start;
eDebug("%dk total video mem", available/1024);
#if defined(__sh__)
// The first 1920x1080x4 bytes are reserved
// After that we can take 1280x720x4 bytes for our virtual framebuffer
available -= 1920*1080*4;
eDebug("%dk usable video mem", available/1024);
lfb=(unsigned char*)mmap(0, available, PROT_WRITE|PROT_READ, MAP_SHARED, fbFd, 1920*1080*4);
#else
eDebug("%dk video mem", available/1024);
lfb=(unsigned char*)mmap(0, available, PROT_WRITE|PROT_READ, MAP_SHARED, fbFd, 0);
#endif
if (!lfb)
{
perror("mmap");
goto nolfb;
}
#if not defined(__sh__)
showConsole(0);
enableManualBlit();
#endif
return;
nolfb:
if (fbFd >= 0)
{
::close(fbFd);
fbFd = -1;
}
printf("framebuffer not available.\n");
return;
}
开发者ID:Adga52,项目名称:enigma2,代码行数:71,代码来源:fb.cpp
示例6: defined
void gFBDC::setResolution(int xres, int yres, int bpp)
{
#if defined(__sh__)
/* if xres and yres are negative call SetMode with the lates xres and yres
* we need that to read the new screen dimesnions after a resolution change
* without changing the frambuffer dimensions
*/
int m_xres;
int m_yres;
int m_bpp;
fb->getMode(m_xres, m_yres, m_bpp);
if (xres<0 && yres<0 ) {
fb->SetMode(m_xres, m_yres, bpp);
return;
}
#else
if (m_pixmap && (surface.x == xres) && (surface.y == yres) && (surface.bpp == bpp))
return;
#endif
if (gAccel::getInstance())
gAccel::getInstance()->releaseAccelMemorySpace();
fb->SetMode(xres, yres, bpp);
#if defined(__sh__)
for (int y = 0; y<yres; y++) { // make whole screen transparent
memset(fb->lfb+y*fb->Stride(), 0x00, fb->Stride());
}
#endif
surface.x = xres;
surface.y = yres;
surface.bpp = bpp;
surface.bypp = bpp / 8;
surface.stride = fb->Stride();
surface.data = fb->lfb;
surface.data_phys = fb->getPhysAddr();
int fb_size = surface.stride * surface.y;
if (fb->getNumPages() > 1)
{
surface_back = surface;
surface_back.data = fb->lfb + fb_size;
surface_back.data_phys = surface.data_phys + fb_size;
fb_size *= 2;
}
else
{
surface_back.data = 0;
surface_back.data_phys = 0;
}
eDebug("[gFBDC] resolution: %dx%dx%d stride=%d, %dkB available for acceleration surfaces.",
surface.x, surface.y, surface.bpp, fb->Stride(), (fb->Available() - fb_size)/1024);
if (gAccel::getInstance())
gAccel::getInstance()->setAccelMemorySpace(fb->lfb + fb_size, surface.data_phys + fb_size, fb->Available() - fb_size);
if (!surface.clut.data)
{
surface.clut.colors = 256;
surface.clut.data = new gRGB[surface.clut.colors];
memset(surface.clut.data, 0, sizeof(*surface.clut.data)*surface.clut.colors);
}
surface_back.clut = surface.clut;
m_pixmap = new gPixmap(&surface);
}
开发者ID:TangoCash,项目名称:tangos-enigma2,代码行数:72,代码来源:gfbdc.cpp
示例7: doPrepare
int eDVBServiceStream::doRecord()
{
int err = doPrepare();
if (err)
{
eDebug("[eDVBServiceStream] doPrerare err %d", err);
return err;
}
if (!m_tuned)
{
eDebug("[eDVBServiceStream] try it again when we are tuned in");
return 0; /* try it again when we are tuned in */
}
if (!m_record && m_tuned)
{
ePtr<iDVBDemux> demux;
if (m_service_handler.getDataDemux(demux))
{
eDebug("eDVBServiceStream - NO DEMUX available");
return -1;
}
demux->createTSRecorder(m_record, /*packetsize*/ 188, /*streaming*/ true);
if (!m_record)
{
eDebug("eDVBServiceStream - no ts recorder available.");
return -1;
}
m_record->setTargetFD(m_target_fd);
m_record->connectEvent(sigc::mem_fun(*this, &eDVBServiceStream::recordEvent), m_con_record_event);
}
eDebug("start streaming...");
if (recordCachedPids())
{
eDebug("[eDVBServiceStream] streaming pids from cache.");
return 0;
}
eDVBServicePMTHandler::program program;
if (m_service_handler.getProgramInfo(program))
{
eDebug("getting program info failed.");
}
else if(m_record_no_pids == 0)
{
std::set<int> pids_to_record;
eServiceReferenceDVB ref = m_ref.getParentServiceReference();
ePtr<eDVBService> service;
if (!ref.valid())
ref = m_ref;
if(!eDVBDB::getInstance()->getService(ref, service))
{
// cached pids
for (int x = 0; x < eDVBService::cacheMax; ++x)
{
if (x == 5)
{
x += 3; // ignore cVTYPE, cACHANNEL, cAC3DELAY, cPCMDELAY
continue;
}
int entry = service->getCacheEntry((eDVBService::cacheID)x);
if (entry != -1)
{
if (eDVBService::cSUBTITLE == (eDVBService::cacheID)x)
{
entry = (entry&0xFFFF0000)>>16;
}
pids_to_record.insert(entry);
}
}
}
开发者ID:hd75hd,项目名称:enigma2,代码行数:77,代码来源:servicedvbstream.cpp
示例8: while
void *gRC::thread()
{
int need_notify = 0;
#ifndef SYNC_PAINT
while (1)
{
#else
while (rp != wp)
{
#endif
#ifndef SYNC_PAINT
pthread_mutex_lock(&mutex);
#endif
if ( rp != wp )
{
/* make sure the spinner is not displayed when we something is painted */
disableSpinner();
gOpcode o(queue[rp++]);
if ( rp == MAXSIZE )
rp=0;
#ifndef SYNC_PAINT
pthread_mutex_unlock(&mutex);
#endif
if (o.opcode==gOpcode::shutdown)
break;
else if (o.opcode==gOpcode::notify)
need_notify = 1;
else if (o.opcode==gOpcode::setCompositing)
{
m_compositing = o.parm.setCompositing;
m_compositing->Release();
} else if(o.dc)
{
o.dc->exec(&o);
// o.dc is a gDC* filled with grabref... so we must release it here
o.dc->Release();
}
}
else
{
if (need_notify)
{
need_notify = 0;
m_notify_pump.send(1);
}
#ifndef SYNC_PAINT
while(rp == wp)
{
/* when the main thread is non-idle for a too long time without any display output,
we want to display a spinner. */
struct timespec timeout;
clock_gettime(CLOCK_REALTIME, &timeout);
if (m_spinner_enabled)
{
timeout.tv_nsec += 100*1000*1000;
/* yes, this is required. */
if (timeout.tv_nsec > 1000*1000*1000)
{
timeout.tv_nsec -= 1000*1000*1000;
timeout.tv_sec++;
}
}
else
timeout.tv_sec += 2;
int idle = 1;
if (pthread_cond_timedwait(&cond, &mutex, &timeout) == ETIMEDOUT)
{
if (eApp && !eApp->isIdle())
{
int idle_count = eApp->idleCount();
if (idle_count == m_prev_idle_count)
idle = 0;
else
m_prev_idle_count = idle_count;
}
}
if (!idle)
{
if (!m_spinner_enabled)
eDebug("main thread is non-idle! display spinner!");
enableSpinner();
} else
disableSpinner();
}
pthread_mutex_unlock(&mutex);
#endif
}
}
#ifndef SYNC_PAINT
pthread_exit(0);
#endif
return 0;
}
//.........这里部分代码省略.........
开发者ID:OpenPE,项目名称:Enigma2PC-Old,代码行数:101,代码来源:grc.cpp
示例9: eDebug
void eDVBServicePMTHandler::AITready(int error)
{
eDebug("AITready");
ePtr<eTable<ApplicationInformationSection> > ptr;
if (!m_AIT.getCurrent(ptr))
{
m_HBBTVUrl = "";
for (std::vector<ApplicationInformationSection*>::const_iterator it = ptr->getSections().begin(); it != ptr->getSections().end(); ++it)
{
for (std::list<ApplicationInformation *>::const_iterator i = (*it)->getApplicationInformation()->begin(); i != (*it)->getApplicationInformation()->end(); ++i)
{
if ((*i)->getApplicationControlCode() == 0x01) /* AUTOSTART */
{
for (DescriptorConstIterator desc = (*i)->getDescriptors()->begin();
desc != (*i)->getDescriptors()->end(); ++desc)
{
switch ((*desc)->getTag())
{
case APPLICATION_DESCRIPTOR:
break;
case APPLICATION_NAME_DESCRIPTOR:
break;
case TRANSPORT_PROTOCOL_DESCRIPTOR:
{
TransportProtocolDescriptor *transport = (TransportProtocolDescriptor*)(*desc);
switch (transport->getProtocolId())
{
case 1: /* object carousel */
if (m_dsmcc_pid >= 0)
{
m_OC.begin(eApp, eDVBDSMCCDLDataSpec(m_dsmcc_pid), m_demux);
}
break;
case 2: /* ip */
break;
case 3: /* interaction */
for (InterActionTransportConstIterator interactionit = transport->getInteractionTransports()->begin(); interactionit != transport->getInteractionTransports()->end(); ++interactionit)
{
m_HBBTVUrl = (*interactionit)->getUrlBase()->getUrl();
break;
}
break;
}
break;
}
case GRAPHICS_CONSTRAINTS_DESCRIPTOR:
break;
case SIMPLE_APPLICATION_LOCATION_DESCRIPTOR:
{
SimpleApplicationLocationDescriptor *applicationlocation = (SimpleApplicationLocationDescriptor*)(*desc);
m_HBBTVUrl += applicationlocation->getInitialPath();
break;
}
case APPLICATION_USAGE_DESCRIPTOR:
break;
case SIMPLE_APPLICATION_BOUNDARY_DESCRIPTOR:
break;
}
}
}
}
}
if (!m_HBBTVUrl.empty())
{
serviceEvent(eventHBBTVInfo);
}
}
/* for now, do not keep listening for table updates */
m_AIT.stop();
}
开发者ID:ambrosa,项目名称:test,代码行数:70,代码来源:pmt.cpp
示例10: if
//.........这里部分代码省略.........
uint8_t tag = (*desc)->getTag();
/* check descriptors to get the exakt stream type. */
++num_descriptors;
if (!forced_video && !forced_audio)
{
switch (tag)
{
case AUDIO_STREAM_DESCRIPTOR:
isaudio = 1;
break;
case VIDEO_STREAM_DESCRIPTOR:
{
isvideo = 1;
VideoStreamDescriptor *d = (VideoStreamDescriptor*)(*desc);
if (d->getMpeg1OnlyFlag())
video.type = videoStream::vtMPEG1;
break;
}
case SUBTITLING_DESCRIPTOR:
{
SubtitlingDescriptor *d = (SubtitlingDescriptor*)(*desc);
const SubtitlingList *list = d->getSubtitlings();
subtitleStream s;
s.pid = (*es)->getPid();
for (SubtitlingConstIterator it(list->begin()); it != list->end(); ++it)
{
s.subtitling_type = (*it)->getSubtitlingType();
switch(s.subtitling_type)
{
case 0x10 ... 0x13: // dvb subtitles normal
case 0x20 ... 0x23: // dvb subtitles hearing impaired
break;
default:
eDebug("dvb subtitle %s PID %04x with wrong subtitling type (%02x)... force 0x10!!",
s.language_code.c_str(), s.pid, s.subtitling_type);
s.subtitling_type = 0x10;
break;
}
s.composition_page_id = (*it)->getCompositionPageId();
s.ancillary_page_id = (*it)->getAncillaryPageId();
std::string language = (*it)->getIso639LanguageCode();
s.language_code = language;
// eDebug("add dvb subtitle %s PID %04x, type %d, composition page %d, ancillary_page %d", s.language_code.c_str(), s.pid, s.subtitling_type, s.composition_page_id, s.ancillary_page_id);
if (!language.empty())
{
int x = 1;
for (std::vector<std::string>::iterator it2 = autosub_languages.begin();x <= autosub_level && it2 != autosub_languages.end();x++,it2++)
{
if ( (*it2).find(language) != -1 )
{
autosub_level = x;
if (s.subtitling_type >= 0x20)
autosub_dvb_hearing = program.subtitleStreams.size();
else
autosub_dvb_normal = program.subtitleStreams.size();
break;
}
}
}
issubtitle = 1;
program.subtitleStreams.push_back(s);
}
break;
}
case TELETEXT_DESCRIPTOR:
开发者ID:ambrosa,项目名称:test,代码行数:67,代码来源:pmt.cpp
示例11: clearProgramInfo
//.........这里部分代码省略.........
uint8_t tag = (*desc)->getTag();
/* check descriptors to get the exakt stream type. */
++num_descriptors;
if (!forced_video && !forced_audio)
{
switch (tag)
{
case AUDIO_STREAM_DESCRIPTOR:
isaudio = 1;
break;
case VIDEO_STREAM_DESCRIPTOR:
{
isvideo = 1;
VideoStreamDescriptor *d = (VideoStreamDescriptor*)(*desc);
if (d->getMpeg1OnlyFlag())
video.type = videoStream::vtMPEG1;
break;
}
case SUBTITLING_DESCRIPTOR:
{
SubtitlingDescriptor *d = (SubtitlingDescriptor*)(*desc);
const SubtitlingList *list = d->getSubtitlings();
subtitleStream s;
s.pid = (*es)->getPid();
for (SubtitlingConstIterator it(list->begin()); it != list->end(); ++it)
{
s.subtitling_type = (*it)->getSubtitlingType();
switch(s.subtitling_type)
{
case 0x10 ... 0x13: // dvb subtitles normal
case 0x20 ... 0x23: // dvb subtitles hearing impaired
break;
default:
eDebug("[eDVBPMTParser] dvb subtitle %s PID %04x with wrong subtitling type (%02x)... force 0x10!!",
s.language_code.c_str(), s.pid, s.subtitling_type);
s.subtitling_type = 0x10;
break;
}
s.composition_page_id = (*it)->getCompositionPageId();
s.ancillary_page_id = (*it)->getAncillaryPageId();
std::string language = (*it)->getIso639LanguageCode();
s.language_code = language;
// eDebug("[eDVBPMTParser] add dvb subtitle %s PID %04x, type %d, composition page %d, ancillary_page %d", s.language_code.c_str(), s.pid, s.subtitling_type, s.composition_page_id, s.ancillary_page_id);
issubtitle = 1;
program.subtitleStreams.push_back(s);
}
break;
}
case TELETEXT_DESCRIPTOR:
if (program.textPid == -1)
{
subtitleStream s;
s.subtitling_type = 0x01; // EBU TELETEXT SUBTITLES
s.pid = program.textPid = (*es)->getPid();
TeletextDescriptor *d = (TeletextDescriptor*)(*desc);
isteletext = 1;
const VbiTeletextList *list = d->getVbiTeletexts();
std::string language;
for (VbiTeletextConstIterator it(list->begin()); it != list->end(); ++it)
{
switch((*it)->getTeletextType())
{
case 0x02: // Teletext subtitle page
case 0x05: // Teletext subtitle page for hearing impaired pepople
language = (*it)->getIso639LanguageCode();
s.language_code = language;
开发者ID:OpenBlackHole,项目名称:openblackhole-enigma2,代码行数:67,代码来源:pmtparse.cpp
示例12: switch
int eMMI_UI::processMMIData(int slot_id, const unsigned char *tag, const void *data, int len)
{
switch (tag[2])
{
case 0x00: //Tmmi_close
{
unsigned char *d=(unsigned char*)data;
int timeout=0;
if (d[0] == 1)
{
if (len > 1)
timeout = d[1];
else
{
eDebug("mmi close tag incorrect.. no timeout given.. assume 5 seconds");
timeout = 5;
}
}
else if (d[0] > 1)
eDebug("mmi close tag incorrect.. byte 4 should be 0 or 1");
mmiScreenClose(slot_id, timeout);
break;
}
case 0x01:
eDebug("MMI display control");
if (((unsigned char*)data)[0] != 1)
eDebug("kann ich nicht. aber das sag ich dem modul nicht.");
return 1;
case 0x07: //Tmenu_enq
{
unsigned char *d=(unsigned char*)data;
unsigned char *max=((unsigned char*)d) + len;
int textlen = len - 2;
eDebug("in enq");
if ((d+2) > max)
break;
int blind = *d++ & 1;
int alen = *d++;
eDebug("%d bytes text", textlen);
if ((d+textlen) > max)
break;
char str[textlen + 1];
memcpy(str, ((char*)d), textlen);
str[textlen] = '\0';
eDebug("enq-text: %s",str);
mmiScreenEnq(slot_id, blind, alen, (char*)convertDVBUTF8(str).c_str());
break;
}
case 0x09: //Tmenu_last
case 0x0c: //Tlist_last
{
unsigned char *d=(unsigned char*)data;
unsigned char *max=((unsigned char*)d) + len;
int pos = 0;
eDebug("Tmenu_last");
if (d > max)
break;
int n=*d++;
if(tag[2] == 0x09) //menu
mmiScreenBegin(slot_id, 0);
else //list
mmiScreenBegin(slot_id, 1);
if (n == 0xFF)
n=0;
else
n++;
eDebug("%d texts", n);
for (int i=0; i < (n+3); ++i)
{
int textlen;
if ((d+3) > max)
break;
eDebug("text tag: %02x %02x %02x", d[0], d[1], d[2]);
d+=3;
d+=eDVBCISession::parseLengthField(d, textlen);
eDebug("%d bytes text", textlen);
if ((d+textlen) > max)
break;
char str[textlen + 1];
memcpy(str, ((char*)d), textlen);
str[textlen] = '\0';
mmiScreenAddText(slot_id, pos++, (char*)convertDVBUTF8(str).c_str());
eDebug("[eMMI_UI] %s", str);
d += textlen;
}
mmiScreenFinish(slot_id);
break;
}
default:
eDebug("unknown APDU tag 9F 88 %02x", tag[2]);
break;
}
return 0;
}
开发者ID:OpenSPA,项目名称:dvbapp,代码行数:94,代码来源:mmi_ui.cpp
示例13: switch
void gFBDC::exec(const gOpcode *o)
{
switch (o->opcode)
{
case gOpcode::setPalette:
{
gDC::exec(o);
setPalette();
break;
}
case gOpcode::flip:
{
if (surface_back.data_phys)
{
gUnmanagedSurface s(surface);
surface = surface_back;
surface_back = s;
if (surface.data_phys > surface_back.data_phys)
fb->setOffset(surface_back.y);
else
fb->setOffset(0);
}
break;
}
case gOpcode::waitVSync:
{
static timeval l;
static int t;
timeval now;
if (t == 1000)
{
gettimeofday(&now, 0);
int diff = (now.tv_sec - l.tv_sec) * 1000 + (now.tv_usec - l.tv_usec) / 1000;
eDebug("[gFBDC] %d ms latency (%d fps)", diff, t * 1000 / (diff ? diff : 1));
l = now;
t = 0;
}
++t;
fb->blit();
fb->waitVSync();
break;
}
case gOpcode::flush:
#ifdef USE_LIBVUGLES2
if (gles_is_animation())
gles_do_animation();
else
fb->blit();
#else
fb->blit();
#endif
break;
case gOpcode::sendShow:
{
#ifdef HAVE_OSDANIMATION
CFile::writeIntHex("/proc/stb/fb/animation_mode", 0x01);
#endif
#ifdef USE_LIBVUGLES2
gles_set_buffer((unsigned int *)surface.data);
gles_set_animation(1, o->parm.setShowHideInfo->point.x(), o->parm.setShowHideInfo->point.y(), o->parm.setShowHideInfo->size.width(), o->parm.setShowHideInfo->size.height());
#endif
break;
}
case gOpcode::sendHide:
{
#ifdef HAVE_OSDANIMATION
CFile::writeIntHex("/proc/stb/fb/animation_mode", 0x10);
#endif
#ifdef USE_LIBVUGLES2
gles_set_buffer((unsigned int *)surface.data);
gles_set_animation(0, o->parm.setShowHideInfo->point.x(), o->parm.setShowHideInfo->point.y(), o->parm.setShowHideInfo->size.width(), o->parm.setShowHideInfo->size.height());
#endif
break;
}
#ifdef USE_LIBVUGLES2
case gOpcode::setView:
{
gles_viewport(o->parm.setViewInfo->size.width(), o->parm.setViewInfo->size.height(), fb->Stride());
break;
}
#endif
default:
gDC::exec(o);
break;
}
}
开发者ID:kingvuplus,项目名称:l-it2,代码行数:92,代码来源:gfbdc.cpp
示例14: doPrepare
int eDVBServiceStream::doRecord()
{
int err = doPrepare();
if (err)
{
eDebug("[eDVBServiceStream] doPrerare err %d", err);
return err;
}
if (!m_tuned)
{
eDebug("[eDVBServiceStream] try it again when we are tuned in");
return 0; /* try it again when we are tuned in */
}
if (!m_record && m_tuned)
{
ePtr<iDVBDemux> demux;
if (m_service_handler.getDataDemux(demux))
{
eDebug("[eDVBServiceStream] NO DEMUX available");
return -1;
}
demux->createTSRecorder(m_record, /*packetsize*/ 188, /*streaming*/ true);
if (!m_record)
{
eDebug("[eDVBServiceStream] no ts recorder available.");
return -1;
}
m_record->setTargetFD(m_target_fd);
m_record->connectEvent(slot(*this, &eDVBServiceStream::recordEvent), m_con_record_event);
}
eDebug("[eDVBServiceStream] start streaming...");
if (recordCachedPids())
{
eDebug("[eDVBServiceStream] streaming pids from cache.");
return 0;
}
eDVBServicePMTHandler::program program;
if (m_service_handler.getProgramInfo(program))
{
eDebug("[eDVBServiceStream] getting program info failed.");
}
else
{
std::set<int> pids_to_record;
pids_to_record.insert(0); // PAT
if (program.pmtPid != -1)
pids_to_record.insert(program.pmtPid); // PMT
int timing_pid = -1, timing_stream_type = -1;
iDVBTSRecorder::timing_pid_type timing_pid_type = iDVBTSRecorder::none;
eDebugNoNewLineStart("[eDVBServiceStream] have %zd video stream(s)", program.videoStreams.size());
if (!program.videoStreams.empty())
{
eDebugNoNewLine(" (");
for (std::vector<eDVBServicePMTHandler::videoStream>::const_iterator
i(program.videoStreams.begin());
i != program.videoStreams.end(); ++i)
{
pids_to_record.insert(i->pid);
if (timing_pid == -1)
{
timing_pid = i->pid;
timing_stream_type = i->type;
timing_pid_type = iDVBTSRecorder::video_pid;
}
if (i != program.videoStreams.begin())
eDebugNoNewLine(", ");
eDebugNoNewLine("%04x", i->pid);
}
eDebugNoNewLine(")");
}
eDebugNoNewLine(", and %zd audio stream(s)", program.audioStreams.size());
if (!program.audioStreams.empty())
{
eDebugNoNewLine(" (");
for (std::vector<eDVBServicePMTHandler::audioStream>::const_iterator
i(program.audioStreams.begin());
i != program.audioStreams.end(); ++i)
{
pids_to_record.insert(i->pid);
if (timing_pid == -1)
{
timing_pid = i->pid;
timing_stream_type = i->type;
timing_pid_type = iDVBTSRecorder::audio_pid;
}
if (i != program.audioStreams.begin())
eDebugNoNewLine(", ");
//.........这里部分代码省略.........
开发者ID:Taapat,项目名称:enigma2-openpli-fulan,代码行数:101,代码来源:servicedvbstream.cpp
示例15: eDebug
void eStreamClient::set_socket_option(int fd, int optid, int option)
{
if(::setsockopt(fd, SOL_SOCKET, optid, &option, sizeof(option)))
eDebug("Failed to set socket option: %m");
}
开发者ID:Antonio-Team,项目名称:enigma2,代码行数:5,代码来源:streamserver.cpp
示例16: defined
int fbClass::SetMode(int nxRes, int nyRes, int nbpp)
{
#if defined(__sh__)
xRes=nxRes;
yRes=nyRes;
bpp=32;
m_number_of_pages = 1;
topDiff=bottomDiff=leftDiff=rightDiff = 0;
#else
screeninfo.xres_virtual=screeninfo.xres=nxRes;
screeninfo.yres_virtual=(screeninfo.yres=nyRes)*2;
screeninfo.height=0;
screeninfo.width=0;
screeninfo.xoffset=screeninfo.yoffset=0;
screeninfo.bits_per_pixel=nbpp;
switch (nbpp) {
case 16:
// ARGB 1555
screeninfo.transp.offset = 15;
screeninfo.transp.length = 1;
screeninfo.red.offset = 10;
screeninfo.red.length = 5;
screeninfo.green.offset = 5;
screeninfo.green.length = 5;
screeninfo.blue.offset = 0;
screeninfo.blue.length = 5;
break;
case 32:
// ARGB 8888
screeninfo.transp.offset = 24;
screeninfo.transp.length = 8;
screeninfo.red.offset = 16;
screeninfo.red.length = 8;
screeninfo.green.offset = 8;
screeninfo.green.length = 8;
screeninfo.blue.offset = 0;
screeninfo.blue.length = 8;
break;
}
if (ioctl(fbFd, FBIOPUT_VSCREENINFO, &screeninfo)<0)
{
// try single buffering
screeninfo.yres_virtual=screeninfo.yres=nyRes;
if (ioctl(fbFd, FBIOPUT_VSCREENINFO, &screeninfo)<0)
{
perror("FBIOPUT_VSCREENINFO");
printf("fb failed\n");
return -1;
}
eDebug(" - double buffering not available.");
} else
eDebug(" - double buffering available!");
m_number_of_pages = screeninfo.yres_virtual / nyRes;
#endif
ioctl(fbFd, FBIOGET_VSCREENINFO, &screeninfo);
#if defined(__sh__)
xResSc=screeninfo.xres;
yResSc=screeninfo.yres;
stride=xRes*4;
#else
if ((screeninfo.xres!=nxRes) || (screeninfo.yres!=nyRes) || (screeninfo.bits_per_pixel!=nbpp))
{
eDebug("SetMode failed: wanted: %dx%dx%d, got %dx%dx%d",
nxRes, nyRes, nbpp,
screeninfo.xres, screeninfo.yres, screeninfo.bits_per_pixel);
}
xRes=screeninfo.xres;
yRes=screeninfo.yres;
bpp=screeninfo.bits_per_pixel;
fb_fix_screeninfo fix;
if (ioctl(fbFd, FBIOGET_FSCREENINFO, &fix)<0)
{
perror("FBIOGET_FSCREENINFO");
printf("fb failed\n");
}
stride=fix.line_length;
memset(lfb, 0, stride*yRes);
#endif
blit();
return 0;
}
开发者ID:Adga52,项目名称:enigma2,代码行数:87,代码来源:fb.cpp
示例17: if
void eDVBLocalTimeHandler::updateTime( time_t tp_time, eDVBChannel *chan, int update_count )
{
int time_difference;
bool restart_tdt = false;
if (!tp_time)
restart_tdt = true;
else if (tp_time == -1)
{
restart_tdt = true;
/*if ( eSystemInfo::getInstance()->getHwType() == eSystemInfo::DM7020 ||
( eSystemInfo::getInstance()->getHwType() == eSystemInfo::DM7000
&& eSystemInfo::getInstance()->hasStandbyWakeupTimer() ) ) TODO !!!!!!! */
{
eDebug("[eDVBLocalTimerHandler] no transponder tuned... or no TDT/TOT avail .. try to use RTC :)");
time_t rtc_time = getRTC();
if ( rtc_time ) // RTC Ready?
{
tm now;
localtime_r(&rtc_time, &now);
eDebug("[eDVBLocalTimerHandler] RTC time is %02d:%02d:%02d",
now.tm_hour,
now.tm_min,
now.tm_sec);
time_t linuxTime=time(0);
localtime_r(&linuxTime, &now);
eDebug("[eDVBLocalTimerHandler] Receiver time is %02d:%02d:%02d",
now.tm_hour,
now.tm_min,
now.tm_sec);
time_difference = rtc_time - linuxTime;
eDebug("[eDVBLocalTimerHandler] RTC to Receiver time difference is %ld seconds", linuxTime - rtc_time );
if ( time_difference )
{
eDebug("[eDVBLocalTimerHandler] set Linux Time to RTC Time");
timeval tnow;
gettimeofday(&tnow,0);
tnow.tv_sec=rtc_time;
settimeofday(&tnow,0);
}
else if ( !time_difference )
eDebug("[eDVBLocalTimerHandler] no change needed");
else
eDebug("[eDVBLocalTimerHandler] set to RTC time");
/*emit*/ m_timeUpdated();
}
else
eDebug("[eDVBLocalTimerHandler] getRTC returned time=0. RTC problem?");
}
}
else
{
std::map< eDVBChannelID, int >::iterator it( m_timeOffsetMap.find( chan->getChannelID() ) );
// current linux time
time_t linuxTime = time(0);
#ifdef DEBUG
// current transponder time
tm tp_now;
localtime_r(&tp_time, &tp_now);
eDebug("[eDVBLocalTimerHandler] Transponder time is %02d.%02d.%04d %02d:%02d:%02d",
tp_now.tm_mday,
tp_now.tm_mon + 1,
tp_now.tm_year + 1900,
tp_now.tm_hour,
tp_now.tm_min,
tp_now.tm_sec);
#endif
// difference between current enigma time and transponder time
int enigma_diff = tp_time-linuxTime;
int new_diff=0;
bool updated = m_time_ready;
if ( m_time_ready ) // ref time ready?
{
// difference between reference time (current enigma time)
// and the transponder time
eDebug("[eDVBLocalTimerHandler] diff is %d", enigma_diff);
if ( abs(enigma_diff) < 120 )
{
eDebug("[eDVBLocalTimerHandler] diff < 120 .. use Transponder Time");
m_timeOffsetMap[chan->getChannelID()] = 0;
new_diff = enigma_diff;
}
else if ( it != m_timeOffsetMap.end() ) // correction saved?
{
eDebug("[eDVBLocalTimerHandler] we have correction %d", it->second);
time_t CorrectedTpTime = tp_time+it->second;
int ddiff = CorrectedTpTime-linuxTime;
eDebug("[eDVBLocalTimerHandler] diff after add correction is %d", ddiff);
if ( abs(it->second) < 300 ) // stored correction < 5 min
{
eDebug("[eDVBLocalTimerHandler] use stored correction(<5 min)");
new_diff = ddiff;
}
else if ( getRTC() )
{
time_t rtc=getRTC();
m_timeOffsetMap[chan->getChannelID()] = rtc-tp_time;
//.........这里部分代码省略.........
开发者ID:Atsilla,项目名称:enigma2-1,代码行数:101,代码来源:dvbtime.cpp
示例18: stop
//.........这里部分代码省略.........
const char *reply = "HTTP/1.0 401 Authorization Required\r\nWWW-Authenticate: Basic realm=\"streamserver\"\r\n\r\n";
writeAll(streamFd, reply, strlen(reply));
rsn->stop();
parent->connectionLost(this);
return;
}
}
pos = request.find(' ', 5);
if (pos != std::string::npos)
{
std::string serviceref = urlDecode(request.substr(5, pos - 5));
if (!serviceref.empty())
{
const char *reply = "HTTP/1.0 200 OK\r\nConnection: Close\r\nContent-Type: video/mpeg\r\nServer: streamserver\r\n\r\n";
writeAll(streamFd, reply, strlen(reply));
/* We don't expect any incoming data, so set a tiny buffer */
|
请发表评论