/*	
 *	clipmmio.h
 *
 *	Win32 Multimedia API 互換ライブラリ
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2016 Naoyuki Sawa
 *
 *	* Fri Nov 16 16:28:45 JST 2007 Naoyuki Sawa
 *	- 1st リリース。
 *	- AVI形式のCinepakビデオストリームを再生するために必要なWin32 Multimedia APIを、
 *	  最低限必要な機能のみに簡略化して実装しました。
 *	  clipcvidモジュール(Cinepakデコーダ)から利用しています。
 *	- APIの仕様については、MSDNライブラリ等を参照してください。
 *	  簡略化した点については、clipmmio.cのソースコードを参照してください。
 *	* Wed Nov 18 21:37:53 JST 2015 Naoyuki Sawa
 *	- 'extern "C" {'〜'}'で囲みました。.cppを含むWin32プロジェクトからもインクルード出来るようにするためです。
 *	* Thu Jun 02 21:20:46 JST 2016 Naoyuki Sawa
 *	- MAKEFOURCC()マクロを追加しました。
 *	  既存のmmioFOURCC()を使ってMAKEFOURCC()を定義しても良かったのですが、MMSYSTEM.Hに倣って、MAKEFOURCC()を使ってmmioFOURCC()を定義しました。
 *	- MAKEFOURCC()マクロはmmioFOURCC()と全く同じなので両方を定義する必然性は無いのですが、MMSYSTEM.Hに倣って両方を定義しておく事にしました。
 *	  'mmioFOURCC()'よりも'MAKEFOURCC()'の方が汎用的なイメージで、用途によってはMAKEFOURCC()を使う方が判り易い場合が有ると思ったからです。
 */
#ifndef __CLIP_MMIO_H__
#define __CLIP_MMIO_H__

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

/****************************************************************************
 *	mmsystem.h
 ****************************************************************************/

typedef FILE* HMMIO;

typedef struct _MMCKINFO {
	unsigned ckid;		/* + 0,4 */
	unsigned cksize;	/* + 4,4 */
	unsigned fccType;	/* + 8,4 */
	unsigned dwDataOffset;	/* +12,4 */
	unsigned dwFlags;	/* +16,4 */
} MMCKINFO;			/* =20 */

//{{2016/06/02変更:MAKEFOURCC()マクロを追加しました。既存のmmioFOURCC()を使ってMAKEFOURCC()を定義しても良かったのですが、MMSYSTEM.Hに倣って、MAKEFOURCC()を使ってmmioFOURCC()を定義しました。
//#define mmioFOURCC(a,b,c,d)	(((unsigned char)(a)    )| \
//				 ((unsigned char)(b)<< 8)| \
//				 ((unsigned char)(c)<<16)| \
//				 ((unsigned char)(d)<<24))
//↓2016/06/02変更:MAKEFOURCC()マクロを追加しました。既存のmmioFOURCC()を使ってMAKEFOURCC()を定義しても良かったのですが、MMSYSTEM.Hに倣って、MAKEFOURCC()を使ってmmioFOURCC()を定義しました。
#define MAKEFOURCC(a,b,c,d)	(((unsigned char)(a)    )| \
				 ((unsigned char)(b)<< 8)| \
				 ((unsigned char)(c)<<16)| \
				 ((unsigned char)(d)<<24))
#define mmioFOURCC(a,b,c,d)	MAKEFOURCC((a),(b),(c),(d))
//}}2016/06/02変更:MAKEFOURCC()マクロを追加しました。既存のmmioFOURCC()を使ってMAKEFOURCC()を定義しても良かったのですが、MMSYSTEM.Hに倣って、MAKEFOURCC()を使ってmmioFOURCC()を定義しました。

/* mmioOpen */
#define MMIO_READ	0

/* mmioDescend */
#define MMIO_FINDCHUNK	0x10
#define MMIO_FINDRIFF	0x20
#define MMIO_FINDLIST	0x40

HMMIO mmioOpen(const char* pszFileName, /*MMIOINFO*/void* pmmioinfo, int fdwOpen);
int mmioClose(HMMIO hmmio, int fuClose);
int mmioDescend(HMMIO hmmio, MMCKINFO* pmmcki, const MMCKINFO* pmmckiParent, int fuDescend);
int mmioAscend(HMMIO hmmio, MMCKINFO* pmmcki, int fuAscend);
int mmioRead(HMMIO hmmio, char* pch, int cch);
int mmioSeek(HMMIO hmmio, int lOffset, int iOrigin);

/****************************************************************************
 *	avifmt.h
 ****************************************************************************/

typedef struct _AVIStreamHeader {
	unsigned fccType;		/* + 0, 4 */
	unsigned fccHandler;		/* + 4, 4 */
	unsigned dwFlags;		/* + 8, 4 */
	unsigned short wPriority;	/* +12, 2 */
	unsigned short wLanguage;	/* +14, 2 */
	unsigned dwInitialFrames;	/* +16, 4 */
	unsigned dwScale;		/* +20, 4 */
	unsigned dwRate;		/* +24, 4 */
	unsigned dwStart;		/* +28, 4 */
	unsigned dwLength;		/* +32, 4 */
	unsigned dwSuggestedBufferSize;	/* +36, 4 */
	unsigned dwQuality;		/* +40, 4 */
	unsigned dwSampleSize;		/* +44, 4 */
	/*RECT*/int rcFrame[4];		/* +48,16 */
} AVIStreamHeader;			/* =64 */

/****************************************************************************
 *	wingdi.h
 ****************************************************************************/

typedef struct _BITMAPINFOHEADER {
	unsigned biSize;		/* + 0,4 */
	int biWidth;			/* + 4,4 */
	int biHeight;			/* + 8,4 */
	unsigned short biPlanes;	/* +12,2 */
	unsigned short biBitCount;	/* +14,2 */
	unsigned biCompression;		/* +16,4 */
	unsigned biSizeImage;		/* +20,4 */
	int biXPelsPerMeter;		/* +24,4 */
	int biYPelsPerMeter;		/* +28,4 */
	unsigned biClrUsed;		/* +32,4 */
	unsigned biClrImportant;	/* +36,4 */
} BITMAPINFOHEADER;			/* =40 */

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

#endif /*__CLIP_MMIO_H__*/
