/* * 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 #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