/*	
 *	clipmmio.h
 *
 *	Win32 Multimedia API 互換ライブラリ
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2007 Naoyuki Sawa
 *
 *	* Fri Nov 16 16:28:45 JST 2007 Naoyuki Sawa
 *	- 1st リリース。
 *	- AVI形式のCinepakビデオストリームを再生するために必要なWin32 Multimedia APIを、
 *	  最低限必要な機能のみに簡略化して実装しました。
 *	  clipcvidモジュール(Cinepakデコーダ)から利用しています。
 *	- APIの仕様については、MSDNライブラリ等を参照してください。
 *	  簡略化した点については、clipmmio.cのソースコードを参照してください。
 */
#ifndef __CLIP_MMIO_H__
#define __CLIP_MMIO_H__

/****************************************************************************
 *	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 */

#define mmioFOURCC(a,b,c,d)	(((unsigned char)(a)    )| \
				 ((unsigned char)(b)<< 8)| \
				 ((unsigned char)(c)<<16)| \
				 ((unsigned char)(d)<<24))

/* 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 */

#endif /*__CLIP_MMIO_H__*/
