codec: sid: use cRSID as a library for playing SID files

Change-Id: Iee70933e47ff8df8f26c9a63112de4da4a8e6c17
This commit is contained in:
Wolfram Sang 2023-01-19 22:53:26 +01:00 committed by Solomon Peachy
parent 15c0f0576e
commit 70ce734ece
6 changed files with 77 additions and 1273 deletions

View file

@ -714,6 +714,7 @@ James Le Cuirot
Michael Landherr Michael Landherr
Roman Artiukhin Roman Artiukhin
Richard Goedeken Richard Goedeken
Mihaly 'Hermit' Horvath
The libmad team The libmad team
The wavpack team The wavpack team

View file

@ -0,0 +1,19 @@
Some notes about cRSID usage in Rockbox
by Ninja (Wolfram Sang) in 2023
The cRSID codebase is from v1.0. The only change made was a separation of the
cRSID header into a public and private one, so it could be compiled as a
library. You can find it as a separate commit in the git repository. This
likely needs to be updated whenever a newer version of cRSID shall be used.
Currently, newer versions of cRSID are available but they have been discarded.
v1.1 mainly adds a high quality playback mode using 7x oversampling. This is
too much for a Sansa Clip. Because the old playback mode still exists, it might
be possible to add a runtime option to let the user choose. As a first step
however, it was decided to give the user a working codec without having to deal
with options. v1.2 mainly adds a SDL-based GUI player, no bigger changes in SID
emulation. Staying with v1.0 also keeps the codec size significantly lower
(~50KB for v1.0 vs ~90KB for v1.2 on the Sansa Clip).
cRSID Releases can be found here:
https://csdb.dk/search/?seinsel=releases&search=crsid

View file

@ -0,0 +1 @@
libcRSID.c

View file

@ -0,0 +1,16 @@
# __________ __ ___.
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
# \/ \/ \/ \/ \/
# cRSID
CRSID := $(CODECDIR)/cRSID.a
CRSID_SRC := $(call preprocess, $(RBCODECLIB_DIR)/codecs/cRSID/SOURCES)
CRSID_OBJ := $(call c2obj, $(CRSID_SRC))
OTHER_SRC += $(CRSID_SRC)
$(CRSID): $(CRSID_OBJ)
$(SILENT)$(shell rm -f $@)
$(call PRINTS,AR $(@F))$(AR) rcs $@ $^ >/dev/null

View file

@ -65,6 +65,7 @@ include $(RBCODECLIB_DIR)/codecs/libgme/libvgm.make
include $(RBCODECLIB_DIR)/codecs/libgme/libkss.make include $(RBCODECLIB_DIR)/codecs/libgme/libkss.make
include $(RBCODECLIB_DIR)/codecs/libgme/libemu2413.make include $(RBCODECLIB_DIR)/codecs/libgme/libemu2413.make
include $(RBCODECLIB_DIR)/codecs/libopus/libopus.make include $(RBCODECLIB_DIR)/codecs/libopus/libopus.make
include $(RBCODECLIB_DIR)/codecs/cRSID/cRSID.make
# set CODECFLAGS per codec lib, since gcc takes the last -Ox and the last # set CODECFLAGS per codec lib, since gcc takes the last -Ox and the last
# in a -ffoo -fno-foo pair, there is no need to filter them out # in a -ffoo -fno-foo pair, there is no need to filter them out
@ -101,6 +102,7 @@ $(WAVPACKLIB) : CODECFLAGS += -O1
$(WMALIB) : CODECFLAGS += -O2 $(WMALIB) : CODECFLAGS += -O2
$(WMAPROLIB) : CODECFLAGS += -O1 $(WMAPROLIB) : CODECFLAGS += -O1
$(WMAVOICELIB) : CODECFLAGS += -O1 $(WMAVOICELIB) : CODECFLAGS += -O1
$(CRSID) : CODECFLAGS += -O3
# fine-tuning of CODECFLAGS per cpu arch # fine-tuning of CODECFLAGS per cpu arch
ifeq ($(ARCH),arch_arm) ifeq ($(ARCH),arch_arm)
@ -192,6 +194,7 @@ $(CODECDIR)/sgc.codec : $(CODECDIR)/libsgc.a $(CODECDIR)/libemu2413.a
$(CODECDIR)/vgm.codec : $(CODECDIR)/libvgm.a $(CODECDIR)/libemu2413.a $(CODECDIR)/vgm.codec : $(CODECDIR)/libvgm.a $(CODECDIR)/libemu2413.a
$(CODECDIR)/kss.codec : $(CODECDIR)/libkss.a $(CODECDIR)/libemu2413.a $(CODECDIR)/kss.codec : $(CODECDIR)/libkss.a $(CODECDIR)/libemu2413.a
$(CODECDIR)/opus.codec : $(CODECDIR)/libopus.a $(TLSFLIB) $(CODECDIR)/opus.codec : $(CODECDIR)/libopus.a $(TLSFLIB)
$(CODECDIR)/sid.codec : $(CODECDIR)/cRSID.a
$(CODECDIR)/aac_bsf.codec : $(CODECDIR)/libfaad.a $(CODECDIR)/aac_bsf.codec : $(CODECDIR)/libfaad.a
$(CODECS): $(CODEC_LIBS) # this must be last in codec dependency list $(CODECS): $(CODEC_LIBS) # this must be last in codec dependency list

File diff suppressed because it is too large Load diff