parse mpeg4 AVC UADs
authorFelix Domke <tmbinc@elitedvb.net>
Wed, 30 Jan 2008 13:45:23 +0000 (13:45 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Wed, 30 Jan 2008 13:45:23 +0000 (13:45 +0000)
lib/dvb/pvrparse.cpp

index a611332904095e84f2007d70f395b981f9726874..c96669b01aa2282d0ce66a1d44ef14d33baecaa8 100644 (file)
@@ -316,8 +316,16 @@ int eMPEGStreamParserTS::processPacket(const unsigned char *pkt, off_t offset)
        
                /* advance to payload */
        pkt += pkt[8] + 9;
        
                /* advance to payload */
        pkt += pkt[8] + 9;
-       
+
+               /* sometimes, there are zeros before the startcode. */
+       while (pkt < (end-4))
+               if (pkt[0] || pkt[1] || pkt[2])
+                       break;
+               else
+                       pkt++;
+
                /* if startcode found */
                /* if startcode found */
+//     eDebug("%02x %02x %02x %02x", pkt[0], pkt[1], pkt[2], pkt[3]);
        if (!(pkt[0] || pkt[1] || (pkt[2] != 1)))
        {
                if (pkt[3] == 0xb3) /* sequence header */
        if (!(pkt[0] || pkt[1] || (pkt[2] != 1)))
        {
                if (pkt[3] == 0xb3) /* sequence header */
@@ -329,6 +337,16 @@ int eMPEGStreamParserTS::processPacket(const unsigned char *pkt, off_t offset)
                        } else
                                eDebug("Sequence header but no valid PTS value.");
                }
                        } else
                                eDebug("Sequence header but no valid PTS value.");
                }
+
+               if (pkt[3] == 0x09) /* MPEG4 AVC unit access delimiter */
+               {
+                       if (ptsvalid)
+                       {
+                               m_streaminfo.m_access_points[offset] = pts;
+                               eDebug("MPEG4 AVC UAD at %llx, pts %llx", offset, pts);
+                       } else
+                               eDebug("MPEG4 AVC UAD but no valid PTS value.");
+               }
        }
        return 0;
 }
        }
        return 0;
 }