[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdemultimedia/mpeglib/lib/mpegplay
From:       CVS by mvogt <kde-cvs () kde ! org>
Date:       2001-06-26 9:56:39
[Download RAW message or body]


kdemultimedia/mpeglib/lib/mpegplay mpegSystemStream.cpp,1.7,1.8 mpegSystemStream.h,1.2,1.3
Author: mvogt
Tue Jun 26 09:55:05 UTC 2001


Modified Files:
         mpegSystemStream.cpp mpegSystemStream.h
Log Message:
- fix demuxer bug. Didn't played mpeg2 grabbed from sat receiver card


PATCH:

diff -u -r1.7 mpegSystemStream.cpp
--- mpegSystemStream.cpp        2001/04/22 17:57:58     1.7
+++ mpegSystemStream.cpp        2001/06/26 09:51:53
@@ -13,12 +13,17 @@
 
 #include "mpegSystemStream.h"
 
+#define _RESYNC_STATE_INIT                0
+#define _RESYNC_STATE_NEED_PACKET         1
+#define _RESYNC_STATE_NEED_START          2
+
 MpegSystemStream::MpegSystemStream(InputStream* input) {
   this->input=input;
   syncCode=0xff;  // invalid
+  lState=_RESYNC_STATE_INIT;
 }
+void MpegSystemStream::reset() {
+  lState=_RESYNC_STATE_NEED_PACKET;
+}
 int MpegSystemStream::nextPacket(MpegSystemHeader* mpegHeader) {
   int layer=mpegHeader->getLayer();
   if (layer == _PACKET_NO_SYSLAYER) {
@@ -88,8 +99,15 @@
   if (readSyncCode() == false) {
     return false;
   }
-  if (syncCode == _PACK_START_CODE) {
+  if ((syncCode & 0xFFFFFF00) == 0x00000100) {
+    if (lState == _RESYNC_STATE_NEED_PACKET) {
+      if (syncCode != _PACK_START_CODE) {
+       return false;
+      }
+      lState=_RESYNC_STATE_NEED_START;
+    }
     if (processStartCode(syncCode,mpegHeader) == false) {
+      reset();      
       return false;
-  if (startCode != _PACK_START_CODE) {
-    return false;
-  }
-  lok=processPackHeader(mpegHeader);
-  if (lok == false) {
-    printf("Error in reading pack header\n");
-    return false;
-  }
-  if (readHeader(&startCode) == false) {
-    printf("readHeader 1: is %8x\n",startCode);
-    return false;
-  }
-  if (startCode == _SYSTEM_HEADER_START_CODE) {
-    lok = processSystemHeader(mpegHeader);
-    if (lok == false) {
-      fprintf(stderr, "Error in reading system header\n");
-      return false;
-    }
-    if (readHeader(&startCode) == false) {
-      printf("readHeader 2: is %8x\n",startCode);
-      return false;
-    }    
-  }
   if (startCode == _PACK_START_CODE) {
     lok=processPackHeader(mpegHeader);
     if (lok == false) {
       printf("Error in reading pack header\n");
       return false;
     }
-    if (readHeader(&startCode) == false) {
-      printf("readHeader 3: is %8x\n",startCode);
+    return true;
+  }
+  if (startCode == _SYSTEM_HEADER_START_CODE) {
+    lok = processSystemHeader(mpegHeader);
+    if (lok == false) {
+      fprintf(stderr, "Error in reading system header\n");
       return false;
     }
+    return true;
+  }
+  // handle default
+  lok=processPacket(startCode,mpegHeader);
+  if (lok == false) {
+    return false;
   }
-  return processPacket(startCode,mpegHeader);
+  return true;
 }
 
 
@@ -322,8 +327,10 @@
   }  
   mpegHeader->resetAvailableLayers();
   int i = 6;
-  while ((inputBuffer[i] & 0x80) && (i<headerSize)  ) {
-    mpegHeader->addAvailableLayer(inputBuffer[i]);
+  while (i<headerSize) {
+    if (inputBuffer[i] & 0x80) {
+      mpegHeader->addAvailableLayer(inputBuffer[i]);
+    }
     i += 3;
   }
   free(inputBuffer);
Index: mpegSystemStream.h
===================================================================
RCS file: /home/kde/kdemultimedia/mpeglib/lib/mpegplay/mpegSystemStream.h,v
retrieving revision 1.2
diff -u -r1.2 mpegSystemStream.h
--- mpegSystemStream.h  2000/11/23 18:43:20     1.2
+++ mpegSystemStream.h  2001/06/26 09:51:53
@@ -90,6 +90,7 @@
   InputStream* input;
   int lHasLength;
   unsigned int syncCode;
+  int lState;
 
  public:
   MpegSystemStream(InputStream* input);
@@ -99,6 +100,7 @@
   int firstInitialize(MpegSystemHeader* mpegHeader);
   int nextPacket(MpegSystemHeader* mpegHeader);
   inline int eof() { return input->eof(); }
+  void reset();
 

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic