The "fix" produces different asm and I don't have the bandwidth
to determine if it's functionally equivalent.
Change-Id: I822557d1244f8e8a05e7ebfc45da2643152345a4
/* offset = -3db * (ratio - 1) / ratio */
db_curve[2].offset = (int32_t)((long long)(-3 << 16)
* (ratio - 1) / ratio);
Results in a warning: left shift of negative value [-Wshift-negative-value]
To fix this, replace the '-3' with -3UL.
(As that is effectively what is already happening)
Change-Id: I5aa269ff332703d3c2d889fa032d2fdc403ff14f
Some assembly routines don't work on Thumb as-is. For now
just disable these so the codecs compile.
Affected codecs:
- libflac
- libmad
- libspeex
- libtta
- libwavpack
A few DSP routines need to be disabled for the same reason:
- crossfeed_process
- crossfeed_meier_process
- resample_hermite
- filter_process
- sample_output_stereo
Change-Id: I277e0719652096745a19a7e2b597eff32d8e1553
Revisit this after discussion with chris_s on IRC and forum
Pitch menu now changes icon when pitch has been changed
uses NVRAM to save the pitch settings unconditionally
Manual updated
Change-Id: Idcb4c2b7fe42f7a203dc4bfc46285657f370d0fd
core_alloc works well for this and we can allow the alloc to be moved
bugfix compressor_process() possible buffer overflow
Change-Id: I701c6306c39cc1c7aa72b0dbe402b9b0d1a3fcda
Comments and notes are converted to UTF-8. Already broken multibyte characters are fixed using common sense.
This patch contains no code changes.
Change-Id: Ia511ab84936cb2495ac17309493a9b98727a7902
Annoyingly, this makes all of the '.S' files we compile get treated as
divided syntax, so we need to make the syntax in them explicit.
Change-Id: I56a3916b7b24c84a1214a5d6bc4ed4d651f002cf
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
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
I think the assumption is that during playback, the DSP is already running
so it assumes PBE needs to be flushed before it is properly enabled.
Change-Id: I2bac3d02c80f97c8d9ce26a575175f6344a8e86a
Most importantly is surround shouldn't operate in mono mode. Have it
watch and (de)activate itself on relevant format changes as it should.
Other changes to better handle buffer allocation failure.
PBE was set internally at 100 by default; SBZ.
Change-Id: I328e0b674e56751a255eae817d7892d685796b06
Reorganization
- Separated iBasso devices from PLATFORM_ANDROID. These are now standlone
hosted targets. Most device specific code is in the
firmware/target/hosted/ibasso directory.
- No dependency on Android SDK, only the Android NDK is needed.
32 bit Android NDK and Android API Level 16.
- Separate implementation for each device where feasible.
Code cleanup
- Rewrite of existing code, from simple reformat to complete reimplementation.
- New backlight interface, seperating backlight from touchscreen.
- Rewrite of device button handler, removing unneeded code and fixing memory
leaks.
- New Debug messages interface logging to Android adb logcat (DEBUGF, panicf,
logf).
- Rewrite of lcd device handler, removing unneeded code and fixing memory leaks.
- Rewrite of audiohw device handler/pcm interface, removing unneeded code and
fixing memory leaks, enabling 44.1/48kHz pthreaded playback.
- Rewrite of power and powermng, proper shutdown, using batterylog results
(see http://gerrit.rockbox.org/r/#/c/1047/).
- Rewrite of configure (Android NDK) and device specific config.
- Rewrite of the Android NDK specific Makefile.
Misc
- All plugins/games/demos activated.
- Update tinyalsa to latest from https://github.com/tinyalsa/tinyalsa.
Includes
- http://gerrit.rockbox.org/r/#/c/993/
- http://gerrit.rockbox.org/r/#/c/1010/
- http://gerrit.rockbox.org/r/#/c/1035/
Does not include http://gerrit.rockbox.org/r/#/c/1007/ due to new backlight
interface and new option for hold switch, touchscreen, physical button
interaction.
Rockbox needs the iBasso DX50/DX90 loader for startup, see
http://gerrit.rockbox.org/r/#/c/1099/
The loader expects Rockbox to be installed in /mnt/sdcard/.rockbox/. If
/mnt/sdcard/ is accessed as USB mass storage device, Rockbox will exit
gracefully and the loader will restart Rockbox on USB disconnect.
Tested on iBasso DX50.
Compiled (not tested) for iBasso DX90.
Compiled (not tested) for PLATFORM_ANDROID.
Change-Id: I5f5e22e68f5b4cf29c28e2b40b2c265f2beb7ab7
surround_enabled was never true, end up dsp_surround_flush didn't work; Thats why a cracking noise occurs in right channel when moving track positions.
redo pbe/surround flush in a much simpler way suits the current single buffer style.
Change-Id: I394054ddfb164b82c90b3dcf49df4442db87d8d2
perceptual bass enhancement
- a bbe-ish group delay corrction with Biophonic EQ boost.
- precut
auditory fatigue reduction
-reduce signal in frequency that may trigger temporary threshold shift
haas surround
-frequency between f(x1) and f(x2) is always bypassed.
-can apply to side only.
Change-Id: Icb6355ce9b1c99bf2c58c9385c3c411c0ae209d3
This is an improvement to the current compressor which I have added
to my own Sansa Fuze V2 build. I am submitting here in case others
find it interesting.
Features added to the existing compressor:
Attack, Look-ahead, Sidechain Filtering.
Exponential attack and release characteristic response.
Benefits from adding missing features:
Attack:
Preserve perceived "brightness" of tone by letting onset transients
come through at a higher level than the rest of the compressed program
material.
Look-ahead:
With Attack comes clipping on the leading several cycles of a transient
onset. With look-ahead function, this can be pre-emptively mitigated with
a slower gain change (less distortion). Look-ahead limiting is implemented
to prevent clipping while keeping gain change ramp to an interval near 3ms
instead of instant attack.
The existing compressor implementation distorts the leading edge of a
transient by causing instant gain change, resulting in log() distortion.
This sounds "woofy" to me.
Exponential Attack/Release:
eMore natural sounding. On attack, this is a true straight line of 10dB per
attack interval. Release is a little different, however, sounds natural as
an analog compressor.
Sidechain Filtering:
Mild high-pass filter reduces response to low frequency onsets. For example,
a hard kick drum is less likely to make the whole of the program material
appear to fade in and out. Combined with a moderate attack time, such a
transient will ride through with minimal audible artifact.
Overall these changes make dynamic music sound more "open", more natural. The
goal of a compressor is to make dyanamic music sound louder without necessarily
sounding as though it has been compressed. I believe these changes come closer to this goal.
Enjoy. If not, I am enjoying it
Change-Id: I664eace546c364b815b4dc9ed4a72849231a0eb2
Reviewed-on: http://gerrit.rockbox.org/626
Tested: Purling Nayuki <cyq.yzfl@gmail.com>
Reviewed-by: Michael Giacomelli <giac2000@hotmail.com>
The quickscreen calls settings_apply() and the crossfeed code wasn't
checking that the right crossfeed was set before updating the filter
for the custom setting, which was overwriting the Meier crossfeed
data (custom and Meier share the same data space).
Change-Id: Ifaa2f46fe062d4497681a2dd0d5068ec906c96a3
Replaces the NATIVE_FREQUENCY constant with a configurable frequency.
The user may select 48000Hz if the hardware supports it. The default is
still 44100Hz and the minimum is 44100Hz. The setting is located in the
playback settings, under "Frequency".
"Frequency" was duplicated in english.lang for now to avoid having to
fix every .lang file for the moment and throwing everything out of sync
because of the new play_frequency feature in features.txt. The next
cleanup should combine it with the one included for recording and
generalize the ID label.
If the hardware doesn't support 48000Hz, no setting will be available.
On particular hardware where very high rates are practical and desireable,
the upper bound can be extended by patching.
The PCM mixer can be configured to play at the full hardware frequency
range. The DSP core can configure to the hardware minimum up to the
maximum playback setting (some buffers must be reserved according to
the maximum rate).
If only 44100Hz is supported or possible on a given target for playback,
using the DSP and mixer at other samperates is possible if the hardware
offers them.
Change-Id: I6023cf0c0baa8bc6292b6919b4dd3618a6a25622
Reviewed-on: http://gerrit.rockbox.org/479
Reviewed-by: Michael Sevakis <jethead71@rockbox.org>
Tested-by: Michael Sevakis <jethead71@rockbox.org>
The old presets never made sense for Rockbox's EQ. They were apparently
copied from some other software. We have a parametric EQ, that means that
EQ bands can be made wider or narrower. Putting two identical bands side
by side just wastes battery life and adds rounding error. Replacement
presets are on gerrit but they need more work. In the mean time, users
should probably not be using these.
Change-Id: I85213100129fafd3ac0fa1a9438cb4d651bb94cb
Uses the Catmull-Rom case of Hermite cubic splines.
Vastly improves the quality and accuracy of audio resampling with a
rather minor additional overhead compared to the previous linear
implementation.
ARM and Coldfire assembly implementations included.
Change-Id: Ic45d84bc66c5b312ef373198297a952167a4be26
Reviewed-on: http://gerrit.rockbox.org/304
Reviewed-by: Michael Sevakis <jethead71@rockbox.org>
Tested-by: Michael Sevakis <jethead71@rockbox.org>
DSP_SWITCH_FREQUENCY has been deprecated and the same enumerated value
as DSP_SET_FREQUENCY since major DSP revisions were committed. This
task should have been performed much earlier but, oh well, do it now.
Change-Id: I3f30d651b894136a07c7e17f78fc16a7d98631ff
Input type can only change once per call because the DSP parameters
are only copied at the start and input is always taken from the src
buffer which means sample input format switching can be once per call
instead of once per loop.
Change-Id: Ifa3521753428fb0e6997e4934f24a3b915628cc7
Some things can just be a bit simpler in handling the list of stages
and some things, especially format change handling, can be simplified
for each stage implementation. Format changes are sent through the
configure() callback.
Hide some internal details and variables from processing stages and
let the core deal with it.
Do some miscellaneous cleanup and keep things a bit better factored.
Change-Id: I19dd8ce1d0b792ba914d426013088a49a52ecb7e
This is going right in since it's long overdue. If anything is goofed,
drop me a line or just tweak it yourself if you know what's wrong. :-)
Make HW/SW codec interface more uniform when emulating HW functionality
on SWCODEC for functions such as "audiohw_set_pitch". The firmware-to-
DSP plumbing is in firmware/drivers/audiohw-swcodec.c. "sound_XXX"
APIs are all in sound.c with none in DSP code any longer.
Reduce number of settings definitions needed by each codec by providing
defaults for common ones like balance, channels and SW tone controls.
Remove need for separate SIM code and tables and add virtual codec header
for hosted targets.
Change-Id: I3f23702bca054fc9bda40f49824ce681bb7f777b
Implements double-buffered volume, balance and prescaling control in
the main PCM driver when HAVE_SW_VOLUME_CONTROL is defined ensuring
that all PCM is volume controlled and level changes are low in latency.
Supports -73 to +6 dB using a 15-bit factor so that no large-integer
math is needed.
Low-level hardware drivers do not have to implement it themselves but
parameters can be changed (currently defined in pcm-internal.h) to work
best with a particular SoC or to provide different volume ranges.
Volume and prescale calls should be made in the codec driver. It should
appear as a normal hardware interface. PCM volume calls expect .1 dB
units.
Change-Id: Idf6316a64ef4fb8abcede10707e1e6c6d01d57db
Reviewed-on: http://gerrit.rockbox.org/423
Reviewed-by: Michael Sevakis <jethead71@rockbox.org>
Tested-by: Michael Sevakis <jethead71@rockbox.org>
Instead of 3 cfg lines per eq band there is now a single line
for each:
<config name>: <cutoff/center freq>, <q>, <gain>
In addition, the config value names make a bit more sense.
The old settings are still readable but config.cfg and any new
settings files will be written with the new config values. (The
old settings will be removed completly sometime after the next
stable release).
Also a slight rework of the advanced EQ menu UI
Change-Id: I9008658d36ded442a5f2f825916df42a3934cbef
Reviewed-on: http://gerrit.rockbox.org/394
Reviewed-by: Jonathan Gordon <rockbox@jdgordon.info>
- A 10 Band EQ for Rockbox w/ presets adapted
from VLC
- frequency stepping at 32, 64, 125, 250, 500
1K, 2K, 4K, 8K, 16K
Change-Id: I85ad84d70a534edfc66c6ad9af8a76f022a02ec7
Reviewed-on: http://gerrit.rockbox.org/386
Reviewed-by: Jonathan Gordon <rockbox@jdgordon.info>
The old GCC version currently required (sbox-arm-linux-gcc 3.4.4
release) apparently has trouble with function pointers used as
static array initializers when using indexed initializers + ranges
(ie. [A ... B] = fn).
Change-Id: I494c2b607e4d93a9893264749d0ac257fb54ce3b