]> git.vomp.tv Git - vompclient.git/blob - draintarget.h
Update for windows
[vompclient.git] / draintarget.h
1 /*
2     Copyright 2004-2005 Chris Tallon
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, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21 #ifndef DRAINTARGET_H
22 #define DRAINTARGET_H
23
24 #include "defines.h"
25 #include <list>
26
27 struct MediaPacket
28 {
29   ULONG pos_buffer; //position in stream buffer
30   ULONG length; //length of the packet
31   // The fields below are not needed by the MVP
32 #ifdef WIN32
33   ULLONG recording_byte_pos; //position in recording
34   ULLONG pts;
35   long long presentation_time;/* in 100 ns units*/
36   bool synched;
37   bool disconti;
38 #endif
39 };
40
41 using namespace std;
42 typedef list<MediaPacket> MediaPacketList;
43
44 class DrainTarget
45 {
46   public:
47     DrainTarget();
48     virtual ~DrainTarget();
49
50     virtual long long SetStartOffset(long long curreftime, bool *rsync)=0;
51     virtual void ResetTimeOffsets()=0;
52
53 // The following two functions are used by the Stream
54 // to deliver media packets to the front end (DrainTarget).
55 //
56 // First, the Stream calls PrepareMediaSample, which gives the front end
57 // read-only access to the Stream's MediaPacketList. PrepareMediaSample should
58 // examine the list to determine how much it wishes to consume, and
59 // should copy any data it requires from the MediaPacket objects into
60 // local storage.
61 // This function call takes place under a mutex lock to ensure integrity
62 // of the list structure. It should be fast and must not contain any
63 // cancellation points, such as I/O calls for logging.
64 //
65 // Second, the Stream releases the mutex and calls DeliverMediaSample.
66 // This function delivers data from the Stream buffer to the presentation
67 // device and returns information to the Stream regarding how many MediaPackets
68 // were consumed. Any data copied from the MediaPackets objects during
69 // PrepareMediaSample is guaranteed by the Stream still to be valid
70 // during the following DeliverMediaSample call.
71
72     // samplepos is equal to the number of bytes from the first MediaPacket
73     // in the list that have already been consumed in a previous call.
74     virtual void PrepareMediaSample(const MediaPacketList&, UINT samplepos)=0;
75
76     // The Stream guarantees that the value of *samplepos passed to
77     // DeliverMediaSample will be equal to the value of samplepos passed to
78     // PrepareMediaSample in the previous call.
79     // This function should consume data from the buffer according to the
80     // decisions made in PrepareMediaSample. Its return value and *samplepos
81     // tell the Stream how much data it consumed.
82     // If DeliverMediaSample returns X, the Stream will remove packets 0 to X-1
83     // (inclusive) from the list before the next call.
84     // DeliverMediaSample must also set *samplepos equal to the number of bytes
85     // processed from packet X (usually zero).
86     virtual UINT DeliverMediaSample(const UCHAR* buffer, UINT *samplepos)=0;
87 };
88
89 #endif