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