/*
 *  Middleware Library
 *  Copyright (c) 1998 SEGA
 *  
 *		Middleware Play
 *
 *  Module  : Library Header File
 *  File    : sfd_mw.h
 *  Create  : 1998-07-25
 *  Modify  : 1998-10-27
 *  Note    :
 */

#ifndef	_SFD_MW_H_
#define	_SFD_MW_H_

/*	Version No.	*/
#define	MWD_SFD_VER	"1.03"

/*
 *		Middleware library function for Sofdec
 */

/***********************************************************************
 *      インクルードファイル
 ***********************************************************************/

/***********************************************************************
 *      定数マクロ
 ***********************************************************************/

/* Sofdec Error */
#define	MWD_PLY_ERR_SFD_INIT	(-301)
#define	MWD_PLY_ERR_SFD_NOTYPE	(-302)
#define	MWD_PLY_ERR_SFD_ERRFN	(-303)
#define	MWD_PLY_ERR_SFD_FINISH	(-304)
#define	MWD_PLY_ERR_SFD_CREATE	(-305)
#define	MWD_PLY_ERR_SFD_DSTRY	(-306)
#define	MWD_PLY_ERR_SFD_START	(-307)
#define	MWD_PLY_ERR_SFD_STOP	(-308)

/* ファイルタイプ */
#define	MWD_PLY_FTYPE_NON		(0)
#define	MWD_PLY_FTYPE_SFD		(1)
#define	MWD_PLY_FTYPE_MPV		(2)

/* デコーダタイプ */
#define	MWD_DECTYP_NON			(0)
#define	MWD_DECTYP_SOFDEC		(1)

/* GSCハンドル最大数 */
#define	MWD_GSCHN_MAX			(1)

/*	表示位置・サイズのデフォルトタイプ	*/
#define MWD_PLY_DTYPE_AUTO	(0)
#define MWD_PLY_DTYPE_FULL	(1)

/***********************************************************************
 *      列挙定数
 ***********************************************************************/

/***********************************************************************
 *      処理マクロ
 ***********************************************************************/

/*	オーディオ出力バッファ	*/
#define	MWD_SFD_CALC_WORK_AUDIO_OUT(nch)	(0x2020*sizeof(short)*(nch)+32)
/*	オーディオ出力バッファ	(デフォルト値）*/
#define	MWD_SFD_CALC_WORK_AUDIO_OUT0	MWD_SFD_CALC_WORK_AUDIO_OUT(2)
/*	オーディオ入力バッファ	*/
#define	MWD_SFD_CALC_WORK_AUDIO_IN			(36*2048+32)
/*	オーディオ用バッファサイズ	*/
#define	MWD_SFD_SIZE_WORK_AUDIO(nch)	( \
				MWD_SFD_CALC_WORK_AUDIO_OUT0 + \
				MWD_SFD_CALC_WORK_AUDIO_IN \
			)

/* 参照用フレームバッファ */
#define	MWD_SFD_CALC_WORK_RFB(wc, hc, wy, hy)	\
								SFD_RFB_BUF_SIZ((wc), (hc), (wy), (hy))
/* 参照用フレームバッファ (デフォルト値)	*/
#define	MWD_SFD_CALC_WORK_RFB0 \
				MWD_SFD_CALC_WORK_RFB(	SFD_RFB_WIDTH_C, \
										SFD_RFB_HEIGHT_C, \
										SFD_RFB_WIDTH_Y, \
										SFD_RFB_HEIGHT_Y )

/* 出力用フレームバッファ */
#define	MWD_SFD_CALC_WORK_TAB(wy, hy, nfrm)	\
								SFD_TA_BUF_SIZ((wy), (hy), (nfrm))
/* 出力用フレームバッファ (デフォルト値)	*/
#define MWD_SFD_CALC_WORK_TAB0	\
				MWD_SFD_CALC_WORK_TAB(SFD_RFB_WIDTH_Y, SFD_RFB_HEIGHT_Y, 4)

#define	MWD_SFD_CALC_WORK(sx, sy, nch)	\
		MWD_SFD_CALC_WORK_AUDIO(2) +	\
		
/*	ワークサイズ	*/
#define	MWD_SFD_SIZE_WORK		(0x002E0000)


/***********************************************************************
 *      データ型の宣言
 ***********************************************************************/

/* sofdec */
typedef struct {
	Sint32		ftype;			/* 再生するストリームの種別		*/
	Sint32		hnmax;			/* 最大ハンドル数				*/
	Sint32		vsync_mhz;		/* VSYNC周波数（Hzの1,000倍)	*/
	Sint32		disp_latency;	/* 表示レイテンシ (2/3)			*/
} MWS_PLY_INIT_SFD;

typedef struct {
	Bool	first_hpel;			/* ハーフペル処理の高速化 ON/OFF */
} MWS_PLY_OPT_SFD;

/* creating parameter	*/
typedef struct {
	MWS_PLY_OPT_SFD	opt;
	Sint32	ftype;			/*	再生するストリームの種別 				*/
	Sint32  dtype;			/*	表示位置・サイズのデフォルトタイプ		*/
	Sint32	lx;				/*	表示位置 ( X 座標)						*/
	Sint32	ly;				/*	表示位置 ( Y 座標)						*/
	Sint32	sx;				/*	表示サイズ	(X 方向)					*/
	Sint32	sy;				/*	表示サイズ	(Y 方向)					*/
	Sint8	*work;			/*	ワーク領域								*/
	Sint32	wksize;			/*	ワーク領域サイズ						*/
} MWS_PLY_CPRM_SFD;

/***********************************************************************
 *		変数の宣言
 ***********************************************************************/

/***********************************************************************
 *      関数の宣言
 ***********************************************************************/

/*	システムの初期化　(sbInitSystemの前に呼ぶ関数)	*/
void mwPlyPreInitSofdec(void);

/* initialize Sofdec library */
void mwPlyInitSofdec(MWS_PLY_INIT_SFD *iprm);

/*	finish using Sofdec library */
void mwPlyFinishSofdec(void);

/* create MWPLY handle for Sofdec */
MWPLY mwPlyCreateSofdec(MWS_PLY_CPRM_SFD *cprm);

/*	高速ハールペル処理の設定	*/
void mwPlySetFastHalfpel(MWPLY mwply, Sint32 sw);

/*	音声出力処理の設定	*/
void mwPlySetAudioSw(MWPLY mwply, Sint32 sw);

/*	表示位置の設定	*/
void mwPlySetDispPos(MWPLY mwply, float lx, float ly);

/*	表示サイズの設定	*/
void mwPlySetDispSize(MWPLY mwply, float sx, float sy);

/*	輝度の設定	(val= 0〜255) */
void mwPlySetBright(MWPLY mwply, Sint32 val);

#endif	/*	_SFD_MW_H_	*/
