Commit graph

244 commits

Author SHA1 Message Date
Solomon Peachy
9f0f2c6658 metadata: Fix sign extension in get_uint64_le() routine
Change-Id: Ibd85cf72ac1babd1fa636c341b90b76bdfc0491b
2021-08-05 13:44:39 +00:00
Aidan MacDonald
005c414e5f Document intentional fallthroughs + fix harmless unintended ones
Change-Id: I1ca5b1027ec30cbf61093bab35b980196ed14e6b
2021-08-04 18:59:46 +00:00
William Wilgus
0501af8b06 metadata/flac.c fix potential buffer overrun
Change-Id: Iee12f251455c4fda9d91d10e466d17e5e02046b9
2021-08-02 03:00:01 +00:00
William Wilgus
247731fe8c id3tags.c check for buffer overrun
Change-Id: I74fde8e234fe85abfabefddcea7f10038167c715
2021-08-01 22:29:14 -04:00
Aidan MacDonald
2e9443104f rbcodec: Fix typo in makefile
Hopefully this will fix all those random build failures.

Change-Id: I02ff625c538a21f20b33874b4ab54ed8c893a433
2021-07-25 15:55:36 +01:00
Solomon Peachy
144d1b1e81 misc: Fix up a few warnings uncovered by LTO
* direct use of memcpy() instead of ci->memcpy() in flac and mod
 * uninitialized variable in mpegplayer

Change-Id: I2d08682d5f66c319780e69e3ff63d600c61d8f5a
2021-07-15 18:37:42 +00:00
Solomon Peachy
2e9b93dc5d build: Nuke the ASMFLAGS workaround for gcc 3.4.x
Change-Id: I0f21e9539d39afd54916fa8d84ce798eef474a2c
2021-07-08 20:47:30 -04:00
Solomon Peachy
2ff3425ab1 build: Rename SHARED_LDFLAG to SHARED_LDFLAGS
Change-Id: Icb81c72fbcfcdad624112a386ba38a40a830d18f
2021-07-08 19:53:05 -04:00
Solomon Peachy
2ed4bf8a43 FS#13299: Handle MP3 files with more than 128K of headers before audio data
Encountered a file with ~600K of ID3v1 headers.

Optimize the potential overhead by minimizing reverse seeks.

Change-Id: I972dbf1af1c36659f19c7ab4eed0b9149c642880
2021-06-16 17:37:29 -04:00
Solomon Peachy
fa9ddd5af9 Revert "FS#13299: Simplify VBR frame parsing in the metadata decoder."
This reverts commit 756c0d2ac8.

Change-Id: I5f98972f69e7645239fd9218c9d4eeb9bd2ec7a5
2021-06-16 16:58:47 -04:00
Solomon Peachy
756c0d2ac8 FS#13299: Simplify VBR frame parsing in the metadata decoder.
The old code would seek forward by the frame length, expecting to see a
frame header there, perform a validity check, and then seek back to the
current header.

Unfortunately this doesn't handle situations where there is extra padding
between the frames, leading us to potentially read garbage, causing the
validity tests to fail and rejecting the file outright.

Instead, keep track of the previous valid header/position, and if we find
"valid" headers in a row return the first after seeking back to it.

This change allows the file referenced in FS13299 to be properly parsed, but
further work is needed to get the file to be playable.  (file reports itself
as layer 1, variable bit rate, variable sample rate!)

Change-Id: I85f61a6360cc041a172db4b7a6b5516e5b60ceee
2021-06-13 12:13:03 -04:00
Solomon Peachy
942b1dd072 FS13094: Fix a divide-by-zero crash parsing zero-length WMA/ASF files
Change-Id: I2e90692327c69c4467a586b23b877c596b8d2c40
2021-05-12 18:22:06 -04:00
William Wilgus
14c6bb798d Sync opus codec to upstream git
Change-Id: I0cfcc0005c4ad7bfbb1aaf454188ce70fb043dc1
2021-04-23 14:23:04 +00:00
amachronic
0fb333c85e rbcodec: Fix typo in include guard
Change-Id: I503ace58fb46e803c66b92113d2be7daebeb8b71
2021-04-06 17:27:06 +01:00
Christian Soffke
a8846e3003 Increase id3v2 max item size on high mem targets
As per multiple user requests:
https://forums.rockbox.org/index.php/topic,53319.msg

The acceptable size for id3v2 fields currently maxes out at
240 bytes on targets with more than 2MB of memory.

The comments field, especially for Podcasts, can sometimes
contain significantly more characters than Rockbox allows.

The limit for devices with more than 8MB of memory
is increased to 500 bytes for individual fields, and
to 1800 bytes for the buffer containing all fields.

Change-Id: I4593372229158756f102f67bcc4a43e64f632d58
2021-03-22 02:50:51 +00:00
Solomon Peachy
2628155fc9 Clean up places that use #if defined(CPU_ARM | CPU_COLDFIRE | CPU_MIPS)
Since that encompasses _all_ of our native targets in a post-archos world,
either replace it with #if (CONFIG_PLATFORM & PLATFORM_NATIVE) or
delete it altogher as appropriate.

Change-Id: I9128a456e850d5c96a9e05806aad3acd923f90c5
2021-03-04 14:14:33 +00:00
William Wilgus
2cde135cfe flac fix dumb typo
Change-Id: Ic6269ca35374bcb1d6a5ad2c1848a1718fa4e01c
2021-03-03 02:58:34 +00:00
William Wilgus
118191479d Nudge flac towards upstream FS#13266 -- Fix the Yellow still?
Change-Id: I76056b1a682db055857d759d2ebffae111a8a4c0
2021-03-02 19:47:07 -05:00
William Wilgus
2252bde144 Nudge flac towards upstream FS#13266 -- Fix Yellow
unused variables

Change-Id: I69e1435941da6207c75d0f3cb862dee296a5cc1a
2021-03-02 19:20:39 -05:00
William Wilgus
a017219488 Nudge flac towards upstream FS#13266
Some flac encoded files contain junk that our decoder
picked up

upstream has some sign and overflow fixes too

Change-Id: I5857b2fe56906a48f04944cdfee8fe2306f2c3fd
2021-03-02 23:48:05 +00:00
Solomon Peachy
7418ec5009 FS#13267: Fix crash when enabling Perceptual Bass Enhancment during playback
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
2021-03-01 19:02:22 +00:00
Solomon Peachy
670812a44a Support MP3 audiostreams embedded in ASF containers.
Full credit to Igor Poretsky

Change-Id: I54769e33665cada1e1e0ef3a5511b56c8e1b859a
2021-02-28 16:11:54 +00:00
Solomon Peachy
bdc3dd4fca MP4: append mdat sections together in metadata parser
mp4 files can have multiple 'mdat' chunks.  This is common for
audiobooks, where there is often a secondary mdat containing the
chapter names, but it's also legal to have multiple mdat chunks
for a single logical "track"

This confuses the mp4 metadata parser, which assumes there is
only a single mdat, and always uses the last mdat seen to
determine the "filesize" of the data we're trying to decode.

Work around this by appending each mdat's size to result in the final
"filesize"

Change-Id: I3e7a7efb0f05ef965e8d77f79e450c957524a480
2021-02-19 13:35:41 +00:00
Solomon Peachy
621e363e70 libgme: Fix yellow in hosted MIPS builds
Change-Id: I6d25c014cc519ddc5d1619c25d48331f512c2f2f
2020-10-28 07:30:10 -04:00
Solomon Peachy
bcbf8bbf0a wmapro: Backport multiple fixes
upstream commits:

 780d454
 b28c678
 9166f48
 97a5add
 b21ba20
 f734671
 b86dd1
 b4027d9
 50f0a6b
 4c0080b
 c7a7605
 5dcb990
 7ad698e

Change-Id: I8e6d74316e1eaf22217a57ddb54c1ea8303e6788
2020-10-28 02:12:01 +00:00
Solomon Peachy
b4865b05b0 Build: Bump all toolchains to GCC 4.9.4 + Binutils 2.26.1
GCC 4.9.4 was already used for MIPS and all hosted targets; this enables
it across the board for everything (ie m68k and arm native)

Other changes:

 * Use '-Os' as the default optiomization for all targets
   (was only disabled for arm native)
 * Enable -funit-at-a-time and -Wextra
 * Drop all obsolete toolchain patches
 * Update ARM multilib/exception patch
 * Bump toolchain libs (gmp, mpfr, mpc) to recommended versions, and
   add 'isl' to enable better optimization & vectorization opportunities.

   (Will revisit optimization for the codecs and plugins at a later date)

Confirmed working:

 * armv4t     (ipodmini2g and many other PP502x targets)
 * arm >= v5  (sansaclipplus, ipod6g, ipodnano2g, sansafuzeplus)
 * m68k (ihp100)

Change-Id: If9ed405ae0f289d9adea46d4cf46bfefc2f4250d
2020-10-13 16:27:07 +00:00
Solomon Peachy
4231c2c83f codecs: Add support for the 'VTX' ZX Spectrum chiptunes format.
This codec requires floating point.

Original author:  Peter Sovietov
Ported to Rockbox:  Roman Skylarov
Further integration and bugfixes:  Solomon Peachy

Change-Id: I781ecd3592dfcdbbc694063334350342534f1d6c
2020-10-09 11:39:25 -04:00
Solomon Peachy
49a2953ade surround: Fix two issues with the haas surround code.
1) Handle ID 0 is legal
 2) Make sure handle is initialized before trying to memset its buffer

Change-Id: I91db157863800c01dd9b92bc05a1df5c4fe0e95b
2020-09-08 13:38:26 +00:00
Solomon Peachy
8c7780bafc flac: fix warning introduced in 5758a05
Change-Id: I649f7c356b8b790d6dfbd071a8e391a84d0cdcca
2020-08-10 14:32:40 -04:00
Yuxuan Shui
5758a055fb Handle EOF properly in get_flac_metadata
Change-Id: I5e581990046a9f4a0859787aff2fd6fc06fbf7f5
2020-08-10 14:14:58 -04:00
Solomon Peachy
658026e626 [4/4] Remove HAVE_LCD_BITMAP, as it's now the only choice.
Note:  I left behind lcd_bitmap in features.txt, because removing it
would require considerable work in the manual and the translations.

Change-Id: Ia8ca7761f610d9332a0d22a7d189775fb15ec88a
2020-07-24 21:20:13 +00:00
Solomon Peachy
8cb555460f [3/4] Completely remove HWCODEC support
'swcodec' is now always set (and recording_swcodec for recording-capable
units) in feature.txt so the manual and language strings don't need to
all be fixed up.

Change-Id: Ib2c9d5d157af8d33653e2d4b4a12881b9aa6ddb0
2020-07-24 21:20:13 +00:00
Moshe Piekarski
e884140eae Add support for ID3 tags embedded in AIFF files
Change-Id: I15eb50b6ba1c26052f08e01861f47faede3b9b3b
2020-07-15 18:30:07 +00:00
Solomon Peachy
82943ea1c7 opus: shrink stack usage by nearly 700 bytes
By moving three structures to the heap.  None are in the hot decode
  loop, instead having to do with file sync / header state.

  Has neglible impact on performance (within measurement noise) on Clip+,
  Rocker, and Xduoo X3.

  On PP5022 (ipodmini2g) performance drops from 138.66% to 138.22% realtime.
  (0.3%)

  Unknown effect on Coldfire which lacks D$.

  Stack savings are pretty significant especially on lowmem devices.

Change-Id: Ic8a1e93062ff5a46230e824134032053c4e1986d
2020-07-15 15:09:08 +00:00
Solomon Peachy
17a367e0c4 FS#12966: display '+' for positive replaygain values
Change-Id: I976d5511096c2d4d19eb14fa1c6adf8dd3cd9006
2020-07-09 22:18:25 +00:00
Moshe Piekarski
9cf2492407 Fix logf warnings in more codecs
Change-Id: I7e83a9979aedadf3b7c2b162a8202efdc6227e88
2020-07-03 03:43:47 +00:00
Moshe Piekarski
3e7ab2a284 Fix logf build warnings in speex codec
Change-Id: I8ce9473c98f863cc53273c16b2e55321d7b0795a
2020-06-28 03:24:20 +00:00
Moshe Piekarski
59454f93b3 Add support for some native AIFF metadata fields
Change-Id: I710480a119e0a9b930a13184ed6571fd2dc1bd01
2020-06-22 18:04:40 +00:00
James D. Smith
3cc3e600fe Get APEv2 tag album art format from magic number. Also support bmp artwork.
Change-Id: I81d8f79f47f09528e2f7fa462e579350451c81f1
2020-04-26 13:05:39 -06:00
Solomon Peachy
2deb7d7a8e libedemac: ARMv7 asm code is for NEON-equipped processors only
Change-Id: Ief36c70b47ec25932651a146051a29224bdd2a0b
2020-04-15 00:35:35 +02:00
Solomon Peachy
022dfe7ab3 sid: Fix an out-of-bounds read in the channel mixing code
Change-Id: Ie25b8ab90193e6bb580cd7c04f8c0ce281f7a301
2020-03-28 11:43:23 +01:00
William Wilgus
0ff6a31d7d opus reset decoder on seek completion to prevent stack overflow
apparently we should be doing this anyway

mark4o> The packets overlap and may reuse state set by other recent packets,
        so if you seek to a different position,
        resetting the state helps to ensure that the subsequent
        packets won't use the state set by the unrelated packets
        that were processed before the seek.

remove stack bump WORKAROUND_FS13060

Change-Id: I1c14e23b1721a360b91e3e55202c1557aef0fcc6
2019-08-14 17:54:35 +02:00
Solomon Peachy
22c6326974 Improvements for vbrfix plugin:
* Properly account for ID3v1 tags
 * Play time computation fixes
 * Add speech feedback

Patch by Igor Poretsky

Change-Id: Ia6df8fb171882a88527cfa9d3b76b705f09becdd
2019-08-13 17:07:07 +02:00
Solomon Peachy
f2fd8fe79b FS#11052 -- SID Playback in Stereo
Original patch by Stefan Waigand
Updated by Igor Poretsky

Change-Id: Icaf7beb8349ab90e21b94baee627c9412cb2b55d
2019-07-31 17:00:40 +02:00
aozima
975e309264 fixed alac_set_info() issues. 2019-07-25 18:16:48 -04:00
William Wilgus
8cadef4cbb opus fix playback opustag skipping
Change-Id: I9ec35e276e24ec7b5a2e1199d6264d9f2d5d9fc2
2019-01-25 17:50:39 +01:00
William Wilgus
9605237349 opus fix comment skipping code
opus requires the comment header to be a valid file our codec attemps to skip the comment data
in order to reduce the ram allocated originally it caused files with large album art to skip
the beginning of tracks my first attempt at fixing this then caused files with low bitrates
to do the same while fixing files with large album art

This patch should fix both although the initial start might be a bit slower but
this shouldn't cause too much of an issue

Change-Id: Ia1c3561347894cc45f24bb2659436914f8f03b43
2019-01-25 04:18:51 +01:00
William Wilgus
00943537e6 opus optimize playback function
knocks off about .5 second from decode time not a big change but might help a bit on
devices that barely achieve realtime

Change-Id: If6e822b7273613c9449c102ce7dd3543bf975d37
2019-01-23 23:37:46 +01:00
William Wilgus
100f4338de Fix Opus FS#13133 - Files with embedded artwork 45.8KiB+ skip near beginning
ogg_sync_reset() causes issues on the partial page boundary
due to the next page (already in buffer) being discarded

instead seek next page boundary past complete page

Change-Id: Ic05f188f489b015693d663f131e09cd92ad37ff7
2019-01-04 06:56:52 +01:00
Solomon Peachy
2c6094843c Third attempt to shut up the warble build printf() warning.
(resorting to an explicit cast this time)

Change-Id: Ib5fc7bcd9e573cd32fc4372003c6c5429e339652
2018-12-28 07:57:23 -05:00