X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/156d69e7c1fcdea9c26c33240a8ae9e3c059cce7..2b1a35585e9edead2200e4e4868d549c3b1e8106:/lib/dvb/decoder.cpp diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index 511f91de..0ce59d01 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -282,9 +282,8 @@ void eDVBAudio::setChannel(int channel) int eDVBAudio::getPTS(pts_t &now) { - eDebugNoNewLine("AUDIO_GET_PTS - "); if (::ioctl(m_fd, AUDIO_GET_PTS, &now) < 0) - eDebug("failed (%m)"); + eDebug("AUDIO_GET_PTS failed (%m)"); return 0; } @@ -316,7 +315,7 @@ eDVBVideo::eDVBVideo(eDVBDemux *demux, int dev) eWarning("%s: %m", filename); else { - m_sn = new eSocketNotifier(eApp, m_fd, eSocketNotifier::Priority); + m_sn = eSocketNotifier::create(eApp, m_fd, eSocketNotifier::Priority); CONNECT(m_sn->activated, eDVBVideo::video_event); } eDebug("Video Device: %s", filename); @@ -528,8 +527,6 @@ int eDVBVideo::getPTS(pts_t &now) eDVBVideo::~eDVBVideo() { - if (m_sn) - delete m_sn; if (m_is_slow_motion) setSlowMotion(0); if (m_is_fast_forward) @@ -564,6 +561,20 @@ void eDVBVideo::video_event(int) event.width = evt.u.size.w; /* emit */ m_event(event); } + else if (evt.type == VIDEO_EVENT_FRAME_RATE_CHANGED) + { + struct iTSMPEGDecoder::videoEvent event; + event.type = iTSMPEGDecoder::videoEvent::eventFrameRateChanged; + event.framerate = evt.u.frame_rate; + /* emit */ m_event(event); + } + else if (evt.type == 16 /*VIDEO_EVENT_PROGRESSIVE_CHANGED*/) + { + struct iTSMPEGDecoder::videoEvent event; + event.type = iTSMPEGDecoder::videoEvent::eventProgressiveChanged; + event.progressive = evt.u.frame_rate; + /* emit */ m_event(event); + } else eDebug("unhandled DVBAPI Video Event %d", evt.type); } @@ -920,10 +931,10 @@ RESULT eTSMPEGDecoder::setAC3Delay(int delay) } eTSMPEGDecoder::eTSMPEGDecoder(eDVBDemux *demux, int decoder) - :m_demux(demux), m_changed(0), m_decoder(decoder), m_video_clip_fd(-1), m_showSinglePicTimer(eApp) + :m_demux(demux), m_changed(0), m_decoder(decoder), m_video_clip_fd(-1), m_showSinglePicTimer(eTimer::create(eApp)) { demux->connectEvent(slot(*this, &eTSMPEGDecoder::demux_event), m_demux_event_conn); - CONNECT(m_showSinglePicTimer.timeout, eTSMPEGDecoder::finishShowSinglePic); + CONNECT(m_showSinglePicTimer->timeout, eTSMPEGDecoder::finishShowSinglePic); m_is_ff = m_is_sm = m_is_trickmode = 0; } @@ -1146,7 +1157,7 @@ RESULT eTSMPEGDecoder::showSinglePic(const char *filename) { eDebug("showSinglePic %s", filename); int f = open(filename, O_RDONLY); - if (f) + if (f >= 0) { struct stat s; fstat(f, &s); @@ -1174,11 +1185,13 @@ RESULT eTSMPEGDecoder::showSinglePic(const char *filename) ++pos; if ((iframe[3] >> 4) != 0xE) // no pes header write(m_video_clip_fd, pes_header, sizeof(pes_header)); + else + iframe[4] = iframe[5] = 0x00; write(m_video_clip_fd, iframe, s.st_size); if (!seq_end_avail) write(m_video_clip_fd, seq_end, sizeof(seq_end)); write(m_video_clip_fd, stuffing, 8192); - m_showSinglePicTimer.start(150, true); + m_showSinglePicTimer->start(150, true); } close(f); }