//==========================================================================;
//
//  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) 1996  Microsoft Corporation.  All Rights Reserved.
//
//--------------------------------------------------------------------------;
//==========================================================================;
//
//  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) 1996  Microsoft Corporation.  All Rights Reserved.
//
//--------------------------------------------------------------------------;

/*  Define video type for MPEG-2 */
#ifndef __MPEG2TYP__
#define __MPEG2TYP__

#ifdef _WIN32
#include <pshpack1.h>
#else
#ifndef RC_INVOKED
#pragma pack(1)
#endif
#endif

#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

/*  MPEG-2 stuff */

#define MPEG2VIDEOINFO_PROFILE_SIMPLE             5
#define MPEG2VIDEOINFO_PROFILE_MAIN               4
#define MPEG2VIDEOINFO_PROFILE_SNR_SCALABLE       3
#define MPEG2VIDEOINFO_PROFILE_SPATIALLY_SCALABLE 2
#define MPEG2VIDEOINFO_PROFILE_HIGH               1

#define MPEG2VIDEINFO_LEVEL_LOW                   10
#define MPEG2VIDEINFO_LEVEL_MAIN                  8
#define MPEG2VIDEINFO_LEVEL_HIGH_1440             6
#define MPEG2VIDEINFO_LEVEL_HIGH                  4

typedef struct tagMPEG2VIDEOINFO
{
    /* -- Matches VIDEOINFOHEADER -- */

    RECT            rcSource;          // The bit we really want to use
    RECT            rcTarget;          // Where the video should go
    DWORD           dwBitRate;         // Approximate bit data rate
    DWORD           dwBitErrorRate;    // Bit error rate for this stream
    REFERENCE_TIME  AvgTimePerFrame;   // Average time per frame (100ns units)

    BITMAPINFOHEADER bmiHeader;

    /* ----------------------------- */


    DWORD           dwProfile;              // Which profile
    DWORD           dwLevel;                // What level
    DWORD           dwStartTimeCode;        // 25-bit Group of pictures time code
                                            // at start of data
    DWORD           cbSequenceHeader;       // Length in bytes of bSequenceHeader
    BYTE            bSequenceHeader[1];     // Sequence header including
                                            // quantization matrices if any
                                            // and extension

} MPEG2VIDEOINFO;



/*  AC3 audio

    wFormatTag          WAVE_FORMAT_DOLBY_AC3
    nChannels           1 -6 channels valid
    nSamplesPerSec      48000, 44100, 32000
    nAvgByesPerSec      4000 to 80000
    nBlockAlign         128 - 3840
    wBitsPerSample      Up to 24 bits - (in the original)

*/

#define WAVE_FORMAT_DOLBY_AC3 0x2000

typedef struct tagDOLBYAC3WAVEFORMAT
{
    WAVEFORMATEX     wfx;
    BYTE             bBigEndian;       /* TRUE = Big Endian, FALSE little endian */
    BYTE             bsid;
    BYTE             lfeon;
    BYTE             copyrightb;
    BYTE             nAuxBitsCode;  /*  Aux bits per frame */
} DOLBYAC3WAVEFORMAT;


#ifdef __cplusplus
}
#endif // __cplusplus

#ifdef _WIN32
#include <poppack.h>
#else
#ifndef RC_INVOKED
#pragma pack()
#endif
#endif
#endif // __AMVIDEO__