App-MHFS
view release on metacpan or search on metacpan
share/public_html/static/music_worklet_inprogress/decoder/src/mhfs_cl_track.h view on Meta::CPAN
void *allocptrs[MHFS_CL_TRACK_MAX_ALLOCS];
size_t allocsizes[MHFS_CL_TRACK_MAX_ALLOCS];
} mhfs_cl_track_allocs;
typedef struct {
blockvf_error code;
uint32_t extradata;
} mhfs_cl_track_blockvf_data;
typedef struct {
// for backup and restore
ma_decoder backupDecoder;
unsigned backupFileOffset;
mhfs_cl_track_allocs allocs;
ma_decoder_config decoderConfig;
ma_decoder decoder;
bool dec_initialized;
blockvf vf;
mhfs_cl_track_blockvf_data vfData;
mhfs_cl_track_meta_audioinfo meta;
unsigned afterID3Offset;
bool meta_initialized;
share/public_html/static/music_worklet_inprogress/decoder/src/mhfs_cl_track.h view on Meta::CPAN
mhfs_cl_track *pTrack = (mhfs_cl_track *)pUserData;
mhfs_cl_track_allocs *pAllocs = &pTrack->allocs;
for(unsigned i = 0; i < MHFS_CL_TRACK_MAX_ALLOCS; i++)
{
if(pAllocs->allocptrs[i] == p)
{
const size_t osz = pAllocs->allocsizes[i];
const size_t orsz = ceil8(pAllocs->allocsizes[i]);
const size_t rsz = ceil8(sz);
// avoid losing the start of backup by moving it down
if(rsz < orsz)
{
uint8_t *ogalloc = p;
memmove(ogalloc+rsz, ogalloc+orsz, sz);
}
uint8_t *newalloc = realloc(p, rsz*2);
if(newalloc == NULL)
{
if(rsz >= orsz)
{
MHFSCLTR_PRINT("%s: %zu realloc failed\n", __func__, sz);
return NULL;
}
// we moved the data down so we can't fail
newalloc = p;
}
// move the backup data forward
else if(rsz > orsz)
{
memmove(newalloc+rsz, newalloc+orsz, osz);
}
pAllocs->allocsizes[i]= sz;
pAllocs->allocptrs[i] = newalloc;
return newalloc;
}
}
MHFSCLTR_PRINT("%s: %zu failed to find\n", __func__, sz);
return NULL;
}
static inline void mhfs_cl_track_allocs_backup_or_restore(mhfs_cl_track *pTrack, const bool backup)
{
// copy ma_decoder and blockvf fileoffset
if(backup)
{
pTrack->backupDecoder = pTrack->decoder;
pTrack->backupFileOffset = pTrack->vf.fileoffset;
}
else
{
pTrack->decoder = pTrack->backupDecoder;
pTrack->vf.fileoffset = pTrack->backupFileOffset;
}
// copy the allocations
mhfs_cl_track_allocs *pAllocs = &pTrack->allocs;
for(unsigned i = 0; i < MHFS_CL_TRACK_MAX_ALLOCS; i++)
{
if(pAllocs->allocptrs[i] != NULL)
{
const size_t offset = ceil8(pAllocs->allocsizes[i]);
uint8_t *allocBuf = pAllocs->allocptrs[i];
const uint8_t *srcBuf;
uint8_t *destBuf;
if(backup)
{
srcBuf = allocBuf;
destBuf = allocBuf + offset;
}
else
{
srcBuf = allocBuf + offset;
destBuf = allocBuf;
}
memcpy(destBuf, srcBuf, pAllocs->allocsizes[i]);
}
}
}
static inline void mhfs_cl_track_allocs_backup(mhfs_cl_track *pTrack)
{
return mhfs_cl_track_allocs_backup_or_restore(pTrack, true);
}
static inline void mhfs_cl_track_allocs_restore(mhfs_cl_track *pTrack)
{
return mhfs_cl_track_allocs_backup_or_restore(pTrack, false);
}
void mhfs_cl_track_init(mhfs_cl_track *pTrack, const unsigned blocksize)
{
for(unsigned i = 0; i < MHFS_CL_TRACK_MAX_ALLOCS; i++)
{
pTrack->allocs.allocptrs[i] = NULL;
}
pTrack->decoderConfig = ma_decoder_config_init(ma_format_f32, 0, 0);
ma_allocation_callbacks cbs;
share/public_html/static/music_worklet_inprogress/decoder/src/mhfs_cl_track.h view on Meta::CPAN
return MHFS_CL_ERROR;
}
static inline void mhfs_cl_track_blockvf_ma_decoder_call_before(mhfs_cl_track *pTrack, const bool bSaveDecoder)
{
pTrack->vfData.code = BLOCKVF_SUCCESS;
if(bSaveDecoder)
{
mhfs_cl_track_allocs_backup(pTrack);
}
}
static inline mhfs_cl_error mhfs_cl_track_blockvf_ma_decoder_call_after(mhfs_cl_track *pTrack, const bool bRestoreDecoder, uint32_t *pNeededOffset)
{
if(pTrack->vfData.code != BLOCKVF_SUCCESS)
{
*pNeededOffset = pTrack->vfData.extradata;
if(bRestoreDecoder)
{
( run in 1.307 second using v1.01-cache-2.11-cpan-49f99fa48dc )