]> git.vomp.tv Git - vompclient.git/blob - demuxerts.h
Fix black background for 16:9 live TV on 4:3 screen
[vompclient.git] / demuxerts.h
1 /*
2     Copyright 2006-2007 Mark Calderbank
3
4     This file is part of VOMP.
5
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.
10
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.
15
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/>.
18 */
19
20 #ifndef DEMUXERTS_H
21 #define DEMUXERTS_H
22
23 #include <mutex>
24 #include <deque>
25
26 #include "demuxer.h"
27 #include "defines.h"
28 #include "channel.h"
29
30 #define TS_SIZE 188
31 #define TS_SIG  0x47
32
33 class DemuxerTS : public Demuxer
34 {
35   public:
36     DemuxerTS(int p_vID = 0, int p_aID = 0, int p_subID = 0, int p_tID = 0);    
37     void flush();
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);
49
50     void setFrameNum(ULONG frame);
51     void setPacketNum(ULONG npacket);
52     ULONG getFrameNumFromPTS(ULLONG pts);
53     ULONG getPacketNum();
54     UINT stripAudio(UCHAR* buf, UINT len);
55     static bool scanForVideo(UCHAR* buf, UINT len, bool &ish264);
56     Channel *getChannelInfo() {return &channelinfo;};
57
58
59   private:
60     int processTS(UCHAR* buf);
61
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:
71
72     int atype;
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
76
77     bool havechannelinfo;
78     Channel channelinfo;
79     
80
81     //TODO HANS which of next do I need
82     ULONG frameNumber, packetNumber;
83     bool frameCounting, packetCounting;
84    // bool doubledframerate;
85     int framereserve;
86     typedef struct { ULLONG pts; ULONG frame; } PTSMapEntry;
87     typedef std::deque<PTSMapEntry> PTSMap;
88     PTSMap pts_map;
89     std::mutex pts_map_mutex;
90     void parseTSPacketDetails(PESPacket &packet);
91
92     struct PictCountInfo pinfo;
93
94    
95
96 };
97
98 #endif