Home | History | Annotate | Download | only in include
      1 /*
      2  * Copyright 2004 Christian Costa
      3  *
      4  * This library is free software; you can redistribute it and/or
      5  * modify it under the terms of the GNU Lesser General Public
      6  * License as published by the Free Software Foundation; either
      7  * version 2.1 of the License, or (at your option) any later version.
      8  *
      9  * This library is distributed in the hope that it will be useful,
     10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12  * Lesser General Public License for more details.
     13  *
     14  * You should have received a copy of the GNU Lesser General Public
     15  * License along with this library; if not, write to the Free Software
     16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
     17  */
     18 
     19 import "unknwn.idl";
     20 import "mmstream.idl";
     21 import "strmif.idl";
     22 
     23 cpp_quote("#include <ddraw.h>")
     24 cpp_quote("#include <mmsystem.h>")
     25 cpp_quote("#include <mmstream.h>")
     26 cpp_quote("#include <ddstream.h>")
     27 cpp_quote("#include <austream.h>")
     28 
     29 cpp_quote("#if 0")
     30 interface IDirectDraw;
     31 interface IDirectDrawSurface;
     32 cpp_quote("#endif")
     33 
     34 interface IAMMultiMediaStream;
     35 interface IAMMediaStream;
     36 interface IMediaStreamFilter;
     37 interface IAMMediaTypeStream;
     38 interface IAMMediaTypeSample;
     39 
     40 enum {
     41 	AMMSF_NOGRAPHTHREAD      = 0x00000001
     42 };
     43 
     44 enum {
     45 	AMMSF_ADDDEFAULTRENDERER = 0x00000001,
     46 	AMMSF_CREATEPEER         = 0x00000002,
     47 	AMMSF_STOPIFNOSAMPLES	 = 0x00000004,
     48 	AMMSF_NOSTALL		 = 0x00000008
     49 };
     50 
     51 enum {
     52 	AMMSF_RENDERTYPEMASK     = 0x00000003,
     53 	AMMSF_RENDERTOEXISTING   = 0x00000000,
     54 	AMMSF_RENDERALLSTREAMS   = 0x00000001,
     55 	AMMSF_NORENDER           = 0x00000002,
     56 	AMMSF_NOCLOCK            = 0x00000004,
     57 	AMMSF_RUN                = 0x00000008
     58 };
     59 
     60 
     61 typedef [v1_enum] enum {
     62 	Disabled = 0,
     63 	ReadData = 1,
     64 	RenderData = 2
     65 } OUTPUT_STATE;
     66 
     67 [
     68 object,
     69 uuid(7DB01C96-C0C3-11d0-8FF1-00C04FD9189D),
     70 dual,
     71 helpstring("IDirectShowStream Interface"),
     72 pointer_default(unique)
     73 ]
     74 interface IDirectShowStream : IDispatch
     75 {
     76 	[propget, id(1), helpstring("property FileName")] HRESULT FileName([out, retval] BSTR *pVal);
     77 	[propput, id(1), helpstring("property FileName")] HRESULT FileName([in] BSTR newVal);
     78 	[propget, id(2), helpstring("property Video")] HRESULT Video([out, retval] OUTPUT_STATE *pVal);
     79 	[propput, id(2), helpstring("propetry Video")] HRESULT Video([in] OUTPUT_STATE newVal);
     80 	[propget, id(3), helpstring("property Audio")] HRESULT Audio([out, retval] OUTPUT_STATE *pVal);
     81 	[propput, id(3), helpstring("propetry Audio")] HRESULT Audio([in] OUTPUT_STATE newVal);
     82 };
     83 
     84 [
     85 object,
     86 uuid(BEBE595C-9A6F-11d0-8FDE-00C04FD9189D),
     87 pointer_default(unique)
     88 ]
     89 interface IAMMultiMediaStream : IMultiMediaStream
     90 {
     91 	HRESULT Initialize(
     92 		[in] STREAM_TYPE StreamType,
     93 		[in] DWORD dwFlags,
     94 		[in] IGraphBuilder *pFilterGraph);
     95 
     96 	HRESULT GetFilterGraph(
     97 		[out] IGraphBuilder **ppGraphBuilder);
     98 
     99 	HRESULT GetFilter(
    100 		[out] IMediaStreamFilter **ppFilter);
    101 
    102 	HRESULT AddMediaStream(
    103 		[in] IUnknown *pStreamObject,
    104 		[in] const MSPID *PurposeId,
    105 		[in] DWORD dwFlags,
    106 		[out] IMediaStream **ppNewStream);
    107 
    108 	HRESULT OpenFile(
    109 		[in] LPCWSTR pszFileName,
    110 		[in] DWORD dwFlags);
    111 
    112 	HRESULT OpenMoniker(
    113 		[in] IBindCtx *pCtx,
    114 		[in] IMoniker *pMoniker,
    115 		[in] DWORD dwFlags);
    116 
    117 	HRESULT Render(
    118 		[in] DWORD dwFlags);
    119 }
    120 
    121 
    122 [
    123 object,
    124 uuid(BEBE595D-9A6F-11d0-8FDE-00C04FD9189D),
    125 pointer_default(unique)
    126 ]
    127 interface IAMMediaStream : IMediaStream
    128 {
    129 	HRESULT Initialize(
    130 		[in] IUnknown *pSourceObject,
    131 		[in] DWORD dwFlags,
    132 		[in] REFMSPID PurposeId,
    133 		[in] const STREAM_TYPE StreamType);
    134 
    135 	HRESULT SetState(
    136 		[in] FILTER_STATE State);
    137 
    138 	HRESULT JoinAMMultiMediaStream(
    139 		[in] IAMMultiMediaStream *pAMMultiMediaStream);
    140 
    141 	HRESULT JoinFilter(
    142 		[in] IMediaStreamFilter *pMediaStreamFilter);
    143 
    144 	HRESULT JoinFilterGraph(
    145 		[in] IFilterGraph *pFilterGraph);
    146 }
    147 
    148 
    149 [
    150 object,
    151 local,
    152 uuid(BEBE595E-9A6F-11d0-8FDE-00C04FD9189D),
    153 pointer_default(unique)
    154 ]
    155 interface IMediaStreamFilter : IBaseFilter
    156 {
    157 	HRESULT AddMediaStream(
    158 		[in] IAMMediaStream *pAMMediaStream);
    159 
    160 	HRESULT GetMediaStream(
    161 		[in] REFMSPID idPurpose,
    162 		[out] IMediaStream **ppMediaStream);
    163 
    164 	HRESULT EnumMediaStreams(
    165 		[in] long Index,
    166 		[out] IMediaStream **ppMediaStream);
    167 
    168 	HRESULT SupportSeeking(
    169 		[in] BOOL bRenderer);
    170 
    171 	HRESULT ReferenceTimeToStreamTime(
    172 		[in] [out] REFERENCE_TIME *pTime);
    173 
    174 	HRESULT GetCurrentStreamTime(
    175 		[out] REFERENCE_TIME *pCurrentStreamTime);
    176 
    177 	HRESULT WaitUntil(
    178 		[in]  REFERENCE_TIME WaitStreamTime);
    179 
    180 	HRESULT Flush(
    181 		[in] BOOL bCancelEOS);
    182 
    183 	HRESULT EndOfStream();
    184 }
    185 
    186 
    187 [
    188 object,
    189 local,
    190 uuid(AB6B4AFC-F6E4-11d0-900D-00C04FD9189D),
    191 pointer_default(unique)
    192 ]
    193 interface IDirectDrawMediaSampleAllocator : IUnknown
    194 {
    195 	HRESULT GetDirectDraw(IDirectDraw **ppDirectDraw);
    196 }
    197 
    198 
    199 [
    200 object,
    201 local,
    202 uuid(AB6B4AFE-F6E4-11d0-900D-00C04FD9189D),
    203 pointer_default(unique)
    204 ]
    205 interface IDirectDrawMediaSample : IUnknown
    206 {
    207 	HRESULT GetSurfaceAndReleaseLock(
    208 		[out] IDirectDrawSurface **ppDirectDrawSurface,
    209 		[out] RECT * pRect);
    210 
    211 	HRESULT LockMediaSamplePointer(void);
    212 }
    213 
    214 
    215 [
    216 object,
    217 local,
    218 uuid(AB6B4AFA-F6E4-11d0-900D-00C04FD9189D),
    219 pointer_default(unique)
    220 ]
    221 
    222 interface IAMMediaTypeStream : IMediaStream
    223 {
    224 	HRESULT GetFormat(
    225 		[out] AM_MEDIA_TYPE * pMediaType,
    226 		[in] DWORD dwFlags);
    227 
    228 	HRESULT SetFormat(
    229 		[in] AM_MEDIA_TYPE * pMediaType,
    230 		[in] DWORD dwFlags);
    231 
    232 	HRESULT CreateSample(
    233 		[in] long lSampleSize,
    234 		[in] BYTE * pbBuffer,
    235 		[in] DWORD dwFlags,
    236 		[in] IUnknown *pUnkOuter,
    237 		[out] IAMMediaTypeSample ** ppAMMediaTypeSample);
    238 
    239 	HRESULT GetStreamAllocatorRequirements(
    240 		[out] ALLOCATOR_PROPERTIES *pProps);
    241 
    242 	HRESULT SetStreamAllocatorRequirements(
    243 		[in] ALLOCATOR_PROPERTIES *pProps);
    244 }
    245 
    246 
    247 [
    248 object,
    249 local,
    250 uuid(AB6B4AFB-F6E4-11d0-900D-00C04FD9189D),
    251 pointer_default(unique)
    252 ]
    253 interface IAMMediaTypeSample : IStreamSample
    254 {
    255 	HRESULT SetPointer(
    256 		[in] BYTE *pBuffer,
    257 		[in] long lSize);
    258 
    259 	HRESULT GetPointer(
    260 		[out] BYTE ** ppBuffer);
    261 
    262 	long GetSize(void);
    263 
    264 	HRESULT GetTime(
    265 		[out] REFERENCE_TIME * pTimeStart,
    266 		[out] REFERENCE_TIME * pTimeEnd);
    267 
    268 	HRESULT SetTime(
    269 		[in] REFERENCE_TIME * pTimeStart,
    270 		[in] REFERENCE_TIME * pTimeEnd);
    271 
    272 	HRESULT IsSyncPoint(void);
    273 
    274 	HRESULT SetSyncPoint(
    275 		BOOL bIsSyncPoint);
    276 
    277 	HRESULT IsPreroll(void);
    278 
    279 	HRESULT SetPreroll(
    280 		BOOL bIsPreroll);
    281 
    282 	long GetActualDataLength(void);
    283 
    284 	HRESULT SetActualDataLength(long Len);
    285 
    286 	HRESULT GetMediaType(
    287 		AM_MEDIA_TYPE **ppMediaType);
    288 
    289 	HRESULT SetMediaType(
    290 		AM_MEDIA_TYPE *pMediaType);
    291 
    292 	HRESULT IsDiscontinuity(void);
    293 
    294 	HRESULT SetDiscontinuity(
    295 		BOOL bDiscontinuity);
    296 
    297 	HRESULT GetMediaTime(
    298 		[out] LONGLONG * pTimeStart,
    299 		[out] LONGLONG * pTimeEnd);
    300 
    301 	HRESULT SetMediaTime(
    302 		[in] LONGLONG * pTimeStart,
    303 		[in] LONGLONG * pTimeEnd);
    304 }
    305 
    306 [
    307     uuid(49C47CE5-9BA4-11d0-8212-00C04FC32C45)
    308 ]
    309 coclass AMMultiMediaStream
    310 {
    311     [default] dispinterface IDirectShowStream;
    312 }
    313 
    314 cpp_quote("DEFINE_GUID(CLSID_AMDirectDrawStream,  0x49c47ce4, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
    315 cpp_quote("DEFINE_GUID(CLSID_AMAudioStream,       0x8496e040, 0xaf4c, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
    316 cpp_quote("DEFINE_GUID(CLSID_AMAudioData,         0xf2468580, 0xaf8a, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
    317 cpp_quote("DEFINE_GUID(CLSID_AMMediaTypeStream,   0xcf0f2f7c, 0xf7bf, 0x11d0, 0x90, 0x0d, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);")
    318 cpp_quote("DEFINE_GUID(CLSID_MediaStreamFilter,   0x49c47ce0, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);")
    319