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