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