123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- /*
- * Copyright (C) 2002 Alexandre Julliard
- * Copyright (C) 2004 Vincent Béron
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
- import "unknwn.idl";
- import "objidl.idl";
- import "strmif.idl";
- typedef struct _DMOMediaType
- {
- GUID majortype;
- GUID subtype;
- BOOL bFixedSizeSamples;
- BOOL bTemporalCompression;
- ULONG lSampleSize;
- GUID formattype;
- IUnknown *pUnk;
- ULONG cbFormat;
- BYTE *pbFormat;
- } DMO_MEDIA_TYPE;
- /*****************************************************************************
- * IEnumDMO interface
- */
- [
- object,
- uuid(2C3CD98A-2BFA-4A53-9C27-5249BA64BA0F),
- pointer_default(unique)
- ]
- interface IEnumDMO : IUnknown
- {
- [local]
- HRESULT Next(
- [in] DWORD cItemsToFetch,
- [out] CLSID *pCLSID,
- [out] WCHAR **Names,
- [out] DWORD *pcItemsFetched
- );
- HRESULT Skip(
- [in] DWORD cItemsToSkip
- );
- HRESULT Reset();
- HRESULT Clone(
- [out] IEnumDMO **ppEnum
- );
- }
- /*****************************************************************************
- * IMediaBuffer interface
- */
- [
- object,
- uuid(59eff8b9-938c-4a26-82f2-95cb84cdc837),
- local
- ]
- interface IMediaBuffer : IUnknown
- {
- HRESULT SetLength(
- DWORD cbLength
- );
- HRESULT GetMaxLength(
- [out] DWORD *pcbMaxLength
- );
- HRESULT GetBufferAndLength(
- [out] BYTE **ppBuffer,
- [out] DWORD *pcbLength
- );
- }
- enum _DMO_INPUT_STATUS_FLAGS
- {
- DMO_INPUT_STATUSF_ACCEPT_DATA = 0x00000001,
- };
- enum _DMO_INPUT_DATA_BUFFER_FLAGS
- {
- DMO_INPUT_DATA_BUFFERF_SYNCPOINT = 0x00000001,
- DMO_INPUT_DATA_BUFFERF_TIME = 0x00000002,
- DMO_INPUT_DATA_BUFFERF_TIMELENGTH = 0x00000004,
- };
- enum _DMO_PROCESS_OUTPUT_FLAGS
- {
- DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER = 0x00000001,
- };
- typedef struct _DMO_OUTPUT_DATA_BUFFER {
- IMediaBuffer *pBuffer;
- DWORD dwStatus;
- REFERENCE_TIME rtTimestamp;
- REFERENCE_TIME rtTimelength;
- } DMO_OUTPUT_DATA_BUFFER, *PDMO_OUTPUT_DATA_BUFFER;
- enum _DMO_INPLACE_PROCESS_FLAGS {
- DMO_INPLACE_NORMAL = 0x00000000,
- DMO_INPLACE_ZERO = 0x00000001
- };
- enum _DMO_SET_TYPE_FLAGS {
- DMO_SET_TYPEF_TEST_ONLY = 0x00000001,
- DMO_SET_TYPEF_CLEAR = 0x00000002,
- };
- enum _DMO_OUTPUT_DATA_BUFFERF_FLAGS {
- DMO_OUTPUT_DATA_BUFFERF_SYNCPOINT = 0x00000001,
- DMO_OUTPUT_DATA_BUFFERF_TIME = 0x00000002,
- DMO_OUTPUT_DATA_BUFFERF_TIMELENGTH = 0x00000004,
- DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE = 0x01000000,
- };
- /*****************************************************************************
- * IMediaObject interface
- */
- [
- object,
- uuid(d8ad0f58-5494-4102-97c5-ec798e59bcf4),
- local
- ]
- 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] DMO_OUTPUT_DATA_BUFFER *pOutputBuffers,
- [out] DWORD *pdwStatus
- );
- HRESULT Lock(LONG bLock);
- }
- /*****************************************************************************
- * IMediaObjectInPlace interface
- */
- [
- object,
- uuid(651b9ad0-0fc7-4aa9-9538-d89931010741),
- local
- ]
- interface IMediaObjectInPlace : IUnknown {
- HRESULT Process(
- [in] ULONG ulSize,
- [in,out] BYTE* pData,
- [in] REFERENCE_TIME refTimeStart,
- [in] DWORD dwFlags
- );
- HRESULT Clone(
- [out] IMediaObjectInPlace **ppMediaObject
- );
- HRESULT GetLatency(
- [out] REFERENCE_TIME *pLatencyTime
- );
- }
- enum _DMO_QUALITY_STATUS_FLAGS
- {
- DMO_QUALITY_STATUS_ENABLED = 0x00000001,
- };
- [
- object,
- uuid(65abea96-cf36-453f-af8a-705e98f16260),
- local
- ]
- interface IDMOQualityControl : IUnknown
- {
- HRESULT SetNow([in] REFERENCE_TIME now);
- HRESULT SetStatus([in] DWORD flags);
- HRESULT GetStatus([out] DWORD *flags);
- }
- enum _DMO_VIDEO_OUTPUT_STREAM_FLAGS
- {
- DMO_VOSF_NEEDS_PREVIOUS_SAMPLE = 0x00000001,
- };
- [
- object,
- uuid(be8f4f4e-5b16-4d29-b350-7f6b5d9298ac),
- local
- ]
- interface IDMOVideoOutputOptimizations : IUnknown
- {
- HRESULT QueryOperationModePreferences(ULONG index, DWORD *flags);
- HRESULT SetOperationMode(ULONG index, DWORD flags);
- HRESULT GetCurrentOperationMode(ULONG index, DWORD *flags);
- HRESULT GetCurrentSampleRequirements(ULONG index, DWORD *flags);
- }
|