2 Copyright 2005-2006 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 Thanks goes to Jon Gettler of the MVPMC project and Stephen Rice for
24 the demuxer in mvpmc. It was used in the creation of this Demuxer,
25 however, no code was copied verbatim.
39 #include "draintarget.h"
46 public: //MS Visual C++ need this, private does not work for DemuxerVDR, Marten
51 void init(UCHAR type);
52 int write(UCHAR* buf, int len);
56 int submit(ULLONG cur_pos);
66 friend class PESPacket;
71 static Demuxer* getInstance();
72 int init(Callback* callback);
77 void setVideoStream(int id);
78 void setAudioStream(int id);
80 int writeAudio(int fd);
81 int writeVideo(int fd);
83 int writeAudio(DrainTarget* dt);
84 int writeVideo(DrainTarget* dt);
87 virtual int scan(UCHAR* buf, int len) = 0;
88 virtual int findVideoPTS(UCHAR* buf, int len, ULLONG* dest) = 0;
90 virtual int put(UCHAR* buf, int len) = 0;
92 virtual int put(UCHAR* buf, int len,ULLONG cur_pos) = 0;
95 int getHorizontalSize() { return horizontal_size; }
96 int getVerticalSize() { return vertical_size; }
97 int getAspectRatio() { return aspect_ratio; }
98 int getFrameRate() { return frame_rate; }
99 int getBitRate() { return bit_rate; }
100 ULLONG getVideoPTS() { return video_pts; }
109 // General demuxer objects and status indicators
110 static Demuxer* instance;
117 int video_current, audio_current;
119 // Video stream information
120 void setAspectRatio(enum AspectRatio);
125 enum AspectRatio aspect_ratio;
130 ULLONG video_pts_seek;
134 static const int demuxMemoryV = 2097152;
135 static const int demuxMemoryA = 524288;
136 static const int FrameRates[9];
140 PESTYPE_PRIVATE_1 = 0xBD,
143 PESTYPE_AUD1, PESTYPE_AUD2, PESTYPE_AUD3, PESTYPE_AUD4,
144 PESTYPE_AUD5, PESTYPE_AUD6, PESTYPE_AUD7, PESTYPE_AUD8,
145 PESTYPE_AUD9, PESTYPE_AUD10, PESTYPE_AUD11, PESTYPE_AUD12,
146 PESTYPE_AUD13, PESTYPE_AUD14, PESTYPE_AUD15, PESTYPE_AUD16,
147 PESTYPE_AUD17, PESTYPE_AUD18, PESTYPE_AUD19, PESTYPE_AUD20,
148 PESTYPE_AUD21, PESTYPE_AUD22, PESTYPE_AUD23, PESTYPE_AUD24,
149 PESTYPE_AUD25, PESTYPE_AUD26, PESTYPE_AUD27, PESTYPE_AUD28,
150 PESTYPE_AUD29, PESTYPE_AUD30, PESTYPE_AUD31,
151 PESTYPE_AUDMAX = PESTYPE_AUD31,
154 PESTYPE_VID1, PESTYPE_VID2, PESTYPE_VID3, PESTYPE_VID4,
155 PESTYPE_VID5, PESTYPE_VID6, PESTYPE_VID7, PESTYPE_VID8,
156 PESTYPE_VID9, PESTYPE_VID10, PESTYPE_VID11, PESTYPE_VID12,
157 PESTYPE_VID13, PESTYPE_VID14, PESTYPE_VID15,
158 PESTYPE_VIDMAX = PESTYPE_VID15