1/* 2 * Copyright 2015 Jacek Caban for CodeWeavers 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 19import "unknwn.idl"; 20import "propsys.idl"; 21import "mediaobj.idl"; 22 23cpp_quote("#include <mmreg.h>") 24#include <mmreg.h> 25 26typedef ULONGLONG QWORD; 27 28typedef enum _MF_ATTRIBUTE_TYPE { 29 MF_ATTRIBUTE_UINT32 = VT_UI4, 30 MF_ATTRIBUTE_UINT64 = VT_UI8, 31 MF_ATTRIBUTE_DOUBLE = VT_R8, 32 MF_ATTRIBUTE_GUID = VT_CLSID, 33 MF_ATTRIBUTE_STRING = VT_LPWSTR, 34 MF_ATTRIBUTE_BLOB = VT_VECTOR | VT_UI1, 35 MF_ATTRIBUTE_IUNKNOWN = VT_UNKNOWN 36} MF_ATTRIBUTE_TYPE; 37 38typedef enum _MF_ATTRIBUTES_MATCH_TYPE { 39 MF_ATTRIBUTES_MATCH_OUR_ITEMS = 0, 40 MF_ATTRIBUTES_MATCH_THEIR_ITEMS = 1, 41 MF_ATTRIBUTES_MATCH_ALL_ITEMS = 2, 42 MF_ATTRIBUTES_MATCH_INTERSECTION = 3, 43 MF_ATTRIBUTES_MATCH_SMALLER = 4 44} MF_ATTRIBUTES_MATCH_TYPE; 45 46[ 47 object, 48 uuid(2cd2d921-c447-44a7-a13c-4adabfc247e3) 49] 50interface IMFAttributes : IUnknown 51{ 52 HRESULT GetItem(REFGUID guidKey, [in, out, ptr] PROPVARIANT *pValue); 53 HRESULT GetItemType(REFGUID guidKey, [out] MF_ATTRIBUTE_TYPE *pType); 54 HRESULT CompareItem(REFGUID guidKey, REFPROPVARIANT Value, [out] BOOL *pbResult); 55 HRESULT Compare(IMFAttributes *pTheirs, MF_ATTRIBUTES_MATCH_TYPE MatchType, [out] BOOL *pbResult); 56 HRESULT GetUINT32(REFGUID guidKey, [out] UINT32 *punValue); 57 HRESULT GetUINT64(REFGUID guidKey, [out] UINT64 *punValue); 58 HRESULT GetDouble(REFGUID guidKey, [out] double *pfValue); 59 HRESULT GetGUID(REFGUID guidKey, [out] GUID *pguidValue); 60 HRESULT GetStringLength(REFGUID guidKey, [out] UINT32 *pcchLength); 61 HRESULT GetString(REFGUID guidKey, [out, size_is(cchBufSize)] LPWSTR pwszValue, UINT32 cchBufSize, 62 [in, out, ptr] UINT32 *pcchLength); 63 HRESULT GetAllocatedString(REFGUID guidKey, [out, size_is(,*pcchLength+1)] LPWSTR *ppwszValue, 64 [out] UINT32 *pcchLength); 65 HRESULT GetBlobSize(REFGUID guidKey, [out] UINT32 *pcbBlobSize); 66 HRESULT GetBlob(REFGUID guidKey, [out, size_is(cbBufSize)] UINT8 *pBuf, UINT32 cbBufSize, 67 [in, out, ptr] UINT32 *pcbBlobSize); 68 HRESULT GetAllocatedBlob(REFGUID guidKey, [out, size_is(,*pcbSize)] UINT8 **ppBuf, [out] UINT32 *pcbSize); 69 HRESULT GetUnknown(REFGUID guidKey, REFIID riid, [out, iid_is(riid)] LPVOID *ppv); 70 HRESULT SetItem(REFGUID guidKey, REFPROPVARIANT Value); 71 HRESULT DeleteItem(REFGUID guidKey); 72 HRESULT DeleteAllItems(); 73 HRESULT SetUINT32(REFGUID guidKey, UINT32 unValue); 74 HRESULT SetUINT64(REFGUID guidKey, UINT64 unValue); 75 HRESULT SetDouble(REFGUID guidKey, double fValue); 76 HRESULT SetGUID(REFGUID guidKey, REFGUID guidValue); 77 HRESULT SetString(REFGUID guidKey, [in, string] LPCWSTR wszValue); 78 HRESULT SetBlob(REFGUID guidKey, [in, size_is(cbBufSize)] const UINT8* pBuf, UINT32 cbBufSize); 79 HRESULT SetUnknown(REFGUID guidKey, [in] IUnknown *pUnknown); 80 HRESULT LockStore(); 81 HRESULT UnlockStore(); 82 HRESULT GetCount([out] UINT32 *pcItems); 83 HRESULT GetItemByIndex(UINT32 unIndex, [out] GUID *pguidKey, [in, out, ptr] PROPVARIANT *pValue); 84 HRESULT CopyAllItems([in] IMFAttributes *pDest); 85} 86 87enum MF_ATTRIBUTE_SERIALIZE_OPTIONS { 88 MF_ATTRIBUTE_SERIALIZE_UNKNOWN_BYREF = 0x00000001 89}; 90 91[ 92 object, 93 uuid(045fa593-8799-42b8-bc8d-8968c6453507), 94 local 95] 96interface IMFMediaBuffer : IUnknown 97{ 98 HRESULT Lock([out] BYTE **ppbBuffer, [out] DWORD *pcbMaxLength, [out] DWORD *pcbCurrentLength); 99 HRESULT Unlock(); 100 HRESULT GetCurrentLength([out] DWORD *pcbCurrentLength); 101 HRESULT SetCurrentLength([in] DWORD cbCurrentLength); 102 HRESULT GetMaxLength([out] DWORD *pcbMaxLength); 103} 104 105[ 106 object, 107 uuid(c40a00f2-b93a-4d80-ae8c-5a1c634f58e4), 108 local 109] 110interface IMFSample : IMFAttributes 111{ 112 HRESULT GetSampleFlags([out] DWORD *pdwSampleFlags); 113 HRESULT SetSampleFlags([in] DWORD dwSampleFlags); 114 HRESULT GetSampleTime([out] LONGLONG *phnsSampleTime); 115 HRESULT SetSampleTime([in] LONGLONG hnsSampleTime); 116 HRESULT GetSampleDuration([out] LONGLONG *phnsSampleDuration); 117 HRESULT SetSampleDuration([in] LONGLONG hnsSampleDuration); 118 HRESULT GetBufferCount([out] DWORD *pdwBufferCount); 119 HRESULT GetBufferByIndex([in] DWORD dwIndex, [out] IMFMediaBuffer **ppBuffer); 120 HRESULT ConvertToContiguousBuffer([out] IMFMediaBuffer **ppBuffer); 121 HRESULT AddBuffer([in] IMFMediaBuffer *pBuffer); 122 HRESULT RemoveBufferByIndex([in] DWORD dwIndex); 123 HRESULT RemoveAllBuffers(); 124 HRESULT GetTotalLength([out] DWORD *pcbTotalLength); 125 HRESULT CopyToBuffer([in] IMFMediaBuffer *pBuffer); 126} 127 128[ 129 object, 130 uuid(7dc9d5f9-9ed9-44ec-9bbf-0600bb589fbb), 131 local 132] 133interface IMF2DBuffer : IUnknown 134{ 135 HRESULT Lock2D([out] BYTE **pbScanline0, [out] LONG *plPitch); 136 HRESULT Unlock2D(); 137 HRESULT GetScanline0AndPitch([out] BYTE **pbScanline0, [out] LONG *plPitch); 138 HRESULT IsContiguousFormat([out] BOOL *pfIsContiguous); 139 HRESULT GetContiguousLength([out] DWORD *pcbLength); 140 HRESULT ContiguousCopyTo([out, size_is(cbDestBuffer)] BYTE *pbDestBuffer, [in] DWORD cbDestBuffer); 141 HRESULT ContiguousCopyFrom([in, size_is(cbSrcBuffer)] const BYTE *pbSrcBuffer, [in] DWORD cbSrcBuffer); 142} 143 144[ 145 object, 146 uuid(44ae0fa8-ea31-4109-8d2e-4cae4997c555), 147 local 148] 149interface IMFMediaType : IMFAttributes 150{ 151 HRESULT GetMajorType([out] GUID *pguidMajorType); 152 HRESULT IsCompressedFormat([out] BOOL *pfCompressed); 153 HRESULT IsEqual([in] IMFMediaType *pIMediaType, [out] DWORD *pdwFlags); 154 HRESULT GetRepresentation([in] GUID guidRepresentation, [out] LPVOID *ppvRepresentation); 155 HRESULT FreeRepresentation([in] GUID guidRepresentation, [in] LPVOID pvRepresentation); 156} 157 158cpp_quote("#define MF_MEDIATYPE_EQUAL_MAJOR_TYPES 0x00000001") 159cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_TYPES 0x00000002") 160cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_DATA 0x00000004") 161cpp_quote("#define MF_MEDIATYPE_EQUAL_FORMAT_USER_DATA 0x00000008") 162 163[ 164 object, 165 uuid(26a0adc3-ce26-4672-9304-69552edd3faf), 166 local 167] 168interface IMFAudioMediaType : IMFMediaType 169{ 170 const WAVEFORMATEX *GetAudioFormat(); 171} 172 173typedef struct { 174 GUID guidMajorType; 175 GUID guidSubtype; 176} MFT_REGISTER_TYPE_INFO; 177 178typedef enum _MFVideoFlags { 179 MFVideoFlag_PAD_TO_Mask = 0x00000003, 180 MFVideoFlag_PAD_TO_None = 0, 181 MFVideoFlag_PAD_TO_4x3 = 0x00000001, 182 MFVideoFlag_PAD_TO_16x9 = 0x00000002, 183 MFVideoFlag_SrcContentHintMask = 0x0000001c, 184 MFVideoFlag_SrcContentHintNone = 0, 185 MFVideoFlag_SrcContentHint16x9 = 0x00000004, 186 MFVideoFlag_SrcContentHint235_1 = 0x00000008, 187 MFVideoFlag_AnalogProtected = 0x00000020, 188 MFVideoFlag_DigitallyProtected = 0x00000040, 189 MFVideoFlag_ProgressiveContent = 0x00000080, 190 MFVideoFlag_FieldRepeatCountMask = 0x00000700, 191 MFVideoFlag_FieldRepeatCountShift = 8, 192 MFVideoFlag_ProgressiveSeqReset = 0x00000800, 193 MFVideoFlag_PanScanEnabled = 0x00020000, 194 MFVideoFlag_LowerFieldFirst = 0x00040000, 195 MFVideoFlag_BottomUpLinearRep = 0x00080000, 196 MFVideoFlags_DXVASurface = 0x00100000, 197 MFVideoFlags_RenderTargetSurface = 0x00400000, 198 MFVideoFlags_ForceQWORD = 0x7fffffff 199} MFVideoFlags; 200 201typedef struct _MFRatio { 202 DWORD Numerator; 203 DWORD Denominator; 204} MFRatio; 205 206typedef struct _MFOffset { 207 WORD fract; 208 short value; 209} MFOffset; 210 211typedef struct _MFVideoArea { 212 MFOffset OffsetX; 213 MFOffset OffsetY; 214 SIZE Area; 215} MFVideoArea; 216 217typedef enum _MFVideoChromaSubsampling { 218 MFVideoChromaSubsampling_Unknown = 0, 219 MFVideoChromaSubsampling_ProgressiveChroma = 0x8, 220 MFVideoChromaSubsampling_Horizontally_Cosited = 0x4, 221 MFVideoChromaSubsampling_Vertically_Cosited = 0x2, 222 MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes = 0x1, 223 MFVideoChromaSubsampling_MPEG2 224 = MFVideoChromaSubsampling_Horizontally_Cosited 225 | MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes, 226 MFVideoChromaSubsampling_MPEG1 227 = MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes, 228 MFVideoChromaSubsampling_DV_PAL 229 = MFVideoChromaSubsampling_Horizontally_Cosited 230 | MFVideoChromaSubsampling_Vertically_Cosited, 231 MFVideoChromaSubsampling_Cosited 232 = MFVideoChromaSubsampling_Horizontally_Cosited 233 | MFVideoChromaSubsampling_Vertically_Cosited 234 | MFVideoChromaSubsampling_Vertically_AlignedChromaPlanes, 235 MFVideoChromaSubsampling_Last = MFVideoChromaSubsampling_Cosited + 1, 236 MFVideoChromaSubsampling_ForceDWORD = 0x7fffffff 237} MFVideoChromaSubsampling; 238 239typedef enum _MFVideoInterlaceMode { 240 MFVideoInterlace_Unknown = 0, 241 MFVideoInterlace_Progressive = 2, 242 MFVideoInterlace_FieldInterleavedUpperFirst = 3, 243 MFVideoInterlace_FieldInterleavedLowerFirst = 4, 244 MFVideoInterlace_FieldSingleUpper = 5, 245 MFVideoInterlace_FieldSingleLower = 6, 246 MFVideoInterlace_MixedInterlaceOrProgressive = 7, 247 MFVideoInterlace_Last, 248 MFVideoInterlace_ForceDWORD = 0x7fffffff 249} MFVideoInterlaceMode; 250 251typedef enum _MFVideoTransferFunction { 252 MFVideoTransFunc_Unknown = 0, 253 MFVideoTransFunc_10 = 1, 254 MFVideoTransFunc_18 = 2, 255 MFVideoTransFunc_20 = 3, 256 MFVideoTransFunc_22 = 4, 257 MFVideoTransFunc_709 = 5, 258 MFVideoTransFunc_240M = 6, 259 MFVideoTransFunc_sRGB = 7, 260 MFVideoTransFunc_28 = 8, 261 MFVideoTransFunc_Log_100 = 9, 262 MFVideoTransFunc_Log_316 = 10, 263 MFVideoTransFunc_709_sym = 11, 264 MFVideoTransFunc_Last, 265 MFVideoTransFunc_ForceDWORD = 0x7fffffff 266} MFVideoTransferFunction; 267 268typedef enum _MFVideoTransferMatrix { 269 MFVideoTransferMatrix_Unknown = 0, 270 MFVideoTransferMatrix_BT709 = 1, 271 MFVideoTransferMatrix_BT601 = 2, 272 MFVideoTransferMatrix_SMPTE240M = 3, 273 MFVideoTransferMatrix_Last, 274 MFVideoTransferMatrix_ForceDWORD = 0x7fffffff 275} MFVideoTransferMatrix; 276 277typedef enum _MFVideoPrimaries { 278 MFVideoPrimaries_Unknown = 0, 279 MFVideoPrimaries_reserved = 1, 280 MFVideoPrimaries_BT709 = 2, 281 MFVideoPrimaries_BT470_2_SysM = 3, 282 MFVideoPrimaries_BT470_2_SysBG = 4, 283 MFVideoPrimaries_SMPTE170M = 5, 284 MFVideoPrimaries_SMPTE240M = 6, 285 MFVideoPrimaries_EBU3213 = 7, 286 MFVideoPrimaries_SMPTE_C = 8, 287 MFVideoPrimaries_Last, 288 MFVideoPrimaries_ForceDWORD = 0x7fffffff 289} MFVideoPrimaries; 290 291typedef enum _MFVideoLighting { 292 MFVideoLighting_Unknown = 0, 293 MFVideoLighting_bright = 1, 294 MFVideoLighting_office = 2, 295 MFVideoLighting_dim = 3, 296 MFVideoLighting_dark = 4, 297 MFVideoLighting_Last, 298 MFVideoLighting_ForceDWORD = 0x7fffffff 299} MFVideoLighting; 300 301typedef enum _MFNominalRange { 302 MFNominalRange_Unknown = 0, 303 MFNominalRange_Normal = 1, 304 MFNominalRange_Wide = 2, 305 MFNominalRange_0_255 = 1, 306 MFNominalRange_16_235 = 2, 307 MFNominalRange_48_208 = 3, 308 MFNominalRange_64_127 = 4 309} MFNominalRange; 310 311typedef struct _MFVideoInfo { 312 DWORD dwWidth; 313 DWORD dwHeight; 314 MFRatio PixelAspectRatio; 315 MFVideoChromaSubsampling SourceChromaSubsampling; 316 MFVideoInterlaceMode InterlaceMode; 317 MFVideoTransferFunction TransferFunction; 318 MFVideoPrimaries ColorPrimaries; 319 MFVideoTransferMatrix TransferMatrix; 320 MFVideoLighting SourceLighting; 321 MFRatio FramesPerSecond; 322 MFNominalRange NominalRange; 323 MFVideoArea GeometricAperture; 324 MFVideoArea MinimumDisplayAperture; 325 MFVideoArea PanScanAperture; 326 unsigned __int64 VideoFlags; 327} MFVideoInfo; 328 329typedef struct _MFVideoCompressedInfo { 330 LONGLONG AvgBitrate; 331 LONGLONG AvgBitErrorRate; 332 DWORD MaxKeyFrameSpacing; 333} MFVideoCompressedInfo; 334 335typedef struct _MFARGB { 336 BYTE rgbBlue; 337 BYTE rgbGreen; 338 BYTE rgbRed; 339 BYTE rgbAlpha; 340} MFARGB; 341 342typedef struct __MFAYUVSample { 343 BYTE bCrValue; 344 BYTE bCbValue; 345 BYTE bYValue; 346 BYTE bSampleAlpha8; 347} MFAYUVSample; 348 349typedef union _MFPaletteEntry { 350 MFARGB ARGB; 351 MFAYUVSample AYCbCr; 352} MFPaletteEntry; 353 354typedef struct _MFVideoSurfaceInfo { 355 DWORD Format; 356 DWORD PaletteEntries; 357 MFPaletteEntry Palette[]; 358} MFVideoSurfaceInfo; 359 360typedef struct _MFVIDEOFORMAT { 361 DWORD dwSize; 362 MFVideoInfo videoInfo; 363 GUID guidFormat; 364 MFVideoCompressedInfo compressedInfo; 365 MFVideoSurfaceInfo surfaceInfo; 366} MFVIDEOFORMAT; 367 368typedef enum _MFStandardVideoFormat { 369 MFStdVideoFormat_reserved = 0, 370 MFStdVideoFormat_NTSC, 371 MFStdVideoFormat_PAL, 372 MFStdVideoFormat_DVD_NTSC, 373 MFStdVideoFormat_DVD_PAL, 374 MFStdVideoFormat_DV_PAL, 375 MFStdVideoFormat_DV_NTSC, 376 MFStdVideoFormat_ATSC_SD480i, 377 MFStdVideoFormat_ATSC_HD1080i, 378 MFStdVideoFormat_ATSC_HD720p 379} MFStandardVideoFormat; 380 381[ 382 object, 383 uuid(b99f381f-a8f9-47a2-a5af-ca3a225a3890), 384 local 385] 386interface IMFVideoMediaType : IMFMediaType 387{ 388 const MFVIDEOFORMAT *GetVideoFormat(); 389 390 HRESULT GetVideoRepresentation([in] GUID guidRepresentation, [out] LPVOID *ppvRepresentation, 391 [in] LONG lStride); 392} 393 394[ 395 object, 396 uuid(ac6b7889-0740-4d51-8619-905994a55cc6) 397] 398interface IMFAsyncResult : IUnknown 399{ 400 HRESULT GetState([out] IUnknown **ppunkState); 401 HRESULT GetStatus(); 402 HRESULT SetStatus([in] HRESULT hrStatus); 403 HRESULT GetObject([out] IUnknown **ppObject); 404 [local] IUnknown *GetStateNoAddRef(); 405} 406 407[ 408 object, 409 uuid(a27003cf-2354-4f2a-8d6a-ab7cff15437e), 410] 411interface IMFAsyncCallback : IUnknown 412{ 413 HRESULT GetParameters([out] DWORD *pdwFlags, [out] DWORD *pdwQueue); 414 HRESULT Invoke([in] IMFAsyncResult *pAsyncResult); 415} 416 417[ 418 object, 419 uuid(a27003d0-2354-4f2a-8d6a-ab7cff15437e), 420] 421interface IMFRemoteAsyncCallback : IUnknown 422{ 423 HRESULT Invoke([in] HRESULT hr, [in] IUnknown *pRemoteResult); 424} 425 426cpp_quote("#define MFASYNC_FAST_IO_PROCESSING_CALLBACK 0x0001") 427cpp_quote("#define MFASYNC_SIGNAL_CALLBACK 0x0002" ) 428 429cpp_quote("#define MFASYNC_CALLBACK_QUEUE_UNDEFINED 0x00000000") 430cpp_quote("#define MFASYNC_CALLBACK_QUEUE_STANDARD 0x00000001") 431cpp_quote("#define MFASYNC_CALLBACK_QUEUE_RT 0x00000002") 432cpp_quote("#define MFASYNC_CALLBACK_QUEUE_IO 0x00000003") 433cpp_quote("#define MFASYNC_CALLBACK_QUEUE_TIMER 0x00000004") 434cpp_quote("#define MFASYNC_CALLBACK_QUEUE_LONG_FUNCTION 0x00000007") 435cpp_quote("#define MFASYNC_CALLBACK_QUEUE_PRIVATE_MASK 0xffff0000") 436cpp_quote("#define MFASYNC_CALLBACK_QUEUE_ALL 0xffffffff") 437 438typedef DWORD MediaEventType; 439 440[ 441 object, 442 uuid(df598932-f10c-4e39-bba2-c308f101daa3) 443] 444interface IMFMediaEvent : IMFAttributes 445{ 446 HRESULT GetType([out] MediaEventType *pmet); 447 HRESULT GetExtendedType([out] GUID *pguidExtendedType); 448 HRESULT GetStatus([out] HRESULT *phrStatus); 449 HRESULT GetValue([out] PROPVARIANT *pvValue); 450} 451 452[ 453 object, 454 uuid(2cd0bd52-bcd5-4b89-b62c-eadc0c031e7d) 455] 456interface IMFMediaEventGenerator : IUnknown 457{ 458 HRESULT GetEvent([in] DWORD dwFlags, [out] IMFMediaEvent **ppEvent); 459 460 [local] HRESULT BeginGetEvent([in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState); 461 [call_as(BeginGetEvent)] HRESULT RemoteBeginGetEvent([in] IMFRemoteAsyncCallback *pCallback); 462 463 [local] HRESULT EndGetEvent([in] IMFAsyncResult *pResult, [out] IMFMediaEvent **ppEvent); 464 [call_as(EndGetEvent)] HRESULT RemoteEndGetEvent([in] IUnknown *pResult, [out] DWORD *pcbEvent, 465 [out, size_is(,*pcbEvent)] BYTE **ppbEvent); 466 467 HRESULT QueueEvent([in] MediaEventType met, [in] REFGUID guidExtendedType, [in] HRESULT hrStatus, 468 [in, unique] const PROPVARIANT *pvValue); 469} 470 471typedef enum _MFBYTESTREAM_SEEK_ORIGIN { 472 msoBegin, 473 msoCurrent 474} MFBYTESTREAM_SEEK_ORIGIN; 475 476[ 477 object, 478 uuid(ad4c1b00-4bf7-422f-9175-756693d9130d), 479] 480interface IMFByteStream : IUnknown 481{ 482 HRESULT GetCapabilities([out] DWORD *pdwCapabilities); 483 HRESULT GetLength([out] QWORD *pqwLength); 484 HRESULT SetLength([in] QWORD qwLength); 485 HRESULT GetCurrentPosition([out] QWORD *pqwPosition); 486 HRESULT SetCurrentPosition([in] QWORD qwPosition); 487 HRESULT IsEndOfStream([out] BOOL *pfEndOfStream); 488 489 [local] HRESULT Read([in] BYTE* pb, [in] ULONG cb, [out] ULONG *pcbRead); 490 [local] HRESULT BeginRead([in] BYTE *pb, [in] ULONG cb, [in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState); 491 [local] HRESULT EndRead([in] IMFAsyncResult *pResult, [out] ULONG *pcbRead); 492 [local] HRESULT Write([in] const BYTE *pb, [in] ULONG cb, [out] ULONG *pcbWritten); 493 [local] HRESULT BeginWrite([in] const BYTE *pb, [in] ULONG cb, [in] IMFAsyncCallback *pCallback, [in] IUnknown *punkState); 494 [local] HRESULT EndWrite([in] IMFAsyncResult *pResult, [out] ULONG *pcbWritten); 495 [local] HRESULT Seek([in] MFBYTESTREAM_SEEK_ORIGIN SeekOrigin, [in] LONGLONG llSeekOffset, [in] DWORD dwSeekFlags, 496 [out] QWORD *pqwCurrentPosition); 497 498 HRESULT Flush(); 499 HRESULT Close(); 500} 501 502cpp_quote("#define MFBYTESTREAM_IS_READABLE 0x00000001") 503cpp_quote("#define MFBYTESTREAM_IS_WRITABLE 0x00000002") 504cpp_quote("#define MFBYTESTREAM_IS_SEEKABLE 0x00000004") 505cpp_quote("#define MFBYTESTREAM_IS_REMOTE 0x00000008") 506cpp_quote("#define MFBYTESTREAM_IS_DIRECTORY 0x00000080") 507cpp_quote("#define MFBYTESTREAM_HAS_SLOW_SEEK 0x00000100") 508cpp_quote("#define MFBYTESTREAM_IS_PARTIALLY_DOWNLOADED 0x00000200") 509cpp_quote("#define MFBYTESTREAM_SHARE_WRITE 0x00000400") 510 511cpp_quote("#define MFBYTESTREAM_SEEK_FLAG_CANCEL_PENDING_IO 0x00000001") 512 513cpp_quote("EXTERN_GUID(MF_BYTESTREAM_ORIGIN_NAME, 0xfc358288,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);") 514cpp_quote("EXTERN_GUID(MF_BYTESTREAM_CONTENT_TYPE, 0xfc358289,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);") 515cpp_quote("EXTERN_GUID(MF_BYTESTREAM_DURATION, 0xfc35828a,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);") 516cpp_quote("EXTERN_GUID(MF_BYTESTREAM_LAST_MODIFIED_TIME, 0xfc35828b,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);") 517cpp_quote("EXTERN_GUID(MF_BYTESTREAM_IFO_FILE_URI, 0xfc35828c,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);") 518cpp_quote("EXTERN_GUID(MF_BYTESTREAM_DLNA_PROFILE_ID, 0xfc35828d,0x3cb6,0x460c,0xa4,0x24,0xb6,0x68,0x12,0x60,0x37,0x5a);") 519 520typedef enum MF_FILE_ACCESSMODE { 521 MF_ACCESSMODE_READ = 1, 522 MF_ACCESSMODE_WRITE = 2, 523 MF_ACCESSMODE_READWRITE = 3 524} MF_FILE_ACCESSMODE; 525 526typedef enum { 527 MF_OPENMODE_FAIL_IF_NOT_EXIST = 0, 528 MF_OPENMODE_FAIL_IF_EXIST = 1, 529 MF_OPENMODE_RESET_IF_EXIST = 2, 530 MF_OPENMODE_APPEND_IF_EXIST = 3, 531 MF_OPENMODE_DELETE_IF_EXIST = 4 532} MF_FILE_OPENMODE; 533 534typedef enum { 535 MF_FILEFLAGS_NONE = 0x00000000, 536 MF_FILEFLAGS_NOBUFFERING = 0x00000001, 537 MF_FILEFLAGS_ALLOW_WRITE_SHARING = 0x00000002 538} MF_FILE_FLAGS; 539 540[ 541 object, 542 uuid(5bc8a76b-869a-46a3-9b03-fa218a66aebe) 543] 544interface IMFCollection : IUnknown 545{ 546 HRESULT GetElementCount([out] DWORD *pcElements); 547 HRESULT GetElement([in] DWORD dwElementIndex, [out] IUnknown **ppUnkElement); 548 HRESULT AddElement([in] IUnknown *pUnkElement); 549 HRESULT RemoveElement([in] DWORD dwElementIndex, [out] IUnknown **ppUnkElement); 550 HRESULT InsertElementAt([in] DWORD dwIndex, [in] IUnknown *pUnknown); 551 HRESULT RemoveAllElements(); 552} 553 554[ 555 object, 556 uuid(7fee9e9a-4a89-47a6-899c-b6a53a70fb67), 557 pointer_default(unique) 558] 559interface IMFActivate : IMFAttributes 560{ 561 HRESULT ActivateObject([in] REFIID riid, [out, iid_is(riid), retval] void **ppv); 562 HRESULT ShutdownObject(); 563 HRESULT DetachObject(); 564} 565 566typedef enum _MF_Plugin_Type { 567 MF_Plugin_Type_MFT = 0, 568 MF_Plugin_Type_MediaSource = 1 569} MF_Plugin_Type; 570 571[ 572 object, 573 local, 574 uuid(5c6c44bf-1db6-435b-9249-e8cd10fdec96), 575 pointer_default(unique) 576] 577interface IMFPluginControl : IUnknown 578{ 579 HRESULT GetPreferredClsid(DWORD pluginType, LPCWSTR selector, CLSID *clsid); 580 HRESULT GetPreferredClsidByIndex(DWORD pluginType, DWORD index, LPWSTR *selector, CLSID *clsid); 581 HRESULT SetPreferredClsid(DWORD pluginType, LPCWSTR selector, const CLSID *clsid); 582 HRESULT IsDisabled(DWORD pluginType, REFCLSID clsid); 583 HRESULT GetDisabledByIndex(DWORD pluginType, DWORD index, CLSID *clsid); 584 HRESULT SetDisabled(DWORD pluginType, REFCLSID clsid, BOOL disabled); 585} 586