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
0edf8356
Commit
0edf8356
authored
Oct 11, 2021
by
David Reid
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Expose seek tables for MP3 decoding.
parent
26db06ad
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
53 additions
and
5 deletions
+53
-5
miniaudio.h
miniaudio.h
+53
-5
No files found.
miniaudio.h
View file @
0edf8356
...
...
@@ -8522,9 +8522,10 @@ typedef struct ma_decoder ma_decoder;
typedef struct
{
ma_format preferredFormat;
ma_uint32 seekPointCount; /* Set to > 0 to generate a seektable if the decoding backend supports it. */
} ma_decoding_backend_config;
MA_API ma_decoding_backend_config ma_decoding_backend_config_init(ma_format preferredFormat);
MA_API ma_decoding_backend_config ma_decoding_backend_config_init(ma_format preferredFormat
, ma_uint32 seekPointCount
);
typedef struct
...
...
@@ -8552,6 +8553,7 @@ typedef struct
ma_resampler_config resampling;
ma_allocation_callbacks allocationCallbacks;
ma_encoding_format encodingFormat;
ma_uint32 seekPointCount; /* When set to > 0, specifies the number of seek points to use for the generation of a seek table. Not all decoding backends support this. */
ma_decoding_backend_vtable** ppCustomBackendVTables;
ma_uint32 customBackendCount;
void* pCustomBackendUserData;
...
...
@@ -55790,12 +55792,13 @@ static ma_result ma_decoder_tell_bytes(ma_decoder* pDecoder, ma_int64* pCursor)
}
MA_API ma_decoding_backend_config ma_decoding_backend_config_init(ma_format preferredFormat)
MA_API ma_decoding_backend_config ma_decoding_backend_config_init(ma_format preferredFormat
, ma_uint32 seekPointCount
)
{
ma_decoding_backend_config config;
MA_ZERO_OBJECT(&config);
config.preferredFormat = preferredFormat;
config.seekPointCount = seekPointCount;
return config;
}
...
...
@@ -55975,7 +55978,7 @@ static ma_result ma_decoder_init_from_vtable(const ma_decoding_backend_vtable* p
return MA_NOT_IMPLEMENTED;
}
backendConfig = ma_decoding_backend_config_init(pConfig->format);
backendConfig = ma_decoding_backend_config_init(pConfig->format
, pConfig->seekPointCount
);
result = pVTable->onInit(pVTableUserData, ma_decoder_internal_on_read__custom, ma_decoder_internal_on_seek__custom, ma_decoder_internal_on_tell__custom, pDecoder, &backendConfig, &pDecoder->allocationCallbacks, &pBackend);
if (result != MA_SUCCESS) {
...
...
@@ -57315,6 +57318,8 @@ typedef struct
ma_format format; /* Can be f32 or s16. */
#if !defined(MA_NO_MP3)
drmp3 dr;
drmp3_uint32 seekPointCount;
drmp3_seek_point* pSeekPoints; /* Only used if seek table generation is used. */
#endif
} ma_mp3;
...
...
@@ -57450,6 +57455,40 @@ static ma_result ma_mp3_init_internal(const ma_decoding_backend_config* pConfig,
return MA_SUCCESS;
}
static ma_result ma_mp3_generate_seek_table(ma_mp3* pMP3, const ma_decoding_backend_config* pConfig, const ma_allocation_callbacks* pAllocationCallbacks)
{
drmp3_bool32 mp3Result;
drmp3_uint32 seekPointCount = 0;
drmp3_seek_point* pSeekPoints = NULL;
MA_ASSERT(pMP3 != NULL);
MA_ASSERT(pConfig != NULL);
seekPointCount = pConfig->seekPointCount;
if (seekPointCount > 0) {
pSeekPoints = (drmp3_seek_point*)ma_malloc(sizeof(*pMP3->pSeekPoints) * seekPointCount, pAllocationCallbacks);
if (pSeekPoints == NULL) {
return MA_OUT_OF_MEMORY;
}
}
mp3Result = drmp3_calculate_seek_points(&pMP3->dr, &seekPointCount, pSeekPoints);
if (mp3Result != MA_TRUE) {
return MA_ERROR;
}
mp3Result = drmp3_bind_seek_table(&pMP3->dr, seekPointCount, pSeekPoints);
if (mp3Result != MA_TRUE) {
ma_free(pSeekPoints, pAllocationCallbacks);
return MA_ERROR;
}
pMP3->seekPointCount = seekPointCount;
pMP3->pSeekPoints = pSeekPoints;
return MA_SUCCESS;
}
MA_API ma_result ma_mp3_init(ma_read_proc onRead, ma_seek_proc onSeek, ma_tell_proc onTell, void* pReadSeekTellUserData, const ma_decoding_backend_config* pConfig, const ma_allocation_callbacks* pAllocationCallbacks, ma_mp3* pMP3)
{
ma_result result;
...
...
@@ -57478,6 +57517,8 @@ MA_API ma_result ma_mp3_init(ma_read_proc onRead, ma_seek_proc onSeek, ma_tell_p
return MA_INVALID_FILE;
}
ma_mp3_generate_seek_table(pMP3, pConfig, pAllocationCallbacks);
return MA_SUCCESS;
}
#else
...
...
@@ -57508,6 +57549,8 @@ MA_API ma_result ma_mp3_init_file(const char* pFilePath, const ma_decoding_backe
return MA_INVALID_FILE;
}
ma_mp3_generate_seek_table(pMP3, pConfig, pAllocationCallbacks);
return MA_SUCCESS;
}
#else
...
...
@@ -57539,6 +57582,8 @@ MA_API ma_result ma_mp3_init_file_w(const wchar_t* pFilePath, const ma_decoding_
return MA_INVALID_FILE;
}
ma_mp3_generate_seek_table(pMP3, pConfig, pAllocationCallbacks);
return MA_SUCCESS;
}
#else
...
...
@@ -57570,6 +57615,8 @@ MA_API ma_result ma_mp3_init_memory(const void* pData, size_t dataSize, const ma
return MA_INVALID_FILE;
}
ma_mp3_generate_seek_table(pMP3, pConfig, pAllocationCallbacks);
return MA_SUCCESS;
}
#else
...
...
@@ -57589,8 +57636,6 @@ MA_API void ma_mp3_uninit(ma_mp3* pMP3, const ma_allocation_callbacks* pAllocati
return;
}
(void)pAllocationCallbacks;
#if !defined(MA_NO_MP3)
{
drmp3_uninit(&pMP3->dr);
...
...
@@ -57602,6 +57647,9 @@ MA_API void ma_mp3_uninit(ma_mp3* pMP3, const ma_allocation_callbacks* pAllocati
}
#endif
/* Seek points need to be freed after the MP3 decoder has been uninitialized to ensure they're no longer being referenced. */
ma_free(pMP3->pSeekPoints, pAllocationCallbacks);
ma_data_source_uninit(&pMP3->ds);
}
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