2 Copyright 2004-2005 Chris Tallon
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.
27 #define MPTYPE_VIDEO 0x00
28 #define MPTYPE_MPEG_AUDIO 0x01
29 #define MPTYPE_AC3 0x02
30 #define MPTYPE_AC3_PRE13 0x03 //old vdr recording compatmode
31 #define MPTYPE_MPEG_AUDIO_LAYER3 0x04 //for media mp3 playback
32 #define MPTYPE_TELETEXT 0x05 //for EBU VBI teletext
36 ULONG pos_buffer; //position in stream buffer
37 ULONG length; //length of the packet
38 // The fields below are not needed by the MVP
43 ULLONG recording_byte_pos; //position in recording
44 long long presentation_time;/* in 100 ns units*/
50 typedef list<MediaPacket> MediaPacketList;
56 virtual ~DrainTarget();
58 virtual long long SetStartOffset(long long curreftime, bool *rsync)=0;
59 virtual void ResetTimeOffsets()=0;
61 // The following two functions are used by the Stream
62 // to deliver media packets to the front end (DrainTarget).
64 // First, the Stream calls PrepareMediaSample, which gives the front end
65 // read-only access to the Stream's MediaPacketList. PrepareMediaSample should
66 // examine the list to determine how much it wishes to consume, and
67 // should copy any data it requires from the MediaPacket objects into
69 // This function call takes place under a mutex lock to ensure integrity
70 // of the list structure. It should be fast and must not contain any
71 // cancellation points, such as I/O calls for logging.
73 // Second, the Stream releases the mutex and calls DeliverMediaSample.
74 // This function delivers data from the Stream buffer to the presentation
75 // device and returns information to the Stream regarding how many MediaPackets
76 // were consumed. Any data copied from the MediaPackets objects during
77 // PrepareMediaSample is guaranteed by the Stream still to be valid
78 // during the following DeliverMediaSample call.
80 // samplepos is equal to the number of bytes from the first MediaPacket
81 // in the list that have already been consumed in a previous call.
82 virtual void PrepareMediaSample(const MediaPacketList&, UINT samplepos)=0;
84 // The Stream guarantees that the value of *samplepos passed to
85 // DeliverMediaSample will be equal to the value of samplepos passed to
86 // PrepareMediaSample in the previous call.
87 // This function should consume data from the buffer according to the
88 // decisions made in PrepareMediaSample. Its return value and *samplepos
89 // tell the Stream how much data it consumed.
90 // If DeliverMediaSample returns X, the Stream will remove packets 0 to X-1
91 // (inclusive) from the list before the next call.
92 // DeliverMediaSample must also set *samplepos equal to the number of bytes
93 // processed from packet X (usually zero).
94 virtual UINT DeliverMediaSample(const UCHAR* buffer, UINT *samplepos)=0;