Add resume adjustments flag in mp3entry struct which is required for proper AUDIO_START_RESTART resume handling
Fixup for 4fb37ecb (#5196)
Change-Id: Ie9ecfe2b637bba38e442066333d71eeff01030ad
In files with gaps between chunks and reduced lookup_table we can't properly detect all gaps in m4a_check_sample_offset. So just ignore decode errors till next chunk present in lookup_table
Change-Id: I317864dce6a2251cdb6ddb8c0ad4d7c1640cb7a1
Instead of FOURCC it needs ignore-case text match. Also value can contain \0 ('m4a\0' instead of expected 'm4a ').But let's simply skip it and let decoder handle it.
Change-Id: I87eefcabbc9010481286257c26cee09e61d1221c
Codecs mostly use custom LOGF define for logging (i.e. see aac.c). Now such logging can be enabled in single file with #define LOGF_ENABLE
Change-Id: I36312fbcd2d9166fb1fe5ead31e7354342d8828d
Make optimization from 2358fabb actually work.
Fix potential out of bound access.
Remove redundant zero offset check.
Change-Id: I0a0ba04670b612d410ac17a761bd08c2915721b9
Don't store sample_to_chunk table and read data on demand instead (it's required only once for building lookup table). It allows to store 2x bigger lookup table.
Change-Id: Ida79d0c281040300d6561e124fe10ebacb0e4679
pretty unlikely but I think in a memory exaustion scenario
you might roll the uint8 over to zero and crash
Change-Id: If73dc64484f2d363446be068aa7bf8025407a2a7
GCC 4.9 always emits assembly with divided syntax. Setting unified
syntax in inline assembly causes the assembler to complain about
GCC's generated code, because the directive extends past the scope
of the inline asm. Fix this by setting divided mode at the end of
the inline assembly block.
The assembler directives are hidden behind macros because later
versions of GCC won't need this workaround: they can be told to
use the unified syntax with -masm-syntax-unified.
Change-Id: Ic09e729e5bbb6fd44d08dac348daf6f55c75d7d8
Replace the minimum version bound with a check on the size of
the API struct. The version only needs to be incremented for
ABI breaking changes. Additions to the API won't need to touch
the version number, resulting in fewer merge conflicts.
Change-Id: I916a04a7bf5890dcf5d615ce30087643165f8e1f
Plain import of the library parts first. Adaptions to Rockbox will
follow. A *lot* of kudos go to Mihaly Horvath for creating this library
from his already lightweight cSID-light, mainly for Rockbox. Besides a
lot of other things, he made his algorithms integer-only and
significantly improved the C64 emulation, so finally RSIDs could be
played as well as PSIDs. TinySID was nice for what it is, but this is a
quantum leap in SID playback quality for Rockbox. Check for example:
https://hvsc.csdb.dk/MUSICIANS/P/Page_Jason/Eighth.sidhttps://hvsc.csdb.dk/MUSICIANS/J/Jeff/Blowing.sid
Change-Id: I353e12fbfd7cd8696b834616e55743e7b844a73e
It turns out removing DSP_INIT broke the codec ABI and caused
old codecs to crash; the loop and mdelay() was a red herring.
This reverts commit 541960a110.
Change-Id: I020d826e7b4beb006d093d9c3d4f45fa5eaac717
Commit 6bcd830490 ported an optimization to decode_subframe_fixed()
from FFmpeg (upstream commit 08965b22e2). This contains an out of
bounds read, which doesn't affect the decoder output, but makes ASAN
complain.
FFmpeg fixed the out of bounds read (upstream commit 0ec7b71de8) but
that appears to increase code size a lot.
Inlining the initialization of a, b, c, d into the switch produces
similar code as the non-bounds-checked version with only a handful
of instructions of overhead (checked on MIPS & ARM).
Change-Id: I053fac4efc4676b133eb7545c80e23f37fb00d86
Not really sure how best to deal with the warnings (redefinition of
ARRAYLEN, etc.) short of splitting things out of system.h but this
is good enough for now.
Change-Id: Ibea9f693d128c7995f564f0f5c81d572462a5553
It seems removing this causes a crash on the Clip+ when playing
any file. Appears to be a timing-related issue as replacing the
loop with an mdelay() also fixes it. Needs further investigation
to identify the real cause of the problem, see FS#13386.
Change-Id: Ia93a2887a79b376de50563d6bb3bbc79cee11a1c
Refactor DSP init routines so there is a dedicated init function
for the stages that need it. Remove the DSP_INIT configure message.
This allows the init code to be safely marked INIT_ATTR, saving a
bit of code size, and allowing the linker to verify that there are
no unsafe references to the init routines.
Change-Id: I1702f0f579bbb300a6fe7d0e67b13aa2e9dd7f8a
Makes dsp_sample_input.c a bit less messy, and dependencies
are more explicit. There's possibly a minor loss of inlining
but it isn't a big deal.
Change-Id: I30f923a0ca758f2b113d32852d1f65586dff0cd1
All of these are technically unsafe cross-section references but
most aren't reported by the linker, probably due to inlining. In
practice there was no problem because the affected code was only
run at init time anyway.
For now, remove INIT_ATTR until the init code can be refactored
to avoid the problematic references. This should also save code
size by moving more code to the init section.
dsp_init() gets to keep its attribute because it's already OK.
Change-Id: Idc9ac0e02cb07f31d186686e0382275c02a85dbb
haas surround is causing a seg fault
it appears process is null see https://www.rockbox.org/tracker/task/13382
for details
when the low_latency_callback is enabled it happens less frequently
lets default to an empty process that way there are no NULL pointers to call
Change-Id: Ib72ba1a58cbb20cef04b5ea50964adadeee74a75
Resume by offset was obviously inaccurate for ALAC -- it tried
to convert the offset to an elapsed time using the approximate
bitrate, which is going to be wrong for VBR files. This became
a problem since commit 26ffcd8f9f restored the ability to resume
by offset.
It turns out that m4a_seek_raw() has terrible resolution since
it can only seek to chunk boundaries, and lies about the real
sample position; basically the same issue that affected seeking
described in commit 4dd3c2b33e. Resuming by offset is still not
very accurate because of this. Prefer to resume by time first,
which is normally highly accurate (and never worse than offset)
but use the file offset if it's the only thing we have.
There were a couple time calculations still using 32-bit math,
so clean those up too to reduce issues due to rounding errors.
Change-Id: Idd3bccd67505f4e59e784d92e45ea80a273975bb