ape_reader: Properly fix the build under GCC 7.

Since we cannot '#define wchar_t char' anymore, we need to properly
fix the source code to work with char instead.
This commit is contained in:
Augustin Cavalier
2018-05-23 18:59:32 -04:00
parent ca4d9e0f9f
commit 053cc0d4fe
24 changed files with 132 additions and 146 deletions
@@ -32,7 +32,7 @@ int TPositionBridgeIO::Close()
return B_OK;
}
//------------------------------------------------------------------------------
int TPositionBridgeIO::Create(const wchar_t* oName)
int TPositionBridgeIO::Create(const char* oName)
{
return B_OK;
}
@@ -42,7 +42,7 @@ int TPositionBridgeIO::Delete()
return B_ERROR;
}
//------------------------------------------------------------------------------
int TPositionBridgeIO::GetName(wchar_t* oBuffer)
int TPositionBridgeIO::GetName(char* oBuffer)
{
strcpy(oBuffer, "<TPositionBridgeIO>");
return B_OK;
@@ -68,7 +68,7 @@ int TPositionBridgeIO::GetSize()
return aSize;
}
//------------------------------------------------------------------------------
int TPositionBridgeIO::Open(const wchar_t* oName)
int TPositionBridgeIO::Open(const char* oName)
{
return B_OK;
}
@@ -16,7 +16,7 @@ public:
TPositionBridgeIO();
virtual ~TPositionBridgeIO();
virtual int Open(const wchar_t* oName);
virtual int Open(const char* oName);
virtual int Close();
virtual int Read(void* oBuf, unsigned int oBytesToRead, unsigned int* oBytesRead);
@@ -24,14 +24,14 @@ public:
virtual int Seek(int oDistance, unsigned int oMoveMode);
virtual int Create(const wchar_t* oName);
virtual int Create(const char* oName);
virtual int Delete();
virtual int SetEOF();
virtual int GetPosition();
virtual int GetSize();
virtual int GetName(wchar_t* oBuffer);
virtual int GetName(char* oBuffer);
status_t SetPositionIO(BPositionIO* oPositionIO);
@@ -28,19 +28,19 @@ CAPECompress::~CAPECompress()
}
}
int CAPECompress::Start(const wchar_t * pOutputFilename, const WAVEFORMATEX * pwfeInput, int nMaxAudioBytes, int nCompressionLevel, const void * pHeaderData, int nHeaderBytes)
int CAPECompress::Start(const char* pOutputFilename, const WAVEFORMATEX * pwfeInput, int nMaxAudioBytes, int nCompressionLevel, const void * pHeaderData, int nHeaderBytes)
{
m_pioOutput = new IO_CLASS_NAME;
m_bOwnsOutputIO = TRUE;
if (m_pioOutput->Create(pOutputFilename) != 0)
{
return ERROR_INVALID_OUTPUT_FILE;
}
m_spAPECompressCreate->Start(m_pioOutput, pwfeInput, nMaxAudioBytes, nCompressionLevel,
pHeaderData, nHeaderBytes);
SAFE_ARRAY_DELETE(m_pBuffer)
m_nBufferSize = m_spAPECompressCreate->GetFullFrameBytes();
m_pBuffer = new unsigned char [m_nBufferSize];
@@ -74,31 +74,31 @@ int CAPECompress::UnlockBuffer(int nBytesAdded, BOOL bProcess)
{
if (m_bBufferLocked == FALSE)
return ERROR_UNDEFINED;
m_nBufferTail += nBytesAdded;
m_bBufferLocked = FALSE;
if (bProcess)
{
int nRetVal = ProcessBuffer();
if (nRetVal != 0) { return nRetVal; }
}
return ERROR_SUCCESS;
}
unsigned char * CAPECompress::LockBuffer(int * pBytesAvailable)
{
if (m_pBuffer == NULL) { return NULL; }
if (m_bBufferLocked)
return NULL;
m_bBufferLocked = TRUE;
if (pBytesAvailable)
*pBytesAvailable = GetBufferBytesAvailable();
return &m_pBuffer[m_nBufferTail];
}
@@ -107,7 +107,7 @@ int CAPECompress::AddData(unsigned char * pData, int nBytes)
if (m_pBuffer == NULL) return ERROR_INSUFFICIENT_MEMORY;
int nBytesDone = 0;
while (nBytesDone < nBytes)
{
// lock the buffer
@@ -115,11 +115,11 @@ int CAPECompress::AddData(unsigned char * pData, int nBytes)
unsigned char * pBuffer = LockBuffer(&nBytesAvailable);
if (pBuffer == NULL || nBytesAvailable <= 0)
return ERROR_UNDEFINED;
// calculate how many bytes to copy and add that much to the buffer
int nBytesToProcess = min(nBytesAvailable, nBytes - nBytesDone);
memcpy(pBuffer, &pData[nBytesDone], nBytesToProcess);
// unlock the buffer (fail if not successful)
int nRetVal = UnlockBuffer(nBytesToProcess);
if (nRetVal != ERROR_SUCCESS)
@@ -130,7 +130,7 @@ int CAPECompress::AddData(unsigned char * pData, int nBytes)
}
return ERROR_SUCCESS;
}
}
int CAPECompress::Finish(unsigned char * pTerminatingData, int nTerminatingBytes, int nWAVTerminatingBytes)
{
@@ -146,33 +146,33 @@ int CAPECompress::Kill()
int CAPECompress::ProcessBuffer(BOOL bFinalize)
{
if (m_pBuffer == NULL) { return ERROR_UNDEFINED; }
try
{
// process as much as possible
int nThreshold = (bFinalize) ? 0 : m_spAPECompressCreate->GetFullFrameBytes();
while ((m_nBufferTail - m_nBufferHead) >= nThreshold)
{
int nFrameBytes = min(m_spAPECompressCreate->GetFullFrameBytes(), m_nBufferTail - m_nBufferHead);
if (nFrameBytes == 0)
break;
int nRetVal = m_spAPECompressCreate->EncodeFrame(&m_pBuffer[m_nBufferHead], nFrameBytes);
if (nRetVal != 0) { return nRetVal; }
m_nBufferHead += nFrameBytes;
}
// shift the buffer
if (m_nBufferHead != 0)
{
int nBytesLeft = m_nBufferTail - m_nBufferHead;
if (nBytesLeft != 0)
memmove(m_pBuffer, &m_pBuffer[m_nBufferHead], nBytesLeft);
m_nBufferTail -= m_nBufferHead;
m_nBufferHead = 0;
}
@@ -181,7 +181,7 @@ int CAPECompress::ProcessBuffer(BOOL bFinalize)
{
return ERROR_UNDEFINED;
}
return ERROR_SUCCESS;
}
@@ -192,13 +192,13 @@ int CAPECompress::AddDataFromInputSource(CInputSource * pInputSource, int nMaxBy
// initialize
if (pBytesAdded) *pBytesAdded = 0;
// lock the buffer
int nBytesAvailable = 0;
unsigned char * pBuffer = LockBuffer(&nBytesAvailable);
if ((pBuffer == NULL) || (nBytesAvailable == 0))
return ERROR_INSUFFICIENT_MEMORY;
// calculate the 'ideal' number of bytes
unsigned int nBytesRead = 0;
@@ -207,7 +207,7 @@ int CAPECompress::AddDataFromInputSource(CInputSource * pInputSource, int nMaxBy
{
// get the data
int nBytesToAdd = nBytesAvailable;
if (nMaxBytes > 0)
{
if (nBytesToAdd > nMaxBytes) nBytesToAdd = nMaxBytes;
@@ -228,19 +228,19 @@ int CAPECompress::AddDataFromInputSource(CInputSource * pInputSource, int nMaxBy
return ERROR_IO_READ;
else
nBytesRead = (nBlocksAdded * m_wfeInput.nBlockAlign);
// store the bytes read
if (pBytesAdded)
*pBytesAdded = nBytesRead;
}
// unlock the data and process
int nRetVal = UnlockBuffer(nBytesRead, TRUE);
if (nRetVal != 0)
{
return nRetVal;
}
return ERROR_SUCCESS;
}
@@ -15,30 +15,30 @@ public:
~CAPECompress();
// start encoding
int Start(const wchar_t * pOutputFilename, const WAVEFORMATEX * pwfeInput, int nMaxAudioBytes, int nCompressionLevel = COMPRESSION_LEVEL_NORMAL, const void * pHeaderData = NULL, int nHeaderBytes = CREATE_WAV_HEADER_ON_DECOMPRESSION);
int Start(const char* pOutputFilename, const WAVEFORMATEX * pwfeInput, int nMaxAudioBytes, int nCompressionLevel = COMPRESSION_LEVEL_NORMAL, const void * pHeaderData = NULL, int nHeaderBytes = CREATE_WAV_HEADER_ON_DECOMPRESSION);
int StartEx(CIO * pioOutput, const WAVEFORMATEX * pwfeInput, int nMaxAudioBytes, int nCompressionLevel = COMPRESSION_LEVEL_NORMAL, const void * pHeaderData = NULL, int nHeaderBytes = CREATE_WAV_HEADER_ON_DECOMPRESSION);
// add data / compress data
// allows linear, immediate access to the buffer (fast)
int GetBufferBytesAvailable();
int UnlockBuffer(int nBytesAdded, BOOL bProcess = TRUE);
unsigned char * LockBuffer(int * pBytesAvailable);
// slower, but easier than locking and unlocking (copies data)
int AddData(unsigned char * pData, int nBytes);
// use a CIO (input source) to add data
int AddDataFromInputSource(CInputSource * pInputSource, int nMaxBytes = -1, int * pBytesAdded = NULL);
// finish / kill
int Finish(unsigned char * pTerminatingData, int nTerminatingBytes, int nWAVTerminatingBytes);
int Kill();
private:
int ProcessBuffer(BOOL bFinalize = FALSE);
CSmartPtr<CAPECompressCreate> m_spAPECompressCreate;
int m_nBufferHead;
@@ -9,11 +9,6 @@
#define DECODE_BLOCK_SIZE 4096
#if __GNUC__ != 2
using std::min;
using std::max;
#endif
CAPEDecompress::CAPEDecompress(int * pErrorCode, CAPEInfo * pAPEInfo, int nStartBlock, int nFinishBlock)
{
*pErrorCode = ERROR_SUCCESS;
@@ -11,7 +11,7 @@ CAPEInfo:
/*****************************************************************************************
Construction
*****************************************************************************************/
CAPEInfo::CAPEInfo(int * pErrorCode, const wchar_t * pFilename, CAPETag * pTag)
CAPEInfo::CAPEInfo(int * pErrorCode, const char* pFilename, CAPETag * pTag)
{
*pErrorCode = ERROR_SUCCESS;
CloseFile();
@@ -77,7 +77,7 @@ class CAPEInfo
public:
// construction and destruction
CAPEInfo(int * pErrorCode, const wchar_t * pFilename, CAPETag * pTag = NULL);
CAPEInfo(int * pErrorCode, const char* pFilename, CAPETag * pTag = NULL);
CAPEInfo(int * pErrorCode, CIO * pIO, CAPETag * pTag = NULL);
virtual ~CAPEInfo();
@@ -15,7 +15,7 @@ public:
BOOL GetIsLinkFile();
int GetStartBlock();
int GetFinishBlock();
const wchar_t * GetImageFilename();
const char* GetImageFilename();
protected:
@@ -17,11 +17,6 @@
#define BLOCKS_PER_DECODE 9216
#if __GNUC__ != 2
using std::min;
using std::max;
#endif
int DecompressCore(const str_utf16 * pInputFilename, const str_utf16 * pOutputFilename, int nOutputMode, int nCompressionLevel, int * pPercentageDone, APE_PROGRESS_CALLBACK ProgressCallback, int * pKillFlag);
/*****************************************************************************************
@@ -7,11 +7,6 @@
#include "IO.h"
#include IO_HEADER_FILE
#if __GNUC__ != 2
using std::min;
using std::max;
#endif
/*****************************************************************************************
CAPETagField
*****************************************************************************************/
@@ -42,6 +42,12 @@ Global includes
#include <string.h>
#include "SmartPtr.h"
#if __GNUC__ != 2
#include <algorithm>
using std::min;
using std::max;
#endif
/*****************************************************************************************
Global compiler settings (useful for porting)
*****************************************************************************************/
@@ -46,7 +46,7 @@ CBitArray::CBitArray(CIO *pIO)
// allocate memory for the bit array
m_pBitArray = new uint32 [BIT_ARRAY_ELEMENTS];
memset(m_pBitArray, 0, BIT_ARRAY_BYTES);
// initialize other variables
m_nCurrentBitIndex = 0;
m_pIO = pIO;
@@ -73,7 +73,7 @@ int CBitArray::OutputBitArray(BOOL bFinalize)
unsigned int nBytesWritten = 0;
unsigned int nBytesToWrite = 0;
// unsigned int nRetVal = 0;
if (bFinalize)
{
nBytesToWrite = ((m_nCurrentBitIndex >> 5) * 4) + 4;
@@ -83,7 +83,7 @@ int CBitArray::OutputBitArray(BOOL bFinalize)
RETURN_ON_ERROR(m_pIO->Write(m_pBitArray, nBytesToWrite, &nBytesWritten))
// reset the bit pointer
m_nCurrentBitIndex = 0;
m_nCurrentBitIndex = 0;
}
else
{
@@ -92,15 +92,15 @@ int CBitArray::OutputBitArray(BOOL bFinalize)
m_MD5.AddData(m_pBitArray, nBytesToWrite);
RETURN_ON_ERROR(m_pIO->Write(m_pBitArray, nBytesToWrite, &nBytesWritten))
// move the last value to the front of the bit array
m_pBitArray[0] = m_pBitArray[m_nCurrentBitIndex >> 5];
m_nCurrentBitIndex = (m_nCurrentBitIndex & 31);
// zero the rest of the memory (may not need the +1 because of frame byte alignment)
memset(&m_pBitArray[1], 0, min(nBytesToWrite + 1, BIT_ARRAY_BYTES - 1));
memset(&m_pBitArray[1], 0, min((int)nBytesToWrite + 1, BIT_ARRAY_BYTES - 1));
}
// return a success
return ERROR_SUCCESS;
}
@@ -134,13 +134,13 @@ Range coding macros -- ugly, but outperform inline's (every cycle counts here)
\
m_RangeCoderInfo.low = (m_RangeCoderInfo.low << 8) & (TOP_VALUE - 1); \
m_RangeCoderInfo.range <<= 8; \
}
}
#define ENCODE_FAST(RANGE_WIDTH, RANGE_TOTAL, SHIFT) \
NORMALIZE_RANGE_CODER \
const int nTemp = m_RangeCoderInfo.range >> (SHIFT); \
m_RangeCoderInfo.range = nTemp * (RANGE_WIDTH); \
m_RangeCoderInfo.low += nTemp * (RANGE_TOTAL);
m_RangeCoderInfo.low += nTemp * (RANGE_TOTAL);
#define ENCODE_DIRECT(VALUE, SHIFT) \
NORMALIZE_RANGE_CODER \
@@ -158,7 +158,7 @@ int CBitArray::EncodeBits(unsigned int nValue, int nBits)
{
RETURN_ON_ERROR(OutputBitArray())
}
ENCODE_DIRECT(nValue, nBits);
return 0;
}
@@ -166,7 +166,7 @@ int CBitArray::EncodeBits(unsigned int nValue, int nBits)
/************************************************************************************
Encodes an unsigned int to the bit array (no rice coding)
************************************************************************************/
int CBitArray::EncodeUnsignedLong(unsigned int n)
int CBitArray::EncodeUnsignedLong(unsigned int n)
{
// make sure there are at least 8 bytes in the buffer
if (m_nCurrentBitIndex > (BIT_ARRAY_BYTES - 8))
@@ -177,16 +177,16 @@ int CBitArray::EncodeUnsignedLong(unsigned int n)
// encode the value
uint32 nBitArrayIndex = m_nCurrentBitIndex >> 5;
int nBitIndex = m_nCurrentBitIndex & 31;
if (nBitIndex == 0)
{
m_pBitArray[nBitArrayIndex] = n;
}
else
else
{
m_pBitArray[nBitArrayIndex] |= n >> nBitIndex;
m_pBitArray[nBitArrayIndex + 1] = n << (32 - nBitIndex);
}
}
m_nCurrentBitIndex += 32;
@@ -196,7 +196,7 @@ int CBitArray::EncodeUnsignedLong(unsigned int n)
/************************************************************************************
Advance to a byte boundary (for frame alignment)
************************************************************************************/
void CBitArray::AdvanceToByteBoundary()
void CBitArray::AdvanceToByteBoundary()
{
while (m_nCurrentBitIndex % 8)
m_nCurrentBitIndex++;
@@ -213,22 +213,22 @@ int CBitArray::EncodeValue(int nEncode, BIT_ARRAY_STATE & BitArrayState)
{
RETURN_ON_ERROR(OutputBitArray())
}
// convert to unsigned
nEncode = (nEncode > 0) ? nEncode * 2 - 1 : -nEncode * 2;
int nOriginalKSum = BitArrayState.nKSum;
// get the working k
// int nTempK = (BitArrayState.k) ? BitArrayState.k - 1 : 0;
// update nKSum
BitArrayState.nKSum += ((nEncode + 1) / 2) - ((BitArrayState.nKSum + 16) >> 5);
// update k
if (BitArrayState.nKSum < K_SUM_MIN_BOUNDARY[BitArrayState.k])
if (BitArrayState.nKSum < K_SUM_MIN_BOUNDARY[BitArrayState.k])
BitArrayState.k--;
else if (BitArrayState.nKSum >= K_SUM_MIN_BOUNDARY[BitArrayState.k + 1])
else if (BitArrayState.nKSum >= K_SUM_MIN_BOUNDARY[BitArrayState.k + 1])
BitArrayState.k++;
// figure the pivot value
@@ -324,7 +324,7 @@ void CBitArray::FlushBitArray()
m_RangeCoderInfo.help = 0; // no bytes to follow
}
void CBitArray::FlushState(BIT_ARRAY_STATE & BitArrayState)
void CBitArray::FlushState(BIT_ARRAY_STATE & BitArrayState)
{
// k and ksum
BitArrayState.k = 10;
@@ -347,7 +347,7 @@ void CBitArray::Finalize()
{
PUTC(0);
}
}
}
else // no carry
{
PUTC(m_RangeCoderInfo.buffer);
@@ -371,9 +371,9 @@ Build a range table (for development / debugging)
void CBitArray::OutputRangeTable()
{
int z;
if (g_nTotalOverflow == 0) return;
int nTotal = 0;
int aryWidth[256]; ZeroMemory(aryWidth, 256 * 4);
for (z = 0; z < MODEL_ELEMENTS; z++)
@@ -19,7 +19,7 @@ CCircleBuffer::~CCircleBuffer()
void CCircleBuffer::CreateBuffer(int nBytes, int nMaxDirectWriteBytes)
{
SAFE_ARRAY_DELETE(m_pBuffer)
m_nMaxDirectWriteBytes = nMaxDirectWriteBytes;
m_nTotal = nBytes + 1 + nMaxDirectWriteBytes;
m_pBuffer = new unsigned char [m_nTotal];
@@ -72,7 +72,7 @@ int WriteSafe(CIO * pIO, void * pBuffer, int nBytes)
return nRetVal;
}
BOOL FileExists(wchar_t * pFilename)
BOOL FileExists(char* pFilename)
{
if (0 == wcscmp(pFilename, "-") || 0 == wcscmp(pFilename, "/dev/stdin"))
return TRUE;
@@ -16,6 +16,6 @@ int WriteSafe(CIO * pIO, void * pBuffer, int nBytes);
/*************************************************************************************
Checks for the existence of a file
*************************************************************************************/
BOOL FileExists(wchar_t * pFilename);
BOOL FileExists(char* pFilename);
#endif // #ifndef APE_GLOBALFUNCTIONS_H
@@ -23,7 +23,7 @@ public:
virtual ~CIO() { };
// open / close
virtual int Open(const wchar_t * pName) = 0;
virtual int Open(const char* pName) = 0;
virtual int Close() = 0;
// read / write
@@ -34,7 +34,7 @@ public:
virtual int Seek(int nDistance, unsigned int nMoveMode) = 0;
// creation / destruction
virtual int Create(const wchar_t * pName) = 0;
virtual int Create(const char* pName) = 0;
virtual int Delete() = 0;
// other functions
@@ -43,7 +43,7 @@ public:
// attributes
virtual int GetPosition() = 0;
virtual int GetSize() = 0;
virtual int GetName(wchar_t * pBuffer) = 0;
virtual int GetName(char* pBuffer) = 0;
};
#endif // #ifndef APE_IO_H
@@ -144,7 +144,7 @@ int __stdcall FillWaveHeader(WAVE_HEADER * pWAVHeader, int nAudioBytes, WAVEFORM
// format header
memcpy(pWAVHeader->cDataTypeID, "WAVE", 4);
memcpy(pWAVHeader->cFormatHeader, "fmt ", 4);
// the format chunk is the first 16 bytes of a waveformatex
pWAVHeader->nFormatBytes = 16;
memcpy(&pWAVHeader->nFormatTag, pWaveFormatEx, 16);
@@ -11,10 +11,10 @@ There are two main interfaces... create one (using CreateIAPExxx) and go to town
Note(s):
Unless otherwise specified, functions return ERROR_SUCCESS (0) on success and an
Unless otherwise specified, functions return ERROR_SUCCESS (0) on success and an
error code on failure.
The terminology "Sample" refers to a single sample value, and "Block" refers
The terminology "Sample" refers to a single sample value, and "Block" refers
to a collection of "Channel" samples. For simplicity, MAC typically uses blocks
everywhere so that channel mis-alignment cannot happen. (i.e. on a CD, a sample is
2 bytes and a block is 4 bytes ([2 bytes per sample] * [2 channels] = 4 bytes))
@@ -50,7 +50,7 @@ Notes:
Seek Table:
A 32-bit unsigned integer array of offsets from the header to the frame data. May become "delta"
A 32-bit unsigned integer array of offsets from the header to the frame data. May become "delta"
values someday to better suit huge files.
MD5 Hash:
@@ -58,7 +58,7 @@ Notes:
Since the header is the last part written to an APE file, you must calculate the MD5 checksum out of order.
So, you first calculate from the tail of the seek table to the end of the terminating data.
Then, go back and do from the end of the descriptor to the tail of the seek table.
You may wish to just cache the header data when starting and run it last, so you don't
You may wish to just cache the header data when starting and run it last, so you don't
need to seek back in the I/O.
*************************************************************************************************/
@@ -108,7 +108,7 @@ struct WAVE_HEADER
unsigned int nAvgBytesPerSec;
unsigned short nBlockAlign;
unsigned short nBitsPerSample;
// data chunk header
char cDataHeader[4];
unsigned int nDataBytes;
@@ -164,7 +164,7 @@ Note(s):
-the distinction between APE_INFO_XXXX and APE_DECOMPRESS_XXXX is that the first is querying the APE
information engine, and the other is querying the decompressor, and since the decompressor can be
a range of an APE file (for APL), differences will arise. Typically, use the APE_DECOMPRESS_XXXX
fields when querying for info about the length, etc. so APL will work properly.
fields when querying for info about the length, etc. so APL will work properly.
(i.e. (APE_INFO_TOTAL_BLOCKS != APE_DECOMPRESS_TOTAL_BLOCKS) for APL files)
*************************************************************************************************/
enum APE_DECOMPRESS_FIELDS
@@ -200,7 +200,7 @@ enum APE_DECOMPRESS_FIELDS
APE_INFO_FRAME_BYTES = 1028, // bytes (compressed) of the frame [frame index, ignored]
APE_INFO_FRAME_BLOCKS = 1029, // blocks in a given frame [frame index, ignored]
APE_INFO_TAG = 1030, // point to tag (CAPETag *) [ignored, ignored]
APE_DECOMPRESS_CURRENT_BLOCK = 2000, // current block location [ignored, ignored]
APE_DECOMPRESS_CURRENT_MS = 2001, // current millisecond location [ignored, ignored]
APE_DECOMPRESS_TOTAL_BLOCKS = 2002, // total blocks in the decompressors range [ignored, ignored]
@@ -220,14 +220,14 @@ public:
// destructor (needed so implementation's destructor will be called)
virtual ~IAPEDecompress() {}
/*********************************************************************************************
* Decompress / Seek
*********************************************************************************************/
//////////////////////////////////////////////////////////////////////////////////////////////
// GetData(...) - gets raw decompressed audio
//
//
// Parameters:
// char * pBuffer
// a pointer to a buffer to put the data into
@@ -240,7 +240,7 @@ public:
//////////////////////////////////////////////////////////////////////////////////////////////
// Seek(...) - seeks
//
//
// Parameters:
// int nBlockOffset
// the block to seek to (see note at intro about blocks vs. samples)
@@ -253,7 +253,7 @@ public:
//////////////////////////////////////////////////////////////////////////////////////////////
// GetInfo(...) - get information about the APE file or the state of the decompressor
//
//
// Parameters:
// APE_DECOMPRESS_FIELDS Field
// the field we're querying (see APE_DECOMPRESS_FIELDS above for more info)
@@ -278,14 +278,14 @@ public:
// destructor (needed so implementation's destructor will be called)
virtual ~IAPECompress() {}
/*********************************************************************************************
* Start
*********************************************************************************************/
//////////////////////////////////////////////////////////////////////////////////////////////
// Start(...) / StartEx(...) - starts encoding
//
//
// Parameters:
// CIO * pioOutput / const str_utf16 * pFilename
// the output... either a filename or an I/O source
@@ -309,14 +309,14 @@ public:
// on decompression)
//////////////////////////////////////////////////////////////////////////////////////////////
virtual int Start(const str_utf16 * pOutputFilename, const WAVEFORMATEX * pwfeInput,
int nMaxAudioBytes = MAX_AUDIO_BYTES_UNKNOWN, int nCompressionLevel = COMPRESSION_LEVEL_NORMAL,
virtual int Start(const str_utf16 * pOutputFilename, const WAVEFORMATEX * pwfeInput,
int nMaxAudioBytes = MAX_AUDIO_BYTES_UNKNOWN, int nCompressionLevel = COMPRESSION_LEVEL_NORMAL,
const void * pHeaderData = NULL, int nHeaderBytes = CREATE_WAV_HEADER_ON_DECOMPRESSION) = 0;
virtual int StartEx(CIO * pioOutput, const WAVEFORMATEX * pwfeInput,
int nMaxAudioBytes = MAX_AUDIO_BYTES_UNKNOWN, int nCompressionLevel = COMPRESSION_LEVEL_NORMAL,
virtual int StartEx(CIO * pioOutput, const WAVEFORMATEX * pwfeInput,
int nMaxAudioBytes = MAX_AUDIO_BYTES_UNKNOWN, int nCompressionLevel = COMPRESSION_LEVEL_NORMAL,
const void * pHeaderData = NULL, int nHeaderBytes = CREATE_WAV_HEADER_ON_DECOMPRESSION) = 0;
/*********************************************************************************************
* Add / Compress Data
* - there are 3 ways to add data:
@@ -327,7 +327,7 @@ public:
//////////////////////////////////////////////////////////////////////////////////////////////
// AddData(...) - adds data to the encoder
//
//
// Parameters:
// unsigned char * pData
// a pointer to a buffer containing the raw audio data
@@ -335,7 +335,7 @@ public:
// the number of bytes in the buffer
//////////////////////////////////////////////////////////////////////////////////////////////
virtual int AddData(unsigned char * pData, int nBytes) = 0;
//////////////////////////////////////////////////////////////////////////////////////////////
// GetBufferBytesAvailable(...) - returns the number of bytes available in the buffer
// (helpful when locking)
@@ -344,7 +344,7 @@ public:
//////////////////////////////////////////////////////////////////////////////////////////////
// LockBuffer(...) - locks MAC's buffer so we can copy into it
//
//
// Parameters:
// int * pBytesAvailable
// returns the number of bytes available in the buffer (DO NOT COPY MORE THAN THIS IN)
@@ -356,7 +356,7 @@ public:
//////////////////////////////////////////////////////////////////////////////////////////////
// UnlockBuffer(...) - releases the buffer
//
//
// Parameters:
// int nBytesAdded
// the number of bytes copied into the buffer
@@ -364,7 +364,7 @@ public:
// whether MAC should process as much as possible of the buffer
//////////////////////////////////////////////////////////////////////////////////////////////
virtual int UnlockBuffer(int nBytesAdded, BOOL bProcess = TRUE) = 0;
//////////////////////////////////////////////////////////////////////////////////////////////
// AddDataFromInputSource(...) - use a CInputSource (input source) to add data
@@ -378,14 +378,14 @@ public:
// returns the number of bytes added from the I/O source
//////////////////////////////////////////////////////////////////////////////////////////////
virtual int AddDataFromInputSource(CInputSource * pInputSource, int nMaxBytes = -1, int * pBytesAdded = NULL) = 0;
/*********************************************************************************************
* Finish / Kill
*********************************************************************************************/
//////////////////////////////////////////////////////////////////////////////////////////////
// Finish(...) - ends encoding and finalizes the file
//
//
// Parameters:
// unsigned char * pTerminatingData
// a pointer to a buffer containing the information to place at the end of the APE file
@@ -438,12 +438,12 @@ extern "C"
DLLEXPORT int __stdcall CompressFile(const str_ansi * pInputFilename, const str_ansi * pOutputFilename, int nCompressionLevel = COMPRESSION_LEVEL_NORMAL, int * pPercentageDone = NULL, APE_PROGRESS_CALLBACK ProgressCallback = 0, int * pKillFlag = NULL);
DLLEXPORT int __stdcall DecompressFile(const str_ansi * pInputFilename, const str_ansi * pOutputFilename, int * pPercentageDone, APE_PROGRESS_CALLBACK ProgressCallback, int * pKillFlag);
DLLEXPORT int __stdcall ConvertFile(const str_ansi * pInputFilename, const str_ansi * pOutputFilename, int nCompressionLevel, int * pPercentageDone, APE_PROGRESS_CALLBACK ProgressCallback, int * pKillFlag);
DLLEXPORT int __stdcall VerifyFile(const str_ansi * pInputFilename, int * pPercentageDone, APE_PROGRESS_CALLBACK ProgressCallback, int * pKillFlag, BOOL bQuickVerifyIfPossible);
DLLEXPORT int __stdcall VerifyFile(const str_ansi * pInputFilename, int * pPercentageDone, APE_PROGRESS_CALLBACK ProgressCallback, int * pKillFlag, BOOL bQuickVerifyIfPossible);
DLLEXPORT int __stdcall CompressFileW(const str_utf16 * pInputFilename, const str_utf16 * pOutputFilename, int nCompressionLevel = COMPRESSION_LEVEL_NORMAL, int * pPercentageDone = NULL, APE_PROGRESS_CALLBACK ProgressCallback = 0, int * pKillFlag = NULL);
DLLEXPORT int __stdcall DecompressFileW(const str_utf16 * pInputFilename, const str_utf16 * pOutputFilename, int * pPercentageDone, APE_PROGRESS_CALLBACK ProgressCallback, int * pKillFlag);
DLLEXPORT int __stdcall ConvertFileW(const str_utf16 * pInputFilename, const str_utf16 * pOutputFilename, int nCompressionLevel, int * pPercentageDone, APE_PROGRESS_CALLBACK ProgressCallback, int * pKillFlag);
DLLEXPORT int __stdcall VerifyFileW(const str_utf16 * pInputFilename, int * pPercentageDone, APE_PROGRESS_CALLBACK ProgressCallback, int * pKillFlag, BOOL bQuickVerifyIfPossible = FALSE);
DLLEXPORT int __stdcall VerifyFileW(const str_utf16 * pInputFilename, int * pPercentageDone, APE_PROGRESS_CALLBACK ProgressCallback, int * pKillFlag, BOOL bQuickVerifyIfPossible = FALSE);
// helper functions
DLLEXPORT int __stdcall FillWaveFormatEx(WAVEFORMATEX * pWaveFormatEx, int nSampleRate = 44100, int nBitsPerSample = 16, int nChannels = 2);
@@ -19,7 +19,7 @@
//typedef char int8;
typedef char str_ansi;
typedef unsigned char str_utf8;
typedef wchar_t str_utf16;
typedef char str_utf16;
typedef unsigned long DWORD;
typedef int BOOL;
@@ -31,8 +31,8 @@ typedef unsigned int UINT;
typedef unsigned int WPARAM;
typedef long LPARAM;
typedef const char * LPCSTR;
typedef const wchar_t * LPCTSTR; // ?? SHINTA
typedef const wchar_t * LPCWSTR; // ?? SHINTA
typedef const char* LPCTSTR; // ?? SHINTA
typedef const char* LPCWSTR; // ?? SHINTA
typedef char * LPSTR;
typedef long LRESULT;
typedef unsigned char UCHAR;
@@ -218,7 +218,7 @@ int CStdLibFileIO::GetName(char * pBuffer)
return 0;
}
int CStdLibFileIO::Create(const wchar_t * pName)
int CStdLibFileIO::Create(const char* pName)
{
Close();
@@ -29,13 +29,13 @@ public:
int SetEOF();
// creation / destruction
int Create(const wchar_t * pName);
int Create(const char* pName);
int Delete();
// attributes
int GetPosition();
int GetSize();
int GetName(wchar_t * pBuffer);
int GetName(char* pBuffer);
int GetHandle();
private:
@@ -23,7 +23,7 @@ const uint32 RANGE_TOTAL_1[65] = {0u,14824u,28224u,39348u,47855u,53994u,58171u,
65509u,65510u,65511u,65512u,65513u,65514u,65515u,65516u,65517u,65518u,
65519u,65520u,65521u,65522u,65523u,65524u,65525u,65526u,65527u,65528u,
65529u,65530u,65531u,65532u,65533u,65534u,65535u,65536u};
const uint32 RANGE_WIDTH_1[64] = {14824u,13400u,11124u,8507u,6139u,4177u,2755u,
1756u,1104u,677u,415u,248u,150u,89u,54u,31u,19u,11u,7u,4u,2u,1u,1u,1u,1u,1u,
1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,1u,
@@ -54,11 +54,6 @@ const uint32 RANGE_WIDTH_2[64] = {19578u,16582u,12257u,7906u,4576u,2366u,1170u,
#define MODEL_ELEMENTS 64
#if __GNUC__ != 2
using std::min;
using std::max;
#endif
CUnBitArray::CUnBitArray(CIO * pIO, int nVersion)
{
@@ -112,7 +107,7 @@ CUnBitArray::RangeDecodeFast(int nShift)
{
while (m_RangeCoderInfo.range <= BOTTOM_VALUE) {
m_RangeCoderInfo.buffer = (m_RangeCoderInfo.buffer << 8)
| ((m_pBitArray[m_nCurrentBitIndex >> 5]
| ((m_pBitArray[m_nCurrentBitIndex >> 5]
>> (24 - (m_nCurrentBitIndex & 31))) & 0xFF);
m_nCurrentBitIndex += 8;
m_RangeCoderInfo.low = (m_RangeCoderInfo.low << 8)
@@ -172,9 +167,9 @@ CUnBitArray::DecodeValueRange(UNBIT_ARRAY_STATE & BitArrayState)
nOverflow++;
// update
m_RangeCoderInfo.low -= m_RangeCoderInfo.range
m_RangeCoderInfo.low -= m_RangeCoderInfo.range
* RANGE_TOTAL_2[nOverflow];
m_RangeCoderInfo.range = m_RangeCoderInfo.range
m_RangeCoderInfo.range = m_RangeCoderInfo.range
* RANGE_WIDTH_2[nOverflow];
// get the working k
@@ -191,14 +186,14 @@ CUnBitArray::DecodeValueRange(UNBIT_ARRAY_STATE & BitArrayState)
int nPivotValueBits = 0;
while ((nPivotValue >> nPivotValueBits) > 0)
nPivotValueBits++;
int nSplitFactor = 1 << (nPivotValueBits - 16);
int nPivotValueA = (nPivotValue / nSplitFactor) + 1;
int nPivotValueB = nSplitFactor;
while (m_RangeCoderInfo.range <= BOTTOM_VALUE) {
m_RangeCoderInfo.buffer = (m_RangeCoderInfo.buffer << 8)
| ((m_pBitArray[m_nCurrentBitIndex >> 5]
| ((m_pBitArray[m_nCurrentBitIndex >> 5]
>> (24 - (m_nCurrentBitIndex & 31))) & 0xFF);
m_nCurrentBitIndex += 8;
m_RangeCoderInfo.low = (m_RangeCoderInfo.low << 8)
@@ -211,7 +206,7 @@ CUnBitArray::DecodeValueRange(UNBIT_ARRAY_STATE & BitArrayState)
while (m_RangeCoderInfo.range <= BOTTOM_VALUE) {
m_RangeCoderInfo.buffer = (m_RangeCoderInfo.buffer << 8)
| ((m_pBitArray[m_nCurrentBitIndex >> 5]
| ((m_pBitArray[m_nCurrentBitIndex >> 5]
>> (24 - (m_nCurrentBitIndex & 31))) & 0xFF);
m_nCurrentBitIndex += 8;
m_RangeCoderInfo.low = (m_RangeCoderInfo.low << 8)
@@ -281,7 +276,7 @@ CUnBitArray::DecodeValueRange(UNBIT_ARRAY_STATE & BitArrayState)
}
// update nKSum
BitArrayState.nKSum += ((nValue + 1) / 2)
BitArrayState.nKSum += ((nValue + 1) / 2)
- ((BitArrayState.nKSum + 16) >> 5);
// update k
@@ -32,7 +32,7 @@ struct RIFF_CHUNK_HEADER
};
CInputSource * __stdcall CreateInputSource(const wchar_t * pSourceName, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode)
CInputSource * __stdcall CreateInputSource(const char* pSourceName, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode)
{
// error check the parameters
if ((pSourceName == NULL) || (wcslen(pSourceName) == 0))
@@ -42,7 +42,7 @@ CInputSource * __stdcall CreateInputSource(const wchar_t * pSourceName, WAVEFORM
}
// get the extension
const wchar_t * pExtension = &pSourceName[wcslen(pSourceName)];
const char* pExtension = &pSourceName[wcslen(pSourceName)];
while ((pExtension > pSourceName) && (*pExtension != '.'))
pExtension--;
@@ -89,7 +89,7 @@ CWAVInputSource::CWAVInputSource(CIO * pIO, WAVEFORMATEX * pwfeSource, int * pTo
if (pErrorCode) *pErrorCode = nRetVal;
}
CWAVInputSource::CWAVInputSource(const wchar_t * pSourceName, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode)
CWAVInputSource::CWAVInputSource(const char* pSourceName, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode)
: CInputSource(pSourceName, pwfeSource, pTotalBlocks, pHeaderBytes, pTerminatingBytes, pErrorCode)
{
m_bIsValid = FALSE;
@@ -15,7 +15,7 @@ public:
// construction / destruction
CInputSource(CIO * pIO, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode = NULL) { }
CInputSource(const wchar_t * pSourceName, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode = NULL) { }
CInputSource(const char* pSourceName, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode = NULL) { }
virtual ~CInputSource() { }
// get data
@@ -35,7 +35,7 @@ public:
// construction / destruction
CWAVInputSource(CIO * pIO, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode = NULL);
CWAVInputSource(const wchar_t * pSourceName, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode = NULL);
CWAVInputSource(const char* pSourceName, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode = NULL);
~CWAVInputSource();
// get data
@@ -63,7 +63,7 @@ private:
Input souce creation
*************************************************************************************/
extern "C" { // SHINTA: export
DLLEXPORT CInputSource* __stdcall CreateInputSource(const wchar_t * pSourceName, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode = NULL);
DLLEXPORT CInputSource* __stdcall CreateInputSource(const char* pSourceName, WAVEFORMATEX * pwfeSource, int * pTotalBlocks, int * pHeaderBytes, int * pTerminatingBytes, int * pErrorCode = NULL);
}
#endif // #ifndef APE_WAVINPUTSOURCE_H