mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-21 15:56:58 +02:00
Update dr_libs.
This commit is contained in:
+161
-86
@@ -62304,7 +62304,7 @@ extern "C" {
|
|||||||
#define MA_DR_FLAC_XSTRINGIFY(x) MA_DR_FLAC_STRINGIFY(x)
|
#define MA_DR_FLAC_XSTRINGIFY(x) MA_DR_FLAC_STRINGIFY(x)
|
||||||
#define MA_DR_FLAC_VERSION_MAJOR 0
|
#define MA_DR_FLAC_VERSION_MAJOR 0
|
||||||
#define MA_DR_FLAC_VERSION_MINOR 13
|
#define MA_DR_FLAC_VERSION_MINOR 13
|
||||||
#define MA_DR_FLAC_VERSION_REVISION 1
|
#define MA_DR_FLAC_VERSION_REVISION 2
|
||||||
#define MA_DR_FLAC_VERSION_STRING MA_DR_FLAC_XSTRINGIFY(MA_DR_FLAC_VERSION_MAJOR) "." MA_DR_FLAC_XSTRINGIFY(MA_DR_FLAC_VERSION_MINOR) "." MA_DR_FLAC_XSTRINGIFY(MA_DR_FLAC_VERSION_REVISION)
|
#define MA_DR_FLAC_VERSION_STRING MA_DR_FLAC_XSTRINGIFY(MA_DR_FLAC_VERSION_MAJOR) "." MA_DR_FLAC_XSTRINGIFY(MA_DR_FLAC_VERSION_MINOR) "." MA_DR_FLAC_XSTRINGIFY(MA_DR_FLAC_VERSION_REVISION)
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#if defined(_MSC_VER) && _MSC_VER >= 1700
|
#if defined(_MSC_VER) && _MSC_VER >= 1700
|
||||||
@@ -62392,8 +62392,9 @@ typedef struct
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
ma_uint32 type;
|
ma_uint32 type;
|
||||||
const void* pRawData;
|
|
||||||
ma_uint32 rawDataSize;
|
ma_uint32 rawDataSize;
|
||||||
|
ma_uint64 rawDataOffset;
|
||||||
|
const void* pRawData;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
ma_dr_flac_streaminfo streaminfo;
|
ma_dr_flac_streaminfo streaminfo;
|
||||||
@@ -62439,6 +62440,7 @@ typedef struct
|
|||||||
ma_uint32 colorDepth;
|
ma_uint32 colorDepth;
|
||||||
ma_uint32 indexColorCount;
|
ma_uint32 indexColorCount;
|
||||||
ma_uint32 pictureDataSize;
|
ma_uint32 pictureDataSize;
|
||||||
|
ma_uint64 pictureDataOffset;
|
||||||
const ma_uint8* pPictureData;
|
const ma_uint8* pPictureData;
|
||||||
} picture;
|
} picture;
|
||||||
} data;
|
} data;
|
||||||
@@ -62600,22 +62602,47 @@ extern "C" {
|
|||||||
#define MA_DR_MP3_XSTRINGIFY(x) MA_DR_MP3_STRINGIFY(x)
|
#define MA_DR_MP3_XSTRINGIFY(x) MA_DR_MP3_STRINGIFY(x)
|
||||||
#define MA_DR_MP3_VERSION_MAJOR 0
|
#define MA_DR_MP3_VERSION_MAJOR 0
|
||||||
#define MA_DR_MP3_VERSION_MINOR 7
|
#define MA_DR_MP3_VERSION_MINOR 7
|
||||||
#define MA_DR_MP3_VERSION_REVISION 1
|
#define MA_DR_MP3_VERSION_REVISION 2
|
||||||
#define MA_DR_MP3_VERSION_STRING MA_DR_MP3_XSTRINGIFY(MA_DR_MP3_VERSION_MAJOR) "." MA_DR_MP3_XSTRINGIFY(MA_DR_MP3_VERSION_MINOR) "." MA_DR_MP3_XSTRINGIFY(MA_DR_MP3_VERSION_REVISION)
|
#define MA_DR_MP3_VERSION_STRING MA_DR_MP3_XSTRINGIFY(MA_DR_MP3_VERSION_MAJOR) "." MA_DR_MP3_XSTRINGIFY(MA_DR_MP3_VERSION_MINOR) "." MA_DR_MP3_XSTRINGIFY(MA_DR_MP3_VERSION_REVISION)
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#define MA_DR_MP3_MAX_PCM_FRAMES_PER_MP3_FRAME 1152
|
#define MA_DR_MP3_MAX_PCM_FRAMES_PER_MP3_FRAME 1152
|
||||||
#define MA_DR_MP3_MAX_SAMPLES_PER_FRAME (MA_DR_MP3_MAX_PCM_FRAMES_PER_MP3_FRAME*2)
|
#define MA_DR_MP3_MAX_SAMPLES_PER_FRAME (MA_DR_MP3_MAX_PCM_FRAMES_PER_MP3_FRAME*2)
|
||||||
MA_API void ma_dr_mp3_version(ma_uint32* pMajor, ma_uint32* pMinor, ma_uint32* pRevision);
|
MA_API void ma_dr_mp3_version(ma_uint32* pMajor, ma_uint32* pMinor, ma_uint32* pRevision);
|
||||||
MA_API const char* ma_dr_mp3_version_string(void);
|
MA_API const char* ma_dr_mp3_version_string(void);
|
||||||
|
#define MA_DR_MP3_MAX_BITRESERVOIR_BYTES 511
|
||||||
|
#define MA_DR_MP3_MAX_FREE_FORMAT_FRAME_SIZE 2304
|
||||||
|
#define MA_DR_MP3_MAX_L3_FRAME_PAYLOAD_BYTES MA_DR_MP3_MAX_FREE_FORMAT_FRAME_SIZE
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
int frame_bytes, channels, sample_rate, layer, bitrate_kbps;
|
int frame_bytes, channels, sample_rate, layer, bitrate_kbps;
|
||||||
} ma_dr_mp3dec_frame_info;
|
} ma_dr_mp3dec_frame_info;
|
||||||
typedef struct
|
typedef struct
|
||||||
|
{
|
||||||
|
const ma_uint8 *buf;
|
||||||
|
int pos, limit;
|
||||||
|
} ma_dr_mp3_bs;
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const ma_uint8 *sfbtab;
|
||||||
|
ma_uint16 part_23_length, big_values, scalefac_compress;
|
||||||
|
ma_uint8 global_gain, block_type, mixed_block_flag, n_long_sfb, n_short_sfb;
|
||||||
|
ma_uint8 table_select[3], region_count[3], subblock_gain[3];
|
||||||
|
ma_uint8 preflag, scalefac_scale, count1_table, scfsi;
|
||||||
|
} ma_dr_mp3_L3_gr_info;
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ma_dr_mp3_bs bs;
|
||||||
|
ma_uint8 maindata[MA_DR_MP3_MAX_BITRESERVOIR_BYTES + MA_DR_MP3_MAX_L3_FRAME_PAYLOAD_BYTES];
|
||||||
|
ma_dr_mp3_L3_gr_info gr_info[4];
|
||||||
|
float grbuf[2][576], scf[40], syn[18 + 15][2*32];
|
||||||
|
ma_uint8 ist_pos[2][39];
|
||||||
|
} ma_dr_mp3dec_scratch;
|
||||||
|
typedef struct
|
||||||
{
|
{
|
||||||
float mdct_overlap[2][9*32], qmf_state[15*2*32];
|
float mdct_overlap[2][9*32], qmf_state[15*2*32];
|
||||||
int reserv, free_format_bytes;
|
int reserv, free_format_bytes;
|
||||||
ma_uint8 header[4], reserv_buf[511];
|
ma_uint8 header[4], reserv_buf[511];
|
||||||
|
ma_dr_mp3dec_scratch scratch;
|
||||||
} ma_dr_mp3dec;
|
} ma_dr_mp3dec;
|
||||||
MA_API void ma_dr_mp3dec_init(ma_dr_mp3dec *dec);
|
MA_API void ma_dr_mp3dec_init(ma_dr_mp3dec *dec);
|
||||||
MA_API int ma_dr_mp3dec_decode_frame(ma_dr_mp3dec *dec, const ma_uint8 *mp3, int mp3_bytes, void *pcm, ma_dr_mp3dec_frame_info *info);
|
MA_API int ma_dr_mp3dec_decode_frame(ma_dr_mp3dec *dec, const ma_uint8 *mp3, int mp3_bytes, void *pcm, ma_dr_mp3dec_frame_info *info);
|
||||||
@@ -88502,8 +88529,9 @@ static ma_bool32 ma_dr_flac__read_and_decode_metadata(ma_dr_flac_read_proc onRea
|
|||||||
}
|
}
|
||||||
runningFilePos += 4;
|
runningFilePos += 4;
|
||||||
metadata.type = blockType;
|
metadata.type = blockType;
|
||||||
metadata.pRawData = NULL;
|
|
||||||
metadata.rawDataSize = 0;
|
metadata.rawDataSize = 0;
|
||||||
|
metadata.rawDataOffset = runningFilePos;
|
||||||
|
metadata.pRawData = NULL;
|
||||||
switch (blockType)
|
switch (blockType)
|
||||||
{
|
{
|
||||||
case MA_DR_FLAC_METADATA_BLOCK_TYPE_APPLICATION:
|
case MA_DR_FLAC_METADATA_BLOCK_TYPE_APPLICATION:
|
||||||
@@ -88703,46 +88731,116 @@ static ma_bool32 ma_dr_flac__read_and_decode_metadata(ma_dr_flac_read_proc onRea
|
|||||||
return MA_FALSE;
|
return MA_FALSE;
|
||||||
}
|
}
|
||||||
if (onMeta) {
|
if (onMeta) {
|
||||||
void* pRawData;
|
ma_bool32 result = MA_TRUE;
|
||||||
const char* pRunningData;
|
ma_uint32 blockSizeRemaining = blockSize;
|
||||||
const char* pRunningDataEnd;
|
char* pMime = NULL;
|
||||||
pRawData = ma_dr_flac__malloc_from_callbacks(blockSize, pAllocationCallbacks);
|
char* pDescription = NULL;
|
||||||
if (pRawData == NULL) {
|
void* pPictureData = NULL;
|
||||||
|
if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.type, 4) != 4) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
blockSizeRemaining -= 4;
|
||||||
|
metadata.data.picture.type = ma_dr_flac__be2host_32(metadata.data.picture.type);
|
||||||
|
if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.mimeLength, 4) != 4) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
blockSizeRemaining -= 4;
|
||||||
|
metadata.data.picture.mimeLength = ma_dr_flac__be2host_32(metadata.data.picture.mimeLength);
|
||||||
|
pMime = (char*)ma_dr_flac__malloc_from_callbacks(metadata.data.picture.mimeLength + 1, pAllocationCallbacks);
|
||||||
|
if (pMime == NULL) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
if (blockSizeRemaining < metadata.data.picture.mimeLength || onRead(pUserData, pMime, metadata.data.picture.mimeLength) != metadata.data.picture.mimeLength) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
blockSizeRemaining -= metadata.data.picture.mimeLength;
|
||||||
|
pMime[metadata.data.picture.mimeLength] = '\0';
|
||||||
|
metadata.data.picture.mime = (const char*)pMime;
|
||||||
|
if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.descriptionLength, 4) != 4) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
blockSizeRemaining -= 4;
|
||||||
|
metadata.data.picture.descriptionLength = ma_dr_flac__be2host_32(metadata.data.picture.descriptionLength);
|
||||||
|
pDescription = (char*)ma_dr_flac__malloc_from_callbacks(metadata.data.picture.descriptionLength + 1, pAllocationCallbacks);
|
||||||
|
if (pDescription == NULL) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
if (blockSizeRemaining < metadata.data.picture.descriptionLength || onRead(pUserData, pDescription, metadata.data.picture.descriptionLength) != metadata.data.picture.descriptionLength) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
blockSizeRemaining -= metadata.data.picture.descriptionLength;
|
||||||
|
pDescription[metadata.data.picture.descriptionLength] = '\0';
|
||||||
|
metadata.data.picture.description = (const char*)pDescription;
|
||||||
|
if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.width, 4) != 4) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
blockSizeRemaining -= 4;
|
||||||
|
metadata.data.picture.width = ma_dr_flac__be2host_32(metadata.data.picture.width);
|
||||||
|
if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.height, 4) != 4) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
blockSizeRemaining -= 4;
|
||||||
|
metadata.data.picture.height = ma_dr_flac__be2host_32(metadata.data.picture.height);
|
||||||
|
if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.colorDepth, 4) != 4) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
blockSizeRemaining -= 4;
|
||||||
|
metadata.data.picture.colorDepth = ma_dr_flac__be2host_32(metadata.data.picture.colorDepth);
|
||||||
|
if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.indexColorCount, 4) != 4) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
blockSizeRemaining -= 4;
|
||||||
|
metadata.data.picture.indexColorCount = ma_dr_flac__be2host_32(metadata.data.picture.indexColorCount);
|
||||||
|
if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.pictureDataSize, 4) != 4) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
blockSizeRemaining -= 4;
|
||||||
|
metadata.data.picture.pictureDataSize = ma_dr_flac__be2host_32(metadata.data.picture.pictureDataSize);
|
||||||
|
if (blockSizeRemaining < metadata.data.picture.pictureDataSize) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
metadata.data.picture.pictureDataOffset = runningFilePos + (blockSize - blockSizeRemaining);
|
||||||
|
#ifndef MA_DR_FLAC_NO_PICTURE_METADATA_MALLOC
|
||||||
|
pPictureData = ma_dr_flac__malloc_from_callbacks(metadata.data.picture.pictureDataSize, pAllocationCallbacks);
|
||||||
|
if (pPictureData != NULL) {
|
||||||
|
if (onRead(pUserData, pPictureData, metadata.data.picture.pictureDataSize) != metadata.data.picture.pictureDataSize) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if (!onSeek(pUserData, metadata.data.picture.pictureDataSize, MA_DR_FLAC_SEEK_CUR)) {
|
||||||
|
result = MA_FALSE;
|
||||||
|
goto done_flac;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
blockSizeRemaining -= metadata.data.picture.pictureDataSize;
|
||||||
|
metadata.data.picture.pPictureData = (const ma_uint8*)pPictureData;
|
||||||
|
if (metadata.data.picture.pictureDataOffset != 0 || metadata.data.picture.pPictureData != NULL) {
|
||||||
|
onMeta(pUserDataMD, &metadata);
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
done_flac:
|
||||||
|
ma_dr_flac__free_from_callbacks(pMime, pAllocationCallbacks);
|
||||||
|
ma_dr_flac__free_from_callbacks(pDescription, pAllocationCallbacks);
|
||||||
|
ma_dr_flac__free_from_callbacks(pPictureData, pAllocationCallbacks);
|
||||||
|
if (result != MA_TRUE) {
|
||||||
return MA_FALSE;
|
return MA_FALSE;
|
||||||
}
|
}
|
||||||
if (onRead(pUserData, pRawData, blockSize) != blockSize) {
|
|
||||||
ma_dr_flac__free_from_callbacks(pRawData, pAllocationCallbacks);
|
|
||||||
return MA_FALSE;
|
|
||||||
}
|
|
||||||
metadata.pRawData = pRawData;
|
|
||||||
metadata.rawDataSize = blockSize;
|
|
||||||
pRunningData = (const char*)pRawData;
|
|
||||||
pRunningDataEnd = (const char*)pRawData + blockSize;
|
|
||||||
metadata.data.picture.type = ma_dr_flac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4;
|
|
||||||
metadata.data.picture.mimeLength = ma_dr_flac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4;
|
|
||||||
if ((pRunningDataEnd - pRunningData) - 24 < (ma_int64)metadata.data.picture.mimeLength) {
|
|
||||||
ma_dr_flac__free_from_callbacks(pRawData, pAllocationCallbacks);
|
|
||||||
return MA_FALSE;
|
|
||||||
}
|
|
||||||
metadata.data.picture.mime = pRunningData; pRunningData += metadata.data.picture.mimeLength;
|
|
||||||
metadata.data.picture.descriptionLength = ma_dr_flac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4;
|
|
||||||
if ((pRunningDataEnd - pRunningData) - 20 < (ma_int64)metadata.data.picture.descriptionLength) {
|
|
||||||
ma_dr_flac__free_from_callbacks(pRawData, pAllocationCallbacks);
|
|
||||||
return MA_FALSE;
|
|
||||||
}
|
|
||||||
metadata.data.picture.description = pRunningData; pRunningData += metadata.data.picture.descriptionLength;
|
|
||||||
metadata.data.picture.width = ma_dr_flac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4;
|
|
||||||
metadata.data.picture.height = ma_dr_flac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4;
|
|
||||||
metadata.data.picture.colorDepth = ma_dr_flac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4;
|
|
||||||
metadata.data.picture.indexColorCount = ma_dr_flac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4;
|
|
||||||
metadata.data.picture.pictureDataSize = ma_dr_flac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4;
|
|
||||||
metadata.data.picture.pPictureData = (const ma_uint8*)pRunningData;
|
|
||||||
if (pRunningDataEnd - pRunningData < (ma_int64)metadata.data.picture.pictureDataSize) {
|
|
||||||
ma_dr_flac__free_from_callbacks(pRawData, pAllocationCallbacks);
|
|
||||||
return MA_FALSE;
|
|
||||||
}
|
|
||||||
onMeta(pUserDataMD, &metadata);
|
|
||||||
ma_dr_flac__free_from_callbacks(pRawData, pAllocationCallbacks);
|
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case MA_DR_FLAC_METADATA_BLOCK_TYPE_PADDING:
|
case MA_DR_FLAC_METADATA_BLOCK_TYPE_PADDING:
|
||||||
@@ -88768,12 +88866,15 @@ static ma_bool32 ma_dr_flac__read_and_decode_metadata(ma_dr_flac_read_proc onRea
|
|||||||
{
|
{
|
||||||
if (onMeta) {
|
if (onMeta) {
|
||||||
void* pRawData = ma_dr_flac__malloc_from_callbacks(blockSize, pAllocationCallbacks);
|
void* pRawData = ma_dr_flac__malloc_from_callbacks(blockSize, pAllocationCallbacks);
|
||||||
if (pRawData == NULL) {
|
if (pRawData != NULL) {
|
||||||
return MA_FALSE;
|
if (onRead(pUserData, pRawData, blockSize) != blockSize) {
|
||||||
}
|
ma_dr_flac__free_from_callbacks(pRawData, pAllocationCallbacks);
|
||||||
if (onRead(pUserData, pRawData, blockSize) != blockSize) {
|
return MA_FALSE;
|
||||||
ma_dr_flac__free_from_callbacks(pRawData, pAllocationCallbacks);
|
}
|
||||||
return MA_FALSE;
|
} else {
|
||||||
|
if (!onSeek(pUserData, blockSize, MA_DR_FLAC_SEEK_CUR)) {
|
||||||
|
return MA_FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
metadata.pRawData = pRawData;
|
metadata.pRawData = pRawData;
|
||||||
metadata.rawDataSize = blockSize;
|
metadata.rawDataSize = blockSize;
|
||||||
@@ -89832,7 +89933,6 @@ static ma_bool32 ma_dr_flac__on_seek_memory(void* pUserData, int offset, ma_dr_f
|
|||||||
ma_dr_flac__memory_stream* memoryStream = (ma_dr_flac__memory_stream*)pUserData;
|
ma_dr_flac__memory_stream* memoryStream = (ma_dr_flac__memory_stream*)pUserData;
|
||||||
ma_int64 newCursor;
|
ma_int64 newCursor;
|
||||||
MA_DR_FLAC_ASSERT(memoryStream != NULL);
|
MA_DR_FLAC_ASSERT(memoryStream != NULL);
|
||||||
newCursor = memoryStream->currentReadPos;
|
|
||||||
if (origin == MA_DR_FLAC_SEEK_SET) {
|
if (origin == MA_DR_FLAC_SEEK_SET) {
|
||||||
newCursor = 0;
|
newCursor = 0;
|
||||||
} else if (origin == MA_DR_FLAC_SEEK_CUR) {
|
} else if (origin == MA_DR_FLAC_SEEK_CUR) {
|
||||||
@@ -92488,12 +92588,9 @@ MA_API const char* ma_dr_mp3_version_string(void)
|
|||||||
#define MA_DR_MP3_NO_SIMD
|
#define MA_DR_MP3_NO_SIMD
|
||||||
#endif
|
#endif
|
||||||
#define MA_DR_MP3_OFFSET_PTR(p, offset) ((void*)((ma_uint8*)(p) + (offset)))
|
#define MA_DR_MP3_OFFSET_PTR(p, offset) ((void*)((ma_uint8*)(p) + (offset)))
|
||||||
#define MA_DR_MP3_MAX_FREE_FORMAT_FRAME_SIZE 2304
|
|
||||||
#ifndef MA_DR_MP3_MAX_FRAME_SYNC_MATCHES
|
#ifndef MA_DR_MP3_MAX_FRAME_SYNC_MATCHES
|
||||||
#define MA_DR_MP3_MAX_FRAME_SYNC_MATCHES 10
|
#define MA_DR_MP3_MAX_FRAME_SYNC_MATCHES 10
|
||||||
#endif
|
#endif
|
||||||
#define MA_DR_MP3_MAX_L3_FRAME_PAYLOAD_BYTES MA_DR_MP3_MAX_FREE_FORMAT_FRAME_SIZE
|
|
||||||
#define MA_DR_MP3_MAX_BITRESERVOIR_BYTES 511
|
|
||||||
#define MA_DR_MP3_SHORT_BLOCK_TYPE 2
|
#define MA_DR_MP3_SHORT_BLOCK_TYPE 2
|
||||||
#define MA_DR_MP3_STOP_BLOCK_TYPE 3
|
#define MA_DR_MP3_STOP_BLOCK_TYPE 3
|
||||||
#define MA_DR_MP3_MODE_MONO 3
|
#define MA_DR_MP3_MODE_MONO 3
|
||||||
@@ -92543,7 +92640,7 @@ MA_API const char* ma_dr_mp3_version_string(void)
|
|||||||
#define MA_DR_MP3_VMUL_S(x, s) _mm_mul_ps(x, _mm_set1_ps(s))
|
#define MA_DR_MP3_VMUL_S(x, s) _mm_mul_ps(x, _mm_set1_ps(s))
|
||||||
#define MA_DR_MP3_VREV(x) _mm_shuffle_ps(x, x, _MM_SHUFFLE(0, 1, 2, 3))
|
#define MA_DR_MP3_VREV(x) _mm_shuffle_ps(x, x, _MM_SHUFFLE(0, 1, 2, 3))
|
||||||
typedef __m128 ma_dr_mp3_f4;
|
typedef __m128 ma_dr_mp3_f4;
|
||||||
#if defined(_MSC_VER) || defined(MA_DR_MP3_ONLY_SIMD)
|
#if (defined(_MSC_VER) || defined(MA_DR_MP3_ONLY_SIMD)) && !defined(__clang__)
|
||||||
#define ma_dr_mp3_cpuid __cpuid
|
#define ma_dr_mp3_cpuid __cpuid
|
||||||
#else
|
#else
|
||||||
static __inline__ __attribute__((always_inline)) void ma_dr_mp3_cpuid(int CPUInfo[], const int InfoType)
|
static __inline__ __attribute__((always_inline)) void ma_dr_mp3_cpuid(int CPUInfo[], const int InfoType)
|
||||||
@@ -92659,11 +92756,6 @@ static __inline__ __attribute__((always_inline)) ma_int32 ma_dr_mp3_clip_int16_a
|
|||||||
#define MA_DR_MP3_FREE(p) free((p))
|
#define MA_DR_MP3_FREE(p) free((p))
|
||||||
#endif
|
#endif
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
|
||||||
const ma_uint8 *buf;
|
|
||||||
int pos, limit;
|
|
||||||
} ma_dr_mp3_bs;
|
|
||||||
typedef struct
|
|
||||||
{
|
{
|
||||||
float scf[3*64];
|
float scf[3*64];
|
||||||
ma_uint8 total_bands, stereo_bands, bitalloc[64], scfcod[64];
|
ma_uint8 total_bands, stereo_bands, bitalloc[64], scfcod[64];
|
||||||
@@ -92672,22 +92764,6 @@ typedef struct
|
|||||||
{
|
{
|
||||||
ma_uint8 tab_offset, code_tab_width, band_count;
|
ma_uint8 tab_offset, code_tab_width, band_count;
|
||||||
} ma_dr_mp3_L12_subband_alloc;
|
} ma_dr_mp3_L12_subband_alloc;
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
const ma_uint8 *sfbtab;
|
|
||||||
ma_uint16 part_23_length, big_values, scalefac_compress;
|
|
||||||
ma_uint8 global_gain, block_type, mixed_block_flag, n_long_sfb, n_short_sfb;
|
|
||||||
ma_uint8 table_select[3], region_count[3], subblock_gain[3];
|
|
||||||
ma_uint8 preflag, scalefac_scale, count1_table, scfsi;
|
|
||||||
} ma_dr_mp3_L3_gr_info;
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
ma_dr_mp3_bs bs;
|
|
||||||
ma_uint8 maindata[MA_DR_MP3_MAX_BITRESERVOIR_BYTES + MA_DR_MP3_MAX_L3_FRAME_PAYLOAD_BYTES];
|
|
||||||
ma_dr_mp3_L3_gr_info gr_info[4];
|
|
||||||
float grbuf[2][576], scf[40], syn[18 + 15][2*32];
|
|
||||||
ma_uint8 ist_pos[2][39];
|
|
||||||
} ma_dr_mp3dec_scratch;
|
|
||||||
static void ma_dr_mp3_bs_init(ma_dr_mp3_bs *bs, const ma_uint8 *data, int bytes)
|
static void ma_dr_mp3_bs_init(ma_dr_mp3_bs *bs, const ma_uint8 *data, int bytes)
|
||||||
{
|
{
|
||||||
bs->buf = data;
|
bs->buf = data;
|
||||||
@@ -94060,7 +94136,6 @@ MA_API int ma_dr_mp3dec_decode_frame(ma_dr_mp3dec *dec, const ma_uint8 *mp3, int
|
|||||||
int i = 0, igr, frame_size = 0, success = 1;
|
int i = 0, igr, frame_size = 0, success = 1;
|
||||||
const ma_uint8 *hdr;
|
const ma_uint8 *hdr;
|
||||||
ma_dr_mp3_bs bs_frame[1];
|
ma_dr_mp3_bs bs_frame[1];
|
||||||
ma_dr_mp3dec_scratch scratch;
|
|
||||||
if (mp3_bytes > 4 && dec->header[0] == 0xff && ma_dr_mp3_hdr_compare(dec->header, mp3))
|
if (mp3_bytes > 4 && dec->header[0] == 0xff && ma_dr_mp3_hdr_compare(dec->header, mp3))
|
||||||
{
|
{
|
||||||
frame_size = ma_dr_mp3_hdr_frame_bytes(mp3, dec->free_format_bytes) + ma_dr_mp3_hdr_padding(mp3);
|
frame_size = ma_dr_mp3_hdr_frame_bytes(mp3, dec->free_format_bytes) + ma_dr_mp3_hdr_padding(mp3);
|
||||||
@@ -94093,23 +94168,23 @@ MA_API int ma_dr_mp3dec_decode_frame(ma_dr_mp3dec *dec, const ma_uint8 *mp3, int
|
|||||||
}
|
}
|
||||||
if (info->layer == 3)
|
if (info->layer == 3)
|
||||||
{
|
{
|
||||||
int main_data_begin = ma_dr_mp3_L3_read_side_info(bs_frame, scratch.gr_info, hdr);
|
int main_data_begin = ma_dr_mp3_L3_read_side_info(bs_frame, dec->scratch.gr_info, hdr);
|
||||||
if (main_data_begin < 0 || bs_frame->pos > bs_frame->limit)
|
if (main_data_begin < 0 || bs_frame->pos > bs_frame->limit)
|
||||||
{
|
{
|
||||||
ma_dr_mp3dec_init(dec);
|
ma_dr_mp3dec_init(dec);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
success = ma_dr_mp3_L3_restore_reservoir(dec, bs_frame, &scratch, main_data_begin);
|
success = ma_dr_mp3_L3_restore_reservoir(dec, bs_frame, &dec->scratch, main_data_begin);
|
||||||
if (success && pcm != NULL)
|
if (success && pcm != NULL)
|
||||||
{
|
{
|
||||||
for (igr = 0; igr < (MA_DR_MP3_HDR_TEST_MPEG1(hdr) ? 2 : 1); igr++, pcm = MA_DR_MP3_OFFSET_PTR(pcm, sizeof(ma_dr_mp3d_sample_t)*576*info->channels))
|
for (igr = 0; igr < (MA_DR_MP3_HDR_TEST_MPEG1(hdr) ? 2 : 1); igr++, pcm = MA_DR_MP3_OFFSET_PTR(pcm, sizeof(ma_dr_mp3d_sample_t)*576*info->channels))
|
||||||
{
|
{
|
||||||
MA_DR_MP3_ZERO_MEMORY(scratch.grbuf[0], 576*2*sizeof(float));
|
MA_DR_MP3_ZERO_MEMORY(dec->scratch.grbuf[0], 576*2*sizeof(float));
|
||||||
ma_dr_mp3_L3_decode(dec, &scratch, scratch.gr_info + igr*info->channels, info->channels);
|
ma_dr_mp3_L3_decode(dec, &dec->scratch, dec->scratch.gr_info + igr*info->channels, info->channels);
|
||||||
ma_dr_mp3d_synth_granule(dec->qmf_state, scratch.grbuf[0], 18, info->channels, (ma_dr_mp3d_sample_t*)pcm, scratch.syn[0]);
|
ma_dr_mp3d_synth_granule(dec->qmf_state, dec->scratch.grbuf[0], 18, info->channels, (ma_dr_mp3d_sample_t*)pcm, dec->scratch.syn[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ma_dr_mp3_L3_save_reservoir(dec, &scratch);
|
ma_dr_mp3_L3_save_reservoir(dec, &dec->scratch);
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
#ifdef MA_DR_MP3_ONLY_MP3
|
#ifdef MA_DR_MP3_ONLY_MP3
|
||||||
@@ -94120,15 +94195,15 @@ MA_API int ma_dr_mp3dec_decode_frame(ma_dr_mp3dec *dec, const ma_uint8 *mp3, int
|
|||||||
return ma_dr_mp3_hdr_frame_samples(hdr);
|
return ma_dr_mp3_hdr_frame_samples(hdr);
|
||||||
}
|
}
|
||||||
ma_dr_mp3_L12_read_scale_info(hdr, bs_frame, sci);
|
ma_dr_mp3_L12_read_scale_info(hdr, bs_frame, sci);
|
||||||
MA_DR_MP3_ZERO_MEMORY(scratch.grbuf[0], 576*2*sizeof(float));
|
MA_DR_MP3_ZERO_MEMORY(dec->scratch.grbuf[0], 576*2*sizeof(float));
|
||||||
for (i = 0, igr = 0; igr < 3; igr++)
|
for (i = 0, igr = 0; igr < 3; igr++)
|
||||||
{
|
{
|
||||||
if (12 == (i += ma_dr_mp3_L12_dequantize_granule(scratch.grbuf[0] + i, bs_frame, sci, info->layer | 1)))
|
if (12 == (i += ma_dr_mp3_L12_dequantize_granule(dec->scratch.grbuf[0] + i, bs_frame, sci, info->layer | 1)))
|
||||||
{
|
{
|
||||||
i = 0;
|
i = 0;
|
||||||
ma_dr_mp3_L12_apply_scf_384(sci, sci->scf + igr, scratch.grbuf[0]);
|
ma_dr_mp3_L12_apply_scf_384(sci, sci->scf + igr, dec->scratch.grbuf[0]);
|
||||||
ma_dr_mp3d_synth_granule(dec->qmf_state, scratch.grbuf[0], 12, info->channels, (ma_dr_mp3d_sample_t*)pcm, scratch.syn[0]);
|
ma_dr_mp3d_synth_granule(dec->qmf_state, dec->scratch.grbuf[0], 12, info->channels, (ma_dr_mp3d_sample_t*)pcm, dec->scratch.syn[0]);
|
||||||
MA_DR_MP3_ZERO_MEMORY(scratch.grbuf[0], 576*2*sizeof(float));
|
MA_DR_MP3_ZERO_MEMORY(dec->scratch.grbuf[0], 576*2*sizeof(float));
|
||||||
pcm = MA_DR_MP3_OFFSET_PTR(pcm, sizeof(ma_dr_mp3d_sample_t)*384*info->channels);
|
pcm = MA_DR_MP3_OFFSET_PTR(pcm, sizeof(ma_dr_mp3d_sample_t)*384*info->channels);
|
||||||
}
|
}
|
||||||
if (bs_frame->pos > bs_frame->limit)
|
if (bs_frame->pos > bs_frame->limit)
|
||||||
|
|||||||
Reference in New Issue
Block a user