//------------------------------------------------------------------------------ // 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__ */