// $Header: G:/SwDev/WDM/Video/bt848/rcs/Scaler.h 1.2 1998/04/29 22:43:41 tomz Exp $


#ifndef __SCALER_H
#define __SCALER_H

#include "mytypes.h"

#ifndef __COMPREG_H
#include "compreg.h"
#endif

#define HDROP       HANDLE

#include "viddefs.h"


// structure contains video information
struct VideoInfoStruct
{
   WORD Clkx1_HACTIVE;
   WORD Clkx1_HDELAY;
   WORD Min_Pixels;
   WORD Active_lines_per_field;
   WORD Min_UncroppedPixels;
   WORD Max_Pixels;
   WORD Min_Lines;
   WORD Max_Lines;
   WORD Max_VFilter1_Pixels;
   WORD Max_VFilter2_Pixels;
   WORD Max_VFilter3_Pixels;
   WORD Max_VFilter1_Lines;
   WORD Max_VFilter2_Lines;
   WORD Max_VFilter3_Lines;
};


/////////////////////////////////////////////////////////////////
//
// for pisces, instantiate as ...
//
// Scaler evenScaler( VF_Even );
// Scaler oddScaler( VF_Odd );
//
/////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////
// CLASS Scaler
//
// Description:
//    This class encapsulates the register fields in the scaler portion of
//    the Bt848.
//    A complete set of functions are developed to manipulate all the
//    register fields in the scaler registers for the Bt848.
//
// Methods:
//    See below
//
// Note:
//    For Bt848, instantiate as ...
//       Scaler evenScaler( VF_Even );
//       Scaler oddScaler( VF_Odd );
//
/////////////////////////////////////////////////////////////////////////////

class Scaler
{
	public:
		Scaler( VidField );
		~Scaler();

		void VideoFormatChanged( VideoFormat );
      void TurnVFilter( State st ) { VFilterFlag_ = st; }
                             
		void      Scale( MRect & );
      ErrorCode SetAnalogWin( const MRect & );
      void      GetAnalogWin( MRect & ) const;
      ErrorCode SetDigitalWin( const MRect & );
      void      GetDigitalWin( MRect & ) const;

   protected:
      #include "S_declar.h"

		VideoInfoStruct * m_ptrVideoIn;
      MRect AnalogWin_;
      MRect DigitalWin_;

      // member functions to set scaling registers
		virtual void SetHActive( MRect & );
		virtual void SetHDelay( void );
		virtual void SetHScale( void );
      virtual void SetHFilter( void );
		virtual void SetVActive( void );
		virtual void SetVDelay( void );
		virtual void SetVScale( MRect & );
		virtual void SetVFilter( void );

   private:
		VideoFormat  m_videoFormat;   // video format

      // this is to battle junk lines at the top of the video
      State VFilterFlag_;

      WORD  m_HActive;  // calcuated intermediate value
      WORD  m_pixels;   // calcuated intermediate value
      WORD  m_lines;    // calcuated intermediate value
      WORD  m_VFilter;  // calcuated intermediate value

};


#endif __SCALER_H