X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb%2Fdecoder.cpp;h=eb5258d34825191c593d4e23116738362baca955;hp=f73dbdd99b8878e24a83f090b1a6873628dfb830;hb=6ae5d719b93de2e8897a660ac61b0e9c5a190dde;hpb=2728b4ae124c0cde02d5a55a6ee52c19e4c2b822 diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index f73dbdd..eb5258d 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -295,7 +295,6 @@ eDVBAudio::~eDVBAudio() DEFINE_REF(eDVBVideo); eDVBVideo::eDVBVideo(eDVBDemux *demux, int dev) -<<<<<<< HEAD:lib/dvb/decoder.cpp : m_demux(demux), m_dev(dev), m_width(-1), m_height(-1), m_framerate(-1), m_aspect(-1), m_progressive(-1) { @@ -856,6 +855,9 @@ int eTSMPEGDecoder::setState() if ((nott && m_text) || (!m_text && !nott)) m_changed |= changeText | changeState; + const char *decoder_states[] = {"stop", "pause", "play", "decoderfastforward", "trickmode", "slowmotion"}; + eDebug("decoder state: %s, vpid=%d, apid=%d", decoder_states[m_state], m_vpid, m_apid); + bool changed = !!m_changed; #if HAVE_DVB_API_VERSION < 3 bool checkAVSync = m_changed & (changeAudio|changeVideo|changePCR); @@ -1072,7 +1074,9 @@ 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(eTimer::create(eApp)) + : m_demux(demux), + m_vpid(-1), m_vtype(-1), m_apid(-1), m_atype(-1), m_pcrpid(-1), m_textpid(-1), + 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); @@ -1166,9 +1170,15 @@ RESULT eTSMPEGDecoder::set() RESULT eTSMPEGDecoder::play() { if (m_state == statePlay) - return 0; - m_state = statePlay; - m_changed |= changeState; + { + if (!m_changed) + return 0; + } + else + { + m_state = statePlay; + m_changed |= changeState; + } return setState(); } @@ -1286,15 +1296,18 @@ RESULT eTSMPEGDecoder::showSinglePic(const char *filename) unsigned char seq_end[] = { 0x00, 0x00, 0x01, 0xB7 }; unsigned char iframe[s.st_size]; unsigned char stuffing[8192]; + int streamtype = VIDEO_STREAMTYPE_MPEG2; memset(stuffing, 0, 8192); read(f, iframe, s.st_size); if (ioctl(m_video_clip_fd, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY) < 0) eDebug("VIDEO_SELECT_SOURCE MEMORY failed (%m)"); + if (ioctl(m_video_clip_fd, VIDEO_SET_STREAMTYPE, streamtype) < 0) + eDebug("VIDEO_SET_STREAMTYPE failed(%m)"); if (ioctl(m_video_clip_fd, VIDEO_PLAY) < 0) eDebug("VIDEO_PLAY failed (%m)"); - if (::ioctl(m_video_clip_fd, VIDEO_CONTINUE) < 0) + if (ioctl(m_video_clip_fd, VIDEO_CONTINUE) < 0) eDebug("video: VIDEO_CONTINUE: %m"); - if (::ioctl(m_video_clip_fd, VIDEO_CLEAR_BUFFER) < 0) + if (ioctl(m_video_clip_fd, VIDEO_CLEAR_BUFFER) < 0) eDebug("video: VIDEO_CLEAR_BUFFER: %m"); while(pos <= (s.st_size-4) && !(seq_end_avail = (!iframe[pos] && !iframe[pos+1] && iframe[pos+2] == 1 && iframe[pos+3] == 0xB7))) ++pos;