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, see <https://www.gnu.org/licenses/>.
33 class DemuxerTS : public Demuxer
36 DemuxerTS(int p_vID = 0, int p_aID = 0, int p_subID = 0, int p_tID = 0);
38 int scan(UCHAR* buf, int len);
39 int findPTS(UCHAR* buf, int len, ULLONG* dest);
40 void setVID(int p_vID);
41 void setTID(int p_tID);
42 void setAID(int p_aID, int type, int streamtype,bool slivetv);
43 void setSubID(int p_subID);
44 int getVID() { return vID; }
45 int getTID() { return tID; }
46 int getAID() { return aID; }
47 int getSubID() { return subID; }
48 int put(UCHAR* buf, int len);
50 void setFrameNum(ULONG frame);
51 void setPacketNum(ULONG npacket);
52 ULONG getFrameNumFromPTS(ULLONG pts);
54 UINT stripAudio(UCHAR* buf, UINT len);
55 static bool scanForVideo(UCHAR* buf, UINT len, bool &ish264);
56 Channel *getChannelInfo() {return &channelinfo;};
60 int processTS(UCHAR* buf);
62 UCHAR store[TS_SIZE]; // Storage for partial packets
63 int partPacket; // Length of partial packet stored from previous put()
64 bool parsed; // Whether PES packet to be submitted has been parsed yet
65 PESPacket vPacket; // Video PES packet under construction
66 PESPacket aPacket; // Audio PES packet under construction
67 PESPacket subPacket; // Subtitles PES packet under construction
68 PESPacket tPacket; // Teletext PES packet under construction
69 int vID, aID, subID,tID; // TS IDs for video/audio/subtitles
70 int PMTPID; //TODO HANS which of these do I Need:
73 bool subActive; // Same for subtitles
74 UINT subLength; // Expected length of subtitle packet
75 bool vActive, aActive, tActive; // Whether video/audio is actively being captured
81 //TODO HANS which of next do I need
82 ULONG frameNumber, packetNumber;
83 bool frameCounting, packetCounting;
84 // bool doubledframerate;
86 typedef struct { ULLONG pts; ULONG frame; } PTSMapEntry;
87 typedef std::deque<PTSMapEntry> PTSMap;
89 std::mutex pts_map_mutex;
90 void parseTSPacketDetails(PESPacket &packet);
92 struct PictCountInfo pinfo;