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();
DemuxerVDR::DemuxerVDR()
{
frameCounting = false;
+ packetCounting = false;
}
void DemuxerVDR::reset()
{
frameCounting = false;
+ packetCounting = false;
pts_map.clear();
Demuxer::reset();
}
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
return ret;
}
+ULONG DemuxerVDR::getPacketNum()
+{
+ return packetNumber;
+}
+
ULONG DemuxerVDR::getFrameNumFromPTS(ULLONG pts)
{
ULLONG difference = (1LL<<33);
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)
{
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;
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;