blob: 04c82e890a090ab0dc1a504d6bd0e4b395ff655f [file] [log] [blame]
/*
* 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";
interface IDMOQualityControl;
interface IDMOVideoOutputOptimizations;
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
);
}
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
};
/*****************************************************************************
* 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
);
}