summaryrefslogtreecommitdiff
path: root/lib/rbcodec
AgeCommit message (Collapse)Author
2013-04-11Implement universal in-PCM-driver software volume control.Michael Sevakis
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>
2013-04-10Move fixedpoint.h to be accessible in /firmware.Michael Sevakis
Will need it soon enough. Combine the contents of all the various fixedpoint.h files. Not moving fixedpoint.c for now since I'm not sure where it should be and it causes some dependency issues. Change-Id: Ideacbca2ca78f9158c2b114b113c274f68e908d5
2013-03-06VGM Codec: Improve time and fade behavior. Tweak minor misc.Michael Sevakis
Prevents cutoff of tracks, especially short ones: * Extend looped tracks by fade length to fade at start of loop repeat. * No fade occurs for non-repeating track only having an intro. * Uses id3.tail_trim field to store fade duration. Use libGME built-in elapsed time reporting instead of custom calculation: * libGME already reports in milliseconds. * Don't advance time counter when Repeat == One. It just runs the progress over the length limit. Fix a comment about sample rate and set the reported bitrate to be accurate for 44.1 kHz stereo. Change-Id: I3ede22bda0f9a941a3fef751f4d678eb0027344c
2013-02-18Fix FSB#12826 - Mini-sound burp between track skips [with WMA].Michael Sevakis
Flush decoder state and frame out buffer upon a forced stop to prevent a short burst of stale audio from the previously decoding track from playing when skipping from one WMA track to another. Change-Id: I24c910c5dbd83caed2510db68d9e39a474332a79 Reviewed-on: http://gerrit.rockbox.org/406 Reviewed-by: Michael Sevakis <jethead71@rockbox.org> Tested-by: Michael Sevakis <jethead71@rockbox.org>
2013-02-09EQ settings: Rework the settings to clean up the config file.Jonathan Gordon
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>
2013-01-2910 Band EQ w/PresetsHayden Pearce
- 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>
2013-01-24Deprecate the EXTRA_LIBS variable.Björn Stenberg
Instead specify explicit library dependencies for codecs and plugins.
2013-01-21ARMv5 optimized complex multiply function for libopus.Michael Giacomelli
Speeds up decoding of 128k opus files by 1.2MHz on AMSv2. Rounding error is 1 bit due to KissFFT using a 15 bit shift instead of a 16 bit shift. Also, change an LDMIA in the armv4 code to LDM as the pointer should not increment. Change-Id: I626a207c6a056a1984e33cfe89415c35d0caed93 Reviewed-on: http://gerrit.rockbox.org/377 Reviewed-by: Michael Giacomelli <giac2000@hotmail.com> Tested-by: Michael Giacomelli <giac2000@hotmail.com>
2012-12-28Fix FS#12794 - new EQ code does not compile for the Nokia N8x0Michael Sevakis
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
2012-11-22Add support for 16 bit 'half float' format PCM.Michael Giacomelli
I'm not 100% sure that the rounding of denormals is correct. As compared to foobar2000, some samples are off by +1 LSB. However, since I can't output 24 bit PCM easily with rockbox, I'm not sure if this is due to a bug or just how rockbox rounds. In practice I don't think it matters so I'm just going to commit this for now. Change-Id: Ic0792fcb172e4369a5512d202121c2b918b36079
2012-10-25flac: use 64 bit math to calculate the elapsed timeNils Wallménius
avoids overflows for very long files Change-Id: Idb1e9a411bd9007cfddbbd2d3dcf127645fa9a7c
2012-10-18libgme: fix badly written cpp conditions spotted by gcc 4.6.3Marcin Bukat
Change-Id: Ia3fba4ba2c46a202c48f3a9b7db0cba9f75b6a50
2012-10-17opus: only put the mdct function in iram for cf,Nils Wallménius
doesn't make any speed diff on pp Change-Id: Ia6484e2a2bbf72d33a583470918c0fa267fd9b97
2012-10-16opus: don't rely on stride being 1<<shiftNils Wallménius
Change-Id: I2d64fb20b2526d912eb665df0df4e87459676a92
2012-10-16opus: use two pointers for mdct pre and post rotationAndree Buschmann
avoids complicated index calculations in the loops. saves 0.3MHz decoding a 64kbps test file on h300 (cf) and 0.2MHz on c200 (pp) Change-Id: I1918912d9a4502f89980c6bb270ec2ef10a07010 Signed-off-by: Nils Wallménius <nils@rockbox.org>
2012-10-16opus: put hot code in iramNils Wallménius
Saves 1.1MHz decoding a 64kbps test file on h300 (cf) and 0.2MHz on c200 (pp) Change-Id: If9ed03f2e3787ee497eababda4013fbb5d395946
2012-10-14Improve seeking in opus, tested on Sansa; not testedFrederik M.J. Vestre
on a target with a disk. Change-Id: I37c875c9cd014eb61fe5232dab0f4b8f15f057dd Reviewed-on: http://gerrit.rockbox.org/319 Tested-by: Thiago Okada <thiago.mast3r@gmail.com> Reviewed-by: Frederik Vestre <freqmod@gmail.com> Tested-by: Frederik Vestre <freqmod@gmail.com>
2012-10-10opus: arm asm for C_MULCAndree Buschmann
speeds up decoding of a 64kbps test_file by 1.5MHz on c200 (pp) and 1.9MHz on fuzev1 (amsv1) Change-Id: I1db460b634eba608c3e00541d96fc93d5a05710b Signed-off-by: Nils Wallménius <nils@rockbox.org>
2012-10-10opus: cf asm for C_MULCNils Wallménius
saves 2.7MHz decoding a 64kbps test file on h300 Change-Id: Id63791f79b44ed398ce5d341a5f5212d9a30282e
2012-10-07opus: replace copy loops with calls to memcpyAndree Buschmann
speeds up decoding of a 64kbps test file by 0.5Hz on h300 (cf) 0.9MHz on c200 (pp) and 0.2MHz on fuzev1 (amsv1) Change-Id: Ib537c2393fa6dca0b61e4e9f80eef5e688c2c2bd Signed-off-by: Nils Wallménius <nils@rockbox.org>
2012-10-07opus: speed up mdct overlap add and copyingAndree Buschmann
Unroll overlap add loop by four and use memcpy for copying instead of loops. Change-Id: I17114626a395d5972130251d892f851bc86e3a6a Signed-off-by: Nils Wallménius <nils@rockbox.org>
2012-10-06opus: cf inline asm for MULT32_32_Q31Nils Wallménius
speeds up decoding of a 64kbps test file by 2MHz on h300 Change-Id: I437d05278fe1c495715cf0e3477f9960d1df9d3a
2012-10-06opus: full precision MULT32_32_Q31 (32*32=64>>31) multiplicationAndree Buschmann
Replace complicated macro doing three 16*16 muls and add an inline asm implementation for arm, speeds up decoding a 64kbps test file by 0.5MHz on c200 (pp) and gives slightly better precision. Change-Id: I6fc5b83c210f01bffdc38aec54cc5a8b646d8169 Signed-off-by: Nils Wallménius <nils@rockbox.org>
2012-10-06opus: slight speedup of deemphasisAndree Buschmann
Hoist load of coefficients out of the loop. Speeds up decoding of a 64kbps test file by 0.6MHz on h300 (cf) 0.2MHz on c200 (pp) and 0.1MHz on fuzev1 (amsv1) Signed-off-by: Nils Wallménius <nils@rockbox.org> Change-Id: I4be0059fc2a77748575f5fc9378f7f348d64f1c4
2012-10-06opus: speed up comb_filterAndree Buschmann
Skip expensive multiply-accumulate loop when gains are 0 and just copy using memcpy if soure and destination are not the same Speeds up decoding of a 64kbps test file by 6MHz on h300 (cf) 7MHz on c200 (pp) and 6MHz on fuzev1 (amsv1) Change-Id: Ibbc9ddfd45a9ac661467b1327b8c67761924fb8b Signed-off-by: Nils Wallménius <nils@rockbox.org>
2012-10-04opus: put arrays frequently used by pulse decoding on the stackNils Wallménius
speeds up decoding of a 64kbps test file by 14MHz on h300 (cf) and 1MHz on c200 (pp) Change-Id: I852cb66808676ea51109423f5b70cfc8782dd109
2012-10-01opus: speed up arm asm MULT16_32_Q15Nils Wallménius
Reorder operands to take advantage of the early termination of multiplications. Saves 2.5MHz decoding a 64kbps opus test file on c200 (pp). Change-Id: I470266dc870ab183ece3b23426d41e2a64342a71
2012-10-01opus: allocate mdct f2 buffer in iramAndree Buschmann
Speeds up decoding of 64kbps test file by 6.3MHz on h300 (cf) and 1.2MHz on c200 (pp). Signed-off-by: Nils Wallménius <nils@rockbox.org> Change-Id: I08c2c332153abcbef9447c81986777fd2fcc73fe
2012-10-01opus: allocate buffers for X and freq in iramAndree Buschmann
speeds up decoding of 64kbps test file by 19MHz on h300 (cf) and 2.5MHz on c200 (pp) Change-Id: Idacd2f8962c20c518055d586daeec6b932b7ded2 Signed-off-by: Nils Wallménius <nils@rockbox.org>
2012-09-29Support technically invalid image/jpg mimetype in tags.Frank Gevaerts
Although the mimetype for jpeg is clearly image/jpeg, many tagging applications seem to use image/jpg, so we'll support that too. Change-Id: Icb9063fd5a9d8aea169eaa7f74ac52b72603d148 Reviewed-on: http://gerrit.rockbox.org/318 Reviewed-by: Michael Giacomelli <mgiacomelli@gmail.com> Reviewed-by: Thomas Martitz <kugel@rockbox.org>
2012-09-29opus: statically allocate decoder state in iramAndree Buschmann
Speeds up decoding of a 64kbps test file 26MHz on H300 (cf) and 2MHz on c200 (pp) Change-Id: I2fb4fe6c0a29321087e02fbd17fd1b1eb84e7b57 Signed-off-by: Nils Wallménius <nils@rockbox.org>
2012-09-28opus: speed up deemphasisNils Wallménius
Remove downsampling code from deemphasis loop as we don't use it and remove multiplications that are not relevant when not using custom modes. Saves 1.4MHz on h300 (cf), 4.3MHz on c200 (pp) and 4.6 on fuzev1 (amsv1). Change-Id: Iab3f1d737a656a563aaa351d50db987a9cff2287
2012-09-27opus: build with -fno-strict-aliasing for mips to fix warningsNils Wallménius
Change-Id: I370f43f2e25e03650681c207908f79cdea744d99
2012-09-26opus: put frequently used mdct buffer on the real stack which is in iramNils Wallménius
Saves about 30MHz on h300 (cf) and 1.5MHz on c200 (pp) decoding a 64kbps test file. Stack usage is still below 70%. Change-Id: Ib13df9011adb4eef4bb91a52e5a32741c8bf8988
2012-09-26opus: improve cf MULT16_32_Q15 by giving the compiler more freedomNils Wallménius
saves about 3MHz when decoding a 64kbps test file Change-Id: I10f47173ccb78e60e364662220d1db2f78dd5fdd
2012-09-25opus: put some const tables and structs in iramNils Wallménius
Speeds up decoding of a 64kbps test file by 20MHz on h300 (cf) and 1MHz on c200 (pp) Change-Id: Ia2adc0a3ad86abce8f948062eb53a8ac14c2cdf2
2012-09-25opus: asm MULT16_32_Q15 for arm and cfNils Wallménius
Speeds up decoding of a 64kbps opus test file by 34MHz on h300 (cf), 24MHz on c200 (pp) and 13MHz on fuzev1 (amsv1) Change-Id: I0dce6b3bfe6c81d0a722dfebb13891b9a428c6ba
2012-09-24opus: #if 0 out some more unused code, delete unused fileNils Wallménius
Change-Id: I96033f42e0c3096ec9d779e9f8ca46570f981ab0
2012-09-24opus: #if 0 out some unused codeNils Wallménius
Change-Id: I16fa9b439f8da5b9b8a4f17040487b9535078ec5
2012-09-23Remove unused include path for opusBertrik Sikken
Change-Id: Ie5ab9d893a7d2c6ec1aca6c295e29ab34eacd656
2012-09-20Initial opus codec supportFrederik M J Vestre
Synchronised with opus repo on github (https://github.com/freqmod/rockbox-opus) Status: * Seeking ported from speex, but fails on some cases (e.g. seek to granule 0) * ReplayGain parsing needs to be reworked, we do vorbis-style replaygain now. http://wiki.xiph.org/OggOpus#Comment_Header explicitly forbids these in favour of R128_TRACK_GAIN tag. * No optimisation yet, source files still nearly identical to opus upstream * Multi-stream opus files may not be parsed correctly Change-Id: Ia66f1027dc1d288083e3c57b2816700078376f9a Reviewed-on: http://gerrit.rockbox.org/300 Reviewed-by: Bertrik Sikken <bertrik@sikken.nl> Tested-by: Bertrik Sikken <bertrik@sikken.nl>
2012-07-26Make codec_realloc retain the contents when resizing a memory segmentBertrik Sikken
Change-Id: Ia2fc42eb0d36399e6856d3a957dd1634f019ca6a
2012-07-03Expand the range of the WPA Pro quant table. Fixes FS#12704.Michael Giacomelli
Change-Id: I5495c4d7d165cac15016d3233b85bbe5497ea3e1
2012-06-11Fix libmad compilation on MIPS with newer gcc. FS#12013Huan Zhang
Since gcc 4.4 the MIPS port no longer recognizes the "h" asm constraint. It was necessary to remove this constraint in order to avoid generating unpredictable code sequences. We can achieve the same effect using 128-bit types. See also:GCC 4.4 release notes at http://gcc.gnu.org/gcc-4.4/ Change-Id: I713cdf57cde1a989ad960aa441ab1ccf51f1cdc6
2012-05-28New crossfeed algorithm for Rockbox: "Meier" crossfeedBertrik Sikken
Emulates the basic "Meier" crossfeed (2 capacitors, 3 resistors) as discussed in http://www.meier-audio.homepage.t-online.de/passivefilter.htm This crossfeed blends a bit of low-pass filtered L signal into the R signal (and vice versa) while adding about 300 us delay to the crossfed-signal. A difference with the crossfeed already present in rockbox, is that this algorithm keeps the total spectrum flat (the one currently in rockbox accentuates low-frequency signals, making it sound a bit muffled). This implementation is quite lightweight, just 3 multiplies per left-right pair of samples. Has a default C implementation and optimized assembly versions for ARM and Coldfire. The crossfeed effect is quite subtle and is noticeable mostly one albums that have very strong left-right separation (e.g. one instrument only on the left, another only on the right). In the user interface, the new crossfeed option appears as "Meier" and is not configureable. The existing crossfeed is renamed to "Custom" as it allows itself to be customised. There is no entry for the user manual yet. Change-Id: Iaa100616fe0fcd7e16f08cdb9a7f41501973eee1
2012-05-21Stop timestretch freezing things during format changes.Michael Sevakis
When it was inactive but enabled, the format change hook was dropping through to code that it shouldn't execute without it also being active in processing samples. Change-Id: Ie7899df0395d3f0d10f2bf2b55ea549dd06749a7
2012-05-20Expand the range of the inverse quant table in WMA Pro.Michael Giacomelli
Several of the problem samples on the tracker use values outside this range. Trying the larger table doesn't quite seem to fix things, but its only a small amount of additional memory and looking at ffmpeg, I think the larger table is correct. Change-Id: Id046e62b68550701aa1f80c9abd0a1dcd711bd0d
2012-05-20Revert "Work in progress hermite resampler."Michael Giacomelli
This reverts commit f358228ea1bc66804e9ea12b65c2593c6c1fe8ee.
2012-05-20support decoding of files that contain the number of vector coded ↵Michael Giacomelli
coefficients in their bitstream No known samples are fixed by this problem, but I haven't tested many. Backport of ffmpeg revision 26388. Change-Id: Ife9654b7477a432834e3cab2cb43d16da071445a
2012-05-20Work in progress hermite resampler.Michael Giacomelli
Based on http://src.gnu-darwin.org/ports/multimedia/helixplayer/work/hxplay-1.0.7/audio/resampler/hermite.c Change-Id: Id87565a060aa2383701e7c2f3ea023c7555ad9ef