2 Copyright 2006-2007 Mark Calderbank
4 This file is part of VOMP.
6 VOMP is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 VOMP is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with VOMP; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
34 class DemuxerTS : public Demuxer
37 DemuxerTS(int p_vID = 0, int p_aID = 0, int p_subID = 0, int p_tID = 0);
39 int scan(UCHAR* buf, int len);
40 int findPTS(UCHAR* buf, int len, ULLONG* dest);
41 void setVID(int p_vID);
42 void setTID(int p_tID);
43 void setAID(int p_aID, int type, int streamtype);
44 void setSubID(int p_subID);
45 int getVID() { return vID; }
46 int getTID() { return tID; }
47 int getAID() { return aID; }
48 int getSubID() { return subID; }
49 int put(UCHAR* buf, int len);
51 void setFrameNum(ULONG frame);
52 void setPacketNum(ULONG npacket);
53 ULONG getFrameNumFromPTS(ULLONG pts);
55 UINT stripAudio(UCHAR* buf, UINT len);
56 static bool scanForVideo(UCHAR* buf, UINT len, bool &ish264);
57 Channel *getChannelInfo() {return &channelinfo;};
61 int processTS(UCHAR* buf);
63 UCHAR store[TS_SIZE]; // Storage for partial packets
64 int partPacket; // Length of partial packet stored from previous put()
65 bool parsed; // Whether PES packet to be submitted has been parsed yet
66 PESPacket vPacket; // Video PES packet under construction
67 PESPacket aPacket; // Audio PES packet under construction
68 PESPacket subPacket; // Subtitles PES packet under construction
69 PESPacket tPacket; // Teletext PES packet under construction
70 int vID, aID, subID,tID; // TS IDs for video/audio/subtitles
71 int PMTPID; //TODO HANS which of these do I Need:
74 bool subActive; // Same for subtitles
75 UINT subLength; // Expected length of subtitle packet
76 bool vActive, aActive, tActive; // Whether video/audio is actively being captured
82 //TODO HANS which of next do I need
83 ULONG frameNumber, packetNumber;
84 bool frameCounting, packetCounting;
85 // bool doubledframerate;
87 typedef struct { ULLONG pts; ULONG frame; } PTSMapEntry;
88 typedef std::deque<PTSMapEntry> PTSMap;
91 void parseTSPacketDetails(PESPacket &packet);