1 /* 2 * Blade Type of DLL Interface for Lame encoder 3 * 4 * Copyright (c) 1999-2002 A.L. Faber 5 * Based on bladedll.h version 1.0 written by Jukka Poikolainen 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library; if not, write to the 19 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 20 * Boston, MA 02111-1307, USA. 21 */ 22 23 //#define _BLADEDLL 1 24 25 #ifndef ___BLADEDLL_H_INCLUDED___ 26 #define ___BLADEDLL_H_INCLUDED___ 27 28 #ifdef __GNUC__ 29 //#define ATTRIBUTE_PACKED __attribute__((packed)) 30 #define ATTRIBUTE_PACKED 31 #else 32 #define ATTRIBUTE_PACKED 33 #pragma pack(push) 34 #pragma pack(1) 35 #endif 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 /* encoding formats */ 42 43 #define BE_CONFIG_MP3 0 44 #define BE_CONFIG_LAME 256 45 46 /* type definitions */ 47 48 typedef unsigned long HBE_STREAM; 49 typedef HBE_STREAM *PHBE_STREAM; 50 typedef unsigned long BE_ERR; 51 52 /* error codes */ 53 54 #define BE_ERR_SUCCESSFUL 0x00000000 55 #define BE_ERR_INVALID_FORMAT 0x00000001 56 #define BE_ERR_INVALID_FORMAT_PARAMETERS 0x00000002 57 #define BE_ERR_NO_MORE_HANDLES 0x00000003 58 #define BE_ERR_INVALID_HANDLE 0x00000004 59 #define BE_ERR_BUFFER_TOO_SMALL 0x00000005 60 61 /* other constants */ 62 63 #define BE_MAX_HOMEPAGE 128 64 65 /* format specific variables */ 66 67 #define BE_MP3_MODE_STEREO 0 68 #define BE_MP3_MODE_JSTEREO 1 69 #define BE_MP3_MODE_DUALCHANNEL 2 70 #define BE_MP3_MODE_MONO 3 71 72 73 74 #define MPEG1 1 75 #define MPEG2 0 76 77 #ifdef _BLADEDLL 78 #undef FLOAT 79 #include <Windows.h> 80 #endif 81 82 #define CURRENT_STRUCT_VERSION 1 83 #define CURRENT_STRUCT_SIZE sizeof(BE_CONFIG) // is currently 331 bytes 84 85 86 typedef enum 87 { 88 VBR_METHOD_NONE = -1, 89 VBR_METHOD_DEFAULT = 0, 90 VBR_METHOD_OLD = 1, 91 VBR_METHOD_NEW = 2, 92 VBR_METHOD_MTRH = 3, 93 VBR_METHOD_ABR = 4 94 } VBRMETHOD; 95 96 typedef enum 97 { 98 LQP_NOPRESET =-1, 99 100 // QUALITY PRESETS 101 LQP_NORMAL_QUALITY = 0, 102 LQP_LOW_QUALITY = 1, 103 LQP_HIGH_QUALITY = 2, 104 LQP_VOICE_QUALITY = 3, 105 LQP_R3MIX = 4, 106 LQP_VERYHIGH_QUALITY = 5, 107 LQP_STANDARD = 6, 108 LQP_FAST_STANDARD = 7, 109 LQP_EXTREME = 8, 110 LQP_FAST_EXTREME = 9, 111 LQP_INSANE = 10, 112 LQP_ABR = 11, 113 LQP_CBR = 12, 114 LQP_MEDIUM = 13, 115 LQP_FAST_MEDIUM = 14, 116 117 // NEW PRESET VALUES 118 LQP_PHONE =1000, 119 LQP_SW =2000, 120 LQP_AM =3000, 121 LQP_FM =4000, 122 LQP_VOICE =5000, 123 LQP_RADIO =6000, 124 LQP_TAPE =7000, 125 LQP_HIFI =8000, 126 LQP_CD =9000, 127 LQP_STUDIO =10000 128 129 } LAME_QUALITY_PRESET; 130 131 132 133 typedef struct { 134 unsigned long dwConfig; // BE_CONFIG_XXXXX 135 // Currently only BE_CONFIG_MP3 is supported 136 union { 137 138 struct { 139 140 unsigned long dwSampleRate; // 48000, 44100 and 32000 allowed 141 unsigned char byMode; // BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO 142 unsigned short wBitrate; // 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320 allowed 143 int bPrivate; 144 int bCRC; 145 int bCopyright; 146 int bOriginal; 147 148 } mp3; // BE_CONFIG_MP3 149 150 struct 151 { 152 // STRUCTURE INFORMATION 153 unsigned long dwStructVersion; 154 unsigned long dwStructSize; 155 156 // BASIC ENCODER SETTINGS 157 unsigned long dwSampleRate; // SAMPLERATE OF INPUT FILE 158 unsigned long dwReSampleRate; // DOWNSAMPLERATE, 0=ENCODER DECIDES 159 long nMode; // BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO 160 unsigned long dwBitrate; // CBR bitrate, VBR min bitrate 161 unsigned long dwMaxBitrate; // CBR ignored, VBR Max bitrate 162 long nPreset; // Quality preset, use one of the settings of the LAME_QUALITY_PRESET enum 163 unsigned long dwMpegVersion; // FUTURE USE, MPEG-1 OR MPEG-2 164 unsigned long dwPsyModel; // FUTURE USE, SET TO 0 165 unsigned long dwEmphasis; // FUTURE USE, SET TO 0 166 167 // BIT STREAM SETTINGS 168 int bPrivate; // Set Private Bit (TRUE/FALSE) 169 int bCRC; // Insert CRC (TRUE/FALSE) 170 int bCopyright; // Set Copyright Bit (TRUE/FALSE) 171 int bOriginal; // Set Original Bit (TRUE/FALSE) 172 173 // VBR STUFF 174 int bWriteVBRHeader; // WRITE XING VBR HEADER (TRUE/FALSE) 175 int bEnableVBR; // USE VBR ENCODING (TRUE/FALSE) 176 int nVBRQuality; // VBR QUALITY 0..9 177 unsigned long dwVbrAbr_bps; // Use ABR in stead of nVBRQuality 178 VBRMETHOD nVbrMethod; 179 int bNoRes; // Disable Bit resorvoir (TRUE/FALSE) 180 181 // MISC SETTINGS 182 int bStrictIso; // Use strict ISO encoding rules (TRUE/FALSE) 183 unsigned short nQuality; // Quality Setting, HIGH unsigned char should be NOT LOW byte, otherwhise quality=5 184 185 // FUTURE USE, SET TO 0, align strucutre to 331 bytes 186 unsigned char btReserved[255-4*sizeof(unsigned long) - sizeof( unsigned short )]; 187 188 } LHV1; // LAME header version 1 189 190 struct { 191 192 unsigned long dwSampleRate; 193 unsigned char byMode; 194 unsigned short wBitrate; 195 unsigned char byEncodingMethod; 196 197 } aac; 198 199 } format; 200 201 } BE_CONFIG, *PBE_CONFIG ATTRIBUTE_PACKED; 202 203 204 typedef struct { 205 206 // BladeEnc DLL Version number 207 208 unsigned char byDLLMajorVersion; 209 unsigned char byDLLMinorVersion; 210 211 // BladeEnc Engine Version Number 212 213 unsigned char byMajorVersion; 214 unsigned char byMinorVersion; 215 216 // DLL Release date 217 218 unsigned char byDay; 219 unsigned char byMonth; 220 unsigned short wYear; 221 222 // BladeEnc Homepage URL 223 224 char zHomepage[BE_MAX_HOMEPAGE + 1]; 225 226 unsigned char byAlphaLevel; 227 unsigned char byBetaLevel; 228 unsigned char byMMXEnabled; 229 230 unsigned char btReserved[125]; 231 232 233 } BE_VERSION, *PBE_VERSION ATTRIBUTE_PACKED; 234 235 #ifndef _BLADEDLL 236 237 typedef unsigned long (*BEINITSTREAM) (PBE_CONFIG, unsigned long *, unsigned long *, PHBE_STREAM); 238 typedef unsigned long (*BEENCODECHUNK) (HBE_STREAM, unsigned long, short *, unsigned char *, unsigned long *); 239 240 // added for floating point audio -- DSPguru, jd 241 typedef unsigned long (*BEENCODECHUNKFLOATS16NI) (HBE_STREAM, unsigned long, float *, float *, unsigned char *, unsigned long *); 242 typedef unsigned long (*BEDEINITSTREAM) (HBE_STREAM, unsigned char *, unsigned long *); 243 typedef unsigned long (*BECLOSESTREAM) (HBE_STREAM); 244 typedef void (*BEVERSION) (PBE_VERSION); 245 typedef unsigned long (*BEWRITEVBRHEADER) (const char*); 246 typedef unsigned long (*BEWRITEINFOTAG) (HBE_STREAM, const char * ); 247 248 #define TEXT_BEINITSTREAM "beInitStream" 249 #define TEXT_BEENCODECHUNK "beEncodeChunk" 250 #define TEXT_BEENCODECHUNKFLOATS16NI "beEncodeChunkFloatS16NI" 251 #define TEXT_BEDEINITSTREAM "beDeinitStream" 252 #define TEXT_BECLOSESTREAM "beCloseStream" 253 #define TEXT_BEVERSION "beVersion" 254 #define TEXT_BEWRITEVBRHEADER "beWriteVBRHeader" 255 #define TEXT_BEFLUSHNOGAP "beFlushNoGap" 256 #define TEXT_BEWRITEINFOTAG "beWriteInfoTag" 257 258 259 #else 260 261 __declspec(dllexport) unsigned long beInitStream(PBE_CONFIG pbeConfig, Punsigned long dwSamples, Punsigned long dwBufferSize, PHBE_STREAM phbeStream); 262 __declspec(dllexport) unsigned long beEncodeChunk(HBE_STREAM hbeStream, unsigned long nSamples, PSHORT pSamples, Punsigned char pOutput, Punsigned long pdwOutput); 263 264 // added for floating point audio -- DSPguru, jd 265 __declspec(dllexport) unsigned long beEncodeChunkFloatS16NI(HBE_STREAM hbeStream, unsigned long nSamples, PFLOAT buffer_l, PFLOAT buffer_r, Punsigned char pOutput, Punsigned long pdwOutput); 266 __declspec(dllexport) unsigned long beDeinitStream(HBE_STREAM hbeStream, Punsigned char pOutput, Punsigned long pdwOutput); 267 __declspec(dllexport) unsigned long beCloseStream(HBE_STREAM hbeStream); 268 __declspec(dllexport) VOID beVersion(PBE_VERSION pbeVersion); 269 __declspec(dllexport) unsigned long beWriteVBRHeader(LPCSTR lpszFileName); 270 __declspec(dllexport) unsigned long beFlushNoGap(HBE_STREAM hbeStream, Punsigned char pOutput, Punsigned long pdwOutput); 271 __declspec(dllexport) unsigned long beWriteInfoTag( HBE_STREAM hbeStream, LPCSTR lpszFileName ); 272 273 #endif 274 275 #ifndef __GNUC__ 276 #pragma pack(pop) 277 #endif 278 279 #ifdef __cplusplus 280 } 281 #endif 282 283 #endif 284