use menu source/converter
[enigma2.git] / lib / dvb / decoder.cpp
index b9acabade0b14c7d01c0da6c4f44494fa2408d37..215b0ade58f02dc0be1ab2f4c9a52fe17c8dd632 100644 (file)
@@ -466,6 +466,7 @@ int eTSMPEGDecoder::setState()
        {
                m_video->stop();
                m_video=0;
+               m_video_event_conn=0;
        }
        if (m_changed & changePCR)
        {
@@ -522,8 +523,9 @@ int eTSMPEGDecoder::setState()
                {
                        eDebug("STOP");
                        m_video->stop();
+                       m_video = 0;
+                       m_video_event_conn = 0;
                }
-               m_video = 0;
                if ((m_vpid >= 0) && (m_vpid < 0x1FFF))
                {
                        eDebug("new video");
@@ -831,7 +833,7 @@ RESULT eTSMPEGDecoder::showSinglePic(const char *filename)
                        {
                                fseek(f, 0, SEEK_END);
                                int length = ftell(f);
-                               unsigned char *buffer = new unsigned char[length*3+9];
+                               unsigned char *buffer = new unsigned char[length*2+9];
                                if (ioctl(vfd, VIDEO_FAST_FORWARD, 1) < 0)
                                        eDebug("VIDEO_FAST_FORWARD failed (%m)");
                                if (ioctl(vfd, VIDEO_SELECT_SOURCE, VIDEO_SOURCE_MEMORY) < 0)
@@ -840,24 +842,24 @@ RESULT eTSMPEGDecoder::showSinglePic(const char *filename)
                                        eDebug("VIDEO_PLAY failed (%m)");
                                int cnt=0;
                                int pos=0;
-                               while(cnt<3)
+                               while(cnt<2)
                                {
                                        int rd;
                                        fseek(f, 0, SEEK_SET);
+                                       if (!cnt)
+                                       {
+                                               buffer[pos++]=0;
+                                               buffer[pos++]=0;
+                                               buffer[pos++]=1;
+                                               buffer[pos++]=0xE0;
+                                               buffer[pos++]=(length*2)>>8;
+                                               buffer[pos++]=(length*2)&0xFF;
+                                               buffer[pos++]=0x80;
+                                               buffer[pos++]=0;
+                                               buffer[pos++]=0;
+                                       }
                                        while(1)
                                        {
-                                               if (!cnt)
-                                               {
-                                                       buffer[pos++]=0;
-                                                       buffer[pos++]=0;
-                                                       buffer[pos++]=1;
-                                                       buffer[pos++]=0xE0;
-                                                       buffer[pos++]=(length*3)>>8;
-                                                       buffer[pos++]=(length*3)&0xFF;
-                                                       buffer[pos++]=0x80;
-                                                       buffer[pos++]=0;
-                                                       buffer[pos++]=0;
-                                               }
                                                rd = fread(buffer+pos, 1, length, f);
                                                if (rd > 0)
                                                        pos += rd;