Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
miniaudio
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
miniaudio
Commits
00baf2f6
Commit
00baf2f6
authored
Jul 01, 2021
by
David Reid
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove some unnecessary members from ma_decoder.
parent
fd0c4414
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
65 additions
and
32 deletions
+65
-32
miniaudio.h
miniaudio.h
+65
-32
No files found.
miniaudio.h
View file @
00baf2f6
...
@@ -6155,14 +6155,10 @@ struct ma_decoder
...
@@ -6155,14 +6155,10 @@ struct ma_decoder
ma_decoder_seek_proc onSeek;
ma_decoder_seek_proc onSeek;
ma_decoder_tell_proc onTell;
ma_decoder_tell_proc onTell;
void* pUserData;
void* pUserData;
ma_uint64 readPointerInPCMFrames; /* In output sample rate. Used for keeping track of how many frames are available for decoding. */
ma_uint64 readPointerInPCMFrames; /* In output sample rate. Used for keeping track of how many frames are available for decoding. */
ma_format internalFormat;
ma_format outputFormat;
ma_uint32 internalChannels;
ma_uint32 outputChannels;
ma_uint32 internalSampleRate;
ma_uint32 outputSampleRate;
ma_channel internalChannelMap[MA_MAX_CHANNELS];
ma_format outputFormat;
ma_uint32 outputChannels;
ma_uint32 outputSampleRate;
ma_channel outputChannelMap[MA_MAX_CHANNELS];
ma_channel outputChannelMap[MA_MAX_CHANNELS];
ma_data_converter converter; /* <-- Data conversion is achieved by running frames through this. */
ma_data_converter converter; /* <-- Data conversion is achieved by running frames through this. */
ma_allocation_callbacks allocationCallbacks;
ma_allocation_callbacks allocationCallbacks;
...
@@ -46749,37 +46745,56 @@ MA_API ma_decoder_config ma_decoder_config_init_copy(const ma_decoder_config* pC
...
@@ -46749,37 +46745,56 @@ MA_API ma_decoder_config ma_decoder_config_init_copy(const ma_decoder_config* pC
static ma_result ma_decoder__init_data_converter(ma_decoder* pDecoder, const ma_decoder_config* pConfig)
static ma_result ma_decoder__init_data_converter(ma_decoder* pDecoder, const ma_decoder_config* pConfig)
{
{
ma_result result;
ma_data_converter_config converterConfig;
ma_data_converter_config converterConfig;
ma_format internalFormat;
ma_uint32 internalChannels;
ma_uint32 internalSampleRate;
ma_channel internalChannelMap[MA_MAX_CHANNELS];
MA_ASSERT(pDecoder != NULL);
MA_ASSERT(pDecoder != NULL);
MA_ASSERT(pConfig != NULL);
MA_ASSERT(pConfig != NULL);
result = ma_data_source_get_data_format(pDecoder->pBackend, &internalFormat, &internalChannels, &internalSampleRate);
if (result != MA_SUCCESS) {
return result; /* Failed to retrieve the internal data format. */
}
/* Channel map needs to be retrieved separately. */
if (pDecoder->pBackendVTable != NULL && pDecoder->pBackendVTable->onGetChannelMap != NULL) {
pDecoder->pBackendVTable->onGetChannelMap(pDecoder->pBackendUserData, pDecoder->pBackend, internalChannelMap, ma_countof(internalChannelMap));
} else {
ma_get_standard_channel_map(ma_standard_channel_map_default, ma_min(internalChannels, ma_countof(internalChannelMap)), internalChannelMap);
}
/* Make sure we're not asking for too many channels. */
/* Make sure we're not asking for too many channels. */
if (pConfig->channels > MA_MAX_CHANNELS) {
if (pConfig->channels > MA_MAX_CHANNELS) {
return MA_INVALID_ARGS;
return MA_INVALID_ARGS;
}
}
/* The internal channels should have already been validated at a higher level, but we'll do it again explicitly here for safety. */
/* The internal channels should have already been validated at a higher level, but we'll do it again explicitly here for safety. */
if (
pDecoder->
internalChannels > MA_MAX_CHANNELS) {
if (internalChannels > MA_MAX_CHANNELS) {
return MA_INVALID_ARGS;
return MA_INVALID_ARGS;
}
}
/* Output format. */
/* Output format. */
if (pConfig->format == ma_format_unknown) {
if (pConfig->format == ma_format_unknown) {
pDecoder->outputFormat =
pDecoder->
internalFormat;
pDecoder->outputFormat = internalFormat;
} else {
} else {
pDecoder->outputFormat = pConfig->format;
pDecoder->outputFormat = pConfig->format;
}
}
if (pConfig->channels == 0) {
if (pConfig->channels == 0) {
pDecoder->outputChannels =
pDecoder->
internalChannels;
pDecoder->outputChannels = internalChannels;
} else {
} else {
pDecoder->outputChannels = pConfig->channels;
pDecoder->outputChannels = pConfig->channels;
}
}
if (pConfig->sampleRate == 0) {
if (pConfig->sampleRate == 0) {
pDecoder->outputSampleRate =
pDecoder->
internalSampleRate;
pDecoder->outputSampleRate = internalSampleRate;
} else {
} else {
pDecoder->outputSampleRate = pConfig->sampleRate;
pDecoder->outputSampleRate = pConfig->sampleRate;
}
}
...
@@ -46792,11 +46807,11 @@ static ma_result ma_decoder__init_data_converter(ma_decoder* pDecoder, const ma_
...
@@ -46792,11 +46807,11 @@ static ma_result ma_decoder__init_data_converter(ma_decoder* pDecoder, const ma_
converterConfig = ma_data_converter_config_init(
converterConfig = ma_data_converter_config_init(
pDecoder->
internalFormat, pDecoder->outputFormat,
internalFormat, pDecoder->outputFormat,
pDecoder->
internalChannels, pDecoder->outputChannels,
internalChannels, pDecoder->outputChannels,
pDecoder->
internalSampleRate, pDecoder->outputSampleRate
internalSampleRate, pDecoder->outputSampleRate
);
);
ma_channel_map_copy(converterConfig.channelMapIn,
pDecoder->internalChannelMap, pDecoder->
internalChannels);
ma_channel_map_copy(converterConfig.channelMapIn,
internalChannelMap,
internalChannels);
ma_channel_map_copy(converterConfig.channelMapOut, pDecoder->outputChannelMap, pDecoder->outputChannels);
ma_channel_map_copy(converterConfig.channelMapOut, pDecoder->outputChannelMap, pDecoder->outputChannels);
converterConfig.channelMixMode = pConfig->channelMixMode;
converterConfig.channelMixMode = pConfig->channelMixMode;
converterConfig.ditherMode = pConfig->ditherMode;
converterConfig.ditherMode = pConfig->ditherMode;
...
@@ -46861,15 +46876,6 @@ static ma_result ma_decoder_init_from_vtable(const ma_decoding_backend_vtable* p
...
@@ -46861,15 +46876,6 @@ static ma_result ma_decoder_init_from_vtable(const ma_decoding_backend_vtable* p
pDecoder->pBackendVTable = pVTable;
pDecoder->pBackendVTable = pVTable;
pDecoder->pBackendUserData = pConfig->pCustomBackendUserData;
pDecoder->pBackendUserData = pConfig->pCustomBackendUserData;
/* Internal format/channels/rate. */
ma_data_source_get_data_format(pDecoder->pBackend, &pDecoder->internalFormat, &pDecoder->internalChannels, &pDecoder->internalSampleRate);
/* Internal channel map. For now we need to use a separate vtable API for this, but later on we'll add this to ma_data_source_get_data_format(). */
if (pVTable->onGetChannelMap == NULL || pVTable->onGetChannelMap(pDecoder->pBackendUserData, pDecoder->pBackend, pDecoder->internalChannelMap, ma_countof(pDecoder->internalChannelMap)) != MA_SUCCESS) {
/* Failed to retrieve the channel map. Assume default. */
ma_get_standard_channel_map(ma_standard_channel_map_default, ma_min(pDecoder->internalChannels, ma_countof(pDecoder->internalChannelMap)), pDecoder->internalChannelMap);
}
return MA_SUCCESS;
return MA_SUCCESS;
}
}
...
@@ -49716,8 +49722,14 @@ static ma_result ma_decoder__postinit(const ma_decoder_config* pConfig, ma_decod
...
@@ -49716,8 +49722,14 @@ static ma_result ma_decoder__postinit(const ma_decoder_config* pConfig, ma_decod
ma_result result = MA_SUCCESS;
ma_result result = MA_SUCCESS;
/* Basic validation in case the internal decoder supports different limits to miniaudio. */
/* Basic validation in case the internal decoder supports different limits to miniaudio. */
if (pDecoder->internalChannels < MA_MIN_CHANNELS || pDecoder->internalChannels > MA_MAX_CHANNELS) {
{
result = MA_INVALID_DATA;
/* TODO: Remove this block once we remove MA_MIN_CHANNELS and MA_MAX_CHANNELS. */
ma_uint32 internalChannels;
ma_data_source_get_data_format(pDecoder->pBackend, NULL, &internalChannels, NULL);
if (internalChannels < MA_MIN_CHANNELS || internalChannels > MA_MAX_CHANNELS) {
result = MA_INVALID_DATA;
}
}
}
if (result == MA_SUCCESS) {
if (result == MA_SUCCESS) {
...
@@ -50873,14 +50885,21 @@ MA_API ma_uint64 ma_decoder_get_length_in_pcm_frames(ma_decoder* pDecoder)
...
@@ -50873,14 +50885,21 @@ MA_API ma_uint64 ma_decoder_get_length_in_pcm_frames(ma_decoder* pDecoder)
}
}
if (pDecoder->pBackend != NULL) {
if (pDecoder->pBackend != NULL) {
ma_result result;
ma_uint64 nativeLengthInPCMFrames;
ma_uint64 nativeLengthInPCMFrames;
ma_uint32 internalSampleRate;
ma_data_source_get_length_in_pcm_frames(pDecoder->pBackend, &nativeLengthInPCMFrames);
ma_data_source_get_length_in_pcm_frames(pDecoder->pBackend, &nativeLengthInPCMFrames);
if (pDecoder->internalSampleRate == pDecoder->outputSampleRate) {
result = ma_data_source_get_data_format(pDecoder->pBackend, NULL, NULL, &internalSampleRate);
if (result != MA_SUCCESS) {
return 0; /* Failed to retrieve the internal sample rate. */
}
if (internalSampleRate == pDecoder->outputSampleRate) {
return nativeLengthInPCMFrames;
return nativeLengthInPCMFrames;
} else {
} else {
return ma_calculate_frame_count_after_resampling(pDecoder->outputSampleRate,
pDecoder->
internalSampleRate, nativeLengthInPCMFrames);
return ma_calculate_frame_count_after_resampling(pDecoder->outputSampleRate, internalSampleRate, nativeLengthInPCMFrames);
}
}
}
}
...
@@ -50914,13 +50933,21 @@ MA_API ma_uint64 ma_decoder_read_pcm_frames(ma_decoder* pDecoder, void* pFramesO
...
@@ -50914,13 +50933,21 @@ MA_API ma_uint64 ma_decoder_read_pcm_frames(ma_decoder* pDecoder, void* pFramesO
result = ma_data_source_read_pcm_frames(pDecoder->pBackend, NULL, frameCount, &totalFramesReadOut, MA_FALSE);
result = ma_data_source_read_pcm_frames(pDecoder->pBackend, NULL, frameCount, &totalFramesReadOut, MA_FALSE);
} else {
} else {
/* Slow path. Need to run everything through the data converter. */
/* Slow path. Need to run everything through the data converter. */
ma_format internalFormat;
ma_uint32 internalChannels;
totalFramesReadOut = 0;
totalFramesReadOut = 0;
totalFramesReadIn = 0;
totalFramesReadIn = 0;
pRunningFramesOut = pFramesOut;
pRunningFramesOut = pFramesOut;
result = ma_data_source_get_data_format(pDecoder->pBackend, &internalFormat, &internalChannels, NULL);
if (result != MA_SUCCESS) {
return 0; /* Failed to retrieve the internal format and channel count. */
}
while (totalFramesReadOut < frameCount) {
while (totalFramesReadOut < frameCount) {
ma_uint8 pIntermediaryBuffer[MA_DATA_CONVERTER_STACK_BUFFER_SIZE]; /* In internal format. */
ma_uint8 pIntermediaryBuffer[MA_DATA_CONVERTER_STACK_BUFFER_SIZE]; /* In internal format. */
ma_uint64 intermediaryBufferCap = sizeof(pIntermediaryBuffer) / ma_get_bytes_per_frame(
pDecoder->internalFormat, pDecoder->
internalChannels);
ma_uint64 intermediaryBufferCap = sizeof(pIntermediaryBuffer) / ma_get_bytes_per_frame(
internalFormat,
internalChannels);
ma_uint64 framesToReadThisIterationIn;
ma_uint64 framesToReadThisIterationIn;
ma_uint64 framesReadThisIterationIn;
ma_uint64 framesReadThisIterationIn;
ma_uint64 framesToReadThisIterationOut;
ma_uint64 framesToReadThisIterationOut;
...
@@ -50982,11 +51009,17 @@ MA_API ma_result ma_decoder_seek_to_pcm_frame(ma_decoder* pDecoder, ma_uint64 fr
...
@@ -50982,11 +51009,17 @@ MA_API ma_result ma_decoder_seek_to_pcm_frame(ma_decoder* pDecoder, ma_uint64 fr
if (pDecoder->pBackend != NULL) {
if (pDecoder->pBackend != NULL) {
ma_result result;
ma_result result;
ma_uint64 internalFrameIndex;
ma_uint64 internalFrameIndex;
ma_uint32 internalSampleRate;
result = ma_data_source_get_data_format(pDecoder->pBackend, NULL, NULL, &internalSampleRate);
if (result != MA_SUCCESS) {
return result; /* Failed to retrieve the internal sample rate. */
}
if (
pDecoder->
internalSampleRate == pDecoder->outputSampleRate) {
if (internalSampleRate == pDecoder->outputSampleRate) {
internalFrameIndex = frameIndex;
internalFrameIndex = frameIndex;
} else {
} else {
internalFrameIndex = ma_calculate_frame_count_after_resampling(
pDecoder->
internalSampleRate, pDecoder->outputSampleRate, frameIndex);
internalFrameIndex = ma_calculate_frame_count_after_resampling(internalSampleRate, pDecoder->outputSampleRate, frameIndex);
}
}
result = ma_data_source_seek_to_pcm_frame(pDecoder->pBackend, internalFrameIndex);
result = ma_data_source_seek_to_pcm_frame(pDecoder->pBackend, internalFrameIndex);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment