FOURCC.H
//==========================================================================; 
// 
//  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY 
//  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 
//  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR 
//  PURPOSE. 
// 
//  Copyright (c) 1992 - 1997  Microsoft Corporation.  All Rights Reserved. 
// 
//--------------------------------------------------------------------------; 
 
// FOURCCMap 
// 
// provides a mapping between old-style multimedia format DWORDs 
// and new-style GUIDs. 
// 
// A range of 4 billion GUIDs has been allocated to ensure that this 
// mapping can be done straightforwardly one-to-one in both directions. 
// 
// January 95 
 
 
#ifndef __FOURCC__ 
#define __FOURCC__ 
 
 
// Multimedia format types are marked with DWORDs built from four 8-bit 
// chars and known as FOURCCs. New multimedia AM_MEDIA_TYPE definitions include 
// a subtype GUID. In order to simplify the mapping, GUIDs in the range: 
//    XXXXXXXX-0000-0010-8000-00AA00389B71 
// are reserved for FOURCCs. 
 
class FOURCCMap : public GUID 
{ 
 
public: 
    FOURCCMap(); 
    FOURCCMap(DWORD Fourcc); 
    FOURCCMap(const GUID *); 
 
 
    DWORD GetFOURCC(void); 
    void SetFOURCC(DWORD fourcc); 
    void SetFOURCC(const GUID *); 
 
private: 
    void InitGUID(); 
}; 
 
#define GUID_Data2      0 
#define GUID_Data3     0x10 
#define GUID_Data4_1   0xaa000080 
#define GUID_Data4_2   0x719b3800 
 
inline void 
FOURCCMap::InitGUID() { 
    Data2 = GUID_Data2; 
    Data3 = GUID_Data3; 
    ((DWORD *)Data4)[0] = GUID_Data4_1; 
    ((DWORD *)Data4)[1] = GUID_Data4_2; 
} 
 
inline 
FOURCCMap::FOURCCMap() { 
    InitGUID(); 
    SetFOURCC( DWORD(0)); 
} 
 
inline 
FOURCCMap::FOURCCMap(DWORD fourcc) 
{ 
    InitGUID(); 
    SetFOURCC(fourcc); 
} 
 
inline 
FOURCCMap::FOURCCMap(const GUID * pGuid) 
{ 
    InitGUID(); 
    SetFOURCC(pGuid); 
} 
 
inline void 
FOURCCMap::SetFOURCC(const GUID * pGuid) 
{ 
    FOURCCMap * p = (FOURCCMap*) pGuid; 
    SetFOURCC(p->GetFOURCC()); 
} 
 
inline void 
FOURCCMap::SetFOURCC(DWORD fourcc) 
{ 
    Data1 = fourcc; 
} 
 
inline DWORD 
FOURCCMap::GetFOURCC(void) 
{ 
    return Data1; 
} 
 
#endif /* __FOURCC__ */