//------------------------------------------------------------------------------
// File: AMVA.h
//
// Desc: DirectShowMotionComp include file.
//
// Copyright (c) 1997-2001, Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------------------------


#ifndef __AMVA_INCLUDED__
#define __AMVA_INCLUDED__

#ifdef __cplusplus
extern "C" {
#endif


#define AMVA_TYPEINDEX_OUTPUTFRAME 0xFFFFFFFF

//  Flags for QueryRenderStatus
#define AMVA_QUERYRENDERSTATUSF_READ     0x00000001  // Query for read
                                                     // set this bit to 0
                                                     // if query for update

typedef struct _tag_AMVAUncompBufferInfo
{
     DWORD                   dwMinNumSurfaces;       // IN   min number of surfaces to be allocated
     DWORD                   dwMaxNumSurfaces;       // IN   max number of surfaces to be allocated
     DDPIXELFORMAT           ddUncompPixelFormat;    // IN   pixel format of surfaces to be allocated
} AMVAUncompBufferInfo, *LPAMVAUncompBufferInfo;

typedef struct _tag_AMVAUncompDataInfo
{
    DWORD                   dwUncompWidth;           // [in]     width of uncompressed data
    DWORD                   dwUncompHeight;          // [in]     height of uncompressed data
    DDPIXELFORMAT           ddUncompPixelFormat;     // [in]     pixel-format of uncompressed data
} AMVAUncompDataInfo, *LPAMVAUncompDataInfo;

typedef struct _tag_AMVAInternalMemInfo
{
    DWORD                   dwScratchMemAlloc;       // [out]    amount of scratch memory will the hal allocate for its private use
} AMVAInternalMemInfo, *LPAMVAInternalMemInfo;


typedef struct _tag_AMVACompBufferInfo
{
    DWORD                   dwNumCompBuffers;        // [out]    number of buffers reqd for compressed data
    DWORD                   dwWidthToCreate;         // [out]    Width of surface to create
    DWORD                   dwHeightToCreate;        // [out]    Height of surface to create
    DWORD                   dwBytesToAllocate;       // [out]    Total number of bytes used by each surface
    DDSCAPS2                ddCompCaps;              // [out]    caps to create surfaces to store compressed data
    DDPIXELFORMAT           ddPixelFormat;           // [out]    fourcc to create surfaces to store compressed data
} AMVACompBufferInfo, *LPAMVACompBufferInfo;


// Note that you are NOT allowed to store any pointer in pMiscData
typedef struct _tag_AMVABeginFrameInfo
{
    DWORD                dwDestSurfaceIndex;         // IN  destination buffer in which to decoding this frame
    LPVOID               pInputData;                 // IN  pointer to misc data
    DWORD                dwSizeInputData;            // IN  size of other misc data to begin frame
    LPVOID               pOutputData;                // OUT pointer to data which the VGA is going to fill
    DWORD                dwSizeOutputData;           // IN  size of data which the VGA is going to fill
} AMVABeginFrameInfo, *LPAMVABeginFrameInfo;

// Note that you are NOT allowed to store any pointer in pMiscData
typedef struct _tag_AMVAEndFrameInfo
{
    DWORD                   dwSizeMiscData;          // [in]     size of other misc data to begin frame
    LPVOID                  pMiscData;               // [in]     pointer to misc data
} AMVAEndFrameInfo, *LPAMVAEndFrameInfo;

typedef struct _tag_AMVABUFFERINFO
{
    DWORD                   dwTypeIndex;             // [in]    Type of buffer
    DWORD                   dwBufferIndex;           // [in]    Buffer index
    DWORD                   dwDataOffset;            // [in]    offset of relevant data from the beginning of buffer
    DWORD                   dwDataSize;              // [in]    size of relevant data
} AMVABUFFERINFO, *LPAMVABUFFERINFO;

#ifdef __cplusplus
};
#endif

#endif // _AMVA_INCLUDED