Add support for WM_WINDOWPOSCHANGED to save new origin of window.
[wine] / dlls / quartz / asyncsrc.h
1 /*
2  * Implements Asynchronous File/URL Source.
3  *
4  * Copyright (C) Hidenori TAKESHIMA <hidenori@a2.ctktv.ne.jp>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library 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 GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #ifndef WINE_DSHOW_ASYNCSRC_H
22 #define WINE_DSHOW_ASYNCSRC_H
23
24 #include "iunk.h"
25 #include "basefilt.h"
26
27 typedef struct CAsyncSourceImpl CAsyncSourceImpl;
28 typedef struct CAsyncSourcePinImpl      CAsyncSourcePinImpl;
29 typedef struct AsyncSourceRequest       AsyncSourceRequest;
30 typedef struct AsyncSourceHandlers      AsyncSourceHandlers;
31
32 typedef struct CAsyncReaderImpl
33 {
34         ICOM_VFIELD(IAsyncReader);
35
36         /* IUnknown fields */
37         IUnknown*       punkControl;
38         /* IAsyncReader fields */
39         CAsyncSourceImpl*       pSource;
40
41         CRITICAL_SECTION        m_csReader;
42         BOOL    m_bInFlushing;
43         BOOL    m_bAbortThread;
44         HANDLE  m_hEventInit;
45         HANDLE  m_hEventCancel;
46         HANDLE  m_hEventReqQueued;
47         HANDLE  m_hEventSampQueued;
48         HANDLE  m_hThread;
49         CRITICAL_SECTION        m_csRequest;
50         AsyncSourceRequest*     m_pRequestFirst;
51         CRITICAL_SECTION        m_csReply;
52         AsyncSourceRequest*     m_pReplyFirst;
53         CRITICAL_SECTION        m_csFree;
54         AsyncSourceRequest*     m_pFreeFirst;
55 } CAsyncReaderImpl;
56
57 typedef struct CFileSourceFilterImpl
58 {
59         ICOM_VFIELD(IFileSourceFilter);
60
61         /* IUnknown fields */
62         IUnknown*       punkControl;
63         /* IFileSourceFilter fields */
64         CAsyncSourceImpl*       pSource;
65
66         CRITICAL_SECTION*       pcsFileSource;
67         WCHAR*  m_pwszFileName;
68         DWORD   m_cbFileName;
69         AM_MEDIA_TYPE   m_mt;
70 } CFileSourceFilterImpl;
71
72 struct CAsyncSourceImpl
73 {
74         QUARTZ_IUnkImpl unk;
75         CBaseFilterImpl basefilter;
76         CFileSourceFilterImpl   filesrc;
77
78         CRITICAL_SECTION        csFilter;
79         CAsyncSourcePinImpl*    pPin;
80         const AsyncSourceHandlers*      m_pHandler;
81         void*   m_pUserData;
82 };
83
84 struct CAsyncSourcePinImpl
85 {
86         QUARTZ_IUnkImpl unk;
87         CPinBaseImpl    pin;
88         CAsyncReaderImpl        async;
89         QUARTZ_IFDelegation     qiext;
90
91         BOOL    bAsyncReaderQueried;
92         CAsyncSourceImpl*       pSource;
93 };
94
95 struct AsyncSourceRequest
96 {
97         AsyncSourceRequest*     pNext;
98
99         LONGLONG        llStart;
100         LONG    lLength;
101         LONG    lActual;
102         BYTE*   pBuf;
103         IMediaSample*   pSample; /* for async req. */
104         DWORD_PTR       dwContext; /* for async req. */
105 };
106
107 struct AsyncSourceHandlers
108 {
109         /* all handlers MUST be implemented. */
110         HRESULT (*pLoad)( CAsyncSourceImpl* pImpl, LPCWSTR lpwszSourceName );
111         HRESULT (*pCleanup)( CAsyncSourceImpl* pImpl );
112         HRESULT (*pGetLength)( CAsyncSourceImpl* pImpl, LONGLONG* pllTotal, LONGLONG* pllAvailable );
113         /* S_OK = OK / S_FALSE = Canceled / other = error */
114         /* hEventCancel may be NULL */
115         HRESULT (*pRead)( CAsyncSourceImpl* pImpl, LONGLONG llOfsStart, LONG lLength, BYTE* pBuf, LONG* plReturned, HANDLE hEventCancel );
116 };
117
118 #define CAsyncSourceImpl_THIS(iface,member)             CAsyncSourceImpl*       This = ((CAsyncSourceImpl*)(((char*)iface)-offsetof(CAsyncSourceImpl,member)))
119 #define CAsyncSourcePinImpl_THIS(iface,member)          CAsyncSourcePinImpl*    This = ((CAsyncSourcePinImpl*)(((char*)iface)-offsetof(CAsyncSourcePinImpl,member)))
120
121
122 HRESULT CAsyncReaderImpl_InitIAsyncReader(
123         CAsyncReaderImpl* This, IUnknown* punkControl,
124         CAsyncSourceImpl* pSource );
125 void CAsyncReaderImpl_UninitIAsyncReader(
126         CAsyncReaderImpl* This );
127 HRESULT CFileSourceFilterImpl_InitIFileSourceFilter(
128         CFileSourceFilterImpl* This, IUnknown* punkControl,
129         CAsyncSourceImpl* pSource,
130         CRITICAL_SECTION* pcsFileSource );
131 void CFileSourceFilterImpl_UninitIFileSourceFilter(
132         CFileSourceFilterImpl* This );
133
134
135 HRESULT QUARTZ_CreateAsyncSource(
136         IUnknown* punkOuter,void** ppobj,
137         const CLSID* pclsidAsyncSource,
138         LPCWSTR pwszAsyncSourceName,
139         LPCWSTR pwszOutPinName,
140         const AsyncSourceHandlers* pHandler );
141 HRESULT QUARTZ_CreateAsyncSourcePin(
142         CAsyncSourceImpl* pFilter,
143         CRITICAL_SECTION* pcsPin,
144         CAsyncSourcePinImpl** ppPin,
145         LPCWSTR pwszPinName );
146
147
148 HRESULT QUARTZ_CreateAsyncReader(IUnknown* punkOuter,void** ppobj);
149 HRESULT QUARTZ_CreateURLReader(IUnknown* punkOuter,void** ppobj);
150
151 #define ASYNCSRC_FILE_BLOCKSIZE 16384
152
153
154 #endif  /* WINE_DSHOW_ASYNCSRC_H */