cpp_quote("/**")
cpp_quote(" * This file is part of the mingw-w64 runtime package.")
cpp_quote(" * No warranty is given; refer to the file DISCLAIMER within this package.")
cpp_quote(" */")
cpp_quote("")

cpp_quote("#include <winapifamily.h>")
cpp_quote("")

import "unknwn.idl";
import "objidl.idl";

cpp_quote("")
cpp_quote("#ifdef __strmif_h__")
cpp_quote("typedef AM_MEDIA_TYPE DMO_MEDIA_TYPE;")
cpp_quote("#else")
typedef struct _DMOMediaType {
  GUID majortype;
  GUID subtype;
  WINBOOL bFixedSizeSamples;
  WINBOOL bTemporalCompression;
  ULONG lSampleSize;
  GUID formattype;
  IUnknown *pUnk;
  ULONG cbFormat;
  [size_is (cbFormat)] BYTE *pbFormat;
} DMO_MEDIA_TYPE;

cpp_quote("")
typedef LONGLONG REFERENCE_TIME;
cpp_quote("#endif")

cpp_quote("")
enum _DMO_INPUT_DATA_BUFFER_FLAGS {
  DMO_INPUT_DATA_BUFFERF_SYNCPOINT = 0x00000001,
  DMO_INPUT_DATA_BUFFERF_TIME = 0x00000002,
  DMO_INPUT_DATA_BUFFERF_TIMELENGTH = 0x00000004,
  DMO_INPUT_DATA_BUFFERF_DISCONTINUITY = 0x00000008
};

cpp_quote("")
enum _DMO_OUTPUT_DATA_BUFFER_FLAGS {
  DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT = 0x00000001,
  DMO_OUTPUT_DATA_BUFFERF_TIME = 0x00000002,
  DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH = 0x00000004,
  DMO_OUTPUT_DATA_BUFFERF_DISCONTINUITY = 0x00000008,
  DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE = 0x01000000
};

cpp_quote("")
enum _DMO_INPUT_STATUS_FLAGS {
  DMO_INPUT_STATUSF_ACCEPT_DATA = 0x00000001
};

cpp_quote("")
enum _DMO_INPUT_STREAM_INFO_FLAGS {
  DMO_INPUT_STREAMF_WHOLE_SAMPLES = 0x00000001,
  DMO_INPUT_STREAMF_SINGLE_SAMPLE_PER_BUFFER = 0x00000002,
  DMO_INPUT_STREAMF_FIXED_SAMPLE_SIZE = 0x00000004,
  DMO_INPUT_STREAMF_HOLDS_BUFFERS = 0x00000008
};

cpp_quote("")
enum _DMO_OUTPUT_STREAM_INFO_FLAGS {
  DMO_OUTPUT_STREAMF_WHOLE_SAMPLES = 0x00000001,
  DMO_OUTPUT_STREAMF_SINGLE_SAMPLE_PER_BUFFER = 0x00000002,
  DMO_OUTPUT_STREAMF_FIXED_SAMPLE_SIZE = 0x00000004,
  DMO_OUTPUT_STREAMF_DISCARDABLE = 0x00000008,
  DMO_OUTPUT_STREAMF_OPTIONAL = 0x00000010
};

cpp_quote("")
enum _DMO_SET_TYPE_FLAGS {
  DMO_SET_TYPEF_TEST_ONLY = 0x00000001,
  DMO_SET_TYPEF_CLEAR = 0x00000002
};

cpp_quote("")
enum _DMO_PROCESS_OUTPUT_FLAGS {
  DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER = 0x00000001
};

cpp_quote("")
cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)")
enum _DMO_INPLACE_PROCESS_FLAGS {
  DMO_INPLACE_NORMAL = 0x00000000,
  DMO_INPLACE_ZERO = 0x00000001
};

cpp_quote("")
enum _DMO_QUALITY_STATUS_FLAGS {
  DMO_QUALITY_STATUS_ENABLED = 0x00000001
};

cpp_quote("")
enum _DMO_VIDEO_OUTPUT_STREAM_FLAGS {
  DMO_VOSF_NEEDS_PREVIOUS_SAMPLE = 0x00000001
};

cpp_quote("")
[object, local, uuid (59eff8b9-938c-4a26-82f2-95cb84cdc837)]
interface IMediaBuffer : IUnknown {
  HRESULT SetLength (DWORD cbLength);
  HRESULT GetMaxLength ([out] DWORD *pcbMaxLength);
  HRESULT GetBufferAndLength ([out] BYTE **ppBuffer,[out] DWORD *pcbLength);
}

cpp_quote("")
typedef struct _DMO_OUTPUT_DATA_BUFFER {
  IMediaBuffer *pBuffer;
  DWORD dwStatus;
  REFERENCE_TIME rtTimestamp;
  REFERENCE_TIME rtTimelength;
} DMO_OUTPUT_DATA_BUFFER,*PDMO_OUTPUT_DATA_BUFFER;

cpp_quote("")
[object, local, uuid (d8ad0f58-5494-4102-97c5-ec798e59bcf4)]
interface IMediaObject : IUnknown {
  HRESULT GetStreamCount ([out] DWORD *pcInputStreams,[out] DWORD *pcOutputStreams);
  HRESULT GetInputStreamInfo (DWORD dwInputStreamIndex,[out] DWORD *pdwFlags);
  HRESULT GetOutputStreamInfo (DWORD dwOutputStreamIndex,[out] DWORD *pdwFlags);
  HRESULT GetInputType (DWORD dwInputStreamIndex, DWORD dwTypeIndex,[out] DMO_MEDIA_TYPE *pmt);
  HRESULT GetOutputType (DWORD dwOutputStreamIndex, DWORD dwTypeIndex,[out] DMO_MEDIA_TYPE *pmt);
  HRESULT SetInputType (DWORD dwInputStreamIndex,[in] const DMO_MEDIA_TYPE *pmt, DWORD dwFlags);
  HRESULT SetOutputType (DWORD dwOutputStreamIndex,[in] const DMO_MEDIA_TYPE *pmt, DWORD dwFlags);
  HRESULT GetInputCurrentType (DWORD dwInputStreamIndex,[out] DMO_MEDIA_TYPE *pmt);
  HRESULT GetOutputCurrentType (DWORD dwOutputStreamIndex,[out] DMO_MEDIA_TYPE *pmt);
  HRESULT GetInputSizeInfo (DWORD dwInputStreamIndex,[out] DWORD *pcbSize,[out] DWORD *pcbMaxLookahead,[out] DWORD *pcbAlignment);
  HRESULT GetOutputSizeInfo (DWORD dwOutputStreamIndex,[out] DWORD *pcbSize,[out] DWORD *pcbAlignment);
  HRESULT GetInputMaxLatency (DWORD dwInputStreamIndex,[out] REFERENCE_TIME *prtMaxLatency);
  HRESULT SetInputMaxLatency (DWORD dwInputStreamIndex, REFERENCE_TIME rtMaxLatency);
  HRESULT Flush ();
  HRESULT Discontinuity (DWORD dwInputStreamIndex);
  HRESULT AllocateStreamingResources ();
  HRESULT FreeStreamingResources ();
  HRESULT GetInputStatus (DWORD dwInputStreamIndex,[out] DWORD *dwFlags);
  HRESULT ProcessInput (DWORD dwInputStreamIndex, IMediaBuffer *pBuffer, DWORD dwFlags, REFERENCE_TIME rtTimestamp, REFERENCE_TIME rtTimelength);
  HRESULT ProcessOutput (DWORD dwFlags, DWORD cOutputBufferCount,[in, out, size_is (cOutputBufferCount)]DMO_OUTPUT_DATA_BUFFER *pOutputBuffers,[out] DWORD *pdwStatus);
  HRESULT Lock (LONG bLock);
};

cpp_quote("")
[object, local, uuid (2c3cd98a-2bfa-4a53-9c27-5249ba64ba0f)]
interface IEnumDMO : IUnknown {
  HRESULT Next (DWORD cItemsToFetch,[out, size_is (cItemsToFetch), length_is (*pcItemsFetched)] CLSID *pCLSID,[out, size_is (cItemsToFetch), length_is (*pcItemsFetched), string] LPWSTR *Names,[out] DWORD *pcItemsFetched);
  HRESULT Skip (DWORD cItemsToSkip);
  HRESULT Reset (void);
  HRESULT Clone ([out] IEnumDMO **ppEnum);
}

cpp_quote("")
[object, local, uuid (651b9ad0-0fc7-4aa9-9538-d89931010741)]
interface IMediaObjectInPlace : IUnknown {
  HRESULT Process ([in] ULONG ulSize,[in, out, size_is (ulSize)] BYTE *pData,[in] REFERENCE_TIME refTimeStart,[in] DWORD dwFlags);
  HRESULT Clone ([out] IMediaObjectInPlace **ppMediaObject);
  HRESULT GetLatency ([out] REFERENCE_TIME *pLatencyTime);
}

cpp_quote("")
[object, local, uuid (65abea96-cf36-453f-af8a-705e98f16260)]
interface IDMOQualityControl : IUnknown {
  HRESULT SetNow ([in] REFERENCE_TIME rtNow);
  HRESULT SetStatus ([in] DWORD dwFlags);
  HRESULT GetStatus ([out] DWORD *pdwFlags);
}

cpp_quote("")
[object, local, uuid (be8f4f4e-5b16-4d29-b350-7f6b5d9298ac)]
interface IDMOVideoOutputOptimizations : IUnknown {
  HRESULT QueryOperationModePreferences (ULONG ulOutputStreamIndex, DWORD *pdwRequestedCapabilities);
  HRESULT SetOperationMode (ULONG ulOutputStreamIndex, DWORD dwEnabledFeatures);
  HRESULT GetCurrentOperationMode (ULONG ulOutputStreamIndex, DWORD *pdwEnabledFeatures);
  HRESULT GetCurrentSampleRequirements (ULONG ulOutputStreamIndex, DWORD *pdwRequestedFeatures);
}
cpp_quote("#endif")
