X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb%2Fdecoder.cpp;h=eb5258d34825191c593d4e23116738362baca955;hp=edefd7644871b461725e03eaa9cc84bf2272ff8e;hb=6ae5d719b93de2e8897a660ac61b0e9c5a190dde;hpb=624cd1811f54808d23a50840bb35494e4e5ca3b6 diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index edefd76..eb5258d 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -1170,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(); } @@ -1290,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;