view loader/dmo/dmo_interfaces.h @ 25661:293aeec83153

Replace the persistent CODECS_FLAG_SELECTED by a local "stringset" with an almost-trivial implementation. This allows making the builtin codec structs const, and it also makes clearer that this "selected" status is not used outside the init functions.
author reimar
date Sat, 12 Jan 2008 14:05:46 +0000
parents 8e00b6a9e40b
children 2c8cdb9123b8
line wrap: on
line source

#ifndef DMO_INTERFACE_H
#define DMO_INTERFACE_H

#include "dmo.h"

/*
 * IMediaBuffer interface
 */
typedef struct _IMediaBuffer IMediaBuffer;
typedef struct IMediaBuffer_vt
{
    INHERIT_IUNKNOWN();

    HRESULT STDCALL ( *SetLength )(IMediaBuffer* This,
				   unsigned long cbLength);
    HRESULT STDCALL ( *GetMaxLength )(IMediaBuffer* This,
				      /* [out] */ unsigned long *pcbMaxLength);
    HRESULT STDCALL ( *GetBufferAndLength )(IMediaBuffer* This,
					    /* [out] */ char** ppBuffer,
					    /* [out] */ unsigned long* pcbLength);
} IMediaBuffer_vt;
struct _IMediaBuffer { IMediaBuffer_vt* vt; };


typedef struct _DMO_OUTPUT_DATA_BUFFER
{
    IMediaBuffer *pBuffer;
    unsigned long dwStatus;
    REFERENCE_TIME rtTimestamp;
    REFERENCE_TIME rtTimelength;
} DMO_OUTPUT_DATA_BUFFER;


/*
 * IMediaObject interface
 */
typedef struct _IMediaObject IMediaObject;
typedef struct IMediaObject_vt
{
    INHERIT_IUNKNOWN();

    HRESULT STDCALL ( *GetStreamCount )(IMediaObject * This,
					/* [out] */ unsigned long *pcInputStreams,
					/* [out] */ unsigned long *pcOutputStreams);
    HRESULT STDCALL ( *GetInputStreamInfo )(IMediaObject * This,
					    unsigned long dwInputStreamIndex,
					    /* [out] */ unsigned long *pdwFlags);
    HRESULT STDCALL ( *GetOutputStreamInfo )(IMediaObject * This,
					     unsigned long dwOutputStreamIndex,
					     /* [out] */ unsigned long *pdwFlags);
    HRESULT STDCALL ( *GetInputType )(IMediaObject * This,
				      unsigned long dwInputStreamIndex,
				      unsigned long dwTypeIndex,
				      /* [out] */ DMO_MEDIA_TYPE *pmt);
    HRESULT STDCALL ( *GetOutputType )(IMediaObject * This,
				       unsigned long dwOutputStreamIndex,
				       unsigned long dwTypeIndex,
				       /* [out] */ DMO_MEDIA_TYPE *pmt);
    HRESULT STDCALL ( *SetInputType )(IMediaObject * This,
				      unsigned long dwInputStreamIndex,
				      /* [in] */ const DMO_MEDIA_TYPE *pmt,
				      unsigned long dwFlags);
    HRESULT STDCALL ( *SetOutputType )(IMediaObject * This,
				       unsigned long dwOutputStreamIndex,
				       /* [in] */ const DMO_MEDIA_TYPE *pmt,
				       unsigned long dwFlags);
    HRESULT STDCALL ( *GetInputCurrentType )(IMediaObject * This,
					     unsigned long dwInputStreamIndex,
					     /* [out] */ DMO_MEDIA_TYPE *pmt);
    HRESULT STDCALL ( *GetOutputCurrentType )(IMediaObject * This,
					      unsigned long dwOutputStreamIndex,
					      /* [out] */ DMO_MEDIA_TYPE *pmt);
    HRESULT STDCALL ( *GetInputSizeInfo )(IMediaObject * This,
					  unsigned long dwInputStreamIndex,
					  /* [out] */ unsigned long *pcbSize,
					  /* [out] */ unsigned long *pcbMaxLookahead,
					  /* [out] */ unsigned long *pcbAlignment);
    HRESULT STDCALL ( *GetOutputSizeInfo )(IMediaObject * This,
					   unsigned long dwOutputStreamIndex,
					   /* [out] */ unsigned long *pcbSize,
					   /* [out] */ unsigned long *pcbAlignment);
    HRESULT STDCALL ( *GetInputMaxLatency )(IMediaObject * This,
					    unsigned long dwInputStreamIndex,
					    /* [out] */ REFERENCE_TIME *prtMaxLatency);
    HRESULT STDCALL ( *SetInputMaxLatency )(IMediaObject * This,
					    unsigned long dwInputStreamIndex,
					    REFERENCE_TIME rtMaxLatency);
    HRESULT STDCALL ( *Flush )(IMediaObject * This);
    HRESULT STDCALL ( *Discontinuity )(IMediaObject * This,
				       unsigned long dwInputStreamIndex);
    HRESULT STDCALL ( *AllocateStreamingResources )(IMediaObject * This);
    HRESULT STDCALL ( *FreeStreamingResources )(IMediaObject * This);
    HRESULT STDCALL ( *GetInputStatus )(IMediaObject * This,
					unsigned long dwInputStreamIndex,
					/* [out] */ unsigned long *dwFlags);
    HRESULT STDCALL ( *ProcessInput )(IMediaObject * This,
				      unsigned long dwInputStreamIndex,
				      IMediaBuffer *pBuffer,
				      unsigned long dwFlags,
				      REFERENCE_TIME rtTimestamp,
				      REFERENCE_TIME rtTimelength);
    HRESULT STDCALL ( *ProcessOutput )(IMediaObject * This,
				       unsigned long dwFlags,
				       unsigned long cOutputBufferCount,
				       /* [size_is][out][in] */ DMO_OUTPUT_DATA_BUFFER *pOutputBuffers,
				       /* [out] */ unsigned long *pdwStatus);
    HRESULT STDCALL ( *Lock )(IMediaObject * This, long bLock);
} IMediaObject_vt;
struct _IMediaObject { IMediaObject_vt* vt; };

/*
 * IEnumDMO interface
 */
typedef struct _IEnumDMO IEnumDMO;
typedef struct IEnumDMO_vt
{
    INHERIT_IUNKNOWN();

    HRESULT STDCALL ( *Next )(IEnumDMO * This,
			      unsigned long cItemsToFetch,
			      /* [length_is][size_is][out] */ CLSID *pCLSID,
			      /* [string][length_is][size_is][out] */ WCHAR **Names,
			      /* [out] */ unsigned long *pcItemsFetched);
    HRESULT STDCALL ( *Skip )(IEnumDMO * This,
			      unsigned long cItemsToSkip);
    HRESULT STDCALL ( *Reset )(IEnumDMO * This);
    HRESULT STDCALL ( *Clone )(IEnumDMO * This,
			       /* [out] */ IEnumDMO **ppEnum);
} IEnumDMO_vt;
struct _IEnumDMO { IEnumDMO_vt* vt; };

/*
 * IMediaObjectInPlace interface
 */
typedef struct _IMediaObjectInPlace IMediaObjectInPlace;
typedef struct IMediaObjectInPlace_vt
{
    INHERIT_IUNKNOWN();

    HRESULT STDCALL ( *Process )(IMediaObjectInPlace * This,
				 /* [in] */ unsigned long ulSize,
				 /* [size_is][out][in] */ BYTE *pData,
				 /* [in] */ REFERENCE_TIME refTimeStart,
				 /* [in] */ unsigned long dwFlags);
    HRESULT STDCALL ( *Clone )(IMediaObjectInPlace * This,
			       /* [out] */ IMediaObjectInPlace **ppMediaObject);
    HRESULT STDCALL ( *GetLatency )(IMediaObjectInPlace * This,
				    /* [out] */ REFERENCE_TIME *pLatencyTime);

} IMediaObjectInPlace_vt;
struct _IMediaObjectInPlace { IMediaObjectInPlace_vt* vt; };


/*
 * IDMOQualityControl interface
 */
typedef struct _IDMOQualityControl IDMOQualityControl;
typedef struct IDMOQualityControl_vt
{
    INHERIT_IUNKNOWN();

    HRESULT STDCALL ( *SetNow )(IDMOQualityControl * This,
				/* [in] */ REFERENCE_TIME rtNow);
    HRESULT STDCALL ( *SetStatus )(IDMOQualityControl * This,
				   /* [in] */ unsigned long dwFlags);
    HRESULT STDCALL ( *GetStatus )(IDMOQualityControl * This,
				   /* [out] */ unsigned long *pdwFlags);
} IDMOQualityControl_vt;
struct _IDMOQualityControl { IDMOQualityControl_vt* vt; };

/*
 * IDMOVideoOutputOptimizations  interface
 */
typedef struct _IDMOVideoOutputOptimizations  IDMOVideoOutputOptimizations;
typedef struct IDMOVideoOutputOptimizations_vt
{
    INHERIT_IUNKNOWN();

    HRESULT STDCALL ( *QueryOperationModePreferences )(IDMOVideoOutputOptimizations * This,
						       unsigned long ulOutputStreamIndex,
						       unsigned long *pdwRequestedCapabilities);
    HRESULT STDCALL ( *SetOperationMode )(IDMOVideoOutputOptimizations * This,
					  unsigned long ulOutputStreamIndex,
					  unsigned long dwEnabledFeatures);
    HRESULT STDCALL ( *GetCurrentOperationMode )(IDMOVideoOutputOptimizations * This,
						 unsigned long ulOutputStreamIndex,
						 unsigned long *pdwEnabledFeatures);
    HRESULT STDCALL ( *GetCurrentSampleRequirements )(IDMOVideoOutputOptimizations * This,
						      unsigned long ulOutputStreamIndex,
						      unsigned long *pdwRequestedFeatures);
} IDMOVideoOutputOptimizations_vt;
struct _IDMOVideoOutputOptimizations { IDMOVideoOutputOptimizations_vt* vt; };

#endif /* DMO_INTERFACE_H */