D-Modem/pjproject-2.11.1/third_party/mp3/BladeMP3EncDLL.h
2021-10-29 14:41:03 -04:00

283 lines
8.1 KiB
C

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