AgeCommit message (Collapse)AuthorFilesLines
38 hours[Feature] resume TSR plugins after interruption WIPHEADmasterWilliam Wilgus6-124/+177
save tsr plugin path for later resume tsr plugin when user stops the interrupting plugin expand return of tsr_exit function to allow continue, suspend, terminate tsr plugins check parameter at start to determine if the plugin is being resumed Change-Id: I6fc70de664c7771e7dbc9a1af7a831e7b50b1d15
2 daysplaylist: Remove control file cacheAidan MacDonald2-207/+65
Control cache entries cost 24 bytes per command, but cacheable commands are always less than that when written out to the file. We can actually cache *more* data by writing commands directly to the fd (native Rockbox has a 512-byte cache per fd) and it's much simpler. Change-Id: Ibb1b9ffa56ef17431b281419a04082e14d0cbd85
2 daysplaylist: Unconditionally strip bogus dirs in playlist_peek()Aidan MacDonald1-16/+13
The intent behind the check is to only do this if the filename comes from an on-disk file. With the RAM buffer is gone this is now "always" the case. Change-Id: I4c26e32c482dde176b69a6071e9562e9955d7171
2 daysfiletree: Remove dead code in ft_build_playlist()Aidan MacDonald1-17/+1
This checks for an out of memory condition when the filenames were buffered in RAM. The playlist no longer buffers anything in RAM so the code is unreachable. Change-Id: I4c2d0b2ac4ba3b7e7c94fe554a0cf7cb1a798e09
3 daysplaylist: Remove in-ram filename storageAidan MacDonald2-81/+18
Use the playlist control file for directory playback instead of storing filenames in RAM. The implementation of that feature is very iffy and probably responsible for random crashes that may occur when skipping through directories rapidly. Change-Id: I3863940cd4542410d8046a3ca47508b5d97309a1
3 daysplaylist: Clean up close_playlist_control_file()Aidan MacDonald1-20/+26
Move locking outside the function since most callers already hold the lock. Change-Id: I4b6774e2322c86962b4cc7a5f33d13cd4ffb1c7b
3 daysplaylist: Add helpers for opening/closing .m3u playlistAidan MacDonald1-23/+39
This helps maintainability and ensures the opening is done consistently. Change-Id: I7805716182dfa93f917d54d40f8e420e87da16b0
3 daysplaylist: Cleanup get_next_dir()Aidan MacDonald1-16/+3
Pass the direction as a signed integer to avoid jumping through unnecessary hoops. Change-Id: I1a36c3804b5f7103464f0d2ee69d060505261274
3 daysFix unified syntax in ARM inline assemblyAidan MacDonald7-9/+28
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
3 daysUsing ARM Unified Assembler LanguageChris Chua23-127/+139
Change-Id: Iae32a8ba8eff6087330e458fafc912a12fee4509
3 daysplaylist: Simplify playlist modified detectionAidan MacDonald7-47/+30
Any modifications to the playlist (insert, delete, shuffle, etc) will cause the modified flag to be set. The flag is cleared when the playlist is saved. Code that generates playlists can manually clear the modified flag if appropriate; there is now a proper API for this so the tagcache and pictureflow don't need to resort to hacks. Change-Id: I8d3c723265a41db07a13de3f1d2abb0444528d57
5 daysplugins: Simplify plugin/codec API versioningAidan MacDonald7-37/+49
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
6 daysmakefiles: Fix escaping issues under GNU make 4.2Aidan MacDonald1-2/+8
Make 4.3 and newer doesn't interpret comments in a shell call, whereas Make 4.2 and older do. Escaping the comment directly works on old makes, but on new makes the backslash is passed as well -- which we want to avoid. The safe way to pass a literal "#" character to the shell on both versions is by embedding it in a variable and expanding that. It's ugly, but it works... Change-Id: I1a217c42d747fd5aa83f9990c234e06966ac1a00
6 daysmakefiles: Suppress stray backslash warnings with grep 3.8Aidan MacDonald5-7/+7
GNU grep 3.8 warns about "\#" when compiling. The "#" has to be escaped for Makefiles and shell, but it isn't special to grep so grep thinks it's an invalid escape sequence. Change-Id: Ieb2607d42b7daa1939ca0101b915ec0c7afd4298
6 days[Feature] lastfm_scrobbler add option to set beep volume levelWilliam Wilgus1-7/+17
Change-Id: Id045f0f844b67f07ba5cd47d084f5d8f1841dad8
8 daysFix locked context fallthroughAidan MacDonald17-66/+20
Enabling locked actions for all softlock targets accidentally broke keylock on touchscreens because the generic touchscreen keymap was missed. Trying to lookup CONTEXT_WPS|CONTEXT_LOCKED returned the mapping for CONTEXT_STD because the locked version wasn't explicitly handled. But on almost all cases, a context's keymap does not change when the screen is locked. It makes more sense to mask out the locked flag and only check for it where needed. Change-Id: I65cda2de82950d272d4394fd772286699e7c3779
9 days[Bugfix] open_plugin_browse() not showing pluginsWilliam Wilgus3-5/+24
rockbox_browse() overrides the desired dirfilter with global_settings.dirfilter if you aren't using one of the SHOW_ modes > NUM_FILTER_MODES (which come with their own sideeffects) add flag BROWSE_DIRFILTER to override global_settings.dirfilter with browse_context.dirfilter add ability to set tc->browse to NULL to exit dirbrowse immediately Change-Id: I2f40d394f9dc0864b2041293eda219f7436a7bf0
2023-03-09[BugFix] chunk_alloc pass NULL to buflib_shrinkWilliam Wilgus1-1/+1
old_chunk has already been unpinned therefore the address could be incorrect NULL will ensure buflib_shrink uses the same start address Change-Id: I9371e4f8263c6e5bf769108a8558dc938d4c8b87
2023-03-03Update english-us "translation"Solomon Peachy1-1/+52
Change-Id: Ief43b8b7c852af5fca0225b26a94801fdf6ab2e1
2023-03-03FS13390: Update Polish Translation (Adam Rak)Solomon Peachy1-76/+54
Change-Id: I7dc58071b37cf149a620d462dd73a28d482d6f0d
2023-02-16[BUGFIX] chunk_alloc pinned bufferWilliam Wilgus1-1/+3
if there weren't previous chunks new buffer was pinned without being unpinned Change-Id: Ia45bc0eb67673e8df5154447d9116fcd4c147f6b
2023-02-15font.c cleanupWilliam Wilgus2-30/+23
find_font_index can use font_filename_matches_loaded_id() font_path_to_glyph_path doesn't need strcat Change-Id: I8d1d36a68abbc700078d651eed930035641b6240
2023-02-15usb screen: honor HAVE_LCD_SPLITWolfram Sang1-0/+18
Clip+ displays the logo with the LCD split inbetween. Calculate the y offset to be directly after the split if possible. Thanks go to William Wilgus for fixing a similar issue and pointing me to macros I was looking for. Change-Id: I2183aec1149ce74ffb840716910d2051e4a284ed
2023-02-15font.c return false if id is out of range instead of NULLWilliam Wilgus1-8/+8
forgot to change this to match the bool return Change-Id: I2cc6dc985b07f2bc0ae493b060aff6105f329097
2023-02-15[BugFix] font.c filename was movableWilliam Wilgus3-31/+24
stupid bug on my part font_filename was pointing to a movable alloc therefore that data could be moved out from under the returned pointer instead pin the internal calls to core_get_data and remove font_filename in favor of a function that checks if a filename matches the loaded font as this was all it was used for anyway Change-Id: Iebb47ffe3f81aa9d5e3968975f26d64283633ffc
2023-02-09tagtree.c optimize get_tag()William Wilgus1-59/+74
store tag length to shortcut strcmp this is nearly as fast as making a hash table using gperf its not the hottest path but its even slightly faster to shortcut based on string length if (tagstr_len > match->len) continue; else if (tagstr_len < match->len) break; but I found no measurable difference I don't think its worth the extra constraint of keeping tags sorted Change-Id: I4bb47cc6c5b8266d5f13c4ac78ae11d55ecb2d67
2023-02-07SID: Disable SID on 2MB targets, as cRSID needs a lot of RAM.Solomon Peachy3-3/+6
Also add a note that SID might not play in realtime on all targets Change-Id: Ic14b20a7c1427e31e38204ae3ecff6bd235ec1b4
2023-02-07metadata: sid: allow RSIDs as wellWolfram Sang1-1/+1
cRSID also allows to play RSIDs (hence the name of the library). So, allow them as well. Change-Id: Iae8f0ac083ed714771767a4c23f5a09bad637208
2023-02-07codec: sid: use cRSID as a library for playing SID filesWolfram Sang6-1272/+76
Change-Id: Iee70933e47ff8df8f26c9a63112de4da4a8e6c17
2023-02-07codec: sid: split cRSID header into a public and a private headerWolfram Sang4-165/+176
Needed to compile cRSID as a proper library. Change-Id: I276967f46037bd65db1ff38985a781183fc26a00
2023-02-07codec: sid: add cRSID-1.0 for 21st century SID playbackWolfram Sang12-0/+2525
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: Change-Id: I353e12fbfd7cd8696b834616e55743e7b844a73e
2023-02-07tagnavi make track submenuWilliam Wilgus4-70/+90
add some faster options to the track menu add a shortcut for basename formatting sort basename results filename - by sorted filename title - just title no formatting untagged items are unsorted as well title mm:ss - title and duration Change-Id: I90aea95051f6231580ef7f1fc08cd2d0d69601fb
2023-02-05Revert "tagtree remove unneeded strlen"William Wilgus1-1/+1
This reverts commit 8379c6eb07e7daf26ca74aac7f46c4e331743d84. Reason for revert: tcs.result_len is not the same as strlen(dptr->name) + 1 since it gets filled with filename Change-Id: I1264afc0a43ffe75adf1de00d27ab98e3adbca19
2023-02-04[BugFix] tagcache.c fix off by one error in find_entry_disk()William Wilgus1-4/+7
the tagcache counts the null terminator strlen however, does not no matching entries makes for a terrible amount of disk searching and a hang on devices without dircache to save them Change-Id: Id3460037199ee9853de0f11e4763a7ff11130e45
2023-01-30font.c dynamic path nameWilliam Wilgus1-8/+25
only alloc enough space for the path instead of a fixed buffer round up the path buffer size to slightly more thna the longest common path length to reduce reallocations Change-Id: I51b8b17584d6a905ea3a66a7c38b7b1b9da2e786
2023-01-29playlist: Annotate locks as read/writeAidan MacDonald1-70/+65
Distinguish read locks from write locks to aid converting the mutex to an MRSW lock at some point in the future. Everything is a write lock for now and a mutex is still used, so there's no change in behavior. Change-Id: I25aeed580580bdb0c3048fc7e1eaad1c32c30159
2023-01-29playlist: Optimize playlist_remove_all_tracks()Aidan MacDonald2-21/+89
This was insanely slow for large playlists. Implement it as a constant-time operation to avoid the O(N!) blowup, and add a new "clear" command to the control file to avoid flooding it with individual delete commands. Change-Id: Ied82d1cba015591edd583f2a2ff6772108f4e176
2023-01-29playlist: Remove unused PLAYLIST_DELETE_CURRENTAidan MacDonald2-9/+1
Change-Id: I4d1a8798aca249d343ca27a9973213d427b73963
2023-01-29pdbox: Move core thread off COPAidan MacDonald1-1/+1
This is all but guaranteed to be broken since pdbox doesn't use SHAREDBSS_ATTR or SHAREDDATA_ATTR, needed to share memory safely with COP threads. Judging by the codec performance comparison on the wiki, if the iRiver H100 and H300 can run PDbox on one core, PP targets should have no problem doing it - they are 2-4x faster even on codecs that don't have multi-core optimizations. Change-Id: I8f556013146cb670f69cc42e80b1c768ba0f74cd
2023-01-27fix red #2 d6fb80d4William Wilgus1-1/+1
Change-Id: I147e9b8f7c8e64234f55d39f9ac7c7253b065f9a
2023-01-27fix red d6fb80d4William Wilgus1-1/+2
Change-Id: I805490f660626f48220b41de3ee1026c260d0067
2023-01-27debug_menu database delay redrawWilliam Wilgus1-2/+10
only redraw every 100 entries Change-Id: Ie0bb54812c1b8341aa4d8303341904d17baa2890
2023-01-27Tagcache - Ramcache Move ref checks, speed up disk searchesWilliam Wilgus3-169/+228
move loading file reference to a separate function some optimization of the disk search function check tag length before reading the actual entry & reduce number of lseek calls this affects startup resume as well before tagcache is done loading Change-Id: I2bd2fc53c4870416ecd1a4034b34cb6984d8ad51
2023-01-23usb: Fix iPod video connection issuesAidan MacDonald1-2/+7
Apparently a response is coming out of nowhere and tripping this check. I can't be bothered to look into it; it would be better to just update the ARC USB driver to the new control request API... Change-Id: Ic5062443e060534f170d3afe17c00d3c25d1d3bd
2023-01-23Fix yellow 65b3ff81c5Aidan MacDonald1-0/+5
Change-Id: Ibf99e4e6f98021b35d420520219287336bf25f0e
2023-01-23playlist: Fix dircache scan thread deadlocksAidan MacDonald1-221/+246
Fix deadlocks in the dircache scan thread caused by incorrect lock ordering. Mutating operations need to stop the thread to prevent it from accessing invalid data; this must always be done before taking the playlist lock to avoid deadlocking the scan thread. Change-Id: If719a8b28ed0b0b3eac068073581e606c4a5f58a
2023-01-23playlist: Fix mutex initializationAidan MacDonald2-9/+12
This is a one-time thing; make sure it doesn't happen more than once. Change-Id: Ic42f48e5714dff2906c252ecd091989d2d6e5a86
2023-01-23playlist: Refactor control cache flushAidan MacDonald1-48/+53
Make background control file flushing work on non-dircache targets. It has nothing to do with dircache and doesn't belong in the dircache scan thread. Change-Id: I3f39261ccaebb5dce69e7db3d2e0c0c0c54f640b
2023-01-23playlist: Remove volatile from indicesAidan MacDonald1-1/+1
This is not necessary. Volatile doesn't create a memory barrier wrt. non-volatile accesses and there are no interrupts involved, so there's no reason to use it here. Change-Id: I78299e2f318e68735364601b3bc2aa036e71130e
2023-01-23playlist: Remove current flagAidan MacDonald2-5/+3
Only current_playlist will have it set, so compare pointers instead. Change-Id: I46dc7baef9699990962176db7c8796bba1e4809d