]> git.vomp.tv Git - vompclient-marten.git/commitdiff
Demuxer: Audio packet counting for radio navigation
authorMark Calderbank <mark@vomp.tv>
Sat, 25 Nov 2006 00:42:04 +0000 (00:42 +0000)
committerMark Calderbank <mark@vomp.tv>
Sat, 25 Nov 2006 00:42:04 +0000 (00:42 +0000)
demuxer.h
demuxervdr.cc
demuxervdr.h

index eb5881ceccfbd4e7274138048e20e702a7222f8b..ffbbf77cc0cbf03ace917cdd1c3721d57f6e4af7 100644 (file)
--- a/demuxer.h
+++ b/demuxer.h
@@ -83,7 +83,9 @@ protected:
     virtual int findPTS(UCHAR* buf, int len, ULLONG* dest) = 0;
     virtual int put(UCHAR* buf, int len) = 0;
     virtual void setFrameNum(ULONG frame) {}
+    virtual void setPacketNum(ULONG packet) {}
     virtual ULONG getFrameNumFromPTS(ULLONG pts) {return 0;}
+    virtual ULONG getPacketNum() {return 0;}
 
     bool* getmpAudioChannels(); //Maybe virtual ?
     int getselAudioChannel();
index f37ab6bbf615566f5d490d71292604825dd7f017..44e87a702be67a162b6a79ffe19e4a97c7ea4e9d 100644 (file)
@@ -52,11 +52,13 @@ static ULLONG PTSDifference(ULLONG pts1, ULLONG pts2)
 DemuxerVDR::DemuxerVDR()
 {
   frameCounting = false;
+  packetCounting = false;
 }
 
 void DemuxerVDR::reset()
 {
   frameCounting = false;
+  packetCounting = false;
   pts_map.clear();
   Demuxer::reset();
 }
@@ -141,6 +143,13 @@ void DemuxerVDR::setFrameNum(ULONG frame)
   Log::getInstance()->log("Demuxer", Log::DEBUG, "setFrameNum %d", frame);
 }
 
+void DemuxerVDR::setPacketNum(ULONG npacket)
+{
+  packetCounting = true;
+  packetNumber = npacket;
+  Log::getInstance()->log("Demuxer", Log::DEBUG, "setPacketNum %d", npacket);
+}
+
 int DemuxerVDR::put(UCHAR* buf, int len)
 {
   int ret = 0;    // return number of bytes consumed
@@ -237,6 +246,11 @@ int DemuxerVDR::put(UCHAR* buf, int len)
   return ret;
 }
 
+ULONG DemuxerVDR::getPacketNum()
+{
+  return packetNumber;
+}
+
 ULONG DemuxerVDR::getFrameNumFromPTS(ULLONG pts)
 {
   ULLONG difference = (1LL<<33);
@@ -288,6 +302,12 @@ void DemuxerVDR::PESPacketVDR::parseDetails()
   DemuxerVDR* dx = (DemuxerVDR*)(DemuxerVDR::getInstance());
   PESPacket::parseDetails();
 
+  if (dx->packetCounting &&
+      packetType >= PESTYPE_AUD0 && packetType <= PESTYPE_AUDMAX)
+  {
+    dx->packetNumber++;
+  }
+
   if (dx->frameCounting && findPictureHeader() &&
       packetType >= PESTYPE_VID0 && packetType <= PESTYPE_VIDMAX)
   {
index 7c7a36e8eea9e43edddf3c8c6fe2cac30ba49b36..cdfa9149871b8502ad3607d16398bdb2747139fc 100644 (file)
@@ -42,7 +42,9 @@ class DemuxerVDR : public Demuxer
     int findPTS(UCHAR* buf, int len, ULLONG* dest);
     int put(UCHAR* buf, int len);
     void setFrameNum(ULONG frame);
+    void setPacketNum(ULONG npacket);
     ULONG getFrameNumFromPTS(ULLONG pts);
+    ULONG getPacketNum();
 
   private:
     int state;
@@ -50,8 +52,8 @@ class DemuxerVDR : public Demuxer
     int packetLength;
     PESPacketVDR packet;
 
-    ULONG frameNumber;
-    bool frameCounting;
+    ULONG frameNumber, packetNumber;
+    bool frameCounting, packetCounting;
     typedef struct { ULLONG pts; ULONG frame; } PTSMapEntry;
     typedef std::deque<PTSMapEntry> PTSMap;
     PTSMap pts_map;