/*

	bladedll.h

    +++++++++++++++++++++++++++
	+   Blade's Encoder DLL   +
	+++++++++++++++++++++++++++

    ------------------------------------------------------
	- Version 1.00 (7 November 1998) - Jukka Poikolainen -
	------------------------------------------------------

	Initial version
	
	------------------------------------------------------
	- Version x.xx (x xxxxxxxx xxxx) - xxxxx xxxxxxxxxxx -
	------------------------------------------------------

*/

#ifndef BLADEDLL_H_INCLUDED
#define BLADEDLL_H_INCLUDED

#pragma pack(push)
#pragma pack(1)


#if (!defined(STATIC_LINK)) && defined (_WIN32)
	#define DLLEXPORT __declspec(dllexport)
#else
	#define DLLEXPORT 
#endif

/* encoding formats */

#define		BE_CONFIG_MP3			0

//#define STATIC_LINK

/* type definitions */

typedef		unsigned long			HBE_STREAM;
typedef		HBE_STREAM*				PHBE_STREAM;
typedef		unsigned long			BE_ERR;

/* error codes */

#define		BE_ERR_SUCCESSFUL					0x00000000
#define		BE_ERR_INVALID_FORMAT				0x00000001
#define		BE_ERR_INVALID_FORMAT_PARAMETERS	0x00000002
#define		BE_ERR_NO_MORE_HANDLES				0x00000003
#define		BE_ERR_INVALID_HANDLE				0x00000004

/* other constants */

#define		BE_MAX_HOMEPAGE			128

/* format specific variables */

#define		BE_MP3_MODE_STEREO		0
#define		BE_MP3_MODE_JSTEREO		1
#define		BE_MP3_MODE_DUALCHANNEL	2
#define		BE_MP3_MODE_MONO		3

typedef struct	{
	
	DWORD	dwConfig;			// BE_CONFIG_XXXXX
								// Currently only BE_CONFIG_MP3 is supported
	union	
	{
		struct	{

			DWORD	dwSampleRate;	
			// 48000, 44100 and 32000 allowed
			BYTE	byMode;			
			// BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO
			WORD	wBitrate;		
			// 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320 allowed
			BOOL	bPrivate;		
			BOOL	bCRC;
			BOOL	bCopyright;
			BOOL	bOriginal;

			} mp3;					// BE_CONFIG_MP3
	} format;
		
} BE_CONFIG, *PBE_CONFIG;

typedef struct	{

	// BladeEnc DLL Version number

	BYTE	byDLLMajorVersion;
	BYTE	byDLLMinorVersion;

	// BladeEnc Engine Version Number

	BYTE	byMajorVersion;
	BYTE	byMinorVersion;

	// DLL Release date

	BYTE	byDay;
	BYTE	byMonth;
	WORD	wYear;

	// BladeEnc	Homepage URL

	CHAR	zHomepage[BE_MAX_HOMEPAGE + 1];	

	BYTE	byAlphaLevel;
	BYTE	byBetaLevel;
	BYTE	byMMXEnabled;

	BYTE	btReserved[125];


} BE_VERSION, *PBE_VERSION;			

#ifndef _BLADEDLL

typedef BE_ERR	(*BEINITSTREAM)		(PBE_CONFIG, PDWORD, PDWORD, PHBE_STREAM);
typedef BE_ERR	(*BEENCODECHUNK)	(HBE_STREAM, DWORD, PSHORT, PBYTE, PDWORD);
typedef BE_ERR	(*BEDEINITSTREAM)	(HBE_STREAM, PBYTE, PDWORD);
typedef BE_ERR	(*BECLOSESTREAM)	(HBE_STREAM);
typedef VOID	(*BEVERSION)		(PBE_VERSION);

#define	TEXT_BEINITSTREAM	"beInitStream"
#define	TEXT_BEENCODECHUNK	"beEncodeChunk"
#define	TEXT_BEDEINITSTREAM	"beDeinitStream"
#define	TEXT_BECLOSESTREAM	"beCloseStream"
#define	TEXT_BEVERSION		"beVersion"

#else

DLLEXPORT BE_ERR	beInitStream(PBE_CONFIG pbeConfig, PDWORD dwSamples, PDWORD dwBufferSize, PHBE_STREAM phbeStream);
DLLEXPORT BE_ERR	beEncodeChunk(HBE_STREAM hbeStream, DWORD nSamples, PSHORT pSamples, PBYTE pOutput, PDWORD pdwOutput);
DLLEXPORT BE_ERR	beDeinitStream(HBE_STREAM hbeStream, PBYTE pOutput, PDWORD pdwOutput);
DLLEXPORT BE_ERR	beCloseStream(HBE_STREAM hbeStream);
DLLEXPORT VOID		beVersion(PBE_VERSION pbeVersion);

#endif


#pragma pack(pop)



#endif
