//------------------------------------------------------------------------------ | |
// File: MtType.h | |
// | |
// Desc: DirectShow base classes - defines a class that holds and manages | |
// media type information. | |
// | |
// Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved. | |
//------------------------------------------------------------------------------ | |
#ifndef __MTYPE__ | |
#define __MTYPE__ | |
/* Helper class that derived pin objects can use to compare media | |
types etc. Has same data members as the struct AM_MEDIA_TYPE defined | |
in the streams IDL file, but also has (non-virtual) functions */ | |
class CMediaType : public _AMMediaType { | |
public: | |
~CMediaType(); | |
CMediaType(); | |
CMediaType(const GUID * majortype); | |
CMediaType(const AM_MEDIA_TYPE&, __out_opt HRESULT* phr = NULL); | |
CMediaType(const CMediaType&, __out_opt HRESULT* phr = NULL); | |
CMediaType& operator=(const CMediaType&); | |
CMediaType& operator=(const AM_MEDIA_TYPE&); | |
BOOL operator == (const CMediaType&) const; | |
BOOL operator != (const CMediaType&) const; | |
HRESULT Set(const CMediaType& rt); | |
HRESULT Set(const AM_MEDIA_TYPE& rt); | |
BOOL IsValid() const; | |
const GUID *Type() const { return &majortype;} ; | |
void SetType(const GUID *); | |
const GUID *Subtype() const { return &subtype;} ; | |
void SetSubtype(const GUID *); | |
BOOL IsFixedSize() const {return bFixedSizeSamples; }; | |
BOOL IsTemporalCompressed() const {return bTemporalCompression; }; | |
ULONG GetSampleSize() const; | |
void SetSampleSize(ULONG sz); | |
void SetVariableSize(); | |
void SetTemporalCompression(BOOL bCompressed); | |
// read/write pointer to format - can't change length without | |
// calling SetFormat, AllocFormatBuffer or ReallocFormatBuffer | |
BYTE* Format() const {return pbFormat; }; | |
ULONG FormatLength() const { return cbFormat; }; | |
void SetFormatType(const GUID *); | |
const GUID *FormatType() const {return &formattype; }; | |
BOOL SetFormat(__in_bcount(length) BYTE *pFormat, ULONG length); | |
void ResetFormatBuffer(); | |
BYTE* AllocFormatBuffer(ULONG length); | |
BYTE* ReallocFormatBuffer(ULONG length); | |
void InitMediaType(); | |
BOOL MatchesPartial(const CMediaType* ppartial) const; | |
BOOL IsPartiallySpecified(void) const; | |
}; | |
/* General purpose functions to copy and delete a task allocated AM_MEDIA_TYPE | |
structure which is useful when using the IEnumMediaFormats interface as | |
the implementation allocates the structures which you must later delete */ | |
void WINAPI DeleteMediaType(__inout_opt AM_MEDIA_TYPE *pmt); | |
AM_MEDIA_TYPE * WINAPI CreateMediaType(AM_MEDIA_TYPE const *pSrc); | |
HRESULT WINAPI CopyMediaType(__out AM_MEDIA_TYPE *pmtTarget, const AM_MEDIA_TYPE *pmtSource); | |
void WINAPI FreeMediaType(__inout AM_MEDIA_TYPE& mt); | |
// Initialize a media type from a WAVEFORMATEX | |
STDAPI CreateAudioMediaType( | |
const WAVEFORMATEX *pwfx, | |
__out AM_MEDIA_TYPE *pmt, | |
BOOL bSetFormat); | |
#endif /* __MTYPE__ */ | |