Commit graph

112 commits

Author SHA1 Message Date
James D. Smith
d86240cf91 APEv2: AA: Fix a couple of bugs.
Change-Id: I1345d53f904d9c529dd6e2a7875dab97ffc9c2f3
2025-09-16 20:29:32 -04:00
Solomon Peachy
a2c10f6189 unicode: Support characters beyond the first unicode plane
We used 16-bit variables to store the 'character code' everywhere but
this won't let us represent anything beyond U+FFFF.

This patch changes those variables to a custom type that can be 32 or 16
bits depending on the build, and adjusts numerous internal APIs and
datastructures to match.  This includes:

 * utf8decode() and friends
 * font manipulation, caching, rendering, and generation
 * on-screen keyboard
 * FAT filesystem (parsing and generating utf16 LFNs)
 * WIN32 simulator platform code

Note that this patch doesn't _enable_ >16bit unicode support; a followup
patch will turn that on for appropriate targets.

Appears to work on:

  * hosted linux, native, linux simulator in both 16/32-bit modes.

Needs testing on:

  * windows and macos simulator (16bit+32bit)

Change-Id: Iba111b27d2433019b6bff937cf1ebd2c4353a0e8
2025-09-12 09:24:30 -04:00
Solomon Peachy
84504c7471 Revert "internals: Support characters beyond the first unicode plane (WIP)"
This reverts commit d05c59f35b.
2025-08-20 16:09:49 -04:00
Solomon Peachy
d05c59f35b internals: Support characters beyond the first unicode plane (WIP)
We used 16-bit variables to store the 'character code' everywhere but
this won't let us represent anything beyond U+FFFF.

This patch changes those variables to a custom type that can be 32 or 16
bits depending on the build, and adjusts numerous internal APIs and
datastructures to match.  This includes:

 * utf8decode() and friends
 * on-screen keyboard
 * font manipulation, caching, rendering, and generation
 * VFAT code parses and generates utf16 dirents
 * WIN32 simulator reads and writes utf16 filenames

Note that this patch doesn't _enable_ >16bit unicode support; a followup
patch will turn that on for appropriate targets.

Known bugs:

  * Native players in 32-bit unicode mode generate mangled filename
    entries if they include UTF16 surrogate codepoints.  Root cause
    is unclear, and may reside in core dircache code.

Needs testing on:

 * windows simulator (16bit+32bit)

Change-Id: I193a00fe2a11a4181ddc82df2d71be52bf00b6e6
2025-08-20 16:08:43 -04:00
Solomon Peachy
a12d8e2171 fix yellow in c53e9ba27d
Change-Id: I46f222918d95373e389b16f50d7b0ac112de0f73
2025-06-27 10:08:28 -04:00
Roman Artiukhin
c53e9ba27d metadata: mp4: Fill disc/track count
Show Track Info now shows Discnum/Tracknum as "i/n" (e.g., "1/3" for disc 1 of 3). Previously, it only showed the disc/track number without the total count.

Change-Id: If6b2a73ad0fecc27aaee371f8c860031eacca796
2025-06-27 13:03:57 +03:00
Roman Artiukhin
78903e9d38 Reapply "buffering: remove bufgettail/bufcuttail"
This reverts commit 2bd88936f7. Strip tags functionlity will be moved to codec.

Change-Id: Iff28ff7a29da09632ceed30a7959cc1ee8bf3cc8
2025-05-26 10:59:56 -04:00
Solomon Peachy
2bd88936f7 Revert "buffering: remove bufgettail/bufcuttail"
This reverts commit 9e93796407.

Fixes FS#13626, which is caused by non-audio ID3v1/APE tags at
the end of the audio data stream.

Change-Id: Ic69af14a5d1264b7896a54b5f2ad314022dd98ac
2025-05-20 07:51:48 -04:00
Solomon Peachy
8f3b8390d1 codecs: hopefully silence a -Wshift-negative warning in the metadata code
Change-Id: I023499e098bbc706c2f677a7f7a156ec58bd5b14
2025-04-22 09:00:21 -04:00
Solomon Peachy
9d4632b0c3 misc: Clean up a pile of -Wunused-const-variable warnings
And re-enable the warning (applies to GCC 6+)

Change-Id: I7aa679ec65707db12de83c0433966b3821d07087
2025-04-21 21:13:59 -04:00
Roman Artiukhin
ed40c5a036 metadata: opus, vorbis, speex: Don't fill metadata buffer with album art and cuesheet
Fixup for 0847bcc1. Fixes FS#13586

Change-Id: I2af63747266bf0dea85812354caadca432dfcd32
2025-04-01 08:33:16 -04:00
Roman Artiukhin
849e8abe8d metadata: opus, vorbis, speex: Fix 0 is supplied as base64 char when parsing album art metadata
For some reason it caused a crash on asan enabled simulator builds but worked fine otherwise.

Fixup for 0847bcc1 and ac8714dd

Change-Id: Iff1c2779d5fa6889c743cdccd8e1feaf55684394
2025-03-28 10:13:16 -04:00
William Wilgus
8d2226f952 [Feature] Add failure messages to metadata logging
Previously logging just showed that the file was
passed to the function without any indication that
the parsing failed

Adds status strings to record failure to open, missing parser, parser error

Change-Id: I5234153464bab9a5f9fb765d5e1cfa59dfe0ebfe
2025-03-11 12:16:00 -04:00
William Wilgus
ac8714dd64 [BugFix] vorbis.c metadata invalid index when album art b64 is NULL
Change-Id: I9d08c2e2c903c00d0b2fd25e0dceea28113874a2
2025-02-28 00:27:10 -05:00
Roman Artiukhin
0847bcc110 metadata: opus, vorbis, speex: support embedded jpeg album art
It includes .opus, .ogg, .oga, .spx files

Change-Id: I3d0ee9806b05911fc8c3ce5cb761de87d4166141
2025-02-08 10:02:21 +02:00
Roman Artiukhin
7f4a8891a6 metadata: mp3: Support unsync embedded jpeg album art
Support parsing alubm art from id3 metadata with "unsynchronisation scheme":
https://id3.org/id3v2.3.0#The_unsynchronisation_scheme

Change-Id: I1e2ca4ae0aa967f7e80142a04c9a7d99e38e68b2
2025-01-16 10:08:41 -05:00
William Wilgus
1643e0e287 [Bugfix] metadata.c copy_mp3entry() dest and orig may overlap
I meant to add this with the last patch b07d7d6
since it may supply UNBUFFERED_ID3 to the peek function
which uses UNBUFFERED_ID3 and will try to copy it back
wich is undefined behavior for memcpy

Change-Id: I91160570adac22134c84d3b37f8fcecb097d87d6
2024-12-26 01:29:02 -05:00
William Wilgus
25ab00465e metadata.c don't store encoder filename for all the decoders
there are only 4 encoder capable codecs just make it a function
and add a macro to keep it sane

Change-Id: Iac8833226434f8436bc678f3e409f462764d8fdc
2024-12-24 01:47:18 -05:00
Vencislav Atanasov
5d7c8a0df1 Convert non-ASCII characters to UTF-8
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
2024-12-15 21:16:12 -05:00
Roman Artiukhin
de8d1437dc metadata: asf: Use system utf16decode conversion
Change-Id: I606bf5365c84cbee4badd1ac1cbaace1207834f4
2024-12-15 15:44:57 -05:00
Roman Artiukhin
1f548f74e6 unicode: add utf16decode with utf8 buffer size check
Make use of it in id3tags and cuesheet

Change-Id: I153c23f1f7312e9d5e1de9f03725f2d2ab0abc93
2024-12-15 15:44:57 -05:00
Christian Soffke
63d8aa0077 metadata: mp3: update out-of-date comments
(L1033 + L1170)

As of commit f3e5ced, tags will be parsed
unconditionally, regardless of whether
they've been filled already.

Change-Id: I7edd4b7131b33dba34f06ebe829ebdc00a138525
2024-12-15 09:27:06 -05:00
Roman Artiukhin
004304dc65 unicode: add iso_decode_ex with utf8 buffer size check
Make use of it in id3tags, playlist and cuesheet

Change-Id: Ibc8abc0faf16688bc9b826b7a712d1dfe9bf75b2
2024-12-15 09:26:26 -05:00
Christian Soffke
4cf65ec926 metadata: mp3: fix iTunSMPB info replacing comment
Data from the iTunes seamless playback data field
(support for which was introduced in f3e5ced)
prevents proper comments from being displayed.

Change-Id: Ifb00b1229e636a79a460ba6d706191fcf28b1502
2024-12-13 20:49:18 +01:00
Roman Artiukhin
a23002cd5e unicode: Unify check for UTF-16 BOM
Adds utf16_has_bom function

Change-Id: I67ea474c9cf6ca6e6684351c2f54131164b7903c
2024-12-13 17:38:05 +02:00
Roman Artiukhin
11fbbc7826 metadata: mp3: Reduce size of is_cuesheet function
Saves 80 bytes on Sansa E200V2 (176 -> 96)

Change-Id: I976e47f74641110ef37049101b9eb0db0afe512b
2024-12-13 17:09:29 +02:00
Roman Artiukhin
f7d5da6b2f metadata: mp3: Limit utf-8 buffer stack allocation to prevent stack overflow
Fixes FS#13518

Change-Id: I549ecb21c3dbaba580c13a6a155559585f0aa08e
2024-12-11 11:36:09 +02:00
Roman Artiukhin
18520c27a5 metadata: mp3: Avoid utf-8 buffer stack allocation for utf-8 tags
Change-Id: I9f35fc017efa6e8f36cd295adf662612cf9c6c16
2024-12-11 11:36:08 +02:00
Roman Artiukhin
c1ee278abf metadata: mp3: Avoid utf-8 buffer stack allocation when processing cuesheet
Change-Id: Ife49d5e3f2850e8621f927a4864d7863c103db77
2024-12-11 11:36:08 +02:00
Roman Artiukhin
da478aaa32 metadata: mp3: Simplify comment tag processing
Avoid unnecessary string comparison.

Change-Id: Ib1c5622f7b7760c43c4763930dc4ef6b409dbc05
2024-11-07 07:53:41 -05:00
Roman Artiukhin
2156d9874f metadata: mp3: Improve support for long tags
Increase buffer size by 368 bytes by using id3v1buf.
Limit tag size only if metadata fails to fit without limitation.

Change-Id: I82d551ac75c2e8fcb9ff0ef318445e0e6a1f8148
2024-11-07 07:53:08 -05:00
Roman Artiukhin
063b917f69 Codecs: wma: fix parsing album art
We can't assume that album art file starts right after album art type (apparently it can contain also additional info like filename).

Related to FS#12576 (album art is now shown)

Change-Id: I68c7a1dc536ff13a47fb73ea84539b2f7a44265b
2024-10-23 09:10:18 +03:00
Roman Artiukhin
f3d6196016 Codecs: wma: don't fail in case parsing errors in album art
Fixes FS#12576 (album art is not shown but file is now playable)

Change-Id: Idc8e1dcf7b5760b4fd37c43913a534ed4eae512a
2024-10-19 10:41:23 +03:00
Roman Artiukhin
ff0ad4ca7d metadata: aac: support .aac files with mp4 container inside
Change-Id: Id982c58184197f6b2f9eeb0cf403cc2e30a97e24
2024-09-23 17:43:13 +03:00
Roman Artiukhin
3f3ec8273a metadata: aac: Fix any file is treated as valid aac
Fixup for d50470bc

Change-Id: Ie96a636afd3f18e03d70601628c2731cb7314483
2024-09-21 14:51:50 -04:00
Christian Soffke
23e5f77ab0 Remove mp3info function & remove list_do_action from plugin_api
Change-Id: Ia9a2d6889679832f23b19a989927277ba886cba4
2024-07-26 15:15:06 -04:00
William Wilgus
7e90760a48 [Feature] Playlis to cue plugin
generate valid cue files from a playlist

uses remarks to store extra id3 info and display and playlist index

Change-Id: I00c9f6389445bb601dde6eb8f36157044024f8cb
2024-07-20 07:27:01 -04:00
William Wilgus
fdbaf7df59 [Feature] playlist_viewer id3 title display
Not sure this is a great idea from disk and battery standpoint
but there is no reason you can't..

using the name buffer to fill title data
prevent hitting the disk for each screen scroll

add get_metadata_ex to allow flags
 METADATA_EXCLUDE_ID3_PATH
  prevent copying the filename to the ID3 struct
 METADATA_CLOSE_FD_ON_EXIT
  instead of seeking to the beginning the file is closed before
  get_metadata returns

add logic to allow a invalid fd to signal that get_metadata
should open and close the file within its call

bugfix per Chris_s don't use the tagcache for the trackinfo

Change-Id: Ic7a595b39a8d7a57f975312bc9c8bb4111f22a88
2024-07-09 01:40:02 -04:00
Roman Artiukhin
76ec55cc49 Remove ATRAC3 specific fields (channels, extradata_size) from mp3entry
Also fixes typo of using never initialized id3->channels in wav metadata (introduced in 2d1937a1)

Change-Id: I28cddec2b9d9bd1e756ffaa004b4f6e8528a7566
2024-02-02 09:36:53 -05:00
Roman Artiukhin
d50470bc7d Codecs: aac: Improve ADTS stream detection
Captured ADTS streams might start from some garbage data from previous frame. We should check for sync errors even for first frame.

Change-Id: I70171298b79713aeedf9fa2e6098a03063487649
2024-01-21 20:08:04 -05:00
roman.artiukhin
4cd65b9d97 Codecs: mp4: Disable SBR decoding for PP5002 - PP5022 platforms
Includes ipod video (5G) and earlier models, sansa c200 and others players not capable to decode AAC-HE.

Allows to play backward compatible files as AAC-LC.

Change-Id: Ic9f5c0f255d9a4308c3414d402f8f27f4328ca94
2023-12-31 20:44:15 -05:00
roman.artiukhin
11b8336c64 Fix rewind on resume is applied for skip length across tracks action after auto frequency switch
Add resume adjustments flag in mp3entry struct which is required for proper AUDIO_START_RESTART resume handling

Fixup for 4fb37ecb (#5196)

Change-Id: Ie9ecfe2b637bba38e442066333d71eeff01030ad
2023-10-31 13:46:07 -04:00
Aidan MacDonald
1131320d48 Remove structec API from codecs
Change-Id: I1e67582c0521e6354b0175a11fcf690ae40dbd88
2023-10-01 12:10:41 +01:00
roman.artiukhin
d05f6aac2d Codecs: mp4: Skip FOURCC filetype chunk check
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
2023-09-29 08:21:27 -04:00
roman.artiukhin
35150b83d4 Codecs: mp4: Fix sbr detections for some files
Use logic from libfaad/mp4.c AudioSpecificConfig2 for sbr detection

Fixes FS#12856

Change-Id: I235aa27830aa99f1307b303347f7affe7deafbe3
2023-09-20 10:03:27 -04:00
roman.artiukhin
d2f7777f7a Codecs: mp4: metadata: Fix time length in very large files
Fix 40 hours long book reported as 14 hours due to samples overflow

Change-Id: I5988d4492b1f51081fff921180de6fe384ab5f4f
2023-09-15 09:08:02 -04:00
Wolfram Sang
88f4f1c8d0 metadata: sid: allow RSIDs as well
cRSID also allows to play RSIDs (hence the name of the library). So,
allow them as well.

Change-Id: Iae8f0ac083ed714771767a4c23f5a09bad637208
2023-02-07 09:19:32 -05:00
William Wilgus
9367ef1ed6 [BugFix] Fix some Shif related UB -- ASAN
these are the low hanging fruit identified by ASAN

cast the byte values before shift

Change-Id: Ifc5645354a10c15ccd09d1343e1705857a51e011
2023-01-04 22:00:25 -05:00
William Wilgus
972810f6cf strlcpy finish cleanup
remove strlcpy & strlcat from string.h

document suspicious strlcpy call

convert strlcat.h users to string-extra

Change-Id: I313e75db86385c0e6d1aee75d252093be4935f60
2022-11-17 01:54:46 -05:00
Aidan MacDonald
9e93796407 buffering: remove bufgettail/bufcuttail
These operations can only be used in limited circumstances and have
exactly one user. bufgettail especially seems of dubious value; how
often do you need to read N bytes from the end of a file without
changing the file position?

strip_tags() was the only function using them, to strip off ID3v1
and APE tags off the end of buffered tracks. This would save only
32-192 bytes per track -- if the container format uses APE/ID3v1.
It hardly seems worth the effort.

Change-Id: I8fc3c1408517eda6126e75e76d76daea904b50eb
2022-04-20 16:51:49 -04:00