#if !defined(VP50_COMP_INTERFACE_H)
#define VP50_COMP_INTERFACE_H
/****************************************************************************
*
*   Module Title :     VFW_COMP_INTERFACE.H
*
*   Description  :     Interface to video codec demo compressor DLL
*
*   AUTHOR       :     Paul Wilkins
*
*****************************************************************************
*   Revision History
* 
*   1.04 JBB 26 AUG 00 JBB Added fixed q setting
*   1.03 PGW 07/12/99  Retro fit JBB changes
*   1.02 PGW 16/09/99  Interface changes to simplify things for command line 
*                      compressor.
*   1.01 PGW 07/07/99  Added COMP_CONFIG.
*   1.00 PGW 28/06/99  New configuration baseline
*
*****************************************************************************
*/

//  C4514  Unreferenced inline function has been removed
#ifndef MACPPC
#pragma warning(disable: 4514)
#endif

#include "codec_common_interface.h"
#include "type_aliases.h"

/* Command interface to compressor. */
/* Settings Control */

typedef struct
{
    UINT32 FrameSize;
    UINT32 TargetBitRate;
    UINT32 FrameRate;
    UINT32 KeyFrameFrequency;
    UINT32 KeyFrameDataTarget;
    UINT32 Quality;
    BOOL   AllowDF;
    BOOL   QuickCompress;
    BOOL   AutoKeyFrameEnabled;
    INT32  AutoKeyFrameThreshold;
    UINT32 MinimumDistanceToKeyFrame;
    INT32  ForceKeyFrameEvery;
    INT32  NoiseSensitivity;
    BOOL   AllowSpatialResampling;

    // The Intended Horizontal Scale 
    UINT32 HScale;
    UINT32 HRatio;

    // The Intended Vertical Scale 
    UINT32 VScale;
    UINT32 VRatio;

    // The way in which we intended
    UINT32 ScalingMode;

    // Interlaced (0) means no (1) means Yes
    UINT32 Interlaced;

    BOOL   FixedQ;

    INT32  StartingBufferLevel;             // The initial encoder buffer level
    INT32  OptimalBufferLevel;              // The buffer level target we strive to reach / maintain.
    INT32  DropFramesWaterMark;             // Buffer fullness watermark for forced drop frames.
    INT32  ResampleDownWaterMark;           // Buffer fullness watermark for downwards spacial re-sampling
    INT32  ResampleUpWaterMark;             // Buffer fullness watermark where returning to larger image size is consdered
	INT32  OutputFrameRate;
	INT32  Speed;

	BOOL   ErrorResilientMode;				// compress using a mode that won't completely fall apart if we decompress using
	                                        // the frame after a dropped frame

} COMP_CONFIG_VP5;

INLINE
void comp_config_default_vp5(COMP_CONFIG_VP5* pcc)
{
    pcc->FrameSize = 0;  //  No default value
    pcc->TargetBitRate = 300;
    pcc->FrameRate = 0;  //  No default value
    pcc->KeyFrameFrequency = 120;
    pcc->KeyFrameDataTarget = 0;  //  No default value
    pcc->Quality = 56;
    pcc->AllowDF = 0;
    pcc->QuickCompress = 1;
    pcc->AutoKeyFrameEnabled = 1;
    pcc->AutoKeyFrameThreshold = 80;
    pcc->MinimumDistanceToKeyFrame = 8;
    pcc->ForceKeyFrameEvery = 120;
    pcc->NoiseSensitivity = 0;
    pcc->AllowSpatialResampling = 0;
    pcc->HScale = 1;
    pcc->HRatio = 1;
    pcc->VScale = 1;
    pcc->VRatio = 1;
    pcc->ScalingMode = MAINTAIN_ASPECT_RATIO;
    pcc->Interlaced = 0;
    pcc->FixedQ = 0;

    pcc->StartingBufferLevel   = 6;
    pcc->OptimalBufferLevel    = 10;
    pcc->DropFramesWaterMark   = 20;
    pcc->ResampleDownWaterMark = 35;
    pcc->ResampleUpWaterMark   = 45;

	pcc->OutputFrameRate = 30;
	pcc->Speed = 12;
	pcc->ErrorResilientMode = FALSE;

    return;
}

#ifndef YUVINPUTBUFFERCONFIG
#define YUVINPUTBUFFERCONFIG
typedef struct
{
    int     YWidth;
    int     YHeight;
    int     YStride;

    int     UVWidth;
    int     UVHeight;
    int     UVStride;

    char *  YBuffer;
    char *  UBuffer;
    char *  VBuffer;

} YUV_INPUT_BUFFER_CONFIG;
#endif

#endif