Blame Dll/BladeMP3EncDLL.h

Packit 47f805
/*
Packit 47f805
 * Blade Type of DLL Interface for Lame encoder
Packit 47f805
 *
Packit 47f805
 * Copyright (c) 1999-2002 A.L. Faber
Packit 47f805
 * Based on bladedll.h version 1.0 written by Jukka Poikolainen
Packit 47f805
 *
Packit 47f805
 * This library is free software; you can redistribute it and/or
Packit 47f805
 * modify it under the terms of the GNU Library General Public
Packit 47f805
 * License as published by the Free Software Foundation; either
Packit 47f805
 * version 2 of the License, or (at your option) any later version.
Packit 47f805
 * 
Packit 47f805
 * This library is distributed in the hope that it will be useful,
Packit 47f805
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 47f805
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 47f805
 * Library General Public License for more details.
Packit 47f805
 * 
Packit 47f805
 * You should have received a copy of the GNU Library General Public
Packit 47f805
 * License along with this library; if not, write to the
Packit 47f805
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit 47f805
 * Boston, MA  02111-1307, USA.
Packit 47f805
 */
Packit 47f805
Packit 47f805
#ifndef ___BLADEDLL_H_INCLUDED___
Packit 47f805
#define ___BLADEDLL_H_INCLUDED___
Packit 47f805
Packit 47f805
#ifdef __GNUC__
Packit 47f805
#define ATTRIBUTE_PACKED	__attribute__((packed))
Packit 47f805
#else
Packit 47f805
#define ATTRIBUTE_PACKED
Packit 47f805
#pragma pack(push)
Packit 47f805
#pragma pack(1)
Packit 47f805
#endif
Packit 47f805
Packit 47f805
#ifdef	__cplusplus
Packit 47f805
extern "C" {
Packit 47f805
#endif
Packit 47f805
Packit 47f805
/* encoding formats */
Packit 47f805
Packit 47f805
#define		BE_CONFIG_MP3			0										
Packit 47f805
#define		BE_CONFIG_LAME			256		
Packit 47f805
Packit 47f805
/* type definitions */
Packit 47f805
Packit 47f805
typedef		void*			HBE_STREAM;
Packit 47f805
typedef		HBE_STREAM				*PHBE_STREAM;
Packit 47f805
typedef		unsigned long			BE_ERR;
Packit 47f805
Packit 47f805
/* error codes */
Packit 47f805
Packit 47f805
#define		BE_ERR_SUCCESSFUL					0x00000000
Packit 47f805
#define		BE_ERR_INVALID_FORMAT				0x00000001
Packit 47f805
#define		BE_ERR_INVALID_FORMAT_PARAMETERS	0x00000002
Packit 47f805
#define		BE_ERR_NO_MORE_HANDLES				0x00000003
Packit 47f805
#define		BE_ERR_INVALID_HANDLE				0x00000004
Packit 47f805
#define		BE_ERR_BUFFER_TOO_SMALL				0x00000005
Packit 47f805
Packit 47f805
/* other constants */
Packit 47f805
Packit 47f805
#define		BE_MAX_HOMEPAGE			128
Packit 47f805
Packit 47f805
/* format specific variables */
Packit 47f805
Packit 47f805
#define		BE_MP3_MODE_STEREO		0
Packit 47f805
#define		BE_MP3_MODE_JSTEREO		1
Packit 47f805
#define		BE_MP3_MODE_DUALCHANNEL	2
Packit 47f805
#define		BE_MP3_MODE_MONO		3
Packit 47f805
Packit 47f805
Packit 47f805
Packit 47f805
#define		MPEG1	1
Packit 47f805
#define		MPEG2	0
Packit 47f805
Packit 47f805
#ifdef _BLADEDLL
Packit 47f805
#undef FLOAT
Packit 47f805
	#include <Windows.h>
Packit 47f805
#endif
Packit 47f805
Packit 47f805
#define CURRENT_STRUCT_VERSION 1
Packit 47f805
#define CURRENT_STRUCT_SIZE sizeof(BE_CONFIG)	// is currently 331 bytes
Packit 47f805
Packit 47f805
Packit 47f805
typedef enum
Packit 47f805
{
Packit 47f805
	VBR_METHOD_NONE			= -1,
Packit 47f805
	VBR_METHOD_DEFAULT		=  0,
Packit 47f805
	VBR_METHOD_OLD			=  1,
Packit 47f805
	VBR_METHOD_NEW			=  2,
Packit 47f805
	VBR_METHOD_MTRH			=  3,
Packit 47f805
	VBR_METHOD_ABR			=  4
Packit 47f805
} VBRMETHOD;
Packit 47f805
Packit 47f805
typedef enum 
Packit 47f805
{
Packit 47f805
	LQP_NOPRESET			=-1,
Packit 47f805
Packit 47f805
	// QUALITY PRESETS
Packit 47f805
	LQP_NORMAL_QUALITY		= 0,
Packit 47f805
	LQP_LOW_QUALITY			= 1,
Packit 47f805
	LQP_HIGH_QUALITY		= 2,
Packit 47f805
	LQP_VOICE_QUALITY		= 3,
Packit 47f805
	LQP_R3MIX				= 4,
Packit 47f805
	LQP_VERYHIGH_QUALITY	= 5,
Packit 47f805
	LQP_STANDARD			= 6,
Packit 47f805
	LQP_FAST_STANDARD		= 7,
Packit 47f805
	LQP_EXTREME				= 8,
Packit 47f805
	LQP_FAST_EXTREME		= 9,
Packit 47f805
	LQP_INSANE				= 10,
Packit 47f805
	LQP_ABR					= 11,
Packit 47f805
	LQP_CBR					= 12,
Packit 47f805
	LQP_MEDIUM				= 13,
Packit 47f805
	LQP_FAST_MEDIUM			= 14,
Packit 47f805
Packit 47f805
	// NEW PRESET VALUES
Packit 47f805
	LQP_PHONE	=1000,
Packit 47f805
	LQP_SW		=2000,
Packit 47f805
	LQP_AM		=3000,
Packit 47f805
	LQP_FM		=4000,
Packit 47f805
	LQP_VOICE	=5000,
Packit 47f805
	LQP_RADIO	=6000,
Packit 47f805
	LQP_TAPE	=7000,
Packit 47f805
	LQP_HIFI	=8000,
Packit 47f805
	LQP_CD		=9000,
Packit 47f805
	LQP_STUDIO	=10000
Packit 47f805
Packit 47f805
} LAME_QUALITY_PRESET;
Packit 47f805
Packit 47f805
Packit 47f805
Packit 47f805
typedef struct	{
Packit 47f805
	DWORD	dwConfig;			// BE_CONFIG_XXXXX
Packit 47f805
								// Currently only BE_CONFIG_MP3 is supported
Packit 47f805
	union	{
Packit 47f805
Packit 47f805
		struct	{
Packit 47f805
Packit 47f805
			DWORD	dwSampleRate;		// 48000, 44100 and 32000 allowed
Packit 47f805
			BYTE	byMode;			// BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO
Packit 47f805
			WORD	wBitrate;		// 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320 allowed
Packit 47f805
			BOOL	bPrivate;		
Packit 47f805
			BOOL	bCRC;
Packit 47f805
			BOOL	bCopyright;
Packit 47f805
			BOOL	bOriginal;
Packit 47f805
Packit 47f805
			} mp3;					// BE_CONFIG_MP3
Packit 47f805
Packit 47f805
			struct
Packit 47f805
			{
Packit 47f805
			// STRUCTURE INFORMATION
Packit 47f805
			DWORD			dwStructVersion;	
Packit 47f805
			DWORD			dwStructSize;
Packit 47f805
Packit 47f805
			// BASIC ENCODER SETTINGS
Packit 47f805
			DWORD			dwSampleRate;		// SAMPLERATE OF INPUT FILE
Packit 47f805
			DWORD			dwReSampleRate;		// DOWNSAMPLERATE, 0=ENCODER DECIDES  
Packit 47f805
			LONG			nMode;				// BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO
Packit 47f805
			DWORD			dwBitrate;			// CBR bitrate, VBR min bitrate
Packit 47f805
			DWORD			dwMaxBitrate;		// CBR ignored, VBR Max bitrate
Packit 47f805
			LONG			nPreset;			// Quality preset, use one of the settings of the LAME_QUALITY_PRESET enum
Packit 47f805
			DWORD			dwMpegVersion;		// FUTURE USE, MPEG-1 OR MPEG-2
Packit 47f805
			DWORD			dwPsyModel;			// FUTURE USE, SET TO 0
Packit 47f805
			DWORD			dwEmphasis;			// FUTURE USE, SET TO 0
Packit 47f805
Packit 47f805
			// BIT STREAM SETTINGS
Packit 47f805
			BOOL			bPrivate;			// Set Private Bit (TRUE/FALSE)
Packit 47f805
			BOOL			bCRC;				// Insert CRC (TRUE/FALSE)
Packit 47f805
			BOOL			bCopyright;			// Set Copyright Bit (TRUE/FALSE)
Packit 47f805
			BOOL			bOriginal;			// Set Original Bit (TRUE/FALSE)
Packit 47f805
			
Packit 47f805
			// VBR STUFF
Packit 47f805
			BOOL			bWriteVBRHeader;	// WRITE XING VBR HEADER (TRUE/FALSE)
Packit 47f805
			BOOL			bEnableVBR;			// USE VBR ENCODING (TRUE/FALSE)
Packit 47f805
			INT				nVBRQuality;		// VBR QUALITY 0..9
Packit 47f805
			DWORD			dwVbrAbr_bps;		// Use ABR in stead of nVBRQuality
Packit 47f805
			VBRMETHOD		nVbrMethod;
Packit 47f805
			BOOL			bNoRes;				// Disable Bit resorvoir (TRUE/FALSE)
Packit 47f805
Packit 47f805
			// MISC SETTINGS
Packit 47f805
			BOOL			bStrictIso;			// Use strict ISO encoding rules (TRUE/FALSE)
Packit 47f805
			WORD			nQuality;			// Quality Setting, HIGH BYTE should be NOT LOW byte, otherwhise quality=5
Packit 47f805
Packit 47f805
			// FUTURE USE, SET TO 0, align strucutre to 331 bytes
Packit 47f805
			BYTE			btReserved[255-4*sizeof(DWORD) - sizeof( WORD )];
Packit 47f805
Packit 47f805
			} LHV1;					// LAME header version 1
Packit 47f805
Packit 47f805
		struct	{
Packit 47f805
Packit 47f805
			DWORD	dwSampleRate;
Packit 47f805
			BYTE	byMode;
Packit 47f805
			WORD	wBitrate;
Packit 47f805
			BYTE	byEncodingMethod;
Packit 47f805
Packit 47f805
		} aac;
Packit 47f805
Packit 47f805
	} format;
Packit 47f805
		
Packit 47f805
} BE_CONFIG, *PBE_CONFIG ATTRIBUTE_PACKED;
Packit 47f805
Packit 47f805
Packit 47f805
typedef struct	{
Packit 47f805
Packit 47f805
	// BladeEnc DLL Version number
Packit 47f805
Packit 47f805
	BYTE	byDLLMajorVersion;
Packit 47f805
	BYTE	byDLLMinorVersion;
Packit 47f805
Packit 47f805
	// BladeEnc Engine Version Number
Packit 47f805
Packit 47f805
	BYTE	byMajorVersion;
Packit 47f805
	BYTE	byMinorVersion;
Packit 47f805
Packit 47f805
	// DLL Release date
Packit 47f805
Packit 47f805
	BYTE	byDay;
Packit 47f805
	BYTE	byMonth;
Packit 47f805
	WORD	wYear;
Packit 47f805
Packit 47f805
	// BladeEnc	Homepage URL
Packit 47f805
Packit 47f805
	CHAR	zHomepage[BE_MAX_HOMEPAGE + 1];	
Packit 47f805
Packit 47f805
	BYTE	byAlphaLevel;
Packit 47f805
	BYTE	byBetaLevel;
Packit 47f805
	BYTE	byMMXEnabled;
Packit 47f805
Packit 47f805
	BYTE	btReserved[125];
Packit 47f805
Packit 47f805
Packit 47f805
} BE_VERSION, *PBE_VERSION ATTRIBUTE_PACKED;
Packit 47f805
Packit 47f805
#ifndef _BLADEDLL
Packit 47f805
Packit 47f805
typedef BE_ERR	(*BEINITSTREAM)			(PBE_CONFIG, PDWORD, PDWORD, PHBE_STREAM);
Packit 47f805
typedef BE_ERR	(*BEENCODECHUNK)		(HBE_STREAM, DWORD, PSHORT, PBYTE, PDWORD);
Packit 47f805
Packit 47f805
// added for floating point audio  -- DSPguru, jd
Packit 47f805
typedef BE_ERR	(*BEENCODECHUNKFLOATS16NI)	(HBE_STREAM, DWORD, PFLOAT, PFLOAT, PBYTE, PDWORD);
Packit 47f805
typedef BE_ERR	(*BEDEINITSTREAM)			(HBE_STREAM, PBYTE, PDWORD);
Packit 47f805
typedef BE_ERR	(*BECLOSESTREAM)			(HBE_STREAM);
Packit 47f805
typedef VOID	(*BEVERSION)				(PBE_VERSION);
Packit 47f805
typedef BE_ERR	(*BEWRITEVBRHEADER)			(LPCSTR);
Packit 47f805
typedef BE_ERR	(*BEWRITEINFOTAG)			(HBE_STREAM, LPCSTR );
Packit 47f805
Packit 47f805
#define	TEXT_BEINITSTREAM				"beInitStream"
Packit 47f805
#define	TEXT_BEENCODECHUNK				"beEncodeChunk"
Packit 47f805
#define	TEXT_BEENCODECHUNKFLOATS16NI	"beEncodeChunkFloatS16NI"
Packit 47f805
#define	TEXT_BEDEINITSTREAM				"beDeinitStream"
Packit 47f805
#define	TEXT_BECLOSESTREAM				"beCloseStream"
Packit 47f805
#define	TEXT_BEVERSION					"beVersion"
Packit 47f805
#define	TEXT_BEWRITEVBRHEADER			"beWriteVBRHeader"
Packit 47f805
#define	TEXT_BEFLUSHNOGAP				"beFlushNoGap"
Packit 47f805
#define	TEXT_BEWRITEINFOTAG				"beWriteInfoTag"
Packit 47f805
Packit 47f805
Packit 47f805
#else
Packit 47f805
Packit 47f805
__declspec(dllexport) BE_ERR	beInitStream(PBE_CONFIG pbeConfig, PDWORD dwSamples, PDWORD dwBufferSize, PHBE_STREAM phbeStream);
Packit 47f805
__declspec(dllexport) BE_ERR	beEncodeChunk(HBE_STREAM hbeStream, DWORD nSamples, PSHORT pSamples, PBYTE pOutput, PDWORD pdwOutput);
Packit 47f805
Packit 47f805
// added for floating point audio  -- DSPguru, jd
Packit 47f805
__declspec(dllexport) BE_ERR	beEncodeChunkFloatS16NI(HBE_STREAM hbeStream, DWORD nSamples, PFLOAT buffer_l, PFLOAT buffer_r, PBYTE pOutput, PDWORD pdwOutput);
Packit 47f805
__declspec(dllexport) BE_ERR	beDeinitStream(HBE_STREAM hbeStream, PBYTE pOutput, PDWORD pdwOutput);
Packit 47f805
__declspec(dllexport) BE_ERR	beCloseStream(HBE_STREAM hbeStream);
Packit 47f805
__declspec(dllexport) VOID	beVersion(PBE_VERSION pbeVersion);
Packit 47f805
__declspec(dllexport) BE_ERR	beWriteVBRHeader(LPCSTR lpszFileName);
Packit 47f805
__declspec(dllexport) BE_ERR	beFlushNoGap(HBE_STREAM hbeStream, PBYTE pOutput, PDWORD pdwOutput);
Packit 47f805
__declspec(dllexport) BE_ERR	beWriteInfoTag( HBE_STREAM hbeStream, LPCSTR lpszFileName );
Packit 47f805
Packit 47f805
#endif
Packit 47f805
Packit 47f805
#ifdef	__cplusplus
Packit 47f805
}
Packit 47f805
#endif
Packit 47f805
Packit 47f805
#ifndef __GNUC__
Packit 47f805
#pragma pack(pop)
Packit 47f805
#endif
Packit 47f805
Packit 47f805
#endif