From c07156fdd76799c7122f10b0612c5715d5d5ce25 Mon Sep 17 00:00:00 2001 From: Joel16 Date: Wed, 9 Apr 2025 22:17:50 +0100 Subject: [PATCH 01/24] Revert "kernel_functions: Fix indentation" This reverts commit 30b0be604e4ea9cf770bd4c56e7db1af8355fbbb. --- app/source/kernel_functions.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/source/kernel_functions.cpp b/app/source/kernel_functions.cpp index b0a1101..9e8adc2 100644 --- a/app/source/kernel_functions.cpp +++ b/app/source/kernel_functions.cpp @@ -12,13 +12,13 @@ int pspAudioSetFrequency(int frequency) { void *func_addr = nullptr; int ret = 0; - func_addr = (void *)sctrlHENFindFunction("sceAudio_driver", "sceAudio_driver", 0xA2BEAA6C); + func_addr = (void*)sctrlHENFindFunction("sceAudio_driver", "sceAudio_driver", 0xA2BEAA6C); args.arg1 = static_cast(frequency); if (R_FAILED(ret = kuKernelCall(func_addr, &args))) Log::Error("%s: pspAudioSetFrequency returns 0x%08X\n", __func__, args.ret1); - - return args.ret1; + + return args.ret1; } // display driver functions From 91e22fa0b55d2de2d7cc7e1ba5c69b7569313a97 Mon Sep 17 00:00:00 2001 From: Joel16 Date: Wed, 9 Apr 2025 22:18:14 +0100 Subject: [PATCH 02/24] Revert "audio_driver: Drop audio_driver in favour of kuKernelCall" This reverts commit e084512afd3bab3a874bbfe8460c0c8912b4940b. --- .gitignore | 1 + Makefile | 2 +- app/include/kernel_functions.h | 2 +- app/source/kernel_functions.cpp | 20 +------------------- app/source/utils.cpp | 5 +++-- audio_driver/Makefile | 24 ++++++++++++++++++++++++ audio_driver/audio_driver.c | 20 ++++++++++++++++++++ audio_driver/exports.exp | 16 ++++++++++++++++ 8 files changed, 67 insertions(+), 23 deletions(-) create mode 100644 audio_driver/Makefile create mode 100644 audio_driver/audio_driver.c create mode 100644 audio_driver/exports.exp diff --git a/.gitignore b/.gitignore index de4d62c..9092ab4 100644 --- a/.gitignore +++ b/.gitignore @@ -54,6 +54,7 @@ Mkfile.old dkms.conf # CMFileManager PSP Specific objects +app/drivers/audio_driver.S app/drivers/display_driver.S app/drivers/fs_driver.S app/drivers/module_driver.S diff --git a/Makefile b/Makefile index 3ac8ce3..27ee0f8 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -SUBDIRS = display_driver fs_driver module_driver app launcher +SUBDIRS = audio_driver display_driver fs_driver module_driver app launcher all: @for dir in $(SUBDIRS); do $(MAKE) -C $$dir; done diff --git a/app/include/kernel_functions.h b/app/include/kernel_functions.h index abb4499..028118d 100644 --- a/app/include/kernel_functions.h +++ b/app/include/kernel_functions.h @@ -11,7 +11,7 @@ extern "C" { // Kernel function prototypes // audio_driver functions -int pspAudioSetFrequency(int frequency); +extern int pspAudioSetFrequency(int frequency); // display_driver functions extern int pspDisplayEnable(void); diff --git a/app/source/kernel_functions.cpp b/app/source/kernel_functions.cpp index 9e8adc2..aa8e4c0 100644 --- a/app/source/kernel_functions.cpp +++ b/app/source/kernel_functions.cpp @@ -1,25 +1,7 @@ -#include - #include "kernel_functions.h" -#include "kubridge.h" -#include "log.h" -#include "systemctrl.h" -#include "utils.h" // audio_driver functions -int pspAudioSetFrequency(int frequency) { - struct KernelCallArg args = { 0 }; - void *func_addr = nullptr; - int ret = 0; - - func_addr = (void*)sctrlHENFindFunction("sceAudio_driver", "sceAudio_driver", 0xA2BEAA6C); - args.arg1 = static_cast(frequency); - - if (R_FAILED(ret = kuKernelCall(func_addr, &args))) - Log::Error("%s: pspAudioSetFrequency returns 0x%08X\n", __func__, args.ret1); - - return args.ret1; -} +int pspAudioSetFrequency(int frequency); // display driver functions int pspDisplayEnable(void); diff --git a/app/source/utils.cpp b/app/source/utils.cpp index 24a161b..22b52d3 100644 --- a/app/source/utils.cpp +++ b/app/source/utils.cpp @@ -21,8 +21,8 @@ enum PspCtrlButtons PSP_CTRL_ENTER, PSP_CTRL_CANCEL; BROWSE_STATE device = BROWSE_STATE_EXTERNAL; int g_psp_language = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH; -extern unsigned char display_driver_prx_start[], fs_driver_prx_start[], module_driver_prx_start[]; -extern unsigned int display_driver_prx_size, fs_driver_prx_size, module_driver_prx_size; +extern unsigned char audio_driver_prx_start[], display_driver_prx_start[], fs_driver_prx_start[], module_driver_prx_start[]; +extern unsigned int audio_driver_prx_size, display_driver_prx_size, fs_driver_prx_size, module_driver_prx_size; namespace Utils { constexpr unsigned int CTRL_DEADZONE_DELAY = 500000; @@ -43,6 +43,7 @@ namespace Utils { } Module; static std::vector kernel_modules { + { "audio_driver.prx", -1, audio_driver_prx_start, audio_driver_prx_size }, { "display_driver.prx", -1, display_driver_prx_start, display_driver_prx_size }, { "fs_driver.prx", -1, fs_driver_prx_start, fs_driver_prx_size } }; diff --git a/audio_driver/Makefile b/audio_driver/Makefile new file mode 100644 index 0000000..d68f857 --- /dev/null +++ b/audio_driver/Makefile @@ -0,0 +1,24 @@ +TARGET = audio_driver +OBJS = audio_driver.o exports.o + +PRX_EXPORTS = exports.exp + +# Use the kernel's small inbuilt libc +USE_KERNEL_LIBC = 1 +# Use only kernel libraries +USE_KERNEL_LIBS = 1 + +CFLAGS = -Os -G0 -Wall -fno-builtin-printf +CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti +ASFLAGS = $(CFLAGS) + +LDFLAGS = -nostartfiles +LIBS = -lpspaudio_driver + +PSPSDK=$(shell psp-config --pspsdk-path) +include $(PSPSDK)/lib/build_prx.mak + +all: + psp-build-exports -s $(PRX_EXPORTS) + mv audio_driver.S "../app/drivers/" + mv audio_driver.prx "../app/data/" diff --git a/audio_driver/audio_driver.c b/audio_driver/audio_driver.c new file mode 100644 index 0000000..b1444d3 --- /dev/null +++ b/audio_driver/audio_driver.c @@ -0,0 +1,20 @@ +#include +#include + +PSP_MODULE_INFO("audio_driver", PSP_MODULE_KERNEL, 1, 4); +PSP_NO_CREATE_MAIN_THREAD(); + +int pspAudioSetFrequency(int frequency) { + u32 k1 = pspSdkSetK1(0); + int ret = sceAudioSetFrequency(frequency); + pspSdkSetK1(k1); + return ret; +} + +int module_start(SceSize args, void *argp) { + return 0; +} + +int module_stop(void) { + return 0; +} diff --git a/audio_driver/exports.exp b/audio_driver/exports.exp new file mode 100644 index 0000000..b171d25 --- /dev/null +++ b/audio_driver/exports.exp @@ -0,0 +1,16 @@ +# Define the exports for the prx +PSP_BEGIN_EXPORTS + +# These four lines are mandatory (although you can add other functions like module_stop) +# syslib is a psynonym for the single mandatory export. +PSP_EXPORT_START(syslib, 0, 0x8000) +PSP_EXPORT_FUNC(module_start) +PSP_EXPORT_FUNC(module_stop) +PSP_EXPORT_VAR(module_info) +PSP_EXPORT_END + +PSP_EXPORT_START(audio_driver, 0, 0x4001) +PSP_EXPORT_FUNC(pspAudioSetFrequency) +PSP_EXPORT_END + +PSP_END_EXPORTS From 08b2135cb3eefb38e2ea2b7e51f512f58e445e7b Mon Sep 17 00:00:00 2001 From: Joel16 Date: Wed, 9 Apr 2025 22:19:27 +0100 Subject: [PATCH 03/24] Revert "module_driver: Fix indentation with ModuleMgrForKernel" This reverts commit 3fa4844501d612bffb876d61161fc47f41a37413. --- module_driver/ModuleMgrForKernel.S | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/module_driver/ModuleMgrForKernel.S b/module_driver/ModuleMgrForKernel.S index 78c3800..2516661 100644 --- a/module_driver/ModuleMgrForKernel.S +++ b/module_driver/ModuleMgrForKernel.S @@ -2,17 +2,17 @@ #include "pspimport.s" - IMPORT_START "ModuleMgrForKernel",0x00010000 - IMPORT_FUNC "ModuleMgrForKernel",0xFFB9B760,sceKernelLoadModule - IMPORT_FUNC "ModuleMgrForKernel",0xE6BF3960,sceKernelStartModule - IMPORT_FUNC "ModuleMgrForKernel",0x0D053026,sceKernelUnloadModule - IMPORT_FUNC "ModuleMgrForKernel",0x32292450,_sceKernelLoadModuleWithApitype2 - IMPORT_FUNC "ModuleMgrForKernel",0xE3CCC6EA,sceKernelLoadModule_620 - IMPORT_FUNC "ModuleMgrForKernel",0xDF8FFFAB,sceKernelStartModule_620 - IMPORT_FUNC "ModuleMgrForKernel",0x9CEB18C4,sceKernelUnloadModule_620 - IMPORT_FUNC "ModuleMgrForKernel",0xB691CB9F,sceKernelLoadModuleWithApitype2_620 - IMPORT_FUNC "ModuleMgrForKernel",0x939E4270,sceKernelLoadModule_660 - IMPORT_FUNC "ModuleMgrForKernel",0x3FF74DF1,sceKernelStartModule_660 - IMPORT_FUNC "ModuleMgrForKernel",0x387E3CA9,sceKernelUnloadModule_660 - IMPORT_FUNC "ModuleMgrForKernel",0x2B7FC10D,sceKernelLoadModuleWithApitype2_660 + IMPORT_START "ModuleMgrForKernel",0x00010000 + IMPORT_FUNC "ModuleMgrForKernel",0xFFB9B760,sceKernelLoadModule + IMPORT_FUNC "ModuleMgrForKernel",0xE6BF3960,sceKernelStartModule + IMPORT_FUNC "ModuleMgrForKernel",0x0D053026,sceKernelUnloadModule + IMPORT_FUNC "ModuleMgrForKernel",0x32292450,_sceKernelLoadModuleWithApitype2 + IMPORT_FUNC "ModuleMgrForKernel",0xE3CCC6EA,sceKernelLoadModule_620 + IMPORT_FUNC "ModuleMgrForKernel",0xDF8FFFAB,sceKernelStartModule_620 + IMPORT_FUNC "ModuleMgrForKernel",0x9CEB18C4,sceKernelUnloadModule_620 + IMPORT_FUNC "ModuleMgrForKernel",0xB691CB9F,sceKernelLoadModuleWithApitype2_620 + IMPORT_FUNC "ModuleMgrForKernel",0x939E4270,sceKernelLoadModule_660 + IMPORT_FUNC "ModuleMgrForKernel",0x3FF74DF1,sceKernelStartModule_660 + IMPORT_FUNC "ModuleMgrForKernel",0x387E3CA9,sceKernelUnloadModule_660 + IMPORT_FUNC "ModuleMgrForKernel",0x2B7FC10D,sceKernelLoadModuleWithApitype2_660 IMPORT_FUNC "ModuleMgrForKernel",0x4E62C48A,sceKernelLoadModuleBufferForKernel From e41eff1a4f95c9cbb48ed789ee980b3ae5c6bb7d Mon Sep 17 00:00:00 2001 From: Joel16 Date: Wed, 9 Apr 2025 22:19:51 +0100 Subject: [PATCH 04/24] Revert "module_driver: Use module_driver to properly load other modules from memory" This reverts commit 163e5bf4a26996e95038ecb96a7a057a46e05a15. --- .gitignore | 2 +- Makefile | 2 +- app/include/kernel_functions.h | 4 ---- app/source/kernel_functions.cpp | 3 --- app/source/utils.cpp | 30 ++++-------------------------- module_driver/Makefile | 23 ----------------------- module_driver/ModuleMgrForKernel.S | 18 ------------------ module_driver/exports.exp | 16 ---------------- module_driver/module_driver.c | 21 --------------------- 9 files changed, 6 insertions(+), 113 deletions(-) delete mode 100644 module_driver/Makefile delete mode 100644 module_driver/ModuleMgrForKernel.S delete mode 100644 module_driver/exports.exp delete mode 100644 module_driver/module_driver.c diff --git a/.gitignore b/.gitignore index 9092ab4..33fc017 100644 --- a/.gitignore +++ b/.gitignore @@ -57,6 +57,6 @@ dkms.conf app/drivers/audio_driver.S app/drivers/display_driver.S app/drivers/fs_driver.S -app/drivers/module_driver.S +app/drivers/input_driver.S app/*.json app/*.log diff --git a/Makefile b/Makefile index 27ee0f8..8f959f5 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -SUBDIRS = audio_driver display_driver fs_driver module_driver app launcher +SUBDIRS = audio_driver display_driver fs_driver app launcher all: @for dir in $(SUBDIRS); do $(MAKE) -C $$dir; done diff --git a/app/include/kernel_functions.h b/app/include/kernel_functions.h index 028118d..d351e06 100644 --- a/app/include/kernel_functions.h +++ b/app/include/kernel_functions.h @@ -6,7 +6,6 @@ extern "C" { #include #include -#include // Kernel function prototypes @@ -34,9 +33,6 @@ extern int pspIoRename(const char *oldname, const char *newname); extern int pspIoRemoveFile(const char *file); extern int pspIoDevctl(const char *dev, unsigned int cmd, void *indata, int inlen, void *outdata, int outlen); -// module_driver functions -extern int pspKernelLoadModuleBuffer(SceSize size, void *buf, s32 flag, const SceKernelLMOption *option); - #if defined (__cplusplus) } #endif diff --git a/app/source/kernel_functions.cpp b/app/source/kernel_functions.cpp index aa8e4c0..d5aa225 100644 --- a/app/source/kernel_functions.cpp +++ b/app/source/kernel_functions.cpp @@ -23,6 +23,3 @@ int pspIoGetstat(const char *file, SceIoStat *stat); int pspIoRename(const char *oldname, const char *newname); int pspIoRemoveFile(const char *file); int pspIoDevctl(const char *dev, unsigned int cmd, void *indata, int inlen, void *outdata, int outlen); - -// module_driver functions -int pspKernelLoadModuleBuffer(SceSize size, void *buf, s32 flag, const SceKernelLMOption *option); diff --git a/app/source/utils.cpp b/app/source/utils.cpp index 22b52d3..9e72f8c 100644 --- a/app/source/utils.cpp +++ b/app/source/utils.cpp @@ -21,8 +21,8 @@ enum PspCtrlButtons PSP_CTRL_ENTER, PSP_CTRL_CANCEL; BROWSE_STATE device = BROWSE_STATE_EXTERNAL; int g_psp_language = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH; -extern unsigned char audio_driver_prx_start[], display_driver_prx_start[], fs_driver_prx_start[], module_driver_prx_start[]; -extern unsigned int audio_driver_prx_size, display_driver_prx_size, fs_driver_prx_size, module_driver_prx_size; +extern unsigned char audio_driver_prx_start[], display_driver_prx_start[], fs_driver_prx_start[]; +extern unsigned int audio_driver_prx_size, display_driver_prx_size, fs_driver_prx_size; namespace Utils { constexpr unsigned int CTRL_DEADZONE_DELAY = 500000; @@ -33,7 +33,6 @@ namespace Utils { static int last_button_tick = 0, deadzone_tick = 0; static bool usb_module_loaded = false; static bool usb_actived = false; - static SceUID module_driver_id = 0; typedef struct { const char *path = nullptr; @@ -117,7 +116,7 @@ namespace Utils { } // Basically removes and re-creates prx from memory -> then remove it after inital load - static int LoadStartModuleMemInitial(const char *path, const void *buf, SceSize size) { + static int LoadStartModuleMem(const char *path, const void *buf, SceSize size) { int ret = 0; SceUID modID = 0; @@ -141,23 +140,6 @@ namespace Utils { return 0; } - static int LoadStartModuleMem(const char *path, void *buf, SceSize size) { - int ret = 0; - SceUID modID = 0; - - if (R_FAILED(ret = modID = pspKernelLoadModuleBuffer(size, buf, 0, nullptr))) { - Log::Error("kuKernelLoadModule(%s) failed: 0x%08x\n", path, ret); - return ret; - } - - if (R_FAILED(ret = sceKernelStartModule(modID, 0, nullptr, nullptr, nullptr))) { - Log::Error("sceKernelStartModule(%s) failed: 0x%08x\n", path, ret); - return ret; - } - - return 0; - } - static void StopUnloadModules(SceUID modID) { sceKernelStopModule(modID, 0, nullptr, nullptr, nullptr); sceKernelUnloadModule(modID); @@ -263,8 +245,6 @@ namespace Utils { } void InitKernelDrivers(void) { - module_driver_id = LoadStartModuleMemInitial("module_driver.prx", module_driver_prx_start, module_driver_prx_size); - for (unsigned int i = 0; i < kernel_modules.size(); ++i) kernel_modules[i].id = Utils::LoadStartModuleMem(kernel_modules[i].path, kernel_modules[i].data, kernel_modules[i].size); @@ -272,14 +252,12 @@ namespace Utils { } void TermKernelDrivers(void) { - Utils::ExitUSB(); - for (int i = kernel_modules.size() - 1; i >= 0; --i) { Utils::StopUnloadModules(kernel_modules[i].id); kernel_modules[i].id = -1; } - Utils::StopUnloadModules(module_driver_id); + Utils::ExitUSB(); } void UpdateUSB(void) { diff --git a/module_driver/Makefile b/module_driver/Makefile deleted file mode 100644 index 3cde7fc..0000000 --- a/module_driver/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -TARGET = module_driver -OBJS = module_driver.o exports.o ModuleMgrForKernel.o - -PRX_EXPORTS = exports.exp - -# Use the kernel's small inbuilt libc -USE_KERNEL_LIBC = 1 -# Use only kernel libraries -USE_KERNEL_LIBS = 1 - -CFLAGS = -Os -G0 -Wall -fno-builtin-printf -CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti -ASFLAGS = $(CFLAGS) - -LDFLAGS = -nostartfiles - -PSPSDK=$(shell psp-config --pspsdk-path) -include $(PSPSDK)/lib/build_prx.mak - -all: - psp-build-exports -s $(PRX_EXPORTS) - mv module_driver.S "../app/drivers/" - mv module_driver.prx "../app/data/" diff --git a/module_driver/ModuleMgrForKernel.S b/module_driver/ModuleMgrForKernel.S deleted file mode 100644 index 2516661..0000000 --- a/module_driver/ModuleMgrForKernel.S +++ /dev/null @@ -1,18 +0,0 @@ - .set noreorder - -#include "pspimport.s" - - IMPORT_START "ModuleMgrForKernel",0x00010000 - IMPORT_FUNC "ModuleMgrForKernel",0xFFB9B760,sceKernelLoadModule - IMPORT_FUNC "ModuleMgrForKernel",0xE6BF3960,sceKernelStartModule - IMPORT_FUNC "ModuleMgrForKernel",0x0D053026,sceKernelUnloadModule - IMPORT_FUNC "ModuleMgrForKernel",0x32292450,_sceKernelLoadModuleWithApitype2 - IMPORT_FUNC "ModuleMgrForKernel",0xE3CCC6EA,sceKernelLoadModule_620 - IMPORT_FUNC "ModuleMgrForKernel",0xDF8FFFAB,sceKernelStartModule_620 - IMPORT_FUNC "ModuleMgrForKernel",0x9CEB18C4,sceKernelUnloadModule_620 - IMPORT_FUNC "ModuleMgrForKernel",0xB691CB9F,sceKernelLoadModuleWithApitype2_620 - IMPORT_FUNC "ModuleMgrForKernel",0x939E4270,sceKernelLoadModule_660 - IMPORT_FUNC "ModuleMgrForKernel",0x3FF74DF1,sceKernelStartModule_660 - IMPORT_FUNC "ModuleMgrForKernel",0x387E3CA9,sceKernelUnloadModule_660 - IMPORT_FUNC "ModuleMgrForKernel",0x2B7FC10D,sceKernelLoadModuleWithApitype2_660 - IMPORT_FUNC "ModuleMgrForKernel",0x4E62C48A,sceKernelLoadModuleBufferForKernel diff --git a/module_driver/exports.exp b/module_driver/exports.exp deleted file mode 100644 index 04d805a..0000000 --- a/module_driver/exports.exp +++ /dev/null @@ -1,16 +0,0 @@ -# Define the exports for the prx -PSP_BEGIN_EXPORTS - -# These four lines are mandatory (although you can add other functions like module_stop) -# syslib is a psynonym for the single mandatory export. -PSP_EXPORT_START(syslib, 0, 0x8000) -PSP_EXPORT_FUNC(module_start) -PSP_EXPORT_FUNC(module_stop) -PSP_EXPORT_VAR(module_info) -PSP_EXPORT_END - -PSP_EXPORT_START(module_driver, 0, 0x4001) -PSP_EXPORT_FUNC(pspKernelLoadModuleBuffer) -PSP_EXPORT_END - -PSP_END_EXPORTS diff --git a/module_driver/module_driver.c b/module_driver/module_driver.c deleted file mode 100644 index 7bda7c6..0000000 --- a/module_driver/module_driver.c +++ /dev/null @@ -1,21 +0,0 @@ -#include - -PSP_MODULE_INFO("module_driver", PSP_MODULE_KERNEL, 1, 0); -PSP_NO_CREATE_MAIN_THREAD(); - -SceUID sceKernelLoadModuleBufferForKernel(SceSize size, void *buf, s32 flag, const SceKernelLMOption *option); - -int pspKernelLoadModuleBuffer(SceSize size, void *buf, s32 flag, const SceKernelLMOption *option) { - int k1 = pspSdkSetK1(0); - int ret = sceKernelLoadModuleBufferForKernel(size, buf, flag, option); - pspSdkSetK1(k1); - return ret; -} - -int module_start(SceSize args, void *argp) { - return 0; -} - -int module_stop(void) { - return 0; -} From 2864e86ce03d9b42ec62912015dda2673323e39d Mon Sep 17 00:00:00 2001 From: Joel16 Date: Wed, 9 Apr 2025 22:21:40 +0100 Subject: [PATCH 05/24] Revert "app: Load kernel plugins from memory" This reverts commit 4f10474794d4aea061461c4ac05573d7cade1766. --- .github/workflows/c-cpp.yml | 13 ++++++++++++- app/Makefile | 28 ++++++++++++--------------- app/source/utils.cpp | 38 ++++--------------------------------- audio_driver/Makefile | 1 - display_driver/Makefile | 1 - fs_driver/Makefile | 1 - 6 files changed, 28 insertions(+), 54 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index ad4d092..2ff338f 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -22,5 +22,16 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: CMFileManager-PSP + path: audio_driver/audio_driver.prx + + - uses: actions/upload-artifact@v4 + with: + path: display_driver/display_driver.prx + + - uses: actions/upload-artifact@v4 + with: + path: fs_driver/fs_driver.prx + + - uses: actions/upload-artifact@v4 + with: path: app/EBOOT.PBP diff --git a/app/Makefile b/app/Makefile index 58fb537..ebe6b4d 100644 --- a/app/Makefile +++ b/app/Makefile @@ -1,15 +1,14 @@ TARGET = CMFileManager SOURCES := data drivers source source/audio source/gui ../libs/libnsbmp ../libs/libnsgif -CFILES := $(foreach dir, $(SOURCES), $(wildcard $(dir)/*.c)) -SFILES := $(foreach dir, $(SOURCES), $(wildcard $(dir)/*.S)) -CPPFILES := $(foreach dir, $(SOURCES), $(wildcard $(dir)/*.cpp)) -FONTFILES := $(foreach dir, $(SOURCES), $(wildcard $(dir)/*.pgf)) -GFXFILES := $(foreach dir, $(SOURCES), $(wildcard $(dir)/*.png)) -PRXFILES := $(foreach dir, $(SOURCES), $(wildcard $(dir)/*.prx)) +CFILES := $(foreach dir,$(SOURCES), $(wildcard $(dir)/*.c)) +SFILES := $(foreach dir,$(SOURCES), $(wildcard $(dir)/*.S)) +CPPFILES := $(foreach dir,$(SOURCES), $(wildcard $(dir)/*.cpp)) +GFXFILES := $(foreach dir,$(SOURCES), $(wildcard $(dir)/*.png)) +FONTFILES := $(foreach dir,$(SOURCES), $(wildcard $(dir)/*.pgf)) -OBJS := $(addsuffix .o,$(BINFILES)) $(CFILES:.c=.o) $(SFILES:.S=.o) $(CPPFILES:.cpp=.o) \ - $(FONTFILES:.pgf=.o) $(GFXFILES:.png=.o) $(PRXFILES:.prx=.o) +OBJS := $(addsuffix .o,$(BINFILES)) \ + $(CFILES:.c=.o) $(SFILES:.S=.o) $(CPPFILES:.cpp=.o) $(GFXFILES:.png=.o) $(FONTFILES:.pgf=.o) VERSION_MAJOR := 4 VERSION_MINOR := 1 @@ -30,18 +29,15 @@ LIBS = -lintrafont -lglib2d -lxmp -lmpg123 -lvorbisfile -lvorbis -lopusfile - -lpspkubridge -lpspsystemctrl_user -lpspusbdevice \ -lpspgu -lpspvram -lpspaudio -lpsppower -lpspreg -lpspusb -lpspusbstor -lpspumd -EXTRA_TARGETS = EBOOT.PBP -PSP_EBOOT_TITLE = CM File Manager PSP v$(VERSION_MAJOR).$(VERSION_MINOR)$(VERSION_MICRO) -PSP_EBOOT_ICON = ../ICON0.PNG +EXTRA_TARGETS = EBOOT.PBP +PSP_EBOOT_TITLE = CM File Manager PSP v$(VERSION_MAJOR).$(VERSION_MINOR)$(VERSION_MICRO) +PSP_EBOOT_ICON = ../ICON0.PNG PSPSDK=$(shell psp-config --pspsdk-path) include $(PSPSDK)/lib/build.mak -%.o: %.pgf - bin2o -i $< $@ $(addsuffix _pgf, $(basename $(notdir $<) )) - %.o: %.png bin2o -i $< $@ $(addsuffix _png, $(basename $(notdir $<) )) -%.o: %.prx - bin2o -i $< $@ $(addsuffix _prx, $(basename $(notdir $<) )) \ No newline at end of file +%.o: %.pgf + bin2o -i $< $@ $(addsuffix _pgf, $(basename $(notdir $<) )) diff --git a/app/source/utils.cpp b/app/source/utils.cpp index 9e72f8c..6b2e1eb 100644 --- a/app/source/utils.cpp +++ b/app/source/utils.cpp @@ -21,9 +21,6 @@ enum PspCtrlButtons PSP_CTRL_ENTER, PSP_CTRL_CANCEL; BROWSE_STATE device = BROWSE_STATE_EXTERNAL; int g_psp_language = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH; -extern unsigned char audio_driver_prx_start[], display_driver_prx_start[], fs_driver_prx_start[]; -extern unsigned int audio_driver_prx_size, display_driver_prx_size, fs_driver_prx_size; - namespace Utils { constexpr unsigned int CTRL_DEADZONE_DELAY = 500000; constexpr unsigned int CTRL_DELAY = 100000; @@ -37,14 +34,12 @@ namespace Utils { typedef struct { const char *path = nullptr; int id = 0; - unsigned char *data = nullptr; - unsigned int size = 0; } Module; static std::vector kernel_modules { - { "audio_driver.prx", -1, audio_driver_prx_start, audio_driver_prx_size }, - { "display_driver.prx", -1, display_driver_prx_start, display_driver_prx_size }, - { "fs_driver.prx", -1, fs_driver_prx_start, fs_driver_prx_size } + { "audio_driver.prx", -1, }, + { "display_driver.prx", -1, }, + { "fs_driver.prx", -1, } }; static std::vector usb_modules { @@ -115,31 +110,6 @@ namespace Utils { return ret; } - // Basically removes and re-creates prx from memory -> then remove it after inital load - static int LoadStartModuleMem(const char *path, const void *buf, SceSize size) { - int ret = 0; - SceUID modID = 0; - - // Don't care if this passes or fails - sceIoRemove(path); - SceUID file = sceIoOpen(path, PSP_O_WRONLY | PSP_O_CREAT, 0777); - sceIoWrite(file, buf, size); - sceIoClose(file); - - if (R_FAILED(ret = modID = kuKernelLoadModule(path, 0, nullptr))) { - Log::Error("kuKernelLoadModule(%s) failed: 0x%08x\n", path, ret); - return ret; - } - - if (R_FAILED(ret = sceKernelStartModule(modID, 0, nullptr, nullptr, nullptr))) { - Log::Error("sceKernelStartModule(%s) failed: 0x%08x\n", path, ret); - return ret; - } - - sceIoRemove(path); - return 0; - } - static void StopUnloadModules(SceUID modID) { sceKernelStopModule(modID, 0, nullptr, nullptr, nullptr); sceKernelUnloadModule(modID); @@ -246,7 +216,7 @@ namespace Utils { void InitKernelDrivers(void) { for (unsigned int i = 0; i < kernel_modules.size(); ++i) - kernel_modules[i].id = Utils::LoadStartModuleMem(kernel_modules[i].path, kernel_modules[i].data, kernel_modules[i].size); + kernel_modules[i].id = Utils::LoadStartModule(kernel_modules[i].path); Utils::InitUSB(); } diff --git a/audio_driver/Makefile b/audio_driver/Makefile index d68f857..c7cca22 100644 --- a/audio_driver/Makefile +++ b/audio_driver/Makefile @@ -21,4 +21,3 @@ include $(PSPSDK)/lib/build_prx.mak all: psp-build-exports -s $(PRX_EXPORTS) mv audio_driver.S "../app/drivers/" - mv audio_driver.prx "../app/data/" diff --git a/display_driver/Makefile b/display_driver/Makefile index 0de6006..7ebcb32 100644 --- a/display_driver/Makefile +++ b/display_driver/Makefile @@ -21,4 +21,3 @@ include $(PSPSDK)/lib/build_prx.mak all: psp-build-exports -s $(PRX_EXPORTS) mv display_driver.S "../app/drivers/" - mv display_driver.prx "../app/data/" diff --git a/fs_driver/Makefile b/fs_driver/Makefile index b92f25e..99aae19 100644 --- a/fs_driver/Makefile +++ b/fs_driver/Makefile @@ -24,4 +24,3 @@ include $(PSPSDK)/lib/build_prx.mak all: psp-build-exports -s $(PRX_EXPORTS) mv fs_driver.S "../app/drivers/" - mv fs_driver.prx "../app/data/" From 5224f23ea845913ef702b3997ec6438111b05254 Mon Sep 17 00:00:00 2001 From: Joel16 Date: Wed, 9 Apr 2025 22:42:43 +0100 Subject: [PATCH 06/24] app: Compile with -mno-gpopt and allow ci to run on module branch --- .github/workflows/c-cpp.yml | 4 ++-- app/Makefile | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 2ff338f..a3e31a4 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -2,9 +2,9 @@ name: C/C++ CI on: push: - branches: [ next ] + branches: [ next, module ] pull_request: - branches: [ next ] + branches: [ next, module ] jobs: build: diff --git a/app/Makefile b/app/Makefile index ebe6b4d..4224dc2 100644 --- a/app/Makefile +++ b/app/Makefile @@ -15,7 +15,7 @@ VERSION_MINOR := 1 VERSION_MICRO := 0 INCDIR = ../libs/ ../libs/include ../libs/libnsbmp ../libs/libnsgif ../libs/include/opus include -CFLAGS = -Os -G0 -Wall -ffast-math -Wno-narrowing -Wno-unused-variable \ +CFLAGS = -Os -mno-gpopt -Wall -ffast-math -Wno-narrowing -Wno-unused-variable \ -DVERSION_MAJOR=$(VERSION_MAJOR) -DVERSION_MINOR=$(VERSION_MINOR) -DVERSION_MICRO=$(VERSION_MICRO) CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti -std=gnu++17 ASFLAGS := $(CFLAGS) From 9bf023adc3544cfbe1ccdb907cbf80ab2770b8d6 Mon Sep 17 00:00:00 2001 From: Joel16 Date: Wed, 9 Apr 2025 22:44:49 +0100 Subject: [PATCH 07/24] launcher: PSP_LARGE_MEMORY is not required --- launcher/Makefile | 2 -- 1 file changed, 2 deletions(-) diff --git a/launcher/Makefile b/launcher/Makefile index 3089b8c..6393afb 100644 --- a/launcher/Makefile +++ b/launcher/Makefile @@ -2,8 +2,6 @@ TARGET = CMFileManager OBJS = source/main.o -PSP_LARGE_MEMORY = 1 - VERSION_MAJOR := 4 VERSION_MINOR := 1 VERSION_MICRO := 0 From aabb59cec1ff455e3697de3f35b23ebb3c3c70ce Mon Sep 17 00:00:00 2001 From: Joel16 Date: Wed, 9 Apr 2025 22:47:21 +0100 Subject: [PATCH 08/24] ci: Use one upload action to upload binaries --- .github/workflows/c-cpp.yml | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index a3e31a4..cbde442 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -22,16 +22,8 @@ jobs: - uses: actions/upload-artifact@v4 with: - path: audio_driver/audio_driver.prx - - - uses: actions/upload-artifact@v4 - with: - path: display_driver/display_driver.prx - - - uses: actions/upload-artifact@v4 - with: - path: fs_driver/fs_driver.prx - - - uses: actions/upload-artifact@v4 - with: - path: app/EBOOT.PBP + path: | + audio_driver/audio_driver.prx + display_driver/display_driver.prx + fs_driver/fs_driver.prx + app/EBOOT.PBP From 00ee2d6d74391ac578e34d32c685aee78f5c32ca Mon Sep 17 00:00:00 2001 From: Joel16 Date: Wed, 9 Apr 2025 22:53:46 +0100 Subject: [PATCH 09/24] ci: Restructure artifacts --- .github/workflows/c-cpp.yml | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index cbde442..1cae5de 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -19,11 +19,16 @@ jobs: - name: Compile project run: make - + + - name: Prepare artifact folder + run: | + mkdir -p CMFileManagerPSP + cp audio_driver/audio_driver.prx CMFileManagerPSP/ + cp display_driver/display_driver.prx CMFileManagerPSP/ + cp fs_driver/fs_driver.prx CMFileManagerPSP/ + cp app/EBOOT.PBP CMFileManagerPSP/ + - uses: actions/upload-artifact@v4 with: - path: | - audio_driver/audio_driver.prx - display_driver/display_driver.prx - fs_driver/fs_driver.prx - app/EBOOT.PBP + name: CMFileManagerPSP + path: CMFileManagerPSP/ From 3d20ef05e5e4dc22756161f4d2d0e128e179b6c5 Mon Sep 17 00:00:00 2001 From: Joel16 Date: Thu, 10 Apr 2025 13:31:37 +0100 Subject: [PATCH 10/24] texture: Clean up texture code and do not recalculate size when loading images --- app/include/textures.h | 2 +- app/source/gui/filebrowser.cpp | 2 +- app/source/main.cpp | 1 + app/source/textures.cpp | 186 ++++++++++++++++++--------------- 4 files changed, 105 insertions(+), 86 deletions(-) diff --git a/app/include/textures.h b/app/include/textures.h index 8149b8c..1c51c24 100644 --- a/app/include/textures.h +++ b/app/include/textures.h @@ -19,7 +19,7 @@ extern g2dTexture *file_icons[NUM_FILE_ICONS], *icon_dir[NUM_THEMES], *icon_chec namespace Textures { g2dTexture *LoadImageBufferJPEG(unsigned char *data, int size); g2dTexture *LoadImageBufferPNG(unsigned char *data, int size); - g2dTexture *LoadImage(const std::string &path); + g2dTexture *LoadImage(const std::string &path, int size); void Load(void); void Free(void); } diff --git a/app/source/gui/filebrowser.cpp b/app/source/gui/filebrowser.cpp index 02ae624..6acd994 100644 --- a/app/source/gui/filebrowser.cpp +++ b/app/source/gui/filebrowser.cpp @@ -131,7 +131,7 @@ namespace GUI { break; case FileTypeImage: - item.texture = Textures::LoadImage(path.c_str()); + item.texture = Textures::LoadImage(path.c_str(), item.entries[item.selected].d_stat.st_size); if (item.texture) item.state = MENU_STATE_IMAGEVIEWER; break; diff --git a/app/source/main.cpp b/app/source/main.cpp index d813cd3..94908fc 100644 --- a/app/source/main.cpp +++ b/app/source/main.cpp @@ -11,6 +11,7 @@ PSP_MODULE_INFO("CMFileManager", 0x800, VERSION_MAJOR, VERSION_MINOR); PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU); +PSP_HEAP_THRESHOLD_SIZE_KB(1024); PSP_HEAP_SIZE_KB(-2048); bool g_running = true; diff --git a/app/source/textures.cpp b/app/source/textures.cpp index ebf7142..4500a2d 100644 --- a/app/source/textures.cpp +++ b/app/source/textures.cpp @@ -59,59 +59,49 @@ g2dTexture *file_icons[NUM_FILE_ICONS], *icon_dir[NUM_THEMES], *icon_check[NUM_T *bg_header, *icon_sd[NUM_THEMES], *icon_secure[NUM_THEMES], *ic_play_btn, *ftp_icon[NUM_THEMES], *sort_icon[NUM_THEMES], \ *dark_theme_icon[NUM_THEMES], *dev_options_icon[NUM_THEMES], *about_icon[NUM_THEMES]; -namespace BMP { - static void *bitmap_create(int width, int height, [[maybe_unused]] unsigned int state) { +namespace Image { + static void *Create(int width, int height, [[maybe_unused]] unsigned int state) { /* ensure a stupidly large (>50Megs or so) bitmap is not created */ - if ((static_cast(width) * static_cast(height)) > (MAX_IMAGE_BYTES/BYTES_PER_PIXEL)) + if ((static_cast(width) * static_cast(height)) > (MAX_IMAGE_BYTES/BYTES_PER_PIXEL)) { return nullptr; + } return std::calloc(width * height, BYTES_PER_PIXEL); } - static unsigned char *bitmap_get_buffer(void *bitmap) { - assert(bitmap); - return static_cast(bitmap); - } - - static size_t bitmap_get_bpp([[maybe_unused]] void *bitmap) { - return BYTES_PER_PIXEL; - } - - static void bitmap_destroy(void *bitmap) { - assert(bitmap); - std::free(bitmap); - } -} - -namespace GIF { - static void *bitmap_create(int width, int height) { + static void *Create(int width, int height) { /* ensure a stupidly large bitmap is not created */ - if ((static_cast(width) * static_cast(height)) > (MAX_IMAGE_BYTES/BYTES_PER_PIXEL)) + if ((static_cast(width) * static_cast(height)) > (MAX_IMAGE_BYTES/BYTES_PER_PIXEL)) { return nullptr; + } return std::calloc(width * height, BYTES_PER_PIXEL); } - static void bitmap_set_opaque([[maybe_unused]] void *bitmap, [[maybe_unused]] bool opaque) { + static void SetOpaque([[maybe_unused]] void *bitmap, [[maybe_unused]] bool opaque) { assert(bitmap); } - static bool bitmap_test_opaque([[maybe_unused]] void *bitmap) { + static bool TestOpaque([[maybe_unused]] void *bitmap) { assert(bitmap); return false; } - static unsigned char *bitmap_get_buffer(void *bitmap) { + static unsigned char *GetBuffer(void *bitmap) { assert(bitmap); return static_cast(bitmap); } - static void bitmap_destroy(void *bitmap) { + static void Destroy(void *bitmap) { assert(bitmap); std::free(bitmap); } + + static size_t GetBPP([[maybe_unused]] void *bitmap) { + return BYTES_PER_PIXEL; + } - static void bitmap_modified([[maybe_unused]] void *bitmap) { + static void Modified([[maybe_unused]] void *bitmap) { assert(bitmap); return; } @@ -120,10 +110,10 @@ namespace GIF { namespace Textures { static g2dTexture *LoadImageBufferBMP(unsigned char *data, int size) { bmp_bitmap_callback_vt bitmap_callbacks = { - BMP::bitmap_create, - BMP::bitmap_destroy, - BMP::bitmap_get_buffer, - BMP::bitmap_get_bpp + Image::Create, + Image::Destroy, + Image::GetBuffer, + Image::GetBPP }; bmp_result code = BMP_OK; @@ -160,12 +150,12 @@ namespace Textures { static g2dTexture *LoadImageBufferGIF(unsigned char *data, int size) { gif_bitmap_callback_vt bitmap_callbacks = { - GIF::bitmap_create, - GIF::bitmap_destroy, - GIF::bitmap_get_buffer, - GIF::bitmap_set_opaque, - GIF::bitmap_test_opaque, - GIF::bitmap_modified + Image::Create, + Image::Destroy, + Image::GetBuffer, + Image::SetOpaque, + Image::TestOpaque, + Image::Modified }; gif_animation gif; @@ -195,87 +185,114 @@ namespace Textures { g2dTexture *LoadImageBufferJPEG(unsigned char *data, int size) { struct jpeg_decompress_struct info; struct jpeg_error_mgr err; - + info.err = jpeg_std_error(&err); jpeg_create_decompress(&info); jpeg_mem_src(&info, data, size); - jpeg_read_header(&info, TRUE); - + + if (jpeg_read_header(&info, TRUE) != JPEG_HEADER_OK) { + Log::Error("%s(jpeg_read_header) failed\n", __func__); + jpeg_destroy_decompress(&info); + return nullptr; + } + info.out_color_space = JCS_EXT_RGBA; jpeg_start_decompress(&info); - - u8 *buffer = new u8[info.output_width * info.output_height * 4]; - int stride = info.output_width * 4; + if (info.output_width > 512 || info.output_height > 512) { + Log::Error("%s g2d does not support images greater than 512x512\n", __func__); + jpeg_destroy_decompress(&info); + return nullptr; + } + + int stride = info.output_width * 4; + u8 *buffer = static_cast(std::malloc(stride * info.output_height)); + if (!buffer) { + Log::Error("%s failed to allocate buffer\n", __func__); + jpeg_destroy_decompress(&info); + return nullptr; + } + while (info.output_scanline < info.output_height) { - u8 *ptr = &buffer[stride * info.output_scanline]; + u8 *ptr = buffer + stride * info.output_scanline; jpeg_read_scanlines(&info, &ptr, 1); } - - jpeg_finish_decompress(&info); + g2dTexture *tex = g2dTexLoad(buffer, info.output_width, info.output_height, G2D_SWIZZLE); + + jpeg_finish_decompress(&info); jpeg_destroy_decompress(&info); - delete[] buffer; + std::free(buffer); + return tex; - } + } g2dTexture *LoadImageBufferPNG(unsigned char *data, int size) { g2dTexture *tex = nullptr; png_image image; - std::memset(&image, 0, (sizeof image)); + std::memset(&image, 0, sizeof(png_image)); image.version = PNG_IMAGE_VERSION; - - if (png_image_begin_read_from_memory(&image, data, size) != 0) { - png_bytep buffer; - image.format = PNG_FORMAT_RGBA; - buffer = new png_byte[PNG_IMAGE_SIZE(image)]; - - if (buffer != nullptr && png_image_finish_read(&image, nullptr, buffer, 0, nullptr) != 0) { - tex = g2dTexLoad(buffer, image.width, image.height, G2D_SWIZZLE); - delete[] buffer; - png_image_free(&image); - } - else { - if (buffer == nullptr) { - Log::Error("png_byte buffer: returned nullptr\n"); - png_image_free(&image); - } - else { - Log::Error("png_image_finish_read failed: %s\n", image.message); - delete[] buffer; - } - } + + if (!png_image_begin_read_from_memory(&image, data, size)) { + Log::Error("%s(png_image_begin_read_from_memory) failed: %s\n", __func__, image.message); + return nullptr; } - else - Log::Error("png_image_begin_read_from_memory failed: %s\n", image.message); - + + image.format = PNG_FORMAT_RGBA; + + if (image.width > 512 || image.height > 512) { + Log::Error("%s g2d does not support images greater than 512x512\n", __func__); + png_image_free(&image); + return nullptr; + } + + const png_alloc_size_t imageSize = PNG_IMAGE_SIZE(image); + png_bytep buffer = static_cast(std::malloc(imageSize)); + if (!buffer) { + Log::Error("%s failed to allocate buffer\n", __func__); + png_image_free(&image); + return nullptr; + } + + if (png_image_finish_read(&image, nullptr, buffer, 0, nullptr)) { + tex = g2dTexLoad(buffer, image.width, image.height, G2D_SWIZZLE); + } + else { + Log::Error("%s(png_image_finish_read) failed: %s\n", __func__, image.message); + } + + std::free(buffer); + png_image_free(&image); return tex; - } + } - g2dTexture *LoadImage(const std::string &path) { + g2dTexture *LoadImage(const std::string &path, int size) { int ret = 0; - u64 size = FS::GetFileSize(path); - unsigned char *data = new unsigned char[size]; + unsigned char *data = static_cast(std::malloc(size)); if (R_FAILED(ret = FS::ReadFile(path, data, size))) { - Log::Error("LoadImage FS::ReadFile failed 0x%08x\n", ret); - delete[] data; + Log::Error("%s(FS::ReadFile) failed: 0x%08x\n", __func__, ret); + std::free(data); return nullptr; } g2dTexture *tex = nullptr; std::string ext = FS::GetFileExt(path); - if (ext == ".BMP") + if (ext == ".BMP") { tex = Textures::LoadImageBufferBMP(data, size); - else if (ext == ".GIF") + } + else if (ext == ".GIF") { tex = Textures::LoadImageBufferGIF(data, size); - else if ((ext == ".JPEG") || (ext == ".JPG")) + } + else if ((ext == ".JPEG") || (ext == ".JPG")) { tex = Textures::LoadImageBufferJPEG(data, size); - else if (ext == ".PNG") + } + else if (ext == ".PNG") { tex = Textures::LoadImageBufferPNG(data, size); + } - delete[] data; + std::free(data); return tex; } @@ -391,8 +408,9 @@ namespace Textures { g2dTexFree(&icon_dir[i]); } - for (int i = 0; i < NUM_FILE_ICONS; i++) + for (int i = 0; i < NUM_FILE_ICONS; i++) { g2dTexFree(&file_icons[i]); + } for (int i = 0; i < NUM_BATT_ICONS; i++) { g2dTexFree(&battery_charging[i]); From ec09a7dec5c8879a5f9222fd8f560cba17fb7a54 Mon Sep 17 00:00:00 2001 From: Joel16 Date: Thu, 10 Apr 2025 15:14:34 +0100 Subject: [PATCH 11/24] textures: Clean up logs --- app/source/textures.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/app/source/textures.cpp b/app/source/textures.cpp index 4500a2d..7683af8 100644 --- a/app/source/textures.cpp +++ b/app/source/textures.cpp @@ -122,7 +122,7 @@ namespace Textures { code = bmp_analyse(&bmp, size, data); if (code != BMP_OK) { - Log::Error("bmp_analyse failed: %d\n", code); + Log::Error("%s(bmp_analyse) failed: %d\n", __func__, code); bmp_finalise(&bmp); return nullptr; } @@ -130,7 +130,7 @@ namespace Textures { code = bmp_decode(&bmp); if (code != BMP_OK) { if ((code != BMP_INSUFFICIENT_DATA) && (code != BMP_DATA_ERROR)) { - Log::Error("bmp_decode failed: %d\n", code); + Log::Error("%s(bmp_decode) failed: %d\n", __func__, code); bmp_finalise(&bmp); return nullptr; } @@ -138,6 +138,7 @@ namespace Textures { /* skip if the decoded image would be ridiculously large */ if ((bmp.width * bmp.height) > 200000) { Log::Error("bmp_decode failed: width*height is over 200000\n"); + Log::Error("%s(bmp_decode) failed: width*height is over 200000\n", __func__); bmp_finalise(&bmp); return nullptr; } @@ -165,7 +166,7 @@ namespace Textures { do { code = gif_initialise(&gif, size, data); if (code != GIF_OK && code != GIF_WORKING) { - Log::Error("gif_initialise failed: %d\n", code); + Log::Error("%s(gif_initialise) failed: %d\n", __func__, code); gif_finalise(&gif); return nullptr; } @@ -173,7 +174,7 @@ namespace Textures { code = gif_decode_frame(&gif, 0); if (code != GIF_OK) { - Log::Error("gif_decode_frame failed: %d\n", code); + Log::Error("%s(gif_decode_frame) failed: %d\n", __func__, code); return nullptr; } @@ -225,7 +226,7 @@ namespace Textures { std::free(buffer); return tex; - } + } g2dTexture *LoadImageBufferPNG(unsigned char *data, int size) { g2dTexture *tex = nullptr; @@ -264,7 +265,7 @@ namespace Textures { std::free(buffer); png_image_free(&image); return tex; - } + } g2dTexture *LoadImage(const std::string &path, int size) { int ret = 0; From 16a64276b5cfd9646e902de39594d90139ccb36c Mon Sep 17 00:00:00 2001 From: Joel16 Date: Thu, 10 Apr 2025 17:42:16 +0100 Subject: [PATCH 12/24] libs: Update dr_wav to 0.14 --- libs/include/dr_wav.h | 1439 ++++++++++++++++++++++++++++------------- 1 file changed, 1006 insertions(+), 433 deletions(-) diff --git a/libs/include/dr_wav.h b/libs/include/dr_wav.h index 469f1dc..952e6cf 100644 --- a/libs/include/dr_wav.h +++ b/libs/include/dr_wav.h @@ -1,6 +1,6 @@ /* WAV audio loader and writer. Choice of public domain or MIT-0. See license statements at the end of this file. -dr_wav - v0.13.6 - 2022-04-10 +dr_wav - v0.14.0 - TBD David Reid - mackron@gmail.com @@ -79,7 +79,9 @@ dr_wav can also be used to output WAV files. This does not currently support com drwav_uint64 framesWritten = drwav_write_pcm_frames(pWav, frameCount, pSamples); ``` -dr_wav has seamless support the Sony Wave64 format. The decoder will automatically detect it and it should Just Work without any manual intervention. +Note that writing to AIFF or RIFX is not supported. + +dr_wav has support for decoding from a number of different encapsulation formats. See below for details. Build Options @@ -92,24 +94,44 @@ Build Options #define DR_WAV_NO_STDIO Disables APIs that initialize a decoder from a file such as `drwav_init_file()`, `drwav_init_file_write()`, etc. +#define DR_WAV_NO_WCHAR + Disables all functions ending with `_w`. Use this if your compiler does not provide wchar.h. Not required if DR_WAV_NO_STDIO is also defined. + + +Supported Encapsulations +======================== +- RIFF (Regular WAV) +- RIFX (Big-Endian) +- AIFF (Does not currently support ADPCM) +- RF64 +- W64 + +Note that AIFF and RIFX do not support write mode, nor do they support reading of metadata. + + +Supported Encodings +=================== +- Unsigned 8-bit PCM +- Signed 12-bit PCM +- Signed 16-bit PCM +- Signed 24-bit PCM +- Signed 32-bit PCM +- IEEE 32-bit floating point +- IEEE 64-bit floating point +- A-law and u-law +- Microsoft ADPCM +- IMA ADPCM (DVI, format code 0x11) + +8-bit PCM encodings are always assumed to be unsigned. Signed 8-bit encoding can only be read with `drwav_read_raw()`. + +Note that ADPCM is not currently supported with AIFF. Contributions welcome. Notes ===== - Samples are always interleaved. - The default read function does not do any data conversion. Use `drwav_read_pcm_frames_f32()`, `drwav_read_pcm_frames_s32()` and `drwav_read_pcm_frames_s16()` - to read and convert audio data to 32-bit floating point, signed 32-bit integer and signed 16-bit integer samples respectively. Tested and supported internal - formats include the following: - - Unsigned 8-bit PCM - - Signed 12-bit PCM - - Signed 16-bit PCM - - Signed 24-bit PCM - - Signed 32-bit PCM - - IEEE 32-bit floating point - - IEEE 64-bit floating point - - A-law and u-law - - Microsoft ADPCM - - IMA ADPCM (DVI, format code 0x11) + to read and convert audio data to 32-bit floating point, signed 32-bit integer and signed 16-bit integer samples respectively. - dr_wav will try to read the WAV file as best it can, even if it's not strictly conformant to the WAV format. */ @@ -124,13 +146,13 @@ extern "C" { #define DRWAV_XSTRINGIFY(x) DRWAV_STRINGIFY(x) #define DRWAV_VERSION_MAJOR 0 -#define DRWAV_VERSION_MINOR 13 -#define DRWAV_VERSION_REVISION 6 +#define DRWAV_VERSION_MINOR 14 +#define DRWAV_VERSION_REVISION 0 #define DRWAV_VERSION_STRING DRWAV_XSTRINGIFY(DRWAV_VERSION_MAJOR) "." DRWAV_XSTRINGIFY(DRWAV_VERSION_MINOR) "." DRWAV_XSTRINGIFY(DRWAV_VERSION_REVISION) #include /* For size_t. */ -/* Sized types. */ +/* Sized Types */ typedef signed char drwav_int8; typedef unsigned char drwav_uint8; typedef signed short drwav_int16; @@ -154,7 +176,7 @@ typedef unsigned int drwav_uint32; #pragma GCC diagnostic pop #endif #endif -#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__)) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(_M_ARM64) || defined(__powerpc64__) +#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__)) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC) || defined(__powerpc64__) typedef drwav_uint64 drwav_uintptr; #else typedef drwav_uint32 drwav_uintptr; @@ -163,7 +185,9 @@ typedef drwav_uint8 drwav_bool8; typedef drwav_uint32 drwav_bool32; #define DRWAV_TRUE 1 #define DRWAV_FALSE 0 +/* End Sized Types */ +/* Decorations */ #if !defined(DRWAV_API) #if defined(DRWAV_DLL) #if defined(_WIN32) @@ -193,7 +217,9 @@ typedef drwav_uint32 drwav_bool32; #define DRWAV_PRIVATE static #endif #endif +/* End Decorations */ +/* Result Codes */ typedef drwav_int32 drwav_result; #define DRWAV_SUCCESS 0 #define DRWAV_ERROR -1 /* A generic error. */ @@ -249,6 +275,7 @@ typedef drwav_int32 drwav_result; #define DRWAV_CANCELLED -51 #define DRWAV_MEMORY_ALREADY_MAPPED -52 #define DRWAV_AT_END -53 +/* End Result Codes */ /* Common data formats. */ #define DR_WAVE_FORMAT_PCM 0x1 @@ -261,10 +288,21 @@ typedef drwav_int32 drwav_result; /* Flags to pass into drwav_init_ex(), etc. */ #define DRWAV_SEQUENTIAL 0x00000001 +#define DRWAV_WITH_METADATA 0x00000002 DRWAV_API void drwav_version(drwav_uint32* pMajor, drwav_uint32* pMinor, drwav_uint32* pRevision); DRWAV_API const char* drwav_version_string(void); +/* Allocation Callbacks */ +typedef struct +{ + void* pUserData; + void* (* onMalloc)(size_t sz, void* pUserData); + void* (* onRealloc)(void* p, size_t sz, void* pUserData); + void (* onFree)(void* p, void* pUserData); +} drwav_allocation_callbacks; +/* End Allocation Callbacks */ + typedef enum { drwav_seek_origin_start, @@ -274,8 +312,10 @@ typedef enum typedef enum { drwav_container_riff, + drwav_container_rifx, drwav_container_w64, - drwav_container_rf64 + drwav_container_rf64, + drwav_container_aiff } drwav_container; typedef struct @@ -406,13 +446,6 @@ The read pointer will be sitting on the first byte after the chunk's header. You */ typedef drwav_uint64 (* drwav_chunk_proc)(void* pChunkUserData, drwav_read_proc onRead, drwav_seek_proc onSeek, void* pReadSeekUserData, const drwav_chunk_header* pChunkHeader, drwav_container container, const drwav_fmt* pFMT); -typedef struct -{ - void* pUserData; - void* (* onMalloc)(size_t sz, void* pUserData); - void* (* onRealloc)(void* p, size_t sz, void* pUserData); - void (* onFree)(void* p, void* pUserData); -} drwav_allocation_callbacks; /* Structure for internal use. Only used for loaders opened with drwav_init_memory(). */ typedef struct @@ -522,11 +555,11 @@ typedef struct /* See drwav_smpl_loop_type. */ drwav_uint32 type; - /* The byte offset of the first sample to be played in the loop. */ - drwav_uint32 firstSampleByteOffset; + /* The offset of the first sample to be played in the loop. */ + drwav_uint32 firstSampleOffset; - /* The byte offset into the audio data of the last sample to be played in the loop. */ - drwav_uint32 lastSampleByteOffset; + /* The offset into the audio data of the last sample to be played in the loop. */ + drwav_uint32 lastSampleOffset; /* A value to represent that playback should occur at a point between samples. This value ranges from 0 to UINT32_MAX. Where a value of 0 means no fraction, and a value of (UINT32_MAX / 2) would mean half a sample. */ drwav_uint32 sampleFraction; @@ -604,8 +637,8 @@ typedef struct /* Set to 0 for uncompressed formats. Else the last byte in compressed wave data where decompression can begin to find the value of the corresponding sample value. */ drwav_uint32 blockStart; - /* For uncompressed formats this is the byte offset of the cue point into the audio data. For compressed formats this is relative to the block specified with blockStart. */ - drwav_uint32 sampleByteOffset; + /* For uncompressed formats this is the offset of the cue point into the audio data. For compressed formats this is relative to the block specified with blockStart. */ + drwav_uint32 sampleOffset; } drwav_cue_point; typedef struct @@ -866,9 +899,6 @@ typedef struct drwav_bool32 isSequentialWrite; - /* A bit-field of drwav_metadata_type values, only bits set in this variable are parsed and saved */ - drwav_metadata_type allowedMetadataTypes; - /* A array of metadata. This is valid after the *init_with_metadata call returns. It will be valid until drwav_uninit() is called. You can take ownership of this data with drwav_take_ownership_of_metadata(). */ drwav_metadata* pMetadata; drwav_uint32 metadataCount; @@ -899,6 +929,13 @@ typedef struct drwav_int32 cachedFrames[16]; /* Samples are stored in this cache during decoding. */ drwav_uint32 cachedFrameCount; } ima; + + /* AIFF specific data. */ + struct + { + drwav_bool8 isLE; /* Will be set to true if the audio data is little-endian encoded. */ + drwav_bool8 isUnsigned; /* Only used for 8-bit samples. When set to true, will be treated as unsigned. */ + } aiff; } drwav; @@ -1297,14 +1334,21 @@ DRWAV_API drwav_bool32 drwav_fourcc_equal(const drwav_uint8* a, const char* b); #ifndef dr_wav_c #define dr_wav_c +#ifdef __MRC__ +/* MrC currently doesn't compile dr_wav correctly with any optimizations enabled. */ +#pragma options opt off +#endif + #include #include #include /* For INT_MAX */ #ifndef DR_WAV_NO_STDIO #include +#ifndef DR_WAV_NO_WCHAR #include #endif +#endif /* Standard library stuff. */ #ifndef DRWAV_ASSERT @@ -1337,17 +1381,19 @@ DRWAV_API drwav_bool32 drwav_fourcc_equal(const drwav_uint8* a, const char* b); #define drwav_clamp(x, lo, hi) (drwav_max((lo), drwav_min((hi), (x)))) #define drwav_offset_ptr(p, offset) (((drwav_uint8*)(p)) + (offset)) -#define DRWAV_MAX_SIMD_VECTOR_SIZE 64 /* 64 for AVX-512 in the future. */ +#define DRWAV_MAX_SIMD_VECTOR_SIZE 32 -/* CPU architecture. */ -#if defined(__x86_64__) || defined(_M_X64) +/* Architecture Detection */ +#if defined(__x86_64__) || (defined(_M_X64) && !defined(_M_ARM64EC)) #define DRWAV_X64 #elif defined(__i386) || defined(_M_IX86) #define DRWAV_X86 #elif defined(__arm__) || defined(_M_ARM) #define DRWAV_ARM #endif +/* End Architecture Detection */ +/* Inline */ #ifdef _MSC_VER #define DRWAV_INLINE __forceinline #elif defined(__GNUC__) @@ -1374,7 +1420,9 @@ DRWAV_API drwav_bool32 drwav_fourcc_equal(const drwav_uint8* a, const char* b); #else #define DRWAV_INLINE #endif +/* End Inline */ +/* SIZE_MAX */ #if defined(SIZE_MAX) #define DRWAV_SIZE_MAX SIZE_MAX #else @@ -1384,6 +1432,11 @@ DRWAV_API drwav_bool32 drwav_fourcc_equal(const drwav_uint8* a, const char* b); #define DRWAV_SIZE_MAX 0xFFFFFFFF #endif #endif +/* End SIZE_MAX */ + +/* Weird bit manipulation is for C89 compatibility (no direct support for 64-bit integers). */ +#define DRWAV_INT64_MIN ((drwav_int64) ((drwav_uint64)0x80000000 << 32)) +#define DRWAV_INT64_MAX ((drwav_int64)(((drwav_uint64)0x7FFFFFFF << 32) | 0xFFFFFFFF)) #if defined(_MSC_VER) && _MSC_VER >= 1400 #define DRWAV_HAS_BYTESWAP16_INTRINSIC @@ -1593,69 +1646,65 @@ static DRWAV_INLINE void drwav__bswap_samples_s32(drwav_int32* pSamples, drwav_u } -static DRWAV_INLINE float drwav__bswap_f32(float n) +static DRWAV_INLINE drwav_int64 drwav__bswap_s64(drwav_int64 n) { - union { - drwav_uint32 i; - float f; - } x; - x.f = n; - x.i = drwav__bswap32(x.i); - - return x.f; + return (drwav_int64)drwav__bswap64((drwav_uint64)n); } -static DRWAV_INLINE void drwav__bswap_samples_f32(float* pSamples, drwav_uint64 sampleCount) +static DRWAV_INLINE void drwav__bswap_samples_s64(drwav_int64* pSamples, drwav_uint64 sampleCount) { drwav_uint64 iSample; for (iSample = 0; iSample < sampleCount; iSample += 1) { - pSamples[iSample] = drwav__bswap_f32(pSamples[iSample]); + pSamples[iSample] = drwav__bswap_s64(pSamples[iSample]); } } -static DRWAV_INLINE double drwav__bswap_f64(double n) +static DRWAV_INLINE float drwav__bswap_f32(float n) { union { - drwav_uint64 i; - double f; + drwav_uint32 i; + float f; } x; x.f = n; - x.i = drwav__bswap64(x.i); + x.i = drwav__bswap32(x.i); return x.f; } -static DRWAV_INLINE void drwav__bswap_samples_f64(double* pSamples, drwav_uint64 sampleCount) +static DRWAV_INLINE void drwav__bswap_samples_f32(float* pSamples, drwav_uint64 sampleCount) { drwav_uint64 iSample; for (iSample = 0; iSample < sampleCount; iSample += 1) { - pSamples[iSample] = drwav__bswap_f64(pSamples[iSample]); + pSamples[iSample] = drwav__bswap_f32(pSamples[iSample]); } } -static DRWAV_INLINE void drwav__bswap_samples_pcm(void* pSamples, drwav_uint64 sampleCount, drwav_uint32 bytesPerSample) +static DRWAV_INLINE void drwav__bswap_samples(void* pSamples, drwav_uint64 sampleCount, drwav_uint32 bytesPerSample) { - /* Assumes integer PCM. Floating point PCM is done in drwav__bswap_samples_ieee(). */ switch (bytesPerSample) { - case 1: /* u8 */ + case 1: { - /* no-op. */ + /* No-op. */ } break; - case 2: /* s16, s12 (loosely packed) */ + case 2: { drwav__bswap_samples_s16((drwav_int16*)pSamples, sampleCount); } break; - case 3: /* s24 */ + case 3: { drwav__bswap_samples_s24((drwav_uint8*)pSamples, sampleCount); } break; - case 4: /* s32 */ + case 4: { drwav__bswap_samples_s32((drwav_int32*)pSamples, sampleCount); } break; + case 8: + { + drwav__bswap_samples_s64((drwav_int64*)pSamples, sampleCount); + } break; default: { /* Unsupported format. */ @@ -1664,59 +1713,91 @@ static DRWAV_INLINE void drwav__bswap_samples_pcm(void* pSamples, drwav_uint64 s } } -static DRWAV_INLINE void drwav__bswap_samples_ieee(void* pSamples, drwav_uint64 sampleCount, drwav_uint32 bytesPerSample) + + +DRWAV_PRIVATE DRWAV_INLINE drwav_bool32 drwav_is_container_be(drwav_container container) { - switch (bytesPerSample) - { - #if 0 /* Contributions welcome for f16 support. */ - case 2: /* f16 */ - { - drwav__bswap_samples_f16((drwav_float16*)pSamples, sampleCount); - } break; - #endif - case 4: /* f32 */ - { - drwav__bswap_samples_f32((float*)pSamples, sampleCount); - } break; - case 8: /* f64 */ - { - drwav__bswap_samples_f64((double*)pSamples, sampleCount); - } break; - default: - { - /* Unsupported format. */ - DRWAV_ASSERT(DRWAV_FALSE); - } break; + if (container == drwav_container_rifx || container == drwav_container_aiff) { + return DRWAV_TRUE; + } else { + return DRWAV_FALSE; } } -static DRWAV_INLINE void drwav__bswap_samples(void* pSamples, drwav_uint64 sampleCount, drwav_uint32 bytesPerSample, drwav_uint16 format) + +DRWAV_PRIVATE DRWAV_INLINE drwav_uint16 drwav_bytes_to_u16_le(const drwav_uint8* data) { - switch (format) - { - case DR_WAVE_FORMAT_PCM: - { - drwav__bswap_samples_pcm(pSamples, sampleCount, bytesPerSample); - } break; + return ((drwav_uint16)data[0] << 0) | ((drwav_uint16)data[1] << 8); +} - case DR_WAVE_FORMAT_IEEE_FLOAT: - { - drwav__bswap_samples_ieee(pSamples, sampleCount, bytesPerSample); - } break; +DRWAV_PRIVATE DRWAV_INLINE drwav_uint16 drwav_bytes_to_u16_be(const drwav_uint8* data) +{ + return ((drwav_uint16)data[1] << 0) | ((drwav_uint16)data[0] << 8); +} - case DR_WAVE_FORMAT_ALAW: - case DR_WAVE_FORMAT_MULAW: - { - drwav__bswap_samples_s16((drwav_int16*)pSamples, sampleCount); - } break; +DRWAV_PRIVATE DRWAV_INLINE drwav_uint16 drwav_bytes_to_u16_ex(const drwav_uint8* data, drwav_container container) +{ + if (drwav_is_container_be(container)) { + return drwav_bytes_to_u16_be(data); + } else { + return drwav_bytes_to_u16_le(data); + } +} - case DR_WAVE_FORMAT_ADPCM: - case DR_WAVE_FORMAT_DVI_ADPCM: - default: - { - /* Unsupported format. */ - DRWAV_ASSERT(DRWAV_FALSE); - } break; + +DRWAV_PRIVATE DRWAV_INLINE drwav_uint32 drwav_bytes_to_u32_le(const drwav_uint8* data) +{ + return ((drwav_uint32)data[0] << 0) | ((drwav_uint32)data[1] << 8) | ((drwav_uint32)data[2] << 16) | ((drwav_uint32)data[3] << 24); +} + +DRWAV_PRIVATE DRWAV_INLINE drwav_uint32 drwav_bytes_to_u32_be(const drwav_uint8* data) +{ + return ((drwav_uint32)data[3] << 0) | ((drwav_uint32)data[2] << 8) | ((drwav_uint32)data[1] << 16) | ((drwav_uint32)data[0] << 24); +} + +DRWAV_PRIVATE DRWAV_INLINE drwav_uint32 drwav_bytes_to_u32_ex(const drwav_uint8* data, drwav_container container) +{ + if (drwav_is_container_be(container)) { + return drwav_bytes_to_u32_be(data); + } else { + return drwav_bytes_to_u32_le(data); + } +} + + + +DRWAV_PRIVATE drwav_int64 drwav_aiff_extented_to_s64(const drwav_uint8* data) +{ + drwav_uint32 exponent = ((drwav_uint32)data[0] << 8) | data[1]; + drwav_uint64 hi = ((drwav_uint64)data[2] << 24) | ((drwav_uint64)data[3] << 16) | ((drwav_uint64)data[4] << 8) | ((drwav_uint64)data[5] << 0); + drwav_uint64 lo = ((drwav_uint64)data[6] << 24) | ((drwav_uint64)data[7] << 16) | ((drwav_uint64)data[8] << 8) | ((drwav_uint64)data[9] << 0); + drwav_uint64 significand = (hi << 32) | lo; + int sign = exponent >> 15; + + /* Remove sign bit. */ + exponent &= 0x7FFF; + + /* Special cases. */ + if (exponent == 0 && significand == 0) { + return 0; + } else if (exponent == 0x7FFF) { + return sign ? DRWAV_INT64_MIN : DRWAV_INT64_MAX; /* Infinite. */ + } + + exponent -= 16383; + + if (exponent > 63) { + return sign ? DRWAV_INT64_MIN : DRWAV_INT64_MAX; /* Too big for a 64-bit integer. */ + } else if (exponent < 1) { + return 0; /* Number is less than 1, so rounds down to 0. */ + } + + significand >>= (63 - exponent); + + if (sign) { + return -(drwav_int64)significand; + } else { + return (drwav_int64)significand; } } @@ -1840,7 +1921,7 @@ DRWAV_PRIVATE drwav_bool32 drwav_init_write__internal(drwav* pWav, const drwav_d DRWAV_PRIVATE drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void* pUserData, drwav_container container, drwav_uint64* pRunningBytesReadOut, drwav_chunk_header* pHeaderOut) { - if (container == drwav_container_riff || container == drwav_container_rf64) { + if (container == drwav_container_riff || container == drwav_container_rifx || container == drwav_container_rf64 || container == drwav_container_aiff) { drwav_uint8 sizeInBytes[4]; if (onRead(pUserData, pHeaderOut->id.fourcc, 4) != 4) { @@ -1851,10 +1932,11 @@ DRWAV_PRIVATE drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void return DRWAV_INVALID_FILE; } - pHeaderOut->sizeInBytes = drwav_bytes_to_u32(sizeInBytes); + pHeaderOut->sizeInBytes = drwav_bytes_to_u32_ex(sizeInBytes, container); pHeaderOut->paddingSize = drwav__chunk_padding_size_riff(pHeaderOut->sizeInBytes); + *pRunningBytesReadOut += 8; - } else { + } else if (container == drwav_container_w64) { drwav_uint8 sizeInBytes[8]; if (onRead(pUserData, pHeaderOut->id.guid, 16) != 16) { @@ -1868,6 +1950,8 @@ DRWAV_PRIVATE drwav_result drwav__read_chunk_header(drwav_read_proc onRead, void pHeaderOut->sizeInBytes = drwav_bytes_to_u64(sizeInBytes) - 24; /* <-- Subtract 24 because w64 includes the size of the header. */ pHeaderOut->paddingSize = drwav__chunk_padding_size_w64(pHeaderOut->sizeInBytes); *pRunningBytesReadOut += 24; + } else { + return DRWAV_INVALID_FILE; } return DRWAV_SUCCESS; @@ -1921,115 +2005,6 @@ DRWAV_PRIVATE drwav_bool32 drwav__seek_from_start(drwav_seek_proc onSeek, drwav_ } -DRWAV_PRIVATE drwav_bool32 drwav__read_fmt(drwav_read_proc onRead, drwav_seek_proc onSeek, void* pUserData, drwav_container container, drwav_uint64* pRunningBytesReadOut, drwav_fmt* fmtOut) -{ - drwav_chunk_header header; - drwav_uint8 fmt[16]; - - if (drwav__read_chunk_header(onRead, pUserData, container, pRunningBytesReadOut, &header) != DRWAV_SUCCESS) { - return DRWAV_FALSE; - } - - - /* Skip non-fmt chunks. */ - while (((container == drwav_container_riff || container == drwav_container_rf64) && !drwav_fourcc_equal(header.id.fourcc, "fmt ")) || (container == drwav_container_w64 && !drwav_guid_equal(header.id.guid, drwavGUID_W64_FMT))) { - if (!drwav__seek_forward(onSeek, header.sizeInBytes + header.paddingSize, pUserData)) { - return DRWAV_FALSE; - } - *pRunningBytesReadOut += header.sizeInBytes + header.paddingSize; - - /* Try the next header. */ - if (drwav__read_chunk_header(onRead, pUserData, container, pRunningBytesReadOut, &header) != DRWAV_SUCCESS) { - return DRWAV_FALSE; - } - } - - - /* Validation. */ - if (container == drwav_container_riff || container == drwav_container_rf64) { - if (!drwav_fourcc_equal(header.id.fourcc, "fmt ")) { - return DRWAV_FALSE; - } - } else { - if (!drwav_guid_equal(header.id.guid, drwavGUID_W64_FMT)) { - return DRWAV_FALSE; - } - } - - - if (onRead(pUserData, fmt, sizeof(fmt)) != sizeof(fmt)) { - return DRWAV_FALSE; - } - *pRunningBytesReadOut += sizeof(fmt); - - fmtOut->formatTag = drwav_bytes_to_u16(fmt + 0); - fmtOut->channels = drwav_bytes_to_u16(fmt + 2); - fmtOut->sampleRate = drwav_bytes_to_u32(fmt + 4); - fmtOut->avgBytesPerSec = drwav_bytes_to_u32(fmt + 8); - fmtOut->blockAlign = drwav_bytes_to_u16(fmt + 12); - fmtOut->bitsPerSample = drwav_bytes_to_u16(fmt + 14); - - fmtOut->extendedSize = 0; - fmtOut->validBitsPerSample = 0; - fmtOut->channelMask = 0; - DRWAV_ZERO_MEMORY(fmtOut->subFormat, sizeof(fmtOut->subFormat)); - - if (header.sizeInBytes > 16) { - drwav_uint8 fmt_cbSize[2]; - int bytesReadSoFar = 0; - - if (onRead(pUserData, fmt_cbSize, sizeof(fmt_cbSize)) != sizeof(fmt_cbSize)) { - return DRWAV_FALSE; /* Expecting more data. */ - } - *pRunningBytesReadOut += sizeof(fmt_cbSize); - - bytesReadSoFar = 18; - - fmtOut->extendedSize = drwav_bytes_to_u16(fmt_cbSize); - if (fmtOut->extendedSize > 0) { - /* Simple validation. */ - if (fmtOut->formatTag == DR_WAVE_FORMAT_EXTENSIBLE) { - if (fmtOut->extendedSize != 22) { - return DRWAV_FALSE; - } - } - - if (fmtOut->formatTag == DR_WAVE_FORMAT_EXTENSIBLE) { - drwav_uint8 fmtext[22]; - if (onRead(pUserData, fmtext, fmtOut->extendedSize) != fmtOut->extendedSize) { - return DRWAV_FALSE; /* Expecting more data. */ - } - - fmtOut->validBitsPerSample = drwav_bytes_to_u16(fmtext + 0); - fmtOut->channelMask = drwav_bytes_to_u32(fmtext + 2); - drwav_bytes_to_guid(fmtext + 6, fmtOut->subFormat); - } else { - if (!onSeek(pUserData, fmtOut->extendedSize, drwav_seek_origin_current)) { - return DRWAV_FALSE; - } - } - *pRunningBytesReadOut += fmtOut->extendedSize; - - bytesReadSoFar += fmtOut->extendedSize; - } - - /* Seek past any leftover bytes. For w64 the leftover will be defined based on the chunk size. */ - if (!onSeek(pUserData, (int)(header.sizeInBytes - bytesReadSoFar), drwav_seek_origin_current)) { - return DRWAV_FALSE; - } - *pRunningBytesReadOut += (header.sizeInBytes - bytesReadSoFar); - } - - if (header.paddingSize > 0) { - if (!onSeek(pUserData, header.paddingSize, drwav_seek_origin_current)) { - return DRWAV_FALSE; - } - *pRunningBytesReadOut += header.paddingSize; - } - - return DRWAV_TRUE; -} - DRWAV_PRIVATE size_t drwav__on_read(drwav_read_proc onRead, void* pUserData, void* pBufferOut, size_t bytesToRead, drwav_uint64* pCursor) { @@ -2121,7 +2096,7 @@ DRWAV_PRIVATE drwav_uint8* drwav__metadata_get_memory(drwav__metadata_parser* pP pParser->pDataCursor += align - modulo; } } - + pResult = pParser->pDataCursor; /* @@ -2154,7 +2129,7 @@ DRWAV_PRIVATE drwav_result drwav__metadata_alloc(drwav__metadata_parser* pParser /* We don't need to worry about specifying an alignment here because malloc always returns something - of suitable alignment. This also means than pParser->pMetadata is all that we need to store in order + of suitable alignment. This also means pParser->pMetadata is all that we need to store in order for us to free when we are done. */ pParser->pMetadata = (drwav_metadata*)drwav__metadata_get_memory(pParser, sizeof(drwav_metadata) * pParser->metadataCount, 1); @@ -2177,12 +2152,18 @@ DRWAV_PRIVATE drwav_uint64 drwav__read_smpl_to_metadata_obj(drwav__metadata_pars { drwav_uint8 smplHeaderData[DRWAV_SMPL_BYTES]; drwav_uint64 totalBytesRead = 0; - size_t bytesJustRead = drwav__metadata_parser_read(pParser, smplHeaderData, sizeof(smplHeaderData), &totalBytesRead); + size_t bytesJustRead; + + if (pMetadata == NULL) { + return 0; + } + + bytesJustRead = drwav__metadata_parser_read(pParser, smplHeaderData, sizeof(smplHeaderData), &totalBytesRead); DRWAV_ASSERT(pParser->stage == drwav__metadata_parser_stage_read); DRWAV_ASSERT(pChunkHeader != NULL); - if (bytesJustRead == sizeof(smplHeaderData)) { + if (pMetadata != NULL && bytesJustRead == sizeof(smplHeaderData)) { drwav_uint32 iSampleLoop; pMetadata->type = drwav_metadata_type_smpl; @@ -2208,12 +2189,12 @@ DRWAV_PRIVATE drwav_uint64 drwav__read_smpl_to_metadata_obj(drwav__metadata_pars bytesJustRead = drwav__metadata_parser_read(pParser, smplLoopData, sizeof(smplLoopData), &totalBytesRead); if (bytesJustRead == sizeof(smplLoopData)) { - pMetadata->data.smpl.pLoops[iSampleLoop].cuePointId = drwav_bytes_to_u32(smplLoopData + 0); - pMetadata->data.smpl.pLoops[iSampleLoop].type = drwav_bytes_to_u32(smplLoopData + 4); - pMetadata->data.smpl.pLoops[iSampleLoop].firstSampleByteOffset = drwav_bytes_to_u32(smplLoopData + 8); - pMetadata->data.smpl.pLoops[iSampleLoop].lastSampleByteOffset = drwav_bytes_to_u32(smplLoopData + 12); - pMetadata->data.smpl.pLoops[iSampleLoop].sampleFraction = drwav_bytes_to_u32(smplLoopData + 16); - pMetadata->data.smpl.pLoops[iSampleLoop].playCount = drwav_bytes_to_u32(smplLoopData + 20); + pMetadata->data.smpl.pLoops[iSampleLoop].cuePointId = drwav_bytes_to_u32(smplLoopData + 0); + pMetadata->data.smpl.pLoops[iSampleLoop].type = drwav_bytes_to_u32(smplLoopData + 4); + pMetadata->data.smpl.pLoops[iSampleLoop].firstSampleOffset = drwav_bytes_to_u32(smplLoopData + 8); + pMetadata->data.smpl.pLoops[iSampleLoop].lastSampleOffset = drwav_bytes_to_u32(smplLoopData + 12); + pMetadata->data.smpl.pLoops[iSampleLoop].sampleFraction = drwav_bytes_to_u32(smplLoopData + 16); + pMetadata->data.smpl.pLoops[iSampleLoop].playCount = drwav_bytes_to_u32(smplLoopData + 20); } else { break; } @@ -2235,7 +2216,13 @@ DRWAV_PRIVATE drwav_uint64 drwav__read_cue_to_metadata_obj(drwav__metadata_parse { drwav_uint8 cueHeaderSectionData[DRWAV_CUE_BYTES]; drwav_uint64 totalBytesRead = 0; - size_t bytesJustRead = drwav__metadata_parser_read(pParser, cueHeaderSectionData, sizeof(cueHeaderSectionData), &totalBytesRead); + size_t bytesJustRead; + + if (pMetadata == NULL) { + return 0; + } + + bytesJustRead = drwav__metadata_parser_read(pParser, cueHeaderSectionData, sizeof(cueHeaderSectionData), &totalBytesRead); DRWAV_ASSERT(pParser->stage == drwav__metadata_parser_stage_read); @@ -2267,7 +2254,7 @@ DRWAV_PRIVATE drwav_uint64 drwav__read_cue_to_metadata_obj(drwav__metadata_parse pMetadata->data.cue.pCuePoints[iCuePoint].dataChunkId[3] = cuePointData[11]; pMetadata->data.cue.pCuePoints[iCuePoint].chunkStart = drwav_bytes_to_u32(cuePointData + 12); pMetadata->data.cue.pCuePoints[iCuePoint].blockStart = drwav_bytes_to_u32(cuePointData + 16); - pMetadata->data.cue.pCuePoints[iCuePoint].sampleByteOffset = drwav_bytes_to_u32(cuePointData + 20); + pMetadata->data.cue.pCuePoints[iCuePoint].sampleOffset = drwav_bytes_to_u32(cuePointData + 20); } else { break; } @@ -2282,7 +2269,13 @@ DRWAV_PRIVATE drwav_uint64 drwav__read_cue_to_metadata_obj(drwav__metadata_parse DRWAV_PRIVATE drwav_uint64 drwav__read_inst_to_metadata_obj(drwav__metadata_parser* pParser, drwav_metadata* pMetadata) { drwav_uint8 instData[DRWAV_INST_BYTES]; - drwav_uint64 bytesRead = drwav__metadata_parser_read(pParser, instData, sizeof(instData), NULL); + drwav_uint64 bytesRead; + + if (pMetadata == NULL) { + return 0; + } + + bytesRead = drwav__metadata_parser_read(pParser, instData, sizeof(instData), NULL); DRWAV_ASSERT(pParser->stage == drwav__metadata_parser_stage_read); @@ -2303,7 +2296,13 @@ DRWAV_PRIVATE drwav_uint64 drwav__read_inst_to_metadata_obj(drwav__metadata_pars DRWAV_PRIVATE drwav_uint64 drwav__read_acid_to_metadata_obj(drwav__metadata_parser* pParser, drwav_metadata* pMetadata) { drwav_uint8 acidData[DRWAV_ACID_BYTES]; - drwav_uint64 bytesRead = drwav__metadata_parser_read(pParser, acidData, sizeof(acidData), NULL); + drwav_uint64 bytesRead; + + if (pMetadata == NULL) { + return 0; + } + + bytesRead = drwav__metadata_parser_read(pParser, acidData, sizeof(acidData), NULL); DRWAV_ASSERT(pParser->stage == drwav__metadata_parser_stage_read); @@ -2408,7 +2407,7 @@ DRWAV_PRIVATE drwav_result drwav_buffer_reader_read(drwav_buffer_reader* pReader size_t bytesRemaining; DRWAV_ASSERT(pReader != NULL); - + if (pBytesRead != NULL) { *pBytesRead = 0; } @@ -2488,7 +2487,7 @@ DRWAV_PRIVATE drwav_uint64 drwav__read_bext_to_metadata_obj(drwav__metadata_pars size_t bytesRead = drwav__metadata_parser_read(pParser, bextData, sizeof(bextData), NULL); DRWAV_ASSERT(pParser->stage == drwav__metadata_parser_stage_read); - + if (bytesRead == sizeof(bextData)) { drwav_buffer_reader reader; drwav_uint32 timeReferenceLow; @@ -2550,7 +2549,7 @@ DRWAV_PRIVATE drwav_uint64 drwav__read_list_label_or_note_to_metadata_obj(drwav_ drwav_uint64 totalBytesRead = 0; size_t bytesJustRead = drwav__metadata_parser_read(pParser, cueIDBuffer, sizeof(cueIDBuffer), &totalBytesRead); - DRWAV_ASSERT(pParser->stage == drwav__metadata_parser_stage_read); + DRWAV_ASSERT(pParser->stage == drwav__metadata_parser_stage_read); if (bytesJustRead == sizeof(cueIDBuffer)) { drwav_uint32 sizeIncludingNullTerminator; @@ -2653,7 +2652,7 @@ DRWAV_PRIVATE drwav_uint64 drwav__metadata_process_unknown_chunk(drwav__metadata return 0; } - if (drwav_fourcc_equal(pChunkId, "data") || drwav_fourcc_equal(pChunkId, "fmt") || drwav_fourcc_equal(pChunkId, "fact")) { + if (drwav_fourcc_equal(pChunkId, "data") || drwav_fourcc_equal(pChunkId, "fmt ") || drwav_fourcc_equal(pChunkId, "fact")) { return 0; } @@ -2722,7 +2721,7 @@ DRWAV_PRIVATE drwav_uint64 drwav__metadata_process_chunk(drwav__metadata_parser* } } else { /* Loop count in header does not match the size of the chunk. */ - } + } } } else { bytesRead = drwav__read_smpl_to_metadata_obj(pParser, pChunkHeader, &pParser->pMetadata[pParser->metadataCursor]); @@ -3008,20 +3007,25 @@ DRWAV_PRIVATE drwav_bool32 drwav_preinit(drwav* pWav, drwav_read_proc onRead, dr DRWAV_PRIVATE drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags) { /* This function assumes drwav_preinit() has been called beforehand. */ - + drwav_result result; drwav_uint64 cursor; /* <-- Keeps track of the byte position so we can seek to specific locations. */ drwav_bool32 sequential; drwav_uint8 riff[4]; drwav_fmt fmt; unsigned short translatedFormatTag; - drwav_bool32 foundDataChunk; - drwav_uint64 dataChunkSize = 0; /* <-- Important! Don't explicitly set this to 0 anywhere else. Calculation of the size of the data chunk is performed in different paths depending on the container. */ + drwav_uint64 dataChunkSize = 0; /* <-- Important! Don't explicitly set this to 0 anywhere else. Calculation of the size of the data chunk is performed in different paths depending on the container. */ drwav_uint64 sampleCountFromFactChunk = 0; /* Same as dataChunkSize - make sure this is the only place this is initialized to 0. */ - drwav_uint64 chunkSize; + drwav_uint64 metadataStartPos; drwav__metadata_parser metadataParser; + drwav_bool8 isProcessingMetadata = DRWAV_FALSE; + drwav_bool8 foundChunk_fmt = DRWAV_FALSE; + drwav_bool8 foundChunk_data = DRWAV_FALSE; + drwav_bool8 isAIFCFormType = DRWAV_FALSE; /* Only used with AIFF. */ + drwav_uint64 aiffFrameCount = 0; cursor = 0; sequential = (flags & DRWAV_SEQUENTIAL) != 0; + DRWAV_ZERO_OBJECT(&fmt); /* The first 4 bytes should be the RIFF identifier. */ if (drwav__on_read(pWav->onRead, pWav->pUserData, riff, sizeof(riff), &cursor) != sizeof(riff)) { @@ -3034,6 +3038,8 @@ DRWAV_PRIVATE drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc on */ if (drwav_fourcc_equal(riff, "RIFF")) { pWav->container = drwav_container_riff; + } else if (drwav_fourcc_equal(riff, "RIFX")) { + pWav->container = drwav_container_rifx; } else if (drwav_fourcc_equal(riff, "riff")) { int i; drwav_uint8 riff2[12]; @@ -3052,28 +3058,37 @@ DRWAV_PRIVATE drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc on } } else if (drwav_fourcc_equal(riff, "RF64")) { pWav->container = drwav_container_rf64; + } else if (drwav_fourcc_equal(riff, "FORM")) { + pWav->container = drwav_container_aiff; } else { return DRWAV_FALSE; /* Unknown or unsupported container. */ } - if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64) { + if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rifx || pWav->container == drwav_container_rf64) { drwav_uint8 chunkSizeBytes[4]; drwav_uint8 wave[4]; - /* RIFF/WAVE */ if (drwav__on_read(pWav->onRead, pWav->pUserData, chunkSizeBytes, sizeof(chunkSizeBytes), &cursor) != sizeof(chunkSizeBytes)) { return DRWAV_FALSE; } - if (pWav->container == drwav_container_riff) { - if (drwav_bytes_to_u32(chunkSizeBytes) < 36) { - return DRWAV_FALSE; /* Chunk size should always be at least 36 bytes. */ + if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rifx) { + if (drwav_bytes_to_u32_ex(chunkSizeBytes, pWav->container) < 36) { + /* + I've had a report of a WAV file failing to load when the size of the WAVE chunk is not encoded + and is instead just set to 0. I'm going to relax the validation here to allow these files to + load. Considering the chunk size isn't actually used this should be safe. With this change my + test suite still passes. + */ + /*return DRWAV_FALSE;*/ /* Chunk size should always be at least 36 bytes. */ } - } else { - if (drwav_bytes_to_u32(chunkSizeBytes) != 0xFFFFFFFF) { + } else if (pWav->container == drwav_container_rf64) { + if (drwav_bytes_to_u32_le(chunkSizeBytes) != 0xFFFFFFFF) { return DRWAV_FALSE; /* Chunk size should always be set to -1/0xFFFFFFFF for RF64. The actual size is retrieved later. */ } + } else { + return DRWAV_FALSE; /* Should never hit this. */ } if (drwav__on_read(pWav->onRead, pWav->pUserData, wave, sizeof(wave), &cursor) != sizeof(wave)) { @@ -3083,11 +3098,10 @@ DRWAV_PRIVATE drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc on if (!drwav_fourcc_equal(wave, "WAVE")) { return DRWAV_FALSE; /* Expecting "WAVE". */ } - } else { + } else if (pWav->container == drwav_container_w64) { drwav_uint8 chunkSizeBytes[8]; drwav_uint8 wave[16]; - /* W64 */ if (drwav__on_read(pWav->onRead, pWav->pUserData, chunkSizeBytes, sizeof(chunkSizeBytes), &cursor) != sizeof(chunkSizeBytes)) { return DRWAV_FALSE; } @@ -3103,6 +3117,31 @@ DRWAV_PRIVATE drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc on if (!drwav_guid_equal(wave, drwavGUID_W64_WAVE)) { return DRWAV_FALSE; } + } else if (pWav->container == drwav_container_aiff) { + drwav_uint8 chunkSizeBytes[4]; + drwav_uint8 aiff[4]; + + if (drwav__on_read(pWav->onRead, pWav->pUserData, chunkSizeBytes, sizeof(chunkSizeBytes), &cursor) != sizeof(chunkSizeBytes)) { + return DRWAV_FALSE; + } + + if (drwav_bytes_to_u32_be(chunkSizeBytes) < 18) { + return DRWAV_FALSE; + } + + if (drwav__on_read(pWav->onRead, pWav->pUserData, aiff, sizeof(aiff), &cursor) != sizeof(aiff)) { + return DRWAV_FALSE; + } + + if (drwav_fourcc_equal(aiff, "AIFF")) { + isAIFCFormType = DRWAV_FALSE; + } else if (drwav_fourcc_equal(aiff, "AIFC")) { + isAIFCFormType = DRWAV_TRUE; + } else { + return DRWAV_FALSE; /* Expecting "AIFF" or "AIFC". */ + } + } else { + return DRWAV_FALSE; } @@ -3111,7 +3150,7 @@ DRWAV_PRIVATE drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc on drwav_uint8 sizeBytes[8]; drwav_uint64 bytesRemainingInChunk; drwav_chunk_header header; - drwav_result result = drwav__read_chunk_header(pWav->onRead, pWav->pUserData, pWav->container, &cursor, &header); + result = drwav__read_chunk_header(pWav->onRead, pWav->pUserData, pWav->container, &cursor, &header); if (result != DRWAV_SUCCESS) { return DRWAV_FALSE; } @@ -3154,196 +3193,435 @@ DRWAV_PRIVATE drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc on } - /* The next bytes should be the "fmt " chunk. */ - if (!drwav__read_fmt(pWav->onRead, pWav->onSeek, pWav->pUserData, pWav->container, &cursor, &fmt)) { - return DRWAV_FALSE; /* Failed to read the "fmt " chunk. */ + metadataStartPos = cursor; + + /* + Whether or not we are processing metadata controls how we load. We can load more efficiently when + metadata is not being processed, but we also cannot process metadata for Wave64 because I have not + been able to test it. If someone is able to test this and provide a patch I'm happy to enable it. + + Seqential mode cannot support metadata because it involves seeking backwards. + */ + isProcessingMetadata = !sequential && ((flags & DRWAV_WITH_METADATA) != 0); + + /* Don't allow processing of metadata with untested containers. */ + if (pWav->container != drwav_container_riff && pWav->container != drwav_container_rf64) { + isProcessingMetadata = DRWAV_FALSE; } - /* Basic validation. */ - if ((fmt.sampleRate == 0 || fmt.sampleRate > DRWAV_MAX_SAMPLE_RATE) || - (fmt.channels == 0 || fmt.channels > DRWAV_MAX_CHANNELS) || - (fmt.bitsPerSample == 0 || fmt.bitsPerSample > DRWAV_MAX_BITS_PER_SAMPLE) || - fmt.blockAlign == 0) { - return DRWAV_FALSE; /* Probably an invalid WAV file. */ + DRWAV_ZERO_MEMORY(&metadataParser, sizeof(metadataParser)); + if (isProcessingMetadata) { + metadataParser.onRead = pWav->onRead; + metadataParser.onSeek = pWav->onSeek; + metadataParser.pReadSeekUserData = pWav->pUserData; + metadataParser.stage = drwav__metadata_parser_stage_count; } - /* Translate the internal format. */ - translatedFormatTag = fmt.formatTag; - if (translatedFormatTag == DR_WAVE_FORMAT_EXTENSIBLE) { - translatedFormatTag = drwav_bytes_to_u16(fmt.subFormat + 0); - } + /* + From here on out, chunks might be in any order. In order to robustly handle metadata we'll need + to loop through every chunk and handle them as we find them. In sequential mode we need to get + out of the loop as soon as we find the data chunk because we won't be able to seek back. + */ + for (;;) { /* For each chunk... */ + drwav_chunk_header header; + drwav_uint64 chunkSize; + + result = drwav__read_chunk_header(pWav->onRead, pWav->pUserData, pWav->container, &cursor, &header); + if (result != DRWAV_SUCCESS) { + break; + } + + chunkSize = header.sizeInBytes; + + + /* + Always tell the caller about this chunk. We cannot do this in sequential mode because the + callback is allowed to read from the file, in which case we'll need to rewind. + */ + if (!sequential && onChunk != NULL) { + drwav_uint64 callbackBytesRead = onChunk(pChunkUserData, pWav->onRead, pWav->onSeek, pWav->pUserData, &header, pWav->container, &fmt); + + /* + dr_wav may need to read the contents of the chunk, so we now need to seek back to the position before + we called the callback. + */ + if (callbackBytesRead > 0) { + if (drwav__seek_from_start(pWav->onSeek, cursor, pWav->pUserData) == DRWAV_FALSE) { + return DRWAV_FALSE; + } + } + } + + + /* Explicitly handle known chunks first. */ + + /* "fmt " */ + if (((pWav->container == drwav_container_riff || pWav->container == drwav_container_rifx || pWav->container == drwav_container_rf64) && drwav_fourcc_equal(header.id.fourcc, "fmt ")) || + ((pWav->container == drwav_container_w64) && drwav_guid_equal(header.id.guid, drwavGUID_W64_FMT))) { + drwav_uint8 fmtData[16]; + + foundChunk_fmt = DRWAV_TRUE; + + if (pWav->onRead(pWav->pUserData, fmtData, sizeof(fmtData)) != sizeof(fmtData)) { + return DRWAV_FALSE; + } + cursor += sizeof(fmtData); + + fmt.formatTag = drwav_bytes_to_u16_ex(fmtData + 0, pWav->container); + fmt.channels = drwav_bytes_to_u16_ex(fmtData + 2, pWav->container); + fmt.sampleRate = drwav_bytes_to_u32_ex(fmtData + 4, pWav->container); + fmt.avgBytesPerSec = drwav_bytes_to_u32_ex(fmtData + 8, pWav->container); + fmt.blockAlign = drwav_bytes_to_u16_ex(fmtData + 12, pWav->container); + fmt.bitsPerSample = drwav_bytes_to_u16_ex(fmtData + 14, pWav->container); + + fmt.extendedSize = 0; + fmt.validBitsPerSample = 0; + fmt.channelMask = 0; + DRWAV_ZERO_MEMORY(fmt.subFormat, sizeof(fmt.subFormat)); + + if (header.sizeInBytes > 16) { + drwav_uint8 fmt_cbSize[2]; + int bytesReadSoFar = 0; + + if (pWav->onRead(pWav->pUserData, fmt_cbSize, sizeof(fmt_cbSize)) != sizeof(fmt_cbSize)) { + return DRWAV_FALSE; /* Expecting more data. */ + } + cursor += sizeof(fmt_cbSize); + + bytesReadSoFar = 18; + + fmt.extendedSize = drwav_bytes_to_u16_ex(fmt_cbSize, pWav->container); + if (fmt.extendedSize > 0) { + /* Simple validation. */ + if (fmt.formatTag == DR_WAVE_FORMAT_EXTENSIBLE) { + if (fmt.extendedSize != 22) { + return DRWAV_FALSE; + } + } + + if (fmt.formatTag == DR_WAVE_FORMAT_EXTENSIBLE) { + drwav_uint8 fmtext[22]; + + if (pWav->onRead(pWav->pUserData, fmtext, fmt.extendedSize) != fmt.extendedSize) { + return DRWAV_FALSE; /* Expecting more data. */ + } + + fmt.validBitsPerSample = drwav_bytes_to_u16_ex(fmtext + 0, pWav->container); + fmt.channelMask = drwav_bytes_to_u32_ex(fmtext + 2, pWav->container); + drwav_bytes_to_guid(fmtext + 6, fmt.subFormat); + } else { + if (pWav->onSeek(pWav->pUserData, fmt.extendedSize, drwav_seek_origin_current) == DRWAV_FALSE) { + return DRWAV_FALSE; + } + } + cursor += fmt.extendedSize; + + bytesReadSoFar += fmt.extendedSize; + } + + /* Seek past any leftover bytes. For w64 the leftover will be defined based on the chunk size. */ + if (pWav->onSeek(pWav->pUserData, (int)(header.sizeInBytes - bytesReadSoFar), drwav_seek_origin_current) == DRWAV_FALSE) { + return DRWAV_FALSE; + } + cursor += (header.sizeInBytes - bytesReadSoFar); + } + + if (header.paddingSize > 0) { + if (drwav__seek_forward(pWav->onSeek, header.paddingSize, pWav->pUserData) == DRWAV_FALSE) { + break; + } + cursor += header.paddingSize; + } + + /* Go to the next chunk. Don't include this chunk in metadata. */ + continue; + } + + /* "data" */ + if (((pWav->container == drwav_container_riff || pWav->container == drwav_container_rifx || pWav->container == drwav_container_rf64) && drwav_fourcc_equal(header.id.fourcc, "data")) || + ((pWav->container == drwav_container_w64) && drwav_guid_equal(header.id.guid, drwavGUID_W64_DATA))) { + foundChunk_data = DRWAV_TRUE; + + pWav->dataChunkDataPos = cursor; + + if (pWav->container != drwav_container_rf64) { /* The data chunk size for RF64 will always be set to 0xFFFFFFFF here. It was set to it's true value earlier. */ + dataChunkSize = chunkSize; + } + + /* If we're running in sequential mode, or we're not reading metadata, we have enough now that we can get out of the loop. */ + if (sequential || !isProcessingMetadata) { + break; /* No need to keep reading beyond the data chunk. */ + } else { + chunkSize += header.paddingSize; /* <-- Make sure we seek past the padding. */ + if (drwav__seek_forward(pWav->onSeek, chunkSize, pWav->pUserData) == DRWAV_FALSE) { + break; + } + cursor += chunkSize; + + continue; /* There may be some more metadata to read. */ + } + } + + /* "fact". This is optional. Can use this to get the sample count which is useful for compressed formats. For RF64 we retrieved the sample count from the ds64 chunk earlier. */ + if (((pWav->container == drwav_container_riff || pWav->container == drwav_container_rifx || pWav->container == drwav_container_rf64) && drwav_fourcc_equal(header.id.fourcc, "fact")) || + ((pWav->container == drwav_container_w64) && drwav_guid_equal(header.id.guid, drwavGUID_W64_FACT))) { + if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rifx) { + drwav_uint8 sampleCount[4]; + if (drwav__on_read(pWav->onRead, pWav->pUserData, &sampleCount, 4, &cursor) != 4) { + return DRWAV_FALSE; + } + + chunkSize -= 4; + + /* + The sample count in the "fact" chunk is either unreliable, or I'm not understanding it properly. For now I am only enabling this + for Microsoft ADPCM formats. + */ + if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ADPCM) { + sampleCountFromFactChunk = drwav_bytes_to_u32_ex(sampleCount, pWav->container); + } else { + sampleCountFromFactChunk = 0; + } + } else if (pWav->container == drwav_container_w64) { + if (drwav__on_read(pWav->onRead, pWav->pUserData, &sampleCountFromFactChunk, 8, &cursor) != 8) { + return DRWAV_FALSE; + } + + chunkSize -= 8; + } else if (pWav->container == drwav_container_rf64) { + /* We retrieved the sample count from the ds64 chunk earlier so no need to do that here. */ + } + + /* Seek to the next chunk in preparation for the next iteration. */ + chunkSize += header.paddingSize; /* <-- Make sure we seek past the padding. */ + if (drwav__seek_forward(pWav->onSeek, chunkSize, pWav->pUserData) == DRWAV_FALSE) { + break; + } + cursor += chunkSize; + + continue; + } - DRWAV_ZERO_MEMORY(&metadataParser, sizeof(metadataParser)); - /* Not tested on W64. */ - if (!sequential && pWav->allowedMetadataTypes != drwav_metadata_type_none && (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64)) { - drwav_uint64 cursorForMetadata = cursor; + /* "COMM". AIFF/AIFC only. */ + if (pWav->container == drwav_container_aiff && drwav_fourcc_equal(header.id.fourcc, "COMM")) { + drwav_uint8 commData[24]; + drwav_uint32 commDataBytesToRead; + drwav_uint16 channels; + drwav_uint32 frameCount; + drwav_uint16 sampleSizeInBits; + drwav_int64 sampleRate; + drwav_uint16 compressionFormat; - metadataParser.onRead = pWav->onRead; - metadataParser.onSeek = pWav->onSeek; - metadataParser.pReadSeekUserData = pWav->pUserData; - metadataParser.stage = drwav__metadata_parser_stage_count; + foundChunk_fmt = DRWAV_TRUE; - for (;;) { - drwav_result result; - drwav_uint64 bytesRead; - drwav_uint64 remainingBytes; - drwav_chunk_header header; - - result = drwav__read_chunk_header(pWav->onRead, pWav->pUserData, pWav->container, &cursorForMetadata, &header); - if (result != DRWAV_SUCCESS) { - break; + if (isAIFCFormType) { + commDataBytesToRead = 24; + if (header.sizeInBytes < commDataBytesToRead) { + return DRWAV_FALSE; /* Invalid COMM chunk. */ + } + } else { + commDataBytesToRead = 18; + if (header.sizeInBytes != commDataBytesToRead) { + return DRWAV_FALSE; /* INVALID COMM chunk. */ + } } - bytesRead = drwav__metadata_process_chunk(&metadataParser, &header, pWav->allowedMetadataTypes); - DRWAV_ASSERT(bytesRead <= header.sizeInBytes); - - remainingBytes = header.sizeInBytes - bytesRead + header.paddingSize; - if (!drwav__seek_forward(pWav->onSeek, remainingBytes, pWav->pUserData)) { - break; + if (drwav__on_read(pWav->onRead, pWav->pUserData, commData, commDataBytesToRead, &cursor) != commDataBytesToRead) { + return DRWAV_FALSE; } - cursorForMetadata += remainingBytes; - } - if (!drwav__seek_from_start(pWav->onSeek, cursor, pWav->pUserData)) { - return DRWAV_FALSE; - } - drwav__metadata_alloc(&metadataParser, &pWav->allocationCallbacks); - metadataParser.stage = drwav__metadata_parser_stage_read; - } + channels = drwav_bytes_to_u16_ex (commData + 0, pWav->container); + frameCount = drwav_bytes_to_u32_ex (commData + 2, pWav->container); + sampleSizeInBits = drwav_bytes_to_u16_ex (commData + 6, pWav->container); + sampleRate = drwav_aiff_extented_to_s64(commData + 8); - /* - We need to enumerate over each chunk for two reasons: - 1) The "data" chunk may not be the next one - 2) We may want to report each chunk back to the client + if (sampleRate < 0 || sampleRate > 0xFFFFFFFF) { + return DRWAV_FALSE; /* Invalid sample rate. */ + } - In order to correctly report each chunk back to the client we will need to keep looping until the end of the file. - */ - foundDataChunk = DRWAV_FALSE; + if (isAIFCFormType) { + const drwav_uint8* type = commData + 18; - /* The next chunk we care about is the "data" chunk. This is not necessarily the next chunk so we'll need to loop. */ - for (;;) { - drwav_chunk_header header; - drwav_result result = drwav__read_chunk_header(pWav->onRead, pWav->pUserData, pWav->container, &cursor, &header); - if (result != DRWAV_SUCCESS) { - if (!foundDataChunk) { - return DRWAV_FALSE; + if (drwav_fourcc_equal(type, "NONE")) { + compressionFormat = DR_WAVE_FORMAT_PCM; /* PCM, big-endian. */ + } else if (drwav_fourcc_equal(type, "raw ")) { + compressionFormat = DR_WAVE_FORMAT_PCM; + + /* In my testing, it looks like when the "raw " compression type is used, 8-bit samples should be considered unsigned. */ + if (sampleSizeInBits == 8) { + pWav->aiff.isUnsigned = DRWAV_TRUE; + } + } else if (drwav_fourcc_equal(type, "sowt")) { + compressionFormat = DR_WAVE_FORMAT_PCM; /* PCM, little-endian. */ + pWav->aiff.isLE = DRWAV_TRUE; + } else if (drwav_fourcc_equal(type, "fl32") || drwav_fourcc_equal(type, "fl64") || drwav_fourcc_equal(type, "FL32") || drwav_fourcc_equal(type, "FL64")) { + compressionFormat = DR_WAVE_FORMAT_IEEE_FLOAT; + } else if (drwav_fourcc_equal(type, "alaw") || drwav_fourcc_equal(type, "ALAW")) { + compressionFormat = DR_WAVE_FORMAT_ALAW; + } else if (drwav_fourcc_equal(type, "ulaw") || drwav_fourcc_equal(type, "ULAW")) { + compressionFormat = DR_WAVE_FORMAT_MULAW; + } else if (drwav_fourcc_equal(type, "ima4")) { + compressionFormat = DR_WAVE_FORMAT_DVI_ADPCM; + sampleSizeInBits = 4; + + /* + I haven't been able to figure out how to get correct decoding for IMA ADPCM. Until this is figured out + we'll need to abort when we encounter such an encoding. Advice welcome! + */ + (void)compressionFormat; + (void)sampleSizeInBits; + + return DRWAV_FALSE; + } else { + return DRWAV_FALSE; /* Unknown or unsupported compression format. Need to abort. */ + } } else { - break; /* Probably at the end of the file. Get out of the loop. */ + compressionFormat = DR_WAVE_FORMAT_PCM; /* It's a standard AIFF form which is always compressed. */ } - } - /* Tell the client about this chunk. */ - if (!sequential && onChunk != NULL) { - drwav_uint64 callbackBytesRead = onChunk(pChunkUserData, pWav->onRead, pWav->onSeek, pWav->pUserData, &header, pWav->container, &fmt); + /* With AIFF we want to use the explicitly defined frame count rather than deriving it from the size of the chunk. */ + aiffFrameCount = frameCount; + + /* We should now have enough information to fill out our fmt structure. */ + fmt.formatTag = compressionFormat; + fmt.channels = channels; + fmt.sampleRate = (drwav_uint32)sampleRate; + fmt.bitsPerSample = sampleSizeInBits; + fmt.blockAlign = (drwav_uint16)(fmt.channels * fmt.bitsPerSample / 8); + fmt.avgBytesPerSec = fmt.blockAlign * fmt.sampleRate; + + if (fmt.blockAlign == 0 && compressionFormat == DR_WAVE_FORMAT_DVI_ADPCM) { + fmt.blockAlign = 34 * fmt.channels; + } /* - dr_wav may need to read the contents of the chunk, so we now need to seek back to the position before - we called the callback. + Weird one. I've seen some alaw and ulaw encoded files that for some reason set the bits per sample to 16 when + it should be 8. To get this working I need to explicitly check for this and change it. */ - if (callbackBytesRead > 0) { - if (!drwav__seek_from_start(pWav->onSeek, cursor, pWav->pUserData)) { - return DRWAV_FALSE; + if (compressionFormat == DR_WAVE_FORMAT_ALAW || compressionFormat == DR_WAVE_FORMAT_MULAW) { + if (fmt.bitsPerSample > 8) { + fmt.bitsPerSample = 8; + fmt.blockAlign = fmt.channels; } } - } - if (!sequential && pWav->allowedMetadataTypes != drwav_metadata_type_none && (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64)) { - drwav_uint64 bytesRead = drwav__metadata_process_chunk(&metadataParser, &header, pWav->allowedMetadataTypes); + /* In AIFF, samples are padded to 8 byte boundaries. We need to round up our bits per sample here. */ + fmt.bitsPerSample += (fmt.bitsPerSample & 7); + - if (bytesRead > 0) { - if (!drwav__seek_from_start(pWav->onSeek, cursor, pWav->pUserData)) { + /* If the form type is AIFC there will be some additional data in the chunk. We need to seek past it. */ + if (isAIFCFormType) { + if (drwav__seek_forward(pWav->onSeek, (chunkSize - commDataBytesToRead), pWav->pUserData) == DRWAV_FALSE) { return DRWAV_FALSE; } + cursor += (chunkSize - commDataBytesToRead); } + + /* Don't fall through or else we'll end up treating this chunk as metadata which is incorrect. */ + continue; } - if (!foundDataChunk) { - pWav->dataChunkDataPos = cursor; - } + /* "SSND". AIFF/AIFC only. This is the AIFF equivalent of the "data" chunk. */ + if (pWav->container == drwav_container_aiff && drwav_fourcc_equal(header.id.fourcc, "SSND")) { + drwav_uint8 offsetAndBlockSizeData[8]; + drwav_uint32 offset; - chunkSize = header.sizeInBytes; - if (pWav->container == drwav_container_riff || pWav->container == drwav_container_rf64) { - if (drwav_fourcc_equal(header.id.fourcc, "data")) { - foundDataChunk = DRWAV_TRUE; - if (pWav->container != drwav_container_rf64) { /* The data chunk size for RF64 will always be set to 0xFFFFFFFF here. It was set to it's true value earlier. */ - dataChunkSize = chunkSize; - } + foundChunk_data = DRWAV_TRUE; + + if (drwav__on_read(pWav->onRead, pWav->pUserData, offsetAndBlockSizeData, sizeof(offsetAndBlockSizeData), &cursor) != sizeof(offsetAndBlockSizeData)) { + return DRWAV_FALSE; } - } else { - if (drwav_guid_equal(header.id.guid, drwavGUID_W64_DATA)) { - foundDataChunk = DRWAV_TRUE; - dataChunkSize = chunkSize; + + /* The position of the audio data starts at an offset. */ + offset = drwav_bytes_to_u32_ex(offsetAndBlockSizeData + 0, pWav->container); + pWav->dataChunkDataPos = cursor + offset; + + /* The data chunk size needs to be reduced by the offset or else seeking will break. */ + dataChunkSize = chunkSize; + if (dataChunkSize > offset) { + dataChunkSize -= offset; + } else { + dataChunkSize = 0; } - } - /* - If at this point we have found the data chunk and we're running in sequential mode, we need to break out of this loop. The reason for - this is that we would otherwise require a backwards seek which sequential mode forbids. - */ - if (foundDataChunk && sequential) { - break; - } + if (sequential) { + if (foundChunk_fmt) { /* <-- Name is misleading, but will be set to true if the COMM chunk has been parsed. */ + /* + Getting here means we're opening in sequential mode and we've found the SSND (data) and COMM (fmt) chunks. We need + to get out of the loop here or else we'll end up going past the data chunk and will have no way of getting back to + it since we're not allowed to seek backwards. + + One subtle detail here is that there is an offset with the SSND chunk. We need to make sure we seek past this offset + so we're left sitting on the first byte of actual audio data. + */ + if (drwav__seek_forward(pWav->onSeek, offset, pWav->pUserData) == DRWAV_FALSE) { + return DRWAV_FALSE; + } + cursor += offset; - /* Optional. Get the total sample count from the FACT chunk. This is useful for compressed formats. */ - if (pWav->container == drwav_container_riff) { - if (drwav_fourcc_equal(header.id.fourcc, "fact")) { - drwav_uint32 sampleCount; - if (drwav__on_read(pWav->onRead, pWav->pUserData, &sampleCount, 4, &cursor) != 4) { - return DRWAV_FALSE; + break; + } else { + /* + Getting here means the COMM chunk was not found. In sequential mode, if we haven't yet found the COMM chunk + we'll need to abort because we can't be doing a backwards seek back to the SSND chunk in order to read the + data. For this reason, this configuration of AIFF files are not supported with sequential mode. + */ + return DRWAV_FALSE; } - chunkSize -= 4; + } else { + chunkSize += header.paddingSize; /* <-- Make sure we seek past the padding. */ + chunkSize -= sizeof(offsetAndBlockSizeData); /* <-- This was read earlier. */ - if (!foundDataChunk) { - pWav->dataChunkDataPos = cursor; + if (drwav__seek_forward(pWav->onSeek, chunkSize, pWav->pUserData) == DRWAV_FALSE) { + break; } + cursor += chunkSize; - /* - The sample count in the "fact" chunk is either unreliable, or I'm not understanding it properly. For now I am only enabling this - for Microsoft ADPCM formats. - */ - if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ADPCM) { - sampleCountFromFactChunk = sampleCount; - } else { - sampleCountFromFactChunk = 0; - } + continue; /* There may be some more metadata to read. */ } - } else if (pWav->container == drwav_container_w64) { - if (drwav_guid_equal(header.id.guid, drwavGUID_W64_FACT)) { - if (drwav__on_read(pWav->onRead, pWav->pUserData, &sampleCountFromFactChunk, 8, &cursor) != 8) { - return DRWAV_FALSE; - } - chunkSize -= 8; + } - if (!foundDataChunk) { - pWav->dataChunkDataPos = cursor; - } + + /* Getting here means it's not a chunk that we care about internally, but might need to be handled as metadata by the caller. */ + if (isProcessingMetadata) { + drwav__metadata_process_chunk(&metadataParser, &header, drwav_metadata_type_all_including_unknown); + + /* Go back to the start of the chunk so we can normalize the position of the cursor. */ + if (drwav__seek_from_start(pWav->onSeek, cursor, pWav->pUserData) == DRWAV_FALSE) { + break; /* Failed to seek. Can't reliable read the remaining chunks. Get out. */ } - } else if (pWav->container == drwav_container_rf64) { - /* We retrieved the sample count from the ds64 chunk earlier so no need to do that here. */ } - /* Make sure we seek past the padding. */ - chunkSize += header.paddingSize; - if (!drwav__seek_forward(pWav->onSeek, chunkSize, pWav->pUserData)) { + + /* Make sure we skip past the content of this chunk before we go to the next one. */ + chunkSize += header.paddingSize; /* <-- Make sure we seek past the padding. */ + if (drwav__seek_forward(pWav->onSeek, chunkSize, pWav->pUserData) == DRWAV_FALSE) { break; } cursor += chunkSize; + } - if (!foundDataChunk) { - pWav->dataChunkDataPos = cursor; - } + /* There's some mandatory chunks that must exist. If they were not found in the iteration above we must abort. */ + if (!foundChunk_fmt || !foundChunk_data) { + return DRWAV_FALSE; } - pWav->pMetadata = metadataParser.pMetadata; - pWav->metadataCount = metadataParser.metadataCount; + /* Basic validation. */ + if ((fmt.sampleRate == 0 || fmt.sampleRate > DRWAV_MAX_SAMPLE_RATE ) || + (fmt.channels == 0 || fmt.channels > DRWAV_MAX_CHANNELS ) || + (fmt.bitsPerSample == 0 || fmt.bitsPerSample > DRWAV_MAX_BITS_PER_SAMPLE) || + fmt.blockAlign == 0) { + return DRWAV_FALSE; /* Probably an invalid WAV file. */ + } - /* If we haven't found a data chunk, return an error. */ - if (!foundDataChunk) { - return DRWAV_FALSE; + /* Translate the internal format. */ + translatedFormatTag = fmt.formatTag; + if (translatedFormatTag == DR_WAVE_FORMAT_EXTENSIBLE) { + translatedFormatTag = drwav_bytes_to_u16_ex(fmt.subFormat + 0, pWav->container); } /* We may have moved passed the data chunk. If so we need to move back. If running in sequential mode we can assume we are already sitting on the data chunk. */ @@ -3355,21 +3633,109 @@ DRWAV_PRIVATE drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc on } + /* + At this point we should have done the initial parsing of each of our chunks, but we now need to + do a second pass to extract the actual contents of the metadata (the first pass just calculated + the length of the memory allocation). + + We only do this if we've actually got metadata to parse. + */ + if (isProcessingMetadata && metadataParser.metadataCount > 0) { + if (drwav__seek_from_start(pWav->onSeek, metadataStartPos, pWav->pUserData) == DRWAV_FALSE) { + return DRWAV_FALSE; + } + + result = drwav__metadata_alloc(&metadataParser, &pWav->allocationCallbacks); + if (result != DRWAV_SUCCESS) { + return DRWAV_FALSE; + } + + metadataParser.stage = drwav__metadata_parser_stage_read; + + for (;;) { + drwav_chunk_header header; + drwav_uint64 metadataBytesRead; + + result = drwav__read_chunk_header(pWav->onRead, pWav->pUserData, pWav->container, &cursor, &header); + if (result != DRWAV_SUCCESS) { + break; + } + + metadataBytesRead = drwav__metadata_process_chunk(&metadataParser, &header, drwav_metadata_type_all_including_unknown); + + /* Move to the end of the chunk so we can keep iterating. */ + if (drwav__seek_forward(pWav->onSeek, (header.sizeInBytes + header.paddingSize) - metadataBytesRead, pWav->pUserData) == DRWAV_FALSE) { + drwav_free(metadataParser.pMetadata, &pWav->allocationCallbacks); + return DRWAV_FALSE; + } + } + + /* Getting here means we're finished parsing the metadata. */ + pWav->pMetadata = metadataParser.pMetadata; + pWav->metadataCount = metadataParser.metadataCount; + } + + /* At this point we should be sitting on the first byte of the raw audio data. */ + if (drwav__seek_from_start(pWav->onSeek, pWav->dataChunkDataPos, pWav->pUserData) == DRWAV_FALSE) { + drwav_free(pWav->pMetadata, &pWav->allocationCallbacks); + return DRWAV_FALSE; + } + + /* + I've seen a WAV file in the wild where a RIFF-ecapsulated file has the size of it's "RIFF" and + "data" chunks set to 0xFFFFFFFF when the file is definitely not that big. In this case we're + going to have to calculate the size by reading and discarding bytes, and then seeking back. We + cannot do this in sequential mode. We just assume that the rest of the file is audio data. + */ + if (dataChunkSize == 0xFFFFFFFF && (pWav->container == drwav_container_riff || pWav->container == drwav_container_rifx) && pWav->isSequentialWrite == DRWAV_FALSE) { + dataChunkSize = 0; + + for (;;) { + drwav_uint8 temp[4096]; + size_t bytesRead = pWav->onRead(pWav->pUserData, temp, sizeof(temp)); + dataChunkSize += bytesRead; + + if (bytesRead < sizeof(temp)) { + break; + } + } + } pWav->fmt = fmt; pWav->sampleRate = fmt.sampleRate; pWav->channels = fmt.channels; pWav->bitsPerSample = fmt.bitsPerSample; - pWav->bytesRemaining = dataChunkSize; pWav->translatedFormatTag = translatedFormatTag; + + /* + I've had a report where files would start glitching after seeking. The reason for this is the data + chunk is not a clean multiple of the PCM frame size in bytes. Where this becomes a problem is when + seeking, because the number of bytes remaining in the data chunk is used to calculate the current + byte position. If this byte position is not aligned to the number of bytes in a PCM frame, it will + result in the seek not being cleanly positioned at the start of the PCM frame thereby resulting in + all decoded frames after that being corrupted. + + To address this, we need to round the data chunk size down to the nearest multiple of the frame size. + */ + if (!drwav__is_compressed_format_tag(translatedFormatTag)) { + drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); + if (bytesPerFrame > 0) { + dataChunkSize -= (dataChunkSize % bytesPerFrame); + } + } + + pWav->bytesRemaining = dataChunkSize; pWav->dataChunkDataSize = dataChunkSize; if (sampleCountFromFactChunk != 0) { pWav->totalPCMFrameCount = sampleCountFromFactChunk; + } else if (aiffFrameCount != 0) { + pWav->totalPCMFrameCount = aiffFrameCount; } else { drwav_uint32 bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); if (bytesPerFrame == 0) { + drwav_free(pWav->pMetadata, &pWav->allocationCallbacks); return DRWAV_FALSE; /* Invalid file. */ } @@ -3409,12 +3775,14 @@ DRWAV_PRIVATE drwav_bool32 drwav_init__internal(drwav* pWav, drwav_chunk_proc on /* Some formats only support a certain number of channels. */ if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ADPCM || pWav->translatedFormatTag == DR_WAVE_FORMAT_DVI_ADPCM) { if (pWav->channels > 2) { + drwav_free(pWav->pMetadata, &pWav->allocationCallbacks); return DRWAV_FALSE; } } /* The number of bytes per frame must be known. If not, it's an invalid file and not decodable. */ if (drwav_get_bytes_per_pcm_frame(pWav) == 0) { + drwav_free(pWav->pMetadata, &pWav->allocationCallbacks); return DRWAV_FALSE; } @@ -3460,8 +3828,7 @@ DRWAV_API drwav_bool32 drwav_init_with_metadata(drwav* pWav, drwav_read_proc onR return DRWAV_FALSE; } - pWav->allowedMetadataTypes = drwav_metadata_type_all_including_unknown; /* <-- Needs to be set to tell drwav_init_ex() that we need to process metadata. */ - return drwav_init__internal(pWav, NULL, NULL, flags); + return drwav_init__internal(pWav, NULL, NULL, flags | DRWAV_WITH_METADATA); } DRWAV_API drwav_metadata* drwav_take_ownership_of_metadata(drwav* pWav) @@ -3672,15 +4039,15 @@ DRWAV_PRIVATE size_t drwav__write_or_count_metadata(drwav* pWav, drwav_metadata* for (iLoop = 0; iLoop < pMetadata->data.smpl.sampleLoopCount; ++iLoop) { bytesWritten += drwav__write_or_count_u32ne_to_le(pWav, pMetadata->data.smpl.pLoops[iLoop].cuePointId); bytesWritten += drwav__write_or_count_u32ne_to_le(pWav, pMetadata->data.smpl.pLoops[iLoop].type); - bytesWritten += drwav__write_or_count_u32ne_to_le(pWav, pMetadata->data.smpl.pLoops[iLoop].firstSampleByteOffset); - bytesWritten += drwav__write_or_count_u32ne_to_le(pWav, pMetadata->data.smpl.pLoops[iLoop].lastSampleByteOffset); + bytesWritten += drwav__write_or_count_u32ne_to_le(pWav, pMetadata->data.smpl.pLoops[iLoop].firstSampleOffset); + bytesWritten += drwav__write_or_count_u32ne_to_le(pWav, pMetadata->data.smpl.pLoops[iLoop].lastSampleOffset); bytesWritten += drwav__write_or_count_u32ne_to_le(pWav, pMetadata->data.smpl.pLoops[iLoop].sampleFraction); bytesWritten += drwav__write_or_count_u32ne_to_le(pWav, pMetadata->data.smpl.pLoops[iLoop].playCount); } if (pMetadata->data.smpl.samplerSpecificDataSizeInBytes > 0) { - bytesWritten += drwav__write(pWav, pMetadata->data.smpl.pSamplerSpecificData, pMetadata->data.smpl.samplerSpecificDataSizeInBytes); - } + bytesWritten += drwav__write_or_count(pWav, pMetadata->data.smpl.pSamplerSpecificData, pMetadata->data.smpl.samplerSpecificDataSizeInBytes); + } } break; case drwav_metadata_type_inst: @@ -3713,7 +4080,7 @@ DRWAV_PRIVATE size_t drwav__write_or_count_metadata(drwav* pWav, drwav_metadata* bytesWritten += drwav__write_or_count(pWav, pMetadata->data.cue.pCuePoints[iCuePoint].dataChunkId, 4); bytesWritten += drwav__write_or_count_u32ne_to_le(pWav, pMetadata->data.cue.pCuePoints[iCuePoint].chunkStart); bytesWritten += drwav__write_or_count_u32ne_to_le(pWav, pMetadata->data.cue.pCuePoints[iCuePoint].blockStart); - bytesWritten += drwav__write_or_count_u32ne_to_le(pWav, pMetadata->data.cue.pCuePoints[iCuePoint].sampleByteOffset); + bytesWritten += drwav__write_or_count_u32ne_to_le(pWav, pMetadata->data.cue.pCuePoints[iCuePoint].sampleOffset); } } break; @@ -3872,7 +4239,7 @@ DRWAV_PRIVATE size_t drwav__write_or_count_metadata(drwav* pWav, drwav_metadata* if (pMetadata->data.labelOrNote.stringLength > 0) { chunkSize += pMetadata->data.labelOrNote.stringLength + 1; - } + } } break; case drwav_metadata_type_list_labelled_cue_region: @@ -4124,6 +4491,8 @@ DRWAV_PRIVATE drwav_bool32 drwav_init_write__internal(drwav* pWav, const drwav_d runningPos += drwav__write(pWav, "RF64", 4); runningPos += drwav__write_u32ne_to_le(pWav, 0xFFFFFFFF); /* Always 0xFFFFFFFF for RF64. Set to a proper value in the "ds64" chunk. */ runningPos += drwav__write(pWav, "WAVE", 4); + } else { + return DRWAV_FALSE; /* Container not supported for writing. */ } @@ -4257,6 +4626,7 @@ DRWAV_API drwav_uint64 drwav_target_write_size_bytes(const drwav_data_format* pF #ifndef DR_WAV_NO_STDIO +/* Errno */ /* drwav_result_from_errno() is only used for fopen() and wfopen() so putting it inside DR_WAV_NO_STDIO for now. If something else needs this later we can move it out. */ #include DRWAV_PRIVATE drwav_result drwav_result_from_errno(int e) @@ -4378,7 +4748,7 @@ DRWAV_PRIVATE drwav_result drwav_result_from_errno(int e) #ifdef ENOSYS case ENOSYS: return DRWAV_NOT_IMPLEMENTED; #endif - #ifdef ENOTEMPTY + #if defined(ENOTEMPTY) && ENOTEMPTY != EEXIST /* In AIX, ENOTEMPTY and EEXIST use the same value. */ case ENOTEMPTY: return DRWAV_DIRECTORY_NOT_EMPTY; #endif #ifdef ELOOP @@ -4660,7 +5030,9 @@ DRWAV_PRIVATE drwav_result drwav_result_from_errno(int e) default: return DRWAV_ERROR; } } +/* End Errno */ +/* fopen */ DRWAV_PRIVATE drwav_result drwav_fopen(FILE** ppFile, const char* pFilePath, const char* pOpenMode) { #if defined(_MSC_VER) && _MSC_VER >= 1400 @@ -4721,6 +5093,7 @@ fallback, so if you notice your compiler not detecting this properly I'm happy t #endif #endif +#ifndef DR_WAV_NO_WCHAR DRWAV_PRIVATE drwav_result drwav_wfopen(FILE** ppFile, const wchar_t* pFilePath, const wchar_t* pOpenMode, const drwav_allocation_callbacks* pAllocationCallbacks) { if (ppFile != NULL) { @@ -4748,11 +5121,24 @@ DRWAV_PRIVATE drwav_result drwav_wfopen(FILE** ppFile, const wchar_t* pFilePath, (void)pAllocationCallbacks; } #else - /* - Use fopen() on anything other than Windows. Requires a conversion. This is annoying because fopen() is locale specific. The only real way I can - think of to do this is with wcsrtombs(). Note that wcstombs() is apparently not thread-safe because it uses a static global mbstate_t object for - maintaining state. I've checked this with -std=c89 and it works, but if somebody get's a compiler error I'll look into improving compatibility. + /* + Use fopen() on anything other than Windows. Requires a conversion. This is annoying because + fopen() is locale specific. The only real way I can think of to do this is with wcsrtombs(). Note + that wcstombs() is apparently not thread-safe because it uses a static global mbstate_t object for + maintaining state. I've checked this with -std=c89 and it works, but if somebody get's a compiler + error I'll look into improving compatibility. */ + + /* + Some compilers don't support wchar_t or wcsrtombs() which we're using below. In this case we just + need to abort with an error. If you encounter a compiler lacking such support, add it to this list + and submit a bug report and it'll be added to the library upstream. + */ + #if defined(__DJGPP__) + { + /* Nothing to do here. This will fall through to the error check below. */ + } + #else { mbstate_t mbs; size_t lenMB; @@ -4794,6 +5180,7 @@ DRWAV_PRIVATE drwav_result drwav_wfopen(FILE** ppFile, const wchar_t* pFilePath, drwav__free_from_callbacks(pFilePathMB, pAllocationCallbacks); } + #endif if (*ppFile == NULL) { return DRWAV_ERROR; @@ -4802,6 +5189,8 @@ DRWAV_PRIVATE drwav_result drwav_wfopen(FILE** ppFile, const wchar_t* pFilePath, return DRWAV_SUCCESS; } +#endif +/* End fopen */ DRWAV_PRIVATE size_t drwav__on_read_stdio(void* pUserData, void* pBufferOut, size_t bytesToRead) @@ -4825,7 +5214,7 @@ DRWAV_API drwav_bool32 drwav_init_file(drwav* pWav, const char* filename, const } -DRWAV_PRIVATE drwav_bool32 drwav_init_file__internal_FILE(drwav* pWav, FILE* pFile, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags, drwav_metadata_type allowedMetadataTypes, const drwav_allocation_callbacks* pAllocationCallbacks) +DRWAV_PRIVATE drwav_bool32 drwav_init_file__internal_FILE(drwav* pWav, FILE* pFile, drwav_chunk_proc onChunk, void* pChunkUserData, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks) { drwav_bool32 result; @@ -4834,8 +5223,6 @@ DRWAV_PRIVATE drwav_bool32 drwav_init_file__internal_FILE(drwav* pWav, FILE* pFi fclose(pFile); return result; } - - pWav->allowedMetadataTypes = allowedMetadataTypes; result = drwav_init__internal(pWav, onChunk, pChunkUserData, flags); if (result != DRWAV_TRUE) { @@ -4854,9 +5241,10 @@ DRWAV_API drwav_bool32 drwav_init_file_ex(drwav* pWav, const char* filename, drw } /* This takes ownership of the FILE* object. */ - return drwav_init_file__internal_FILE(pWav, pFile, onChunk, pChunkUserData, flags, drwav_metadata_type_none, pAllocationCallbacks); + return drwav_init_file__internal_FILE(pWav, pFile, onChunk, pChunkUserData, flags, pAllocationCallbacks); } +#ifndef DR_WAV_NO_WCHAR DRWAV_API drwav_bool32 drwav_init_file_w(drwav* pWav, const wchar_t* filename, const drwav_allocation_callbacks* pAllocationCallbacks) { return drwav_init_file_ex_w(pWav, filename, NULL, NULL, 0, pAllocationCallbacks); @@ -4870,8 +5258,9 @@ DRWAV_API drwav_bool32 drwav_init_file_ex_w(drwav* pWav, const wchar_t* filename } /* This takes ownership of the FILE* object. */ - return drwav_init_file__internal_FILE(pWav, pFile, onChunk, pChunkUserData, flags, drwav_metadata_type_none, pAllocationCallbacks); + return drwav_init_file__internal_FILE(pWav, pFile, onChunk, pChunkUserData, flags, pAllocationCallbacks); } +#endif DRWAV_API drwav_bool32 drwav_init_file_with_metadata(drwav* pWav, const char* filename, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks) { @@ -4881,9 +5270,10 @@ DRWAV_API drwav_bool32 drwav_init_file_with_metadata(drwav* pWav, const char* fi } /* This takes ownership of the FILE* object. */ - return drwav_init_file__internal_FILE(pWav, pFile, NULL, NULL, flags, drwav_metadata_type_all_including_unknown, pAllocationCallbacks); + return drwav_init_file__internal_FILE(pWav, pFile, NULL, NULL, flags | DRWAV_WITH_METADATA, pAllocationCallbacks); } +#ifndef DR_WAV_NO_WCHAR DRWAV_API drwav_bool32 drwav_init_file_with_metadata_w(drwav* pWav, const wchar_t* filename, drwav_uint32 flags, const drwav_allocation_callbacks* pAllocationCallbacks) { FILE* pFile; @@ -4892,8 +5282,9 @@ DRWAV_API drwav_bool32 drwav_init_file_with_metadata_w(drwav* pWav, const wchar_ } /* This takes ownership of the FILE* object. */ - return drwav_init_file__internal_FILE(pWav, pFile, NULL, NULL, flags, drwav_metadata_type_all_including_unknown, pAllocationCallbacks); + return drwav_init_file__internal_FILE(pWav, pFile, NULL, NULL, flags | DRWAV_WITH_METADATA, pAllocationCallbacks); } +#endif DRWAV_PRIVATE drwav_bool32 drwav_init_file_write__internal_FILE(drwav* pWav, FILE* pFile, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks) @@ -4926,6 +5317,7 @@ DRWAV_PRIVATE drwav_bool32 drwav_init_file_write__internal(drwav* pWav, const ch return drwav_init_file_write__internal_FILE(pWav, pFile, pFormat, totalSampleCount, isSequential, pAllocationCallbacks); } +#ifndef DR_WAV_NO_WCHAR DRWAV_PRIVATE drwav_bool32 drwav_init_file_write_w__internal(drwav* pWav, const wchar_t* filename, const drwav_data_format* pFormat, drwav_uint64 totalSampleCount, drwav_bool32 isSequential, const drwav_allocation_callbacks* pAllocationCallbacks) { FILE* pFile; @@ -4936,6 +5328,7 @@ DRWAV_PRIVATE drwav_bool32 drwav_init_file_write_w__internal(drwav* pWav, const /* This takes ownership of the FILE* object. */ return drwav_init_file_write__internal_FILE(pWav, pFile, pFormat, totalSampleCount, isSequential, pAllocationCallbacks); } +#endif DRWAV_API drwav_bool32 drwav_init_file_write(drwav* pWav, const char* filename, const drwav_data_format* pFormat, const drwav_allocation_callbacks* pAllocationCallbacks) { @@ -4956,6 +5349,7 @@ DRWAV_API drwav_bool32 drwav_init_file_write_sequential_pcm_frames(drwav* pWav, return drwav_init_file_write_sequential(pWav, filename, pFormat, totalPCMFrameCount*pFormat->channels, pAllocationCallbacks); } +#ifndef DR_WAV_NO_WCHAR DRWAV_API drwav_bool32 drwav_init_file_write_w(drwav* pWav, const wchar_t* filename, const drwav_data_format* pFormat, const drwav_allocation_callbacks* pAllocationCallbacks) { return drwav_init_file_write_w__internal(pWav, filename, pFormat, 0, DRWAV_FALSE, pAllocationCallbacks); @@ -4974,6 +5368,7 @@ DRWAV_API drwav_bool32 drwav_init_file_write_sequential_pcm_frames_w(drwav* pWav return drwav_init_file_write_sequential_w(pWav, filename, pFormat, totalPCMFrameCount*pFormat->channels, pAllocationCallbacks); } +#endif #endif /* DR_WAV_NO_STDIO */ @@ -5132,9 +5527,7 @@ DRWAV_API drwav_bool32 drwav_init_memory_with_metadata(drwav* pWav, const void* pWav->memoryStream.dataSize = dataSize; pWav->memoryStream.currentReadPos = 0; - pWav->allowedMetadataTypes = drwav_metadata_type_all_including_unknown; - - return drwav_init__internal(pWav, NULL, NULL, flags); + return drwav_init__internal(pWav, NULL, NULL, flags | DRWAV_WITH_METADATA); } @@ -5263,9 +5656,7 @@ DRWAV_API drwav_result drwav_uninit(drwav* pWav) } } } else { - if (pWav->pMetadata != NULL) { - pWav->allocationCallbacks.onFree(pWav->pMetadata, pWav->allocationCallbacks.pUserData); - } + drwav_free(pWav->pMetadata, &pWav->allocationCallbacks); } #ifndef DR_WAV_NO_STDIO @@ -5353,6 +5744,7 @@ DRWAV_API drwav_uint64 drwav_read_pcm_frames_le(drwav* pWav, drwav_uint64 frames { drwav_uint32 bytesPerFrame; drwav_uint64 bytesToRead; /* Intentionally uint64 instead of size_t so we can do a check that we're not reading too much on 32-bit builds. */ + drwav_uint64 framesRemainingInFile; if (pWav == NULL || framesToRead == 0) { return 0; @@ -5363,6 +5755,11 @@ DRWAV_API drwav_uint64 drwav_read_pcm_frames_le(drwav* pWav, drwav_uint64 frames return 0; } + framesRemainingInFile = pWav->totalPCMFrameCount - pWav->readCursorInPCMFrames; + if (framesToRead > framesRemainingInFile) { + framesToRead = framesRemainingInFile; + } + bytesPerFrame = drwav_get_bytes_per_pcm_frame(pWav); if (bytesPerFrame == 0) { return 0; @@ -5395,7 +5792,7 @@ DRWAV_API drwav_uint64 drwav_read_pcm_frames_be(drwav* pWav, drwav_uint64 frames return 0; /* Could not get the bytes per frame which means bytes per sample cannot be determined and we don't know how to byte swap. */ } - drwav__bswap_samples(pBufferOut, framesRead*pWav->channels, bytesPerFrame/pWav->channels, pWav->translatedFormatTag); + drwav__bswap_samples(pBufferOut, framesRead*pWav->channels, bytesPerFrame/pWav->channels); } return framesRead; @@ -5403,11 +5800,50 @@ DRWAV_API drwav_uint64 drwav_read_pcm_frames_be(drwav* pWav, drwav_uint64 frames DRWAV_API drwav_uint64 drwav_read_pcm_frames(drwav* pWav, drwav_uint64 framesToRead, void* pBufferOut) { + drwav_uint64 framesRead = 0; + + if (drwav_is_container_be(pWav->container)) { + /* + Special case for AIFF. AIFF is a big-endian encoded format, but it supports a format that is + PCM in little-endian encoding. In this case, we fall through this branch and treate it as + little-endian. + */ + if (pWav->container != drwav_container_aiff || pWav->aiff.isLE == DRWAV_FALSE) { + if (drwav__is_little_endian()) { + framesRead = drwav_read_pcm_frames_be(pWav, framesToRead, pBufferOut); + } else { + framesRead = drwav_read_pcm_frames_le(pWav, framesToRead, pBufferOut); + } + + goto post_process; + } + } + + /* Getting here means the data should be considered little-endian. */ if (drwav__is_little_endian()) { - return drwav_read_pcm_frames_le(pWav, framesToRead, pBufferOut); + framesRead = drwav_read_pcm_frames_le(pWav, framesToRead, pBufferOut); } else { - return drwav_read_pcm_frames_be(pWav, framesToRead, pBufferOut); + framesRead = drwav_read_pcm_frames_be(pWav, framesToRead, pBufferOut); + } + + /* + Here is where we check if we need to do a signed/unsigned conversion for AIFF. The reason we need to do this + is because dr_wav always assumes an 8-bit sample is unsigned, whereas AIFF can have signed 8-bit formats. + */ + post_process: + { + if (pWav->container == drwav_container_aiff && pWav->bitsPerSample == 8 && pWav->aiff.isUnsigned == DRWAV_FALSE) { + if (pBufferOut != NULL) { + drwav_uint64 iSample; + + for (iSample = 0; iSample < framesRead * pWav->channels; iSample += 1) { + ((drwav_uint8*)pBufferOut)[iSample] += 128; + } + } + } } + + return framesRead; } @@ -5518,7 +5954,7 @@ DRWAV_API drwav_bool32 drwav_seek_to_pcm_frame(drwav* pWav, drwav_uint64 targetF } totalSizeInBytes = pWav->totalPCMFrameCount * bytesPerFrame; - DRWAV_ASSERT(totalSizeInBytes >= pWav->bytesRemaining); + /*DRWAV_ASSERT(totalSizeInBytes >= pWav->bytesRemaining);*/ currentBytePos = totalSizeInBytes - pWav->bytesRemaining; targetBytePos = targetFrameIndex * bytesPerFrame; @@ -5680,7 +6116,7 @@ DRWAV_API drwav_uint64 drwav_write_pcm_frames_be(drwav* pWav, drwav_uint64 frame } DRWAV_COPY_MEMORY(temp, pRunningData, (size_t)bytesToWriteThisIteration); - drwav__bswap_samples(temp, sampleCount, bytesPerSample, pWav->translatedFormatTag); + drwav__bswap_samples(temp, sampleCount, bytesPerSample); bytesJustWritten = drwav_write_raw(pWav, (size_t)bytesToWriteThisIteration, temp); if (bytesJustWritten == 0) { @@ -5709,6 +6145,13 @@ DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav { drwav_uint64 totalFramesRead = 0; + static drwav_int32 adaptationTable[] = { + 230, 230, 230, 230, 307, 409, 512, 614, + 768, 614, 512, 409, 307, 230, 230, 230 + }; + static drwav_int32 coeff1Table[] = { 256, 512, 0, 192, 240, 460, 392 }; + static drwav_int32 coeff2Table[] = { 0, -256, 0, 64, 0, -208, -232 }; + DRWAV_ASSERT(pWav != NULL); DRWAV_ASSERT(framesToRead > 0); @@ -5734,6 +6177,11 @@ DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav pWav->msadpcm.cachedFrames[2] = pWav->msadpcm.prevFrames[0][0]; pWav->msadpcm.cachedFrames[3] = pWav->msadpcm.prevFrames[0][1]; pWav->msadpcm.cachedFrameCount = 2; + + /* The predictor is used as an index into coeff1Table so we'll need to validate to ensure it never overflows. */ + if (pWav->msadpcm.predictor[0] >= drwav_countof(coeff1Table)) { + return totalFramesRead; /* Invalid file. */ + } } else { /* Stereo. */ drwav_uint8 header[14]; @@ -5756,6 +6204,11 @@ DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav pWav->msadpcm.cachedFrames[2] = pWav->msadpcm.prevFrames[0][1]; pWav->msadpcm.cachedFrames[3] = pWav->msadpcm.prevFrames[1][1]; pWav->msadpcm.cachedFrameCount = 2; + + /* The predictor is used as an index into coeff1Table so we'll need to validate to ensure it never overflows. */ + if (pWav->msadpcm.predictor[0] >= drwav_countof(coeff1Table) || pWav->msadpcm.predictor[1] >= drwav_countof(coeff2Table)) { + return totalFramesRead; /* Invalid file. */ + } } } @@ -5789,13 +6242,6 @@ DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__msadpcm(drwav* pWav, drwav if (pWav->msadpcm.bytesRemainingInBlock == 0) { continue; } else { - static drwav_int32 adaptationTable[] = { - 230, 230, 230, 230, 307, 409, 512, 614, - 768, 614, 512, 409, 307, 230, 230, 230 - }; - static drwav_int32 coeff1Table[] = { 256, 512, 0, 192, 240, 460, 392 }; - static drwav_int32 coeff2Table[] = { 0, -256, 0, 64, 0, -208, -232 }; - drwav_uint8 nibbles; drwav_int32 nibble0; drwav_int32 nibble1; @@ -5933,7 +6379,7 @@ DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__ima(drwav* pWav, drwav_uin return totalFramesRead; /* Invalid data. */ } - pWav->ima.predictor[0] = drwav_bytes_to_s16(header + 0); + pWav->ima.predictor[0] = (drwav_int16)drwav_bytes_to_u16(header + 0); pWav->ima.stepIndex[0] = drwav_clamp(header[2], 0, (drwav_int32)drwav_countof(stepTable)-1); /* Clamp not necessary because we checked above, but adding here to silence a static analysis warning. */ pWav->ima.cachedFrames[drwav_countof(pWav->ima.cachedFrames) - 1] = pWav->ima.predictor[0]; pWav->ima.cachedFrameCount = 1; @@ -6307,6 +6753,23 @@ DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__alaw(drwav* pWav, drwav_ui drwav_alaw_to_s16(pBufferOut, sampleData, (size_t)samplesRead); + /* + For some reason libsndfile seems to be returning samples of the opposite sign for a-law, but only + with AIFF files. For WAV files it seems to be the same as dr_wav. This is resulting in dr_wav's + automated tests failing. I'm not sure which is correct, but will assume dr_wav. If we're enforcing + libsndfile compatibility we'll swap the signs here. + */ + #ifdef DR_WAV_LIBSNDFILE_COMPAT + { + if (pWav->container == drwav_container_aiff) { + drwav_uint64 iSample; + for (iSample = 0; iSample < samplesRead; iSample += 1) { + pBufferOut[iSample] = -pBufferOut[iSample]; + } + } + } + #endif + pBufferOut += samplesRead; framesToRead -= framesRead; totalFramesRead += framesRead; @@ -6357,6 +6820,21 @@ DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s16__mulaw(drwav* pWav, drwav_u drwav_mulaw_to_s16(pBufferOut, sampleData, (size_t)samplesRead); + /* + Just like with alaw, for some reason the signs between libsndfile and dr_wav are opposite. We just need to + swap the sign if we're compiling with libsndfile compatiblity so our automated tests don't fail. + */ + #ifdef DR_WAV_LIBSNDFILE_COMPAT + { + if (pWav->container == drwav_container_aiff) { + drwav_uint64 iSample; + for (iSample = 0; iSample < samplesRead; iSample += 1) { + pBufferOut[iSample] = -pBufferOut[iSample]; + } + } + } + #endif + pBufferOut += samplesRead; framesToRead -= framesRead; totalFramesRead += framesRead; @@ -6509,7 +6987,6 @@ DRWAV_API void drwav_mulaw_to_s16(drwav_int16* pOut, const drwav_uint8* pIn, siz } - DRWAV_PRIVATE void drwav__pcm_to_f32(float* pOut, const drwav_uint8* pIn, size_t sampleCount, unsigned int bytesPerSample) { unsigned int i; @@ -6743,6 +7220,17 @@ DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_f32__alaw(drwav* pWav, drwav_ui drwav_alaw_to_f32(pBufferOut, sampleData, (size_t)samplesRead); + #ifdef DR_WAV_LIBSNDFILE_COMPAT + { + if (pWav->container == drwav_container_aiff) { + drwav_uint64 iSample; + for (iSample = 0; iSample < samplesRead; iSample += 1) { + pBufferOut[iSample] = -pBufferOut[iSample]; + } + } + } + #endif + pBufferOut += samplesRead; framesToRead -= framesRead; totalFramesRead += framesRead; @@ -6789,6 +7277,17 @@ DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_f32__mulaw(drwav* pWav, drwav_u drwav_mulaw_to_f32(pBufferOut, sampleData, (size_t)samplesRead); + #ifdef DR_WAV_LIBSNDFILE_COMPAT + { + if (pWav->container == drwav_container_aiff) { + drwav_uint64 iSample; + for (iSample = 0; iSample < samplesRead; iSample += 1) { + pBufferOut[iSample] = -pBufferOut[iSample]; + } + } + } + #endif + pBufferOut += samplesRead; framesToRead -= framesRead; totalFramesRead += framesRead; @@ -7200,6 +7699,17 @@ DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s32__alaw(drwav* pWav, drwav_ui drwav_alaw_to_s32(pBufferOut, sampleData, (size_t)samplesRead); + #ifdef DR_WAV_LIBSNDFILE_COMPAT + { + if (pWav->container == drwav_container_aiff) { + drwav_uint64 iSample; + for (iSample = 0; iSample < samplesRead; iSample += 1) { + pBufferOut[iSample] = -pBufferOut[iSample]; + } + } + } + #endif + pBufferOut += samplesRead; framesToRead -= framesRead; totalFramesRead += framesRead; @@ -7246,6 +7756,17 @@ DRWAV_PRIVATE drwav_uint64 drwav_read_pcm_frames_s32__mulaw(drwav* pWav, drwav_u drwav_mulaw_to_s32(pBufferOut, sampleData, (size_t)samplesRead); + #ifdef DR_WAV_LIBSNDFILE_COMPAT + { + if (pWav->container == drwav_container_aiff) { + drwav_uint64 iSample; + for (iSample = 0; iSample < samplesRead; iSample += 1) { + pBufferOut[iSample] = -pBufferOut[iSample]; + } + } + } + #endif + pBufferOut += samplesRead; framesToRead -= framesRead; totalFramesRead += framesRead; @@ -7366,7 +7887,7 @@ DRWAV_API void drwav_f32_to_s32(drwav_int32* pOut, const float* pIn, size_t samp } for (i = 0; i < sampleCount; ++i) { - *pOut++ = (drwav_int32)(2147483648.0 * pIn[i]); + *pOut++ = (drwav_int32)(2147483648.0f * pIn[i]); } } @@ -7667,6 +8188,7 @@ DRWAV_API drwav_int32* drwav_open_file_and_read_pcm_frames_s32(const char* filen } +#ifndef DR_WAV_NO_WCHAR DRWAV_API drwav_int16* drwav_open_file_and_read_pcm_frames_s16_w(const wchar_t* filename, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks) { drwav wav; @@ -7729,7 +8251,8 @@ DRWAV_API drwav_int32* drwav_open_file_and_read_pcm_frames_s32_w(const wchar_t* return drwav__read_pcm_frames_and_close_s32(&wav, channelsOut, sampleRateOut, totalFrameCountOut); } -#endif +#endif /* DR_WAV_NO_WCHAR */ +#endif /* DR_WAV_NO_STDIO */ DRWAV_API drwav_int16* drwav_open_memory_and_read_pcm_frames_s16(const void* data, size_t dataSize, unsigned int* channelsOut, unsigned int* sampleRateOut, drwav_uint64* totalFrameCountOut, const drwav_allocation_callbacks* pAllocationCallbacks) { @@ -7817,7 +8340,7 @@ DRWAV_API drwav_int16 drwav_bytes_to_s16(const drwav_uint8* data) DRWAV_API drwav_uint32 drwav_bytes_to_u32(const drwav_uint8* data) { - return ((drwav_uint32)data[0] << 0) | ((drwav_uint32)data[1] << 8) | ((drwav_uint32)data[2] << 16) | ((drwav_uint32)data[3] << 24); + return drwav_bytes_to_u32_le(data); } DRWAV_API float drwav_bytes_to_f32(const drwav_uint8* data) @@ -7870,12 +8393,62 @@ DRWAV_API drwav_bool32 drwav_fourcc_equal(const drwav_uint8* a, const char* b) a[3] == b[3]; } +#ifdef __MRC__ +/* Undo the pragma at the beginning of this file. */ +#pragma options opt reset +#endif + #endif /* dr_wav_c */ #endif /* DR_WAV_IMPLEMENTATION */ /* REVISION HISTORY ================ +v0.14.0 - TBD + - API CHANGE: The `firstSampleByteOffset`, `lastSampleByteOffset` and `sampleByteOffset` members of `drwav_cue_point` have been renamed to `firstSampleOffset`, `lastSampleOffset` and `sampleOffset`, respectively. + - Fix a static analysis warning. + - Fix compilation for AIX OS. + +v0.13.17 - 2024-12-17 + - Fix a possible crash when reading from MS-ADPCM encoded files. + - Improve detection of ARM64EC + +v0.13.16 - 2024-02-27 + - Fix a Wdouble-promotion warning. + +v0.13.15 - 2024-01-23 + - Relax some unnecessary validation that prevented some files from loading. + +v0.13.14 - 2023-12-02 + - Fix a warning about an unused variable. + +v0.13.13 - 2023-11-02 + - Fix a warning when compiling with Clang. + +v0.13.12 - 2023-08-07 + - Fix a possible crash in drwav_read_pcm_frames(). + +v0.13.11 - 2023-07-07 + - AIFF compatibility improvements. + +v0.13.10 - 2023-05-29 + - Fix a bug where drwav_init_with_metadata() does not decode any frames after initializtion. + +v0.13.9 - 2023-05-22 + - Add support for AIFF decoding (writing and metadata not supported). + - Add support for RIFX decoding (writing and metadata not supported). + - Fix a bug where metadata is not processed if it's located before the "fmt " chunk. + - Add a workaround for a type of malformed WAV file where the size of the "RIFF" and "data" chunks + are incorrectly set to 0xFFFFFFFF. + +v0.13.8 - 2023-03-25 + - Fix a possible null pointer dereference. + - Fix a crash when loading files with badly formed metadata. + +v0.13.7 - 2022-09-17 + - Fix compilation with DJGPP. + - Add support for disabling wchar_t with DR_WAV_NO_WCHAR. + v0.13.6 - 2022-04-10 - Fix compilation error on older versions of GCC. - Remove some dependencies on the standard library. @@ -8286,7 +8859,7 @@ For more information, please refer to =============================================================================== ALTERNATIVE 2 - MIT No Attribution =============================================================================== -Copyright 2020 David Reid +Copyright 2023 David Reid Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in From 81e988e5c08d7723f1b3ffe113126b8fcb2a4c6f Mon Sep 17 00:00:00 2001 From: Joel16 Date: Thu, 10 Apr 2025 17:43:04 +0100 Subject: [PATCH 13/24] fs: Clean up/optimize FS code and minor code consistency changes --- app/include/fs.h | 2 +- app/source/audio.cpp | 38 ++-- app/source/fs.cpp | 333 ++++++++++++++++--------------- app/source/gui/game_launcher.cpp | 153 +++++++++----- app/source/textures.cpp | 10 +- 5 files changed, 301 insertions(+), 235 deletions(-) diff --git a/app/include/fs.h b/app/include/fs.h index 7ac17eb..e9ab565 100644 --- a/app/include/fs.h +++ b/app/include/fs.h @@ -25,7 +25,7 @@ namespace FS { int MakeDir(const std::string &path); int RecursiveMakeDir(const std::string &path); int CreateFile(const std::string &path); - std::string GetFileExt(const std::string &filename); + const char* GetFileExt(const char *filename); FileType GetFileType(const std::string &filename); SceOff GetFileSize(const std::string &path); char *GetFileTimestamp(SceIoStat &stat, FileTimestamp time); diff --git a/app/source/audio.cpp b/app/source/audio.cpp index d44a9f1..cb045ff 100644 --- a/app/source/audio.cpp +++ b/app/source/audio.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include "fs.h" #include "kernel_functions.h" @@ -37,32 +37,37 @@ namespace Audio { static void Decode(void *buf, unsigned int length, void *userdata) { if ((!playing) || (paused)) { - s16 *buf_s16 = static_cast(buf); - for (unsigned int count = 0; count < length * 4; count++) - *(buf_s16 + count) = 0; + std::memset(buf, 0, length * 4); } - else - (* decoder.decode)(buf, length, userdata); + else { + (*decoder.decode)(buf, length, userdata); + } } void Init(const std::string &path) { playing = true; paused = false; + const char *ext = FS::GetFileExt(path.c_str()); - std::string ext = FS::GetFileExt(path); - - if (!ext.compare(".FLAC")) + if (strncasecmp(ext, "flac", 4) == 0) { file_type = FILE_TYPE_FLAC; - else if (!ext.compare(".MP3")) + } + else if (strncasecmp(ext, "mp3", 3) == 0) { file_type = FILE_TYPE_MP3; - else if (!ext.compare(".OGG")) + } + else if (strncasecmp(ext, "ogg", 3) == 0) { file_type = FILE_TYPE_OGG; - else if (!ext.compare(".OPUS")) + } + else if (strncasecmp(ext, "opus", 4) == 0) { file_type = FILE_TYPE_OPUS; - else if (!ext.compare(".WAV")) + } + else if (strncasecmp(ext, "wav", 3) == 0) { file_type = FILE_TYPE_WAV; - else if ((!ext.compare(".IT")) || (!ext.compare(".MOD")) || (!ext.compare(".S3M")) || (!ext.compare(".XM"))) + } + else if ((strncasecmp(ext, "it", 2) == 0) || (strncasecmp(ext, "mod", 3) == 0) || (strncasecmp(ext, "s3m", 3) == 0) + || (strncasecmp(ext, "xm", 2) == 0)) { file_type = FILE_TYPE_XM; + } switch(file_type) { case FILE_TYPE_FLAC: @@ -184,9 +189,8 @@ namespace Audio { (* decoder.term)(); // Clear metadata struct - if (metadata.has_meta) { - if (metadata.cover_image) - g2dTexFree(&metadata.cover_image); + if (metadata.has_meta && metadata.cover_image) { + g2dTexFree(&metadata.cover_image); } metadata = { 0 }; diff --git a/app/source/fs.cpp b/app/source/fs.cpp index caaec4a..e41714a 100644 --- a/app/source/fs.cpp +++ b/app/source/fs.cpp @@ -12,9 +12,9 @@ namespace FS { typedef struct { - std::string copy_path; - std::string copy_filename; - bool is_dir = false; + std::string path; + std::string filename; + bool isDir = false; } FSCopyEntry; static FSCopyEntry fs_copy_entry; @@ -46,31 +46,32 @@ namespace FS { int MakeDir(const std::string &path) { int ret = 0; #ifdef FS_DEBUG - if (R_FAILED(ret = sceIoMkdir(path.c_str(), 0777))) - return ret; + if (R_FAILED(ret = sceIoMkdir(path.c_str(), 0777))) { #else - if (R_FAILED(ret = pspIoMakeDir(path.c_str(), 0777))) - return ret; + if (R_FAILED(ret = pspIoMakeDir(path.c_str(), 0777))) { #endif + return ret; + } return 0; } // https://newbedev.com/mkdir-c-function int RecursiveMakeDir(const std::string &path) { - std::string current_level = ""; + std::string currentLevel = ""; std::string level; std::stringstream ss(path); // split path using slash as a separator while (std::getline(ss, level, '/')) { - current_level += level; // append folder to the current level + currentLevel += level; // append folder to the current level // create current level - if (!FS::DirExists(current_level) && FS::MakeDir(current_level.c_str()) != 0) + if (!FS::DirExists(currentLevel) && FS::MakeDir(currentLevel.c_str()) != 0) { return -1; + } - current_level += "/"; // don't forget to append a slash + currentLevel += "/"; // don't forget to append a slash } return 0; @@ -94,28 +95,42 @@ namespace FS { return file; } - std::string GetFileExt(const std::string &filename) { - std::string ext = std::filesystem::path(filename).extension(); - std::transform(ext.begin(), ext.end(), ext.begin(), ::toupper); - return ext; + const char* GetFileExt(const char *filename) { + const char *ext = strrchr(filename, '.'); + + if (ext == NULL) { + return ""; + } + + return ext + 1; } - + FileType GetFileType(const std::string &filename) { - std::string ext = FS::GetFileExt(filename); + const char *ext = FS::GetFileExt(filename.c_str()); - if ((!ext.compare(".CSO")) || (!ext.compare(".ISO")) || (!ext.compare(".PBP"))) + if ((strncasecmp(ext, "cso", 3) == 0) || (strncasecmp(ext, "iso", 3) == 0) || (strncasecmp(ext, "pbp", 3) == 0)) { return FileTypeApp; - else if ((!ext.compare(".7Z")) || (!ext.compare(".LZMA")) || (!ext.compare(".RAR")) || (!ext.compare(".ZIP"))) + } + else if ((strncasecmp(ext, "7z", 2) == 0) || (strncasecmp(ext, "lzma", 4) == 0) || (strncasecmp(ext, "rar", 3) == 0) + || (strncasecmp(ext, "zip", 3) == 0)) { return FileTypeArchive; - else if ((!ext.compare(".FLAC")) || (!ext.compare(".IT")) || (!ext.compare(".MOD")) || (!ext.compare(".MP3")) || (!ext.compare(".OGG")) - || (!ext.compare(".OPUS")) || (!ext.compare(".S3M")) || (!ext.compare(".WAV")) || (!ext.compare(".XM"))) - return FileTypeAudio; - else if ((!ext.compare(".BMP")) || (!ext.compare(".GIF")) || (!ext.compare(".JPG")) || (!ext.compare(".JPEG")) || (!ext.compare(".PGM")) - || (!ext.compare(".PPM")) || (!ext.compare(".PNG")) || (!ext.compare(".PSD")) || (!ext.compare(".TGA")) || (!ext.compare(".WEBP"))) - return FileTypeImage; - else if ((!ext.compare(".CFG")) || (!ext.compare(".CONF")) || (!ext.compare(".INI")) || (!ext.compare(".JSON")) || (!ext.compare(".LOG")) - || (!ext.compare(".MD")) || (!ext.compare(".TXT"))) + } + else if ((strncasecmp(ext, "flac", 4) == 0) || (strncasecmp(ext, "it", 2) == 0) || (strncasecmp(ext, "mod", 3) == 0) + || (strncasecmp(ext, "mp3", 3) == 0) || (strncasecmp(ext, "ogg", 3) == 0) || (strncasecmp(ext, "opus", 4) == 0) + || (strncasecmp(ext, "s3m", 3) == 0) || (strncasecmp(ext, "wav", 3) == 0) || (strncasecmp(ext, "xm", 2) == 0)) { + return FileTypeAudio; + } + else if ((strncasecmp(ext, "bmp", 3) == 0) || (strncasecmp(ext, "gif", 3) == 0) || (strncasecmp(ext, "jpg", 3) == 0) + || (strncasecmp(ext, "jpeg", 4) == 0) || (strncasecmp(ext, "pgm", 3) == 0) || (strncasecmp(ext, "ppm", 3) == 0) + || (strncasecmp(ext, "png", 3) == 0) || (strncasecmp(ext, "psd", 3) == 0) || (strncasecmp(ext, "tga", 3) == 0) + || (strncasecmp(ext, "webp", 4) == 0)) { + return FileTypeImage; + } + else if ((strncasecmp(ext, "cfg", 3) == 0) || (strncasecmp(ext, "conf", 4) == 0) || (strncasecmp(ext, "ini", 3) == 0) + || (strncasecmp(ext, "json", 4) == 0) || (strncasecmp(ext, "log", 3) == 0) || (strncasecmp(ext, "md", 2) == 0) + || (strncasecmp(ext, "txt", 3) == 0)) { return FileTypeText; + } return FileTypeNone; } @@ -127,12 +142,12 @@ namespace FS { std::memset(&stat, 0, sizeof(stat)); #ifdef FS_DEBUG - if (R_FAILED(ret = sceIoGetstat(path.c_str(), &stat))) - return ret; + if (R_FAILED(ret = sceIoGetstat(path.c_str(), &stat))) { #else - if (R_FAILED(ret = pspIoGetstat(path.c_str(), &stat))) - return ret; + if (R_FAILED(ret = pspIoGetstat(path.c_str(), &stat))) { #endif + return ret; + } return stat.st_size; } @@ -211,41 +226,33 @@ namespace FS { return file; } - static bool Sort(const SceIoDirent &entryA, const SceIoDirent &entryB) { - if ((FIO_S_ISDIR(entryA.d_stat.st_mode)) && !(FIO_S_ISDIR(entryB.d_stat.st_mode))) - return true; - else if (!(FIO_S_ISDIR(entryA.d_stat.st_mode)) && (FIO_S_ISDIR(entryB.d_stat.st_mode))) - return false; - else { - switch(cfg.sort) { - case 0: - if (strcasecmp(entryA.d_name, entryB.d_name) < 0) - return true; - break; - - case 1: - if (strcasecmp(entryB.d_name, entryA.d_name) < 0) - return true; - break; - - case 2: - if (entryB.d_stat.st_size < entryA.d_stat.st_size) - return true; - break; - - case 3: - if (entryA.d_stat.st_size < entryB.d_stat.st_size) - return true; - break; - - default: - break; - } + static bool Sort(const SceIoDirent &a, const SceIoDirent &b) { + bool aIsDir = FIO_S_ISDIR(a.d_stat.st_mode); + bool bIsDir = FIO_S_ISDIR(b.d_stat.st_mode); + + // Directories first + if (aIsDir != bIsDir) { + return aIsDir; + } + + switch (cfg.sort) { + case 0: // Name A-Z + return strcasecmp(a.d_name, b.d_name) < 0; + + case 1: // Name Z-A + return strcasecmp(a.d_name, b.d_name) > 0; + + case 2: // Size descending + return a.d_stat.st_size > b.d_stat.st_size; + + case 3: // Size ascending + return a.d_stat.st_size < b.d_stat.st_size; + + default: + return false; } - - return false; } - + int GetDirList(const std::string &path, std::vector &entries) { int ret = 0; SceUID dir = 0; @@ -253,89 +260,92 @@ namespace FS { #ifdef FS_DEBUG if (R_FAILED(ret = dir = sceIoDopen(path.c_str()))) { - Log::Error("sceIoDopen(%s) failed: 0x%08x\n", path.c_str(), ret); + Log::Error("%s(sceIoDopen) failed: %s (0x%08x)\n", __func__, path.c_str(), ret); return ret; } #else if (R_FAILED(ret = dir = pspIoOpenDir(path.c_str()))) { - Log::Error("pspIoOpenDir(%s) failed: 0x%08x\n", path.c_str(), ret); + Log::Error("%s(pspIoOpenDir) failed: %s (0x%08x)\n", __func__, path.c_str(), ret); return ret; } #endif - do { - SceIoDirent entry; + dir = ret; + SceIoDirent entry; + + while (true) { std::memset(&entry, 0, sizeof(entry)); - #ifdef FS_DEBUG ret = sceIoDread(dir, &entry); #else ret = pspIoReadDir(dir, &entry); #endif - if (ret > 0) { - if ((std::strcmp(entry.d_name, ".") == 0) || (std::strcmp(entry.d_name, "..") == 0)) - continue; - - entries.push_back(entry); + if (ret <= 0) { + break; } - } while (ret > 0); - - std::sort(entries.begin(), entries.end(), FS::Sort); - + + if (entry.d_name[0] == '.' && (entry.d_name[1] == '\0' || (entry.d_name[1] == '.' && entry.d_name[2] == '\0'))) { + continue; // skip "." and ".." + } + + entries.push_back(entry); + } + #ifdef FS_DEBUG sceIoDclose(dir); #else pspIoCloseDir(dir); #endif + + std::sort(entries.begin(), entries.end(), FS::Sort); return 0; } - //TODO: Clean up change directory impl. static int ChangeDir(const std::string &path, std::vector &entries) { int ret = 0; - std::vector new_entries; + std::vector newEntries; - if (R_FAILED(ret = FS::GetDirList(path, new_entries))) + if (R_FAILED(ret = FS::GetDirList(path, newEntries))) { return ret; - - // Free entries and change the current working directory. - entries.clear(); + } + + entries.swap(newEntries); cfg.cwd = path; - entries = new_entries; return 0; } int ChangeDirNext(const std::string &path, std::vector &entries) { - std::string new_path = FS::BuildPath(cfg.cwd, path); - return FS::ChangeDir(new_path, entries); + const std::string newPath = FS::BuildPath(cfg.cwd, path); + return FS::ChangeDir(newPath, entries); } int ChangeDirPrev(std::vector &entries) { - std::filesystem::path path = cfg.cwd; - std::string parent_path = path.parent_path(); + std::string parentPath = std::filesystem::path(cfg.cwd).parent_path().string(); - if (parent_path.back() == ':') - parent_path.append("/"); + if (!parentPath.empty() && parentPath.back() == ':') { + parentPath += '/'; + } - return FS::ChangeDir(parent_path.empty()? cfg.cwd : parent_path, entries); + return FS::ChangeDir(parentPath.empty()? cfg.cwd : parentPath, entries); } std::string GetFilename(const std::string &path) { - return std::filesystem::path(path).filename().u8string(); + std::size_t pos = path.find_last_of("/\\"); + return (pos == std::string::npos)? path : path.substr(pos + 1); } - static int CopyFile(const std::string &src_path, const std::string &dest_path) { + static int CopyFile(const std::string &src_path, const std::string &destPath) { int ret = 0; - SceUID src_handle = 0, dest_handle = 0; + SceUID srcHandle = 0, destHandle = 0; scePowerLock(0); #ifdef FS_DEBUG - if (R_FAILED(ret = src_handle = sceIoOpen(src_path.c_str(), PSP_O_RDONLY, 0))) { + if (R_FAILED(ret = srcHandle = sceIoOpen(src_path.c_str(), PSP_O_RDONLY, 0))) { Log::Error("sceIoOpen(%s) failed: 0x%x\n", src_path.c_str(), ret); scePowerUnlock(0); return ret; } #else - if (R_FAILED(ret = src_handle = pspIoOpenFile(src_path.c_str(), PSP_O_RDONLY, 0))) { + if (R_FAILED(ret = srcHandle = pspIoOpenFile(src_path.c_str(), PSP_O_RDONLY, 0))) { Log::Error("pspIoOpenFile(%s) failed: 0x%x\n", src_path.c_str(), ret); scePowerUnlock(0); return ret; @@ -343,113 +353,113 @@ namespace FS { #endif #ifdef FS_DEBUG - u64 size = sceIoLseek(src_handle, 0, PSP_SEEK_END); - sceIoLseek(src_handle, 0, PSP_SEEK_SET); + u64 size = sceIoLseek(srcHandle, 0, PSP_SEEK_END); + sceIoLseek(srcHandle, 0, PSP_SEEK_SET); #else - u64 size = pspIoLseek(src_handle, 0, PSP_SEEK_END); - pspIoLseek(src_handle, 0, PSP_SEEK_SET); + u64 size = pspIoLseek(srcHandle, 0, PSP_SEEK_END); + pspIoLseek(srcHandle, 0, PSP_SEEK_SET); #endif // Make sure we have enough storage to carry out this operation if (Utils::GetFreeStorage() < size) { Log::Error("Not enough storage is available to process this command 0x%x\n", src_path.c_str(), ret); #ifdef FS_DEBUG - sceIoClose(src_handle); + sceIoClose(srcHandle); #else - pspIoCloseFile(src_handle); + pspIoCloseFile(srcHandle); #endif scePowerUnlock(0); return -1; } - if (R_FAILED(ret = dest_handle = sceIoOpen(dest_path.c_str(), PSP_O_WRONLY | PSP_O_CREAT | PSP_O_APPEND, 0777))) { - Log::Error("sceIoOpen(%s) failed: 0x%x\n", dest_path.c_str(), ret); + if (R_FAILED(ret = destHandle = sceIoOpen(destPath.c_str(), PSP_O_WRONLY | PSP_O_CREAT | PSP_O_APPEND, 0777))) { + Log::Error("sceIoOpen(%s) failed: 0x%x\n", destPath.c_str(), ret); #ifdef FS_DEBUG - sceIoClose(src_handle); + sceIoClose(srcHandle); #else - pspIoCloseFile(src_handle); + pspIoCloseFile(srcHandle); #endif scePowerUnlock(0); return ret; } - u32 bytes_read = 0, bytes_written = 0; - const u64 buf_size = 0x10000; + u32 bytesRead = 0, bytesWritten = 0; + const u64 bufSize = 0x10000; u64 offset = 0; - u8 *buf = new u8[buf_size]; + u8 *buf = new u8[bufSize]; std::string filename = std::filesystem::path(src_path.data()).filename(); do { if (Utils::IsCancelButtonPressed()) { delete[] buf; #ifdef FS_DEBUG - sceIoClose(src_handle); - sceIoClose(dest_handle); + sceIoClose(srcHandle); + sceIoClose(destHandle); #else - pspIoCloseFile(src_handle); - pspIoCloseFile(dest_handle); + pspIoCloseFile(srcHandle); + pspIoCloseFile(destHandle); #endif scePowerUnlock(0); return 0; } - std::memset(buf, 0, buf_size); + std::memset(buf, 0, bufSize); #ifdef FS_DEBUG - if (R_FAILED(ret = bytes_read = sceIoRead(src_handle, buf, buf_size))) { + if (R_FAILED(ret = bytesRead = sceIoRead(srcHandle, buf, bufSize))) { Log::Error("sceIoRead(%s) failed: 0x%x\n", src_path.c_str(), ret); #else - if (R_FAILED(ret = bytes_read = pspIoReadFile(src_handle, buf, buf_size))) { + if (R_FAILED(ret = bytesRead = pspIoReadFile(srcHandle, buf, bufSize))) { Log::Error("pspIoReadFile(%s) failed: 0x%x\n", src_path.c_str(), ret); #endif delete[] buf; #ifdef FS_DEBUG - sceIoClose(src_handle); - sceIoClose(dest_handle); + sceIoClose(srcHandle); + sceIoClose(destHandle); #else - pspIoCloseFile(src_handle); - pspIoCloseFile(dest_handle); + pspIoCloseFile(srcHandle); + pspIoCloseFile(destHandle); #endif scePowerUnlock(0); return ret; } #ifdef FS_DEBUG - if (R_FAILED(ret = bytes_written = sceIoWrite(dest_handle, buf, bytes_read))) { - Log::Error("sceIoWrite(%s) failed: 0x%x\n", dest_path.c_str(), ret); + if (R_FAILED(ret = bytesWritten = sceIoWrite(destHandle, buf, bytesRead))) { + Log::Error("sceIoWrite(%s) failed: 0x%x\n", destPath.c_str(), ret); #else - if (R_FAILED(ret = bytes_written = pspIoWriteFile(dest_handle, buf, bytes_read))) { - Log::Error("pspIoWriteFile(%s) failed: 0x%x\n", dest_path.c_str(), ret); + if (R_FAILED(ret = bytesWritten = pspIoWriteFile(destHandle, buf, bytesRead))) { + Log::Error("pspIoWriteFile(%s) failed: 0x%x\n", destPath.c_str(), ret); #endif delete[] buf; #ifdef FS_DEBUG - sceIoClose(src_handle); - sceIoClose(dest_handle); + sceIoClose(srcHandle); + sceIoClose(destHandle); #else - pspIoCloseFile(src_handle); - pspIoCloseFile(dest_handle); + pspIoCloseFile(srcHandle); + pspIoCloseFile(destHandle); #endif scePowerUnlock(0); return ret; } - offset += bytes_read; + offset += bytesRead; GUI::ProgressBar("Copying", filename.c_str(), offset, size); } while(offset < size); delete[] buf; #ifdef FS_DEBUG - sceIoClose(src_handle); - sceIoClose(dest_handle); + sceIoClose(srcHandle); + sceIoClose(destHandle); #else - pspIoCloseFile(src_handle); - pspIoCloseFile(dest_handle); + pspIoCloseFile(srcHandle); + pspIoCloseFile(destHandle); #endif scePowerUnlock(0); return 0; } - static int CopyDir(const std::string &src_path, const std::string &dest_path) { + static int CopyDir(const std::string &src_path, const std::string &destPath) { int ret = 0; SceUID dir; @@ -467,9 +477,9 @@ namespace FS { // This may fail or not, but we don't care -> make the dir if it doesn't exist, otherwise continue. #ifdef FS_DEBUG - sceIoMkdir(dest_path.c_str(), 0777); + sceIoMkdir(destPath.c_str(), 0777); #else - pspIoMakeDir(dest_path.c_str(), 0777); + pspIoMakeDir(destPath.c_str(), 0777); #endif do { @@ -486,7 +496,7 @@ namespace FS { continue; std::string src = FS::BuildPath(src_path, entry.d_name); - std::string dest = FS::BuildPath(dest_path, entry.d_name); + std::string dest = FS::BuildPath(destPath, entry.d_name); if (FIO_S_ISDIR(entry.d_stat.st_mode)) FS::CopyDir(src, dest); // Copy Folder (via recursion) @@ -504,28 +514,29 @@ namespace FS { } static void ClearCopyData(void) { - fs_copy_entry.copy_path.clear(); - fs_copy_entry.copy_filename.clear(); - fs_copy_entry.is_dir = false; + fs_copy_entry.path.clear(); + fs_copy_entry.filename.clear(); + fs_copy_entry.isDir = false; } void Copy(SceIoDirent &entry, const std::string &path) { FS::ClearCopyData(); - fs_copy_entry.copy_path = FS::BuildPath(path, entry.d_name); - fs_copy_entry.copy_filename.append(entry.d_name); + fs_copy_entry.path = FS::BuildPath(path, entry.d_name); + fs_copy_entry.filename.append(entry.d_name); - if (FIO_S_ISDIR(entry.d_stat.st_mode)) - fs_copy_entry.is_dir = true; + if (FIO_S_ISDIR(entry.d_stat.st_mode)) { + fs_copy_entry.isDir = true; + } } int Paste(void) { int ret = 0; - std::string path = FS::BuildPath(cfg.cwd, fs_copy_entry.copy_filename); + std::string path = FS::BuildPath(cfg.cwd, fs_copy_entry.filename); - if (fs_copy_entry.is_dir) // Copy folder recursively - ret = FS::CopyDir(fs_copy_entry.copy_path, path); + if (fs_copy_entry.isDir) // Copy folder recursively + ret = FS::CopyDir(fs_copy_entry.path, path); else // Copy file - ret = FS::CopyFile(fs_copy_entry.copy_path, path); + ret = FS::CopyFile(fs_copy_entry.path, path); FS::ClearCopyData(); return ret; @@ -582,10 +593,10 @@ namespace FS { int Move(void) { int ret = 0; - std::string path = FS::BuildPath(cfg.cwd, fs_copy_entry.copy_filename); + std::string path = FS::BuildPath(cfg.cwd, fs_copy_entry.filename); - if (R_FAILED(ret = sceIoMove(fs_copy_entry.copy_path.c_str(), path.c_str()))) { - Log::Error("sceIoMove(%s, %s) failed: 0x%x\n", fs_copy_entry.copy_filename.c_str(), path.c_str(), ret); + if (R_FAILED(ret = sceIoMove(fs_copy_entry.path.c_str(), path.c_str()))) { + Log::Error("sceIoMove(%s, %s) failed: 0x%x\n", fs_copy_entry.filename.c_str(), path.c_str(), ret); FS::ClearCopyData(); return ret; } @@ -722,14 +733,18 @@ namespace FS { return 0; } - + std::string BuildPath(const std::string &path, const std::string &filename) { - std::string new_path = path; - - if (new_path.back() != '/') - new_path.append("/"); + std::string result; + result.reserve(path.size() + 1 + filename.size()); + + result += path; + + if (!path.empty() && path.back() != '/') { + result += '/'; + } - new_path.append(filename); - return new_path; + result += filename; + return result; } } diff --git a/app/source/gui/game_launcher.cpp b/app/source/gui/game_launcher.cpp index 30635a8..faba984 100644 --- a/app/source/gui/game_launcher.cpp +++ b/app/source/gui/game_launcher.cpp @@ -40,8 +40,9 @@ namespace CSO { z.next_in = Z_NULL; z.avail_in = 0; - if (inflateInit2(&z, -15) != Z_OK) + if (inflateInit2(&z, -15) != Z_OK) { return -1; + } z.next_in = reinterpret_cast(i_buff); z.avail_in = i_size; @@ -50,8 +51,9 @@ namespace CSO { inflate(&z, Z_FINISH); size = o_size - z.avail_out; - if (inflateEnd(&z) != Z_OK) + if (inflateEnd(&z) != Z_OK) { return -1; + } return size; } @@ -62,55 +64,67 @@ namespace CSO { char tmp_buf[SECTOR_SIZE * 2] = {0}, tmp_buf_2[SECTOR_SIZE * 2] = {0}; int ret = 0, error = 0; - if (R_FAILED(error = sceIoLseek(fd, 0, PSP_SEEK_SET))) + if (R_FAILED(error = sceIoLseek(fd, 0, PSP_SEEK_SET))) { return error; + } - if (R_FAILED(error = sceIoRead(fd, &ciso, sizeof(ciso)))) + if (R_FAILED(error = sceIoRead(fd, &ciso, sizeof(ciso)))) { return error; + } - if (static_cast((pos + size)) > ciso.total_bytes) + if (static_cast((pos + size)) > ciso.total_bytes) { size = ciso.total_bytes - pos; + } int max_sector = ciso.total_bytes / ciso.block_size - 1; int start_sec = pos / SECTOR_SIZE; int end_sec = (pos + size - 1) / SECTOR_SIZE; int sector_num = start_sec; - if (sector_num > max_sector) + if (sector_num > max_sector) { return -1; + } - if (end_sec > max_sector) + if (end_sec > max_sector) { end_sec = max_sector; + } ret = 0; while(sector_num <= end_sec) { - if (R_FAILED(error = sceIoLseek(fd, sizeof(ciso) + (sector_num * 4), PSP_SEEK_SET))) + if (R_FAILED(error = sceIoLseek(fd, sizeof(ciso) + (sector_num * 4), PSP_SEEK_SET))) { return error; + } - if (R_FAILED(error = sceIoRead(fd, &index, 4))) + if (R_FAILED(error = sceIoRead(fd, &index, 4))) { return error; + } u32 zip_flag = index & 0x80000000; index = (index & 0x7FFFFFFF) << ciso.align; - if (R_FAILED(error = sceIoRead(fd, &index2, 4))) + if (R_FAILED(error = sceIoRead(fd, &index2, 4))) { return error; + } int read_size = ((index2 & 0x7FFFFFFF) << ciso.align) - index; - if (R_FAILED(error = sceIoLseek(fd, index, PSP_SEEK_SET))) + if (R_FAILED(error = sceIoLseek(fd, index, PSP_SEEK_SET))) { return error; + } if (zip_flag != 0) { - if (R_FAILED(error = sceIoRead(fd, tmp_buf, ciso.block_size))) + if (R_FAILED(error = sceIoRead(fd, tmp_buf, ciso.block_size))) { return error; + } } else { - if (R_FAILED(error = sceIoRead(fd, tmp_buf_2, read_size))) + if (R_FAILED(error = sceIoRead(fd, tmp_buf_2, read_size))) { return error; + } - if (R_FAILED(error = CSO::Inflate(tmp_buf, ciso.block_size, tmp_buf_2, read_size))) + if (R_FAILED(error = CSO::Inflate(tmp_buf, ciso.block_size, tmp_buf_2, read_size))) { return error; + } } if ((sector_num > start_sec) && (sector_num < end_sec)) { @@ -121,11 +135,13 @@ namespace CSO { int start_pos = 0; int end_pos = ciso.block_size; - if (sector_num == start_sec) + if (sector_num == start_sec) { start_pos = pos - (start_sec * ciso.block_size); + } - if (sector_num == end_sec) + if (sector_num == end_sec) { end_pos = (pos + size) - (end_sec * ciso.block_size); + } read_size = end_pos - start_pos; std::memcpy(buf, &tmp_buf[start_pos], read_size); @@ -171,10 +187,12 @@ namespace ISO { } int ReadFile(void *buf, const std::string &path, int type, int pos, int size) { - if (type == 0) + if (type == 0) { return ISO::Read(buf, path, pos, size); - else if (type == 1) + } + else if (type == 1) { return CSO::Read(reinterpret_cast(buf), path, pos, size); + } return -1; } @@ -187,8 +205,9 @@ namespace ISO { int now_dir_num = 1; int ret = 0; - if (*name == '/') + if (*name == '/') { name++; + } std::strcpy(work, name); char *ptr = std::strrchr(work, '/'); @@ -210,8 +229,9 @@ namespace ISO { u8 magic[8] = { 0x01, 0x43, 0x44, 0x30, 0x30, 0x31, 0x01, 0x00 }; //Invalid Magic - if (std::memcmp(header, magic, sizeof(header)) != 0) + if (std::memcmp(header, magic, sizeof(header)) != 0) { return -1; + } /////// ISO::ReadFile(&path_table_size, path, type, 0x8084, 4); @@ -219,8 +239,9 @@ namespace ISO { path_table_addr *= SECTOR_SIZE; char *table_buf = new char[path_table_size]; - if (!table_buf) + if (!table_buf) { return -1; + } ret = ISO::ReadFile(table_buf, path, type, path_table_addr, path_table_size); @@ -236,8 +257,9 @@ namespace ISO { while(tbl_ptr < path_table_size) { u8 len_di = static_cast(table_buf[tbl_ptr]); - if (len_di == 0) + if (len_di == 0) { break; + } tbl_ptr += 6; @@ -248,16 +270,18 @@ namespace ISO { befor_dir_num = now_dir_num; ptr = strchr(ptr, '/'); - if (ptr != nullptr) + if (ptr != nullptr) { ptr++; + } else { BINARY2INT(&dir_recode_addr, &table_buf[tbl_ptr - 6]); break; } } } - else + else { tbl_ptr += 2; + } tbl_ptr += (len_di + 1) & ~1; // padding now_dir_num++; @@ -266,15 +290,17 @@ namespace ISO { delete[] table_buf; - if (dir_recode_addr == 0) + if (dir_recode_addr == 0) { return -1; + } dir_recode_addr *= SECTOR_SIZE; int dir_record_size = 0; ret = ISO::ReadFile(&dir_record_size, path, type, dir_recode_addr + 10, 4); char *dir_buf = new char[dir_record_size]; - if (!dir_buf) + if (!dir_buf) { return -1; + } int dir_ptr = 0; ret = -1; @@ -282,8 +308,9 @@ namespace ISO { while(dir_ptr < dir_record_size) { u8 len_dr = static_cast(dir_buf[dir_ptr]); - if (len_dr == 0) + if (len_dr == 0) { dir_ptr++; + } else { if (strncasecmp(&dir_buf[dir_ptr + 33], s_file, dir_buf[dir_ptr + 32]) == 0) { BINARY2INT(pos, &dir_buf[dir_ptr + 2]); @@ -369,11 +396,13 @@ namespace GameLauncher { u32 magic = 0; ISO::Read(&magic, path.c_str(), 0, sizeof(magic)); - if (magic == 0x4F534943) + if (magic == 0x4F534943) { type = 1; + } - if (R_FAILED(ret = ISO::GetInfo(&pos, &size, &size_pos, path, type, file.c_str()))) + if (R_FAILED(ret = ISO::GetInfo(&pos, &size, &size_pos, path, type, file.c_str()))) { return ret; + } *data = new u8[size]; ISO::ReadFile(*data, path.c_str(), type, pos, size); @@ -533,8 +562,9 @@ namespace GameLauncher { new_path.append(path); new_path.append(title); - if (!(FS::DirExists(new_path))) + if (!(FS::DirExists(new_path))) { FS::RecursiveMakeDir(new_path); + } new_path.append(ext); // "/icon0.png" FS::WriteFile(new_path, data, size); @@ -550,23 +580,24 @@ namespace GameLauncher { } EbootMeta meta = { 0 }; - - std::string ext = FS::GetFileExt(path); - + const char *ext = FS::GetFileExt(path.c_str()); // ISO/CSO - if ((!ext.compare(".ISO")) || (!ext.compare(".CSO"))) { - if (R_FAILED(ret = GameLauncher::GetISOMeta(path, &meta))) + if ((strncasecmp(ext, "cso", 3) == 0) || (strncasecmp(ext, "iso", 3) == 0)) { + if (R_FAILED(ret = GameLauncher::GetISOMeta(path, &meta))) { return ret; + } } else { - if (R_FAILED(ret = GameLauncher::GetEbootMeta(path, &meta))) + if (R_FAILED(ret = GameLauncher::GetEbootMeta(path, &meta))) { return ret; + } } g2dTexture *icon0 = nullptr; - if (meta.icon0_data) + if (meta.icon0_data) { icon0 = Textures::LoadImageBufferPNG(meta.icon0_data, meta.icon0_size); + } char install_date[128] = {0}; const char *months[] = { "Dec", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov" }; @@ -602,70 +633,86 @@ namespace GameLauncher { int ctrl = Utils::ReadControls(); - if (ctrl & PSP_CTRL_LEFT) + if (ctrl & PSP_CTRL_LEFT) { selection--; - else if (ctrl & PSP_CTRL_RIGHT) + } + else if (ctrl & PSP_CTRL_RIGHT) { selection++; + } Utils::SetBounds(selection, 0, 4); - if (Utils::IsButtonPressed(PSP_CTRL_ENTER)) + if (Utils::IsButtonPressed(PSP_CTRL_ENTER)) { Utils::LaunchEboot(path.c_str()); + } if (Utils::IsButtonPressed(PSP_CTRL_SQUARE)) { switch(selection) { case MetadataIcon0: - if (meta.icon0_data) + if (meta.icon0_data) { GameLauncher::ExportData("/PSP/PHOTO/", meta.title, "/ICON0.PNG", meta.icon0_data, meta.icon0_size); + } break; case MetadataIcon1: - if (meta.icon1_data) + if (meta.icon1_data) { GameLauncher::ExportData("/PSP/PHOTO/", meta.title, "/ICON1.PMF", meta.icon1_data, meta.icon1_size); + } break; case MetadataPic0: - if (meta.pic0_data) + if (meta.pic0_data) { GameLauncher::ExportData("/PSP/PHOTO/", meta.title, "/PIC0.PNG", meta.pic0_data, meta.pic0_size); + } break; case MetadataPic1: - if (meta.pic1_data) + if (meta.pic1_data) { GameLauncher::ExportData("/PSP/PHOTO/", meta.title, "/PIC1.PNG", meta.pic1_data, meta.pic1_size); + } break; case MetadataSnd0: - if (meta.snd0_data) + if (meta.snd0_data) { GameLauncher::ExportData("/PSP/MUSIC/", meta.title, "/SND0.AT3", meta.snd0_data, meta.snd0_size); + } break; } } - if (Utils::IsButtonPressed(PSP_CTRL_CANCEL)) + if (Utils::IsButtonPressed(PSP_CTRL_CANCEL)) { break; + } } - if (icon0) + if (icon0) { g2dTexFree(&icon0); + } - if (meta.title) + if (meta.title) { delete[] meta.title; + } - if (meta.icon0_data) + if (meta.icon0_data) { delete[] meta.icon0_data; + } - if (meta.icon1_data) + if (meta.icon1_data) { delete[] meta.icon1_data; + } - if (meta.pic0_data) + if (meta.pic0_data) { delete[] meta.pic0_data; + } - if (meta.pic1_data) + if (meta.pic1_data) { delete[] meta.pic1_data; + } - if (meta.snd0_data) + if (meta.snd0_data) { delete[] meta.snd0_data; + } return 0; } diff --git a/app/source/textures.cpp b/app/source/textures.cpp index 7683af8..02a952f 100644 --- a/app/source/textures.cpp +++ b/app/source/textures.cpp @@ -278,18 +278,18 @@ namespace Textures { } g2dTexture *tex = nullptr; - std::string ext = FS::GetFileExt(path); + const char *ext = FS::GetFileExt(path.c_str()); - if (ext == ".BMP") { + if (strncasecmp(ext, "bmp", 3) == 0) { tex = Textures::LoadImageBufferBMP(data, size); } - else if (ext == ".GIF") { + else if (strncasecmp(ext, "gif", 3) == 0) { tex = Textures::LoadImageBufferGIF(data, size); } - else if ((ext == ".JPEG") || (ext == ".JPG")) { + else if ((strncasecmp(ext, "jpeg", 4) == 0) || (strncasecmp(ext, "jpg", 3) == 0)) { tex = Textures::LoadImageBufferJPEG(data, size); } - else if (ext == ".PNG") { + else if (strncasecmp(ext, "png", 3) == 0) { tex = Textures::LoadImageBufferPNG(data, size); } From 50430b5b5febe8b6fa765fd6c9f2ee0f185784dd Mon Sep 17 00:00:00 2001 From: Joel16 Date: Thu, 10 Apr 2025 18:19:54 +0100 Subject: [PATCH 14/24] textures: Use libpng from pspsdk and update libnsbmp to 0.17 --- app/source/screenshot.cpp | 4 +- app/source/textures.cpp | 9 +- libs/include/libpng/png.h | 3247 ------------------------------ libs/include/libpng/pngconf.h | 623 ------ libs/include/libpng/pnglibconf.h | 219 -- libs/libnsbmp/libnsbmp.c | 14 +- libs/libnsbmp/libnsbmp.h | 2 - 7 files changed, 10 insertions(+), 4108 deletions(-) delete mode 100644 libs/include/libpng/png.h delete mode 100644 libs/include/libpng/pngconf.h delete mode 100644 libs/include/libpng/pnglibconf.h diff --git a/app/source/screenshot.cpp b/app/source/screenshot.cpp index 3d7d803..0074548 100644 --- a/app/source/screenshot.cpp +++ b/app/source/screenshot.cpp @@ -1,13 +1,11 @@ #include +#include #include #include -#include -#include #include #include #include "fs.h" -#include "libpng/png.h" #include "utils.h" namespace Screenshot { diff --git a/app/source/textures.cpp b/app/source/textures.cpp index 02a952f..3efb88a 100644 --- a/app/source/textures.cpp +++ b/app/source/textures.cpp @@ -2,11 +2,11 @@ #include #include #include +#include #include "fs.h" #include "libnsbmp.h" #include "libnsgif.h" -#include "libpng/png.h" #include "log.h" #include "textures.h" #include "utils.h" @@ -96,10 +96,6 @@ namespace Image { assert(bitmap); std::free(bitmap); } - - static size_t GetBPP([[maybe_unused]] void *bitmap) { - return BYTES_PER_PIXEL; - } static void Modified([[maybe_unused]] void *bitmap) { assert(bitmap); @@ -112,8 +108,7 @@ namespace Textures { bmp_bitmap_callback_vt bitmap_callbacks = { Image::Create, Image::Destroy, - Image::GetBuffer, - Image::GetBPP + Image::GetBuffer }; bmp_result code = BMP_OK; diff --git a/libs/include/libpng/png.h b/libs/include/libpng/png.h deleted file mode 100644 index 139eb0d..0000000 --- a/libs/include/libpng/png.h +++ /dev/null @@ -1,3247 +0,0 @@ - -/* png.h - header file for PNG reference library - * - * libpng version 1.6.37 - April 14, 2019 - * - * Copyright (c) 2018-2019 Cosmin Truta - * Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson - * Copyright (c) 1996-1997 Andreas Dilger - * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. - * - * This code is released under the libpng license. (See LICENSE, below.) - * - * Authors and maintainers: - * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat - * libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger - * libpng versions 0.97, January 1998, through 1.6.35, July 2018: - * Glenn Randers-Pehrson - * libpng versions 1.6.36, December 2018, through 1.6.37, April 2019: - * Cosmin Truta - * See also "Contributing Authors", below. - */ - -/* - * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE - * ========================================= - * - * PNG Reference Library License version 2 - * --------------------------------------- - * - * * Copyright (c) 1995-2019 The PNG Reference Library Authors. - * * Copyright (c) 2018-2019 Cosmin Truta. - * * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson. - * * Copyright (c) 1996-1997 Andreas Dilger. - * * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. - * - * The software is supplied "as is", without warranty of any kind, - * express or implied, including, without limitation, the warranties - * of merchantability, fitness for a particular purpose, title, and - * non-infringement. In no event shall the Copyright owners, or - * anyone distributing the software, be liable for any damages or - * other liability, whether in contract, tort or otherwise, arising - * from, out of, or in connection with the software, or the use or - * other dealings in the software, even if advised of the possibility - * of such damage. - * - * Permission is hereby granted to use, copy, modify, and distribute - * this software, or portions hereof, for any purpose, without fee, - * subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you - * must not claim that you wrote the original software. If you - * use this software in a product, an acknowledgment in the product - * documentation would be appreciated, but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must - * not be misrepresented as being the original software. - * - * 3. This Copyright notice may not be removed or altered from any - * source or altered source distribution. - * - * - * PNG Reference Library License version 1 (for libpng 0.5 through 1.6.35) - * ----------------------------------------------------------------------- - * - * libpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are - * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are - * derived from libpng-1.0.6, and are distributed according to the same - * disclaimer and license as libpng-1.0.6 with the following individuals - * added to the list of Contributing Authors: - * - * Simon-Pierre Cadieux - * Eric S. Raymond - * Mans Rullgard - * Cosmin Truta - * Gilles Vollant - * James Yu - * Mandar Sahastrabuddhe - * Google Inc. - * Vadim Barkov - * - * and with the following additions to the disclaimer: - * - * There is no warranty against interference with your enjoyment of - * the library or against infringement. There is no warranty that our - * efforts or the library will fulfill any of your particular purposes - * or needs. This library is provided with all faults, and the entire - * risk of satisfactory quality, performance, accuracy, and effort is - * with the user. - * - * Some files in the "contrib" directory and some configure-generated - * files that are distributed with libpng have other copyright owners, and - * are released under other open source licenses. - * - * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are - * Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from - * libpng-0.96, and are distributed according to the same disclaimer and - * license as libpng-0.96, with the following individuals added to the - * list of Contributing Authors: - * - * Tom Lane - * Glenn Randers-Pehrson - * Willem van Schaik - * - * libpng versions 0.89, June 1996, through 0.96, May 1997, are - * Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88, - * and are distributed according to the same disclaimer and license as - * libpng-0.88, with the following individuals added to the list of - * Contributing Authors: - * - * John Bowler - * Kevin Bracey - * Sam Bushell - * Magnus Holmgren - * Greg Roelofs - * Tom Tanner - * - * Some files in the "scripts" directory have other copyright owners, - * but are released under this license. - * - * libpng versions 0.5, May 1995, through 0.88, January 1996, are - * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. - * - * For the purposes of this copyright and license, "Contributing Authors" - * is defined as the following set of individuals: - * - * Andreas Dilger - * Dave Martindale - * Guy Eric Schalnat - * Paul Schmidt - * Tim Wegner - * - * The PNG Reference Library is supplied "AS IS". The Contributing - * Authors and Group 42, Inc. disclaim all warranties, expressed or - * implied, including, without limitation, the warranties of - * merchantability and of fitness for any purpose. The Contributing - * Authors and Group 42, Inc. assume no liability for direct, indirect, - * incidental, special, exemplary, or consequential damages, which may - * result from the use of the PNG Reference Library, even if advised of - * the possibility of such damage. - * - * Permission is hereby granted to use, copy, modify, and distribute this - * source code, or portions hereof, for any purpose, without fee, subject - * to the following restrictions: - * - * 1. The origin of this source code must not be misrepresented. - * - * 2. Altered versions must be plainly marked as such and must not - * be misrepresented as being the original source. - * - * 3. This Copyright notice may not be removed or altered from any - * source or altered source distribution. - * - * The Contributing Authors and Group 42, Inc. specifically permit, - * without fee, and encourage the use of this source code as a component - * to supporting the PNG file format in commercial products. If you use - * this source code in a product, acknowledgment is not required but would - * be appreciated. - * - * END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE. - * - * TRADEMARK - * ========= - * - * The name "libpng" has not been registered by the Copyright owners - * as a trademark in any jurisdiction. However, because libpng has - * been distributed and maintained world-wide, continually since 1995, - * the Copyright owners claim "common-law trademark protection" in any - * jurisdiction where common-law trademark is recognized. - */ - -/* - * A "png_get_copyright" function is available, for convenient use in "about" - * boxes and the like: - * - * printf("%s", png_get_copyright(NULL)); - * - * Also, the PNG logo (in PNG format, of course) is supplied in the - * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). - */ - -/* - * The contributing authors would like to thank all those who helped - * with testing, bug fixes, and patience. This wouldn't have been - * possible without all of you. - * - * Thanks to Frank J. T. Wojcik for helping with the documentation. - */ - -/* Note about libpng version numbers: - * - * Due to various miscommunications, unforeseen code incompatibilities - * and occasional factors outside the authors' control, version numbering - * on the library has not always been consistent and straightforward. - * The following table summarizes matters since version 0.89c, which was - * the first widely used release: - * - * source png.h png.h shared-lib - * version string int version - * ------- ------ ----- ---------- - * 0.89c "1.0 beta 3" 0.89 89 1.0.89 - * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90] - * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95] - * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96] - * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97] - * 0.97c 0.97 97 2.0.97 - * 0.98 0.98 98 2.0.98 - * 0.99 0.99 98 2.0.99 - * 0.99a-m 0.99 99 2.0.99 - * 1.00 1.00 100 2.1.0 [100 should be 10000] - * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000] - * 1.0.1 png.h string is 10001 2.1.0 - * 1.0.1a-e identical to the 10002 from here on, the shared library - * 1.0.2 source version) 10002 is 2.V where V is the source code - * 1.0.2a-b 10003 version, except as noted. - * 1.0.3 10003 - * 1.0.3a-d 10004 - * 1.0.4 10004 - * 1.0.4a-f 10005 - * 1.0.5 (+ 2 patches) 10005 - * 1.0.5a-d 10006 - * 1.0.5e-r 10100 (not source compatible) - * 1.0.5s-v 10006 (not binary compatible) - * 1.0.6 (+ 3 patches) 10006 (still binary incompatible) - * 1.0.6d-f 10007 (still binary incompatible) - * 1.0.6g 10007 - * 1.0.6h 10007 10.6h (testing xy.z so-numbering) - * 1.0.6i 10007 10.6i - * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0) - * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible) - * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible) - * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible) - * 1.0.7 1 10007 (still compatible) - * ... - * 1.0.69 10 10069 10.so.0.69[.0] - * ... - * 1.2.59 13 10259 12.so.0.59[.0] - * ... - * 1.4.20 14 10420 14.so.0.20[.0] - * ... - * 1.5.30 15 10530 15.so.15.30[.0] - * ... - * 1.6.37 16 10637 16.so.16.37[.0] - * - * Henceforth the source version will match the shared-library major and - * minor numbers; the shared-library major version number will be used for - * changes in backward compatibility, as it is intended. - * The PNG_LIBPNG_VER macro, which is not used within libpng but is - * available for applications, is an unsigned integer of the form XYYZZ - * corresponding to the source version X.Y.Z (leading zeros in Y and Z). - * Beta versions were given the previous public release number plus a - * letter, until version 1.0.6j; from then on they were given the upcoming - * public release number plus "betaNN" or "rcNN". - * - * Binary incompatibility exists only when applications make direct access - * to the info_ptr or png_ptr members through png.h, and the compiled - * application is loaded with a different version of the library. - * - * DLLNUM will change each time there are forward or backward changes - * in binary compatibility (e.g., when a new feature is added). - * - * See libpng.txt or libpng.3 for more information. The PNG specification - * is available as a W3C Recommendation and as an ISO/IEC Standard; see - * - */ - -#ifndef PNG_H -#define PNG_H - -/* This is not the place to learn how to use libpng. The file libpng-manual.txt - * describes how to use libpng, and the file example.c summarizes it - * with some code on which to build. This file is useful for looking - * at the actual function definitions and structure components. If that - * file has been stripped from your copy of libpng, you can find it at - * - * - * If you just need to read a PNG file and don't want to read the documentation - * skip to the end of this file and read the section entitled 'simplified API'. - */ - -/* Version information for png.h - this should match the version in png.c */ -#define PNG_LIBPNG_VER_STRING "1.6.37" -#define PNG_HEADER_VERSION_STRING " libpng version 1.6.37 - April 14, 2019\n" - -#define PNG_LIBPNG_VER_SONUM 16 -#define PNG_LIBPNG_VER_DLLNUM 16 - -/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */ -#define PNG_LIBPNG_VER_MAJOR 1 -#define PNG_LIBPNG_VER_MINOR 6 -#define PNG_LIBPNG_VER_RELEASE 37 - -/* This should be zero for a public release, or non-zero for a - * development version. [Deprecated] - */ -#define PNG_LIBPNG_VER_BUILD 0 - -/* Release Status */ -#define PNG_LIBPNG_BUILD_ALPHA 1 -#define PNG_LIBPNG_BUILD_BETA 2 -#define PNG_LIBPNG_BUILD_RC 3 -#define PNG_LIBPNG_BUILD_STABLE 4 -#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7 - -/* Release-Specific Flags */ -#define PNG_LIBPNG_BUILD_PATCH 8 /* Can be OR'ed with - PNG_LIBPNG_BUILD_STABLE only */ -#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with - PNG_LIBPNG_BUILD_SPECIAL */ -#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with - PNG_LIBPNG_BUILD_PRIVATE */ - -#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE - -/* Careful here. At one time, Guy wanted to use 082, but that - * would be octal. We must not include leading zeros. - * Versions 0.7 through 1.0.0 were in the range 0 to 100 here - * (only version 1.0.0 was mis-numbered 100 instead of 10000). - * From version 1.0.1 it is: - * XXYYZZ, where XX=major, YY=minor, ZZ=release - */ -#define PNG_LIBPNG_VER 10637 /* 1.6.37 */ - -/* Library configuration: these options cannot be changed after - * the library has been built. - */ -#ifndef PNGLCONF_H -/* If pnglibconf.h is missing, you can - * copy scripts/pnglibconf.h.prebuilt to pnglibconf.h - */ -# include "pnglibconf.h" -#endif - -#ifndef PNG_VERSION_INFO_ONLY -/* Machine specific configuration. */ -# include "pngconf.h" -#endif - -/* - * Added at libpng-1.2.8 - * - * Ref MSDN: Private as priority over Special - * VS_FF_PRIVATEBUILD File *was not* built using standard release - * procedures. If this value is given, the StringFileInfo block must - * contain a PrivateBuild string. - * - * VS_FF_SPECIALBUILD File *was* built by the original company using - * standard release procedures but is a variation of the standard - * file of the same version number. If this value is given, the - * StringFileInfo block must contain a SpecialBuild string. - */ - -#ifdef PNG_USER_PRIVATEBUILD /* From pnglibconf.h */ -# define PNG_LIBPNG_BUILD_TYPE \ - (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE) -#else -# ifdef PNG_LIBPNG_SPECIALBUILD -# define PNG_LIBPNG_BUILD_TYPE \ - (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL) -# else -# define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE) -# endif -#endif - -#ifndef PNG_VERSION_INFO_ONLY - -/* Inhibit C++ name-mangling for libpng functions but not for system calls. */ -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/* Version information for C files, stored in png.c. This had better match - * the version above. - */ -#define png_libpng_ver png_get_header_ver(NULL) - -/* This file is arranged in several sections: - * - * 1. [omitted] - * 2. Any configuration options that can be specified by for the application - * code when it is built. (Build time configuration is in pnglibconf.h) - * 3. Type definitions (base types are defined in pngconf.h), structure - * definitions. - * 4. Exported library functions. - * 5. Simplified API. - * 6. Implementation options. - * - * The library source code has additional files (principally pngpriv.h) that - * allow configuration of the library. - */ - -/* Section 1: [omitted] */ - -/* Section 2: run time configuration - * See pnglibconf.h for build time configuration - * - * Run time configuration allows the application to choose between - * implementations of certain arithmetic APIs. The default is set - * at build time and recorded in pnglibconf.h, but it is safe to - * override these (and only these) settings. Note that this won't - * change what the library does, only application code, and the - * settings can (and probably should) be made on a per-file basis - * by setting the #defines before including png.h - * - * Use macros to read integers from PNG data or use the exported - * functions? - * PNG_USE_READ_MACROS: use the macros (see below) Note that - * the macros evaluate their argument multiple times. - * PNG_NO_USE_READ_MACROS: call the relevant library function. - * - * Use the alternative algorithm for compositing alpha samples that - * does not use division? - * PNG_READ_COMPOSITE_NODIV_SUPPORTED: use the 'no division' - * algorithm. - * PNG_NO_READ_COMPOSITE_NODIV: use the 'division' algorithm. - * - * How to handle benign errors if PNG_ALLOW_BENIGN_ERRORS is - * false? - * PNG_ALLOW_BENIGN_ERRORS: map calls to the benign error - * APIs to png_warning. - * Otherwise the calls are mapped to png_error. - */ - -/* Section 3: type definitions, including structures and compile time - * constants. - * See pngconf.h for base types that vary by machine/system - */ - -/* This triggers a compiler error in png.c, if png.c and png.h - * do not agree upon the version number. - */ -typedef char* png_libpng_version_1_6_37; - -/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info. - * - * png_struct is the cache of information used while reading or writing a single - * PNG file. One of these is always required, although the simplified API - * (below) hides the creation and destruction of it. - */ -typedef struct png_struct_def png_struct; -typedef const png_struct * png_const_structp; -typedef png_struct * png_structp; -typedef png_struct * * png_structpp; - -/* png_info contains information read from or to be written to a PNG file. One - * or more of these must exist while reading or creating a PNG file. The - * information is not used by libpng during read but is used to control what - * gets written when a PNG file is created. "png_get_" function calls read - * information during read and "png_set_" functions calls write information - * when creating a PNG. - * been moved into a separate header file that is not accessible to - * applications. Read libpng-manual.txt or libpng.3 for more info. - */ -typedef struct png_info_def png_info; -typedef png_info * png_infop; -typedef const png_info * png_const_infop; -typedef png_info * * png_infopp; - -/* Types with names ending 'p' are pointer types. The corresponding types with - * names ending 'rp' are identical pointer types except that the pointer is - * marked 'restrict', which means that it is the only pointer to the object - * passed to the function. Applications should not use the 'restrict' types; - * it is always valid to pass 'p' to a pointer with a function argument of the - * corresponding 'rp' type. Different compilers have different rules with - * regard to type matching in the presence of 'restrict'. For backward - * compatibility libpng callbacks never have 'restrict' in their parameters and, - * consequentially, writing portable application code is extremely difficult if - * an attempt is made to use 'restrict'. - */ -typedef png_struct * PNG_RESTRICT png_structrp; -typedef const png_struct * PNG_RESTRICT png_const_structrp; -typedef png_info * PNG_RESTRICT png_inforp; -typedef const png_info * PNG_RESTRICT png_const_inforp; - -/* Three color definitions. The order of the red, green, and blue, (and the - * exact size) is not important, although the size of the fields need to - * be png_byte or png_uint_16 (as defined below). - */ -typedef struct png_color_struct -{ - png_byte red; - png_byte green; - png_byte blue; -} png_color; -typedef png_color * png_colorp; -typedef const png_color * png_const_colorp; -typedef png_color * * png_colorpp; - -typedef struct png_color_16_struct -{ - png_byte index; /* used for palette files */ - png_uint_16 red; /* for use in red green blue files */ - png_uint_16 green; - png_uint_16 blue; - png_uint_16 gray; /* for use in grayscale files */ -} png_color_16; -typedef png_color_16 * png_color_16p; -typedef const png_color_16 * png_const_color_16p; -typedef png_color_16 * * png_color_16pp; - -typedef struct png_color_8_struct -{ - png_byte red; /* for use in red green blue files */ - png_byte green; - png_byte blue; - png_byte gray; /* for use in grayscale files */ - png_byte alpha; /* for alpha channel files */ -} png_color_8; -typedef png_color_8 * png_color_8p; -typedef const png_color_8 * png_const_color_8p; -typedef png_color_8 * * png_color_8pp; - -/* - * The following two structures are used for the in-core representation - * of sPLT chunks. - */ -typedef struct png_sPLT_entry_struct -{ - png_uint_16 red; - png_uint_16 green; - png_uint_16 blue; - png_uint_16 alpha; - png_uint_16 frequency; -} png_sPLT_entry; -typedef png_sPLT_entry * png_sPLT_entryp; -typedef const png_sPLT_entry * png_const_sPLT_entryp; -typedef png_sPLT_entry * * png_sPLT_entrypp; - -/* When the depth of the sPLT palette is 8 bits, the color and alpha samples - * occupy the LSB of their respective members, and the MSB of each member - * is zero-filled. The frequency member always occupies the full 16 bits. - */ - -typedef struct png_sPLT_struct -{ - png_charp name; /* palette name */ - png_byte depth; /* depth of palette samples */ - png_sPLT_entryp entries; /* palette entries */ - png_int_32 nentries; /* number of palette entries */ -} png_sPLT_t; -typedef png_sPLT_t * png_sPLT_tp; -typedef const png_sPLT_t * png_const_sPLT_tp; -typedef png_sPLT_t * * png_sPLT_tpp; - -#ifdef PNG_TEXT_SUPPORTED -/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file, - * and whether that contents is compressed or not. The "key" field - * points to a regular zero-terminated C string. The "text" fields can be a - * regular C string, an empty string, or a NULL pointer. - * However, the structure returned by png_get_text() will always contain - * the "text" field as a regular zero-terminated C string (possibly - * empty), never a NULL pointer, so it can be safely used in printf() and - * other string-handling functions. Note that the "itxt_length", "lang", and - * "lang_key" members of the structure only exist when the library is built - * with iTXt chunk support. Prior to libpng-1.4.0 the library was built by - * default without iTXt support. Also note that when iTXt *is* supported, - * the "lang" and "lang_key" fields contain NULL pointers when the - * "compression" field contains * PNG_TEXT_COMPRESSION_NONE or - * PNG_TEXT_COMPRESSION_zTXt. Note that the "compression value" is not the - * same as what appears in the PNG tEXt/zTXt/iTXt chunk's "compression flag" - * which is always 0 or 1, or its "compression method" which is always 0. - */ -typedef struct png_text_struct -{ - int compression; /* compression value: - -1: tEXt, none - 0: zTXt, deflate - 1: iTXt, none - 2: iTXt, deflate */ - png_charp key; /* keyword, 1-79 character description of "text" */ - png_charp text; /* comment, may be an empty string (ie "") - or a NULL pointer */ - size_t text_length; /* length of the text string */ - size_t itxt_length; /* length of the itxt string */ - png_charp lang; /* language code, 0-79 characters - or a NULL pointer */ - png_charp lang_key; /* keyword translated UTF-8 string, 0 or more - chars or a NULL pointer */ -} png_text; -typedef png_text * png_textp; -typedef const png_text * png_const_textp; -typedef png_text * * png_textpp; -#endif - -/* Supported compression types for text in PNG files (tEXt, and zTXt). - * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */ -#define PNG_TEXT_COMPRESSION_NONE_WR -3 -#define PNG_TEXT_COMPRESSION_zTXt_WR -2 -#define PNG_TEXT_COMPRESSION_NONE -1 -#define PNG_TEXT_COMPRESSION_zTXt 0 -#define PNG_ITXT_COMPRESSION_NONE 1 -#define PNG_ITXT_COMPRESSION_zTXt 2 -#define PNG_TEXT_COMPRESSION_LAST 3 /* Not a valid value */ - -/* png_time is a way to hold the time in an machine independent way. - * Two conversions are provided, both from time_t and struct tm. There - * is no portable way to convert to either of these structures, as far - * as I know. If you know of a portable way, send it to me. As a side - * note - PNG has always been Year 2000 compliant! - */ -typedef struct png_time_struct -{ - png_uint_16 year; /* full year, as in, 1995 */ - png_byte month; /* month of year, 1 - 12 */ - png_byte day; /* day of month, 1 - 31 */ - png_byte hour; /* hour of day, 0 - 23 */ - png_byte minute; /* minute of hour, 0 - 59 */ - png_byte second; /* second of minute, 0 - 60 (for leap seconds) */ -} png_time; -typedef png_time * png_timep; -typedef const png_time * png_const_timep; -typedef png_time * * png_timepp; - -#if defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED) ||\ - defined(PNG_USER_CHUNKS_SUPPORTED) -/* png_unknown_chunk is a structure to hold queued chunks for which there is - * no specific support. The idea is that we can use this to queue - * up private chunks for output even though the library doesn't actually - * know about their semantics. - * - * The data in the structure is set by libpng on read and used on write. - */ -typedef struct png_unknown_chunk_t -{ - png_byte name[5]; /* Textual chunk name with '\0' terminator */ - png_byte *data; /* Data, should not be modified on read! */ - size_t size; - - /* On write 'location' must be set using the flag values listed below. - * Notice that on read it is set by libpng however the values stored have - * more bits set than are listed below. Always treat the value as a - * bitmask. On write set only one bit - setting multiple bits may cause the - * chunk to be written in multiple places. - */ - png_byte location; /* mode of operation at read time */ -} -png_unknown_chunk; - -typedef png_unknown_chunk * png_unknown_chunkp; -typedef const png_unknown_chunk * png_const_unknown_chunkp; -typedef png_unknown_chunk * * png_unknown_chunkpp; -#endif - -/* Flag values for the unknown chunk location byte. */ -#define PNG_HAVE_IHDR 0x01 -#define PNG_HAVE_PLTE 0x02 -#define PNG_AFTER_IDAT 0x08 - -/* Maximum positive integer used in PNG is (2^31)-1 */ -#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL) -#define PNG_UINT_32_MAX ((png_uint_32)(-1)) -#define PNG_SIZE_MAX ((size_t)(-1)) - -/* These are constants for fixed point values encoded in the - * PNG specification manner (x100000) - */ -#define PNG_FP_1 100000 -#define PNG_FP_HALF 50000 -#define PNG_FP_MAX ((png_fixed_point)0x7fffffffL) -#define PNG_FP_MIN (-PNG_FP_MAX) - -/* These describe the color_type field in png_info. */ -/* color type masks */ -#define PNG_COLOR_MASK_PALETTE 1 -#define PNG_COLOR_MASK_COLOR 2 -#define PNG_COLOR_MASK_ALPHA 4 - -/* color types. Note that not all combinations are legal */ -#define PNG_COLOR_TYPE_GRAY 0 -#define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE) -#define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR) -#define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA) -#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA) -/* aliases */ -#define PNG_COLOR_TYPE_RGBA PNG_COLOR_TYPE_RGB_ALPHA -#define PNG_COLOR_TYPE_GA PNG_COLOR_TYPE_GRAY_ALPHA - -/* This is for compression type. PNG 1.0-1.2 only define the single type. */ -#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */ -#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE - -/* This is for filter type. PNG 1.0-1.2 only define the single type. */ -#define PNG_FILTER_TYPE_BASE 0 /* Single row per-byte filtering */ -#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */ -#define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE - -/* These are for the interlacing type. These values should NOT be changed. */ -#define PNG_INTERLACE_NONE 0 /* Non-interlaced image */ -#define PNG_INTERLACE_ADAM7 1 /* Adam7 interlacing */ -#define PNG_INTERLACE_LAST 2 /* Not a valid value */ - -/* These are for the oFFs chunk. These values should NOT be changed. */ -#define PNG_OFFSET_PIXEL 0 /* Offset in pixels */ -#define PNG_OFFSET_MICROMETER 1 /* Offset in micrometers (1/10^6 meter) */ -#define PNG_OFFSET_LAST 2 /* Not a valid value */ - -/* These are for the pCAL chunk. These values should NOT be changed. */ -#define PNG_EQUATION_LINEAR 0 /* Linear transformation */ -#define PNG_EQUATION_BASE_E 1 /* Exponential base e transform */ -#define PNG_EQUATION_ARBITRARY 2 /* Arbitrary base exponential transform */ -#define PNG_EQUATION_HYPERBOLIC 3 /* Hyperbolic sine transformation */ -#define PNG_EQUATION_LAST 4 /* Not a valid value */ - -/* These are for the sCAL chunk. These values should NOT be changed. */ -#define PNG_SCALE_UNKNOWN 0 /* unknown unit (image scale) */ -#define PNG_SCALE_METER 1 /* meters per pixel */ -#define PNG_SCALE_RADIAN 2 /* radians per pixel */ -#define PNG_SCALE_LAST 3 /* Not a valid value */ - -/* These are for the pHYs chunk. These values should NOT be changed. */ -#define PNG_RESOLUTION_UNKNOWN 0 /* pixels/unknown unit (aspect ratio) */ -#define PNG_RESOLUTION_METER 1 /* pixels/meter */ -#define PNG_RESOLUTION_LAST 2 /* Not a valid value */ - -/* These are for the sRGB chunk. These values should NOT be changed. */ -#define PNG_sRGB_INTENT_PERCEPTUAL 0 -#define PNG_sRGB_INTENT_RELATIVE 1 -#define PNG_sRGB_INTENT_SATURATION 2 -#define PNG_sRGB_INTENT_ABSOLUTE 3 -#define PNG_sRGB_INTENT_LAST 4 /* Not a valid value */ - -/* This is for text chunks */ -#define PNG_KEYWORD_MAX_LENGTH 79 - -/* Maximum number of entries in PLTE/sPLT/tRNS arrays */ -#define PNG_MAX_PALETTE_LENGTH 256 - -/* These determine if an ancillary chunk's data has been successfully read - * from the PNG header, or if the application has filled in the corresponding - * data in the info_struct to be written into the output file. The values - * of the PNG_INFO_ defines should NOT be changed. - */ -#define PNG_INFO_gAMA 0x0001U -#define PNG_INFO_sBIT 0x0002U -#define PNG_INFO_cHRM 0x0004U -#define PNG_INFO_PLTE 0x0008U -#define PNG_INFO_tRNS 0x0010U -#define PNG_INFO_bKGD 0x0020U -#define PNG_INFO_hIST 0x0040U -#define PNG_INFO_pHYs 0x0080U -#define PNG_INFO_oFFs 0x0100U -#define PNG_INFO_tIME 0x0200U -#define PNG_INFO_pCAL 0x0400U -#define PNG_INFO_sRGB 0x0800U /* GR-P, 0.96a */ -#define PNG_INFO_iCCP 0x1000U /* ESR, 1.0.6 */ -#define PNG_INFO_sPLT 0x2000U /* ESR, 1.0.6 */ -#define PNG_INFO_sCAL 0x4000U /* ESR, 1.0.6 */ -#define PNG_INFO_IDAT 0x8000U /* ESR, 1.0.6 */ -#define PNG_INFO_eXIf 0x10000U /* GR-P, 1.6.31 */ - -/* This is used for the transformation routines, as some of them - * change these values for the row. It also should enable using - * the routines for other purposes. - */ -typedef struct png_row_info_struct -{ - png_uint_32 width; /* width of row */ - size_t rowbytes; /* number of bytes in row */ - png_byte color_type; /* color type of row */ - png_byte bit_depth; /* bit depth of row */ - png_byte channels; /* number of channels (1, 2, 3, or 4) */ - png_byte pixel_depth; /* bits per pixel (depth * channels) */ -} png_row_info; - -typedef png_row_info * png_row_infop; -typedef png_row_info * * png_row_infopp; - -/* These are the function types for the I/O functions and for the functions - * that allow the user to override the default I/O functions with his or her - * own. The png_error_ptr type should match that of user-supplied warning - * and error functions, while the png_rw_ptr type should match that of the - * user read/write data functions. Note that the 'write' function must not - * modify the buffer it is passed. The 'read' function, on the other hand, is - * expected to return the read data in the buffer. - */ -typedef PNG_CALLBACK(void, *png_error_ptr, (png_structp, png_const_charp)); -typedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, size_t)); -typedef PNG_CALLBACK(void, *png_flush_ptr, (png_structp)); -typedef PNG_CALLBACK(void, *png_read_status_ptr, (png_structp, png_uint_32, - int)); -typedef PNG_CALLBACK(void, *png_write_status_ptr, (png_structp, png_uint_32, - int)); - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop)); -typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop)); - -/* The following callback receives png_uint_32 row_number, int pass for the - * png_bytep data of the row. When transforming an interlaced image the - * row number is the row number within the sub-image of the interlace pass, so - * the value will increase to the height of the sub-image (not the full image) - * then reset to 0 for the next pass. - * - * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to - * find the output pixel (x,y) given an interlaced sub-image pixel - * (row,col,pass). (See below for these macros.) - */ -typedef PNG_CALLBACK(void, *png_progressive_row_ptr, (png_structp, png_bytep, - png_uint_32, int)); -#endif - -#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ - defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) -typedef PNG_CALLBACK(void, *png_user_transform_ptr, (png_structp, png_row_infop, - png_bytep)); -#endif - -#ifdef PNG_USER_CHUNKS_SUPPORTED -typedef PNG_CALLBACK(int, *png_user_chunk_ptr, (png_structp, - png_unknown_chunkp)); -#endif -#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED -/* not used anywhere */ -/* typedef PNG_CALLBACK(void, *png_unknown_chunk_ptr, (png_structp)); */ -#endif - -#ifdef PNG_SETJMP_SUPPORTED -/* This must match the function definition in , and the application - * must include this before png.h to obtain the definition of jmp_buf. The - * function is required to be PNG_NORETURN, but this is not checked. If the - * function does return the application will crash via an abort() or similar - * system level call. - * - * If you get a warning here while building the library you may need to make - * changes to ensure that pnglibconf.h records the calling convention used by - * your compiler. This may be very difficult - try using a different compiler - * to build the library! - */ -PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef); -#endif - -/* Transform masks for the high-level interface */ -#define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */ -#define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */ -#define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */ -#define PNG_TRANSFORM_PACKING 0x0004 /* read and write */ -#define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */ -#define PNG_TRANSFORM_EXPAND 0x0010 /* read only */ -#define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */ -#define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */ -#define PNG_TRANSFORM_BGR 0x0080 /* read and write */ -#define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ -#define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ -#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ -#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* write only */ -/* Added to libpng-1.2.34 */ -#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER -#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */ -/* Added to libpng-1.4.0 */ -#define PNG_TRANSFORM_GRAY_TO_RGB 0x2000 /* read only */ -/* Added to libpng-1.5.4 */ -#define PNG_TRANSFORM_EXPAND_16 0x4000 /* read only */ -#if INT_MAX >= 0x8000 /* else this might break */ -#define PNG_TRANSFORM_SCALE_16 0x8000 /* read only */ -#endif - -/* Flags for MNG supported features */ -#define PNG_FLAG_MNG_EMPTY_PLTE 0x01 -#define PNG_FLAG_MNG_FILTER_64 0x04 -#define PNG_ALL_MNG_FEATURES 0x05 - -/* NOTE: prior to 1.5 these functions had no 'API' style declaration, - * this allowed the zlib default functions to be used on Windows - * platforms. In 1.5 the zlib default malloc (which just calls malloc and - * ignores the first argument) should be completely compatible with the - * following. - */ -typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp, - png_alloc_size_t)); -typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp)); - -/* Section 4: exported functions - * Here are the function definitions most commonly used. This is not - * the place to find out how to use libpng. See libpng-manual.txt for the - * full explanation, see example.c for the summary. This just provides - * a simple one line description of the use of each function. - * - * The PNG_EXPORT() and PNG_EXPORTA() macros used below are defined in - * pngconf.h and in the *.dfn files in the scripts directory. - * - * PNG_EXPORT(ordinal, type, name, (args)); - * - * ordinal: ordinal that is used while building - * *.def files. The ordinal value is only - * relevant when preprocessing png.h with - * the *.dfn files for building symbol table - * entries, and are removed by pngconf.h. - * type: return type of the function - * name: function name - * args: function arguments, with types - * - * When we wish to append attributes to a function prototype we use - * the PNG_EXPORTA() macro instead. - * - * PNG_EXPORTA(ordinal, type, name, (args), attributes); - * - * ordinal, type, name, and args: same as in PNG_EXPORT(). - * attributes: function attributes - */ - -/* Returns the version number of the library */ -PNG_EXPORT(1, png_uint_32, png_access_version_number, (void)); - -/* Tell lib we have already handled the first magic bytes. - * Handling more than 8 bytes from the beginning of the file is an error. - */ -PNG_EXPORT(2, void, png_set_sig_bytes, (png_structrp png_ptr, int num_bytes)); - -/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a - * PNG file. Returns zero if the supplied bytes match the 8-byte PNG - * signature, and non-zero otherwise. Having num_to_check == 0 or - * start > 7 will always fail (ie return non-zero). - */ -PNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, size_t start, - size_t num_to_check)); - -/* Simple signature checking function. This is the same as calling - * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n). - */ -#define png_check_sig(sig, n) !png_sig_cmp((sig), 0, (n)) - -/* Allocate and initialize png_ptr struct for reading, and any other memory. */ -PNG_EXPORTA(4, png_structp, png_create_read_struct, - (png_const_charp user_png_ver, png_voidp error_ptr, - png_error_ptr error_fn, png_error_ptr warn_fn), - PNG_ALLOCATED); - -/* Allocate and initialize png_ptr struct for writing, and any other memory */ -PNG_EXPORTA(5, png_structp, png_create_write_struct, - (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, - png_error_ptr warn_fn), - PNG_ALLOCATED); - -PNG_EXPORT(6, size_t, png_get_compression_buffer_size, - (png_const_structrp png_ptr)); - -PNG_EXPORT(7, void, png_set_compression_buffer_size, (png_structrp png_ptr, - size_t size)); - -/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp - * match up. - */ -#ifdef PNG_SETJMP_SUPPORTED -/* This function returns the jmp_buf built in to *png_ptr. It must be - * supplied with an appropriate 'longjmp' function to use on that jmp_buf - * unless the default error function is overridden in which case NULL is - * acceptable. The size of the jmp_buf is checked against the actual size - * allocated by the library - the call will return NULL on a mismatch - * indicating an ABI mismatch. - */ -PNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn, (png_structrp png_ptr, - png_longjmp_ptr longjmp_fn, size_t jmp_buf_size)); -# define png_jmpbuf(png_ptr) \ - (*png_set_longjmp_fn((png_ptr), longjmp, (sizeof (jmp_buf)))) -#else -# define png_jmpbuf(png_ptr) \ - (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP) -#endif -/* This function should be used by libpng applications in place of - * longjmp(png_ptr->jmpbuf, val). If longjmp_fn() has been set, it - * will use it; otherwise it will call PNG_ABORT(). This function was - * added in libpng-1.5.0. - */ -PNG_EXPORTA(9, void, png_longjmp, (png_const_structrp png_ptr, int val), - PNG_NORETURN); - -#ifdef PNG_READ_SUPPORTED -/* Reset the compression stream */ -PNG_EXPORTA(10, int, png_reset_zstream, (png_structrp png_ptr), PNG_DEPRECATED); -#endif - -/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ -#ifdef PNG_USER_MEM_SUPPORTED -PNG_EXPORTA(11, png_structp, png_create_read_struct_2, - (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, - png_error_ptr warn_fn, - png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn), - PNG_ALLOCATED); -PNG_EXPORTA(12, png_structp, png_create_write_struct_2, - (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, - png_error_ptr warn_fn, - png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn), - PNG_ALLOCATED); -#endif - -/* Write the PNG file signature. */ -PNG_EXPORT(13, void, png_write_sig, (png_structrp png_ptr)); - -/* Write a PNG chunk - size, type, (optional) data, CRC. */ -PNG_EXPORT(14, void, png_write_chunk, (png_structrp png_ptr, png_const_bytep - chunk_name, png_const_bytep data, size_t length)); - -/* Write the start of a PNG chunk - length and chunk name. */ -PNG_EXPORT(15, void, png_write_chunk_start, (png_structrp png_ptr, - png_const_bytep chunk_name, png_uint_32 length)); - -/* Write the data of a PNG chunk started with png_write_chunk_start(). */ -PNG_EXPORT(16, void, png_write_chunk_data, (png_structrp png_ptr, - png_const_bytep data, size_t length)); - -/* Finish a chunk started with png_write_chunk_start() (includes CRC). */ -PNG_EXPORT(17, void, png_write_chunk_end, (png_structrp png_ptr)); - -/* Allocate and initialize the info structure */ -PNG_EXPORTA(18, png_infop, png_create_info_struct, (png_const_structrp png_ptr), - PNG_ALLOCATED); - -/* DEPRECATED: this function allowed init structures to be created using the - * default allocation method (typically malloc). Use is deprecated in 1.6.0 and - * the API will be removed in the future. - */ -PNG_EXPORTA(19, void, png_info_init_3, (png_infopp info_ptr, - size_t png_info_struct_size), PNG_DEPRECATED); - -/* Writes all the PNG information before the image. */ -PNG_EXPORT(20, void, png_write_info_before_PLTE, - (png_structrp png_ptr, png_const_inforp info_ptr)); -PNG_EXPORT(21, void, png_write_info, - (png_structrp png_ptr, png_const_inforp info_ptr)); - -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -/* Read the information before the actual image data. */ -PNG_EXPORT(22, void, png_read_info, - (png_structrp png_ptr, png_inforp info_ptr)); -#endif - -#ifdef PNG_TIME_RFC1123_SUPPORTED - /* Convert to a US string format: there is no localization support in this - * routine. The original implementation used a 29 character buffer in - * png_struct, this will be removed in future versions. - */ -#if PNG_LIBPNG_VER < 10700 -/* To do: remove this from libpng17 (and from libpng17/png.c and pngstruct.h) */ -PNG_EXPORTA(23, png_const_charp, png_convert_to_rfc1123, (png_structrp png_ptr, - png_const_timep ptime),PNG_DEPRECATED); -#endif -PNG_EXPORT(241, int, png_convert_to_rfc1123_buffer, (char out[29], - png_const_timep ptime)); -#endif - -#ifdef PNG_CONVERT_tIME_SUPPORTED -/* Convert from a struct tm to png_time */ -PNG_EXPORT(24, void, png_convert_from_struct_tm, (png_timep ptime, - const struct tm * ttime)); - -/* Convert from time_t to png_time. Uses gmtime() */ -PNG_EXPORT(25, void, png_convert_from_time_t, (png_timep ptime, time_t ttime)); -#endif /* CONVERT_tIME */ - -#ifdef PNG_READ_EXPAND_SUPPORTED -/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ -PNG_EXPORT(26, void, png_set_expand, (png_structrp png_ptr)); -PNG_EXPORT(27, void, png_set_expand_gray_1_2_4_to_8, (png_structrp png_ptr)); -PNG_EXPORT(28, void, png_set_palette_to_rgb, (png_structrp png_ptr)); -PNG_EXPORT(29, void, png_set_tRNS_to_alpha, (png_structrp png_ptr)); -#endif - -#ifdef PNG_READ_EXPAND_16_SUPPORTED -/* Expand to 16-bit channels, forces conversion of palette to RGB and expansion - * of a tRNS chunk if present. - */ -PNG_EXPORT(221, void, png_set_expand_16, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) -/* Use blue, green, red order for pixels. */ -PNG_EXPORT(30, void, png_set_bgr, (png_structrp png_ptr)); -#endif - -#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED -/* Expand the grayscale to 24-bit RGB if necessary. */ -PNG_EXPORT(31, void, png_set_gray_to_rgb, (png_structrp png_ptr)); -#endif - -#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED -/* Reduce RGB to grayscale. */ -#define PNG_ERROR_ACTION_NONE 1 -#define PNG_ERROR_ACTION_WARN 2 -#define PNG_ERROR_ACTION_ERROR 3 -#define PNG_RGB_TO_GRAY_DEFAULT (-1)/*for red/green coefficients*/ - -PNG_FP_EXPORT(32, void, png_set_rgb_to_gray, (png_structrp png_ptr, - int error_action, double red, double green)) -PNG_FIXED_EXPORT(33, void, png_set_rgb_to_gray_fixed, (png_structrp png_ptr, - int error_action, png_fixed_point red, png_fixed_point green)) - -PNG_EXPORT(34, png_byte, png_get_rgb_to_gray_status, (png_const_structrp - png_ptr)); -#endif - -#ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED -PNG_EXPORT(35, void, png_build_grayscale_palette, (int bit_depth, - png_colorp palette)); -#endif - -#ifdef PNG_READ_ALPHA_MODE_SUPPORTED -/* How the alpha channel is interpreted - this affects how the color channels - * of a PNG file are returned to the calling application when an alpha channel, - * or a tRNS chunk in a palette file, is present. - * - * This has no effect on the way pixels are written into a PNG output - * datastream. The color samples in a PNG datastream are never premultiplied - * with the alpha samples. - * - * The default is to return data according to the PNG specification: the alpha - * channel is a linear measure of the contribution of the pixel to the - * corresponding composited pixel, and the color channels are unassociated - * (not premultiplied). The gamma encoded color channels must be scaled - * according to the contribution and to do this it is necessary to undo - * the encoding, scale the color values, perform the composition and re-encode - * the values. This is the 'PNG' mode. - * - * The alternative is to 'associate' the alpha with the color information by - * storing color channel values that have been scaled by the alpha. - * image. These are the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' modes - * (the latter being the two common names for associated alpha color channels). - * - * For the 'OPTIMIZED' mode, a pixel is treated as opaque only if the alpha - * value is equal to the maximum value. - * - * The final choice is to gamma encode the alpha channel as well. This is - * broken because, in practice, no implementation that uses this choice - * correctly undoes the encoding before handling alpha composition. Use this - * choice only if other serious errors in the software or hardware you use - * mandate it; the typical serious error is for dark halos to appear around - * opaque areas of the composited PNG image because of arithmetic overflow. - * - * The API function png_set_alpha_mode specifies which of these choices to use - * with an enumerated 'mode' value and the gamma of the required output: - */ -#define PNG_ALPHA_PNG 0 /* according to the PNG standard */ -#define PNG_ALPHA_STANDARD 1 /* according to Porter/Duff */ -#define PNG_ALPHA_ASSOCIATED 1 /* as above; this is the normal practice */ -#define PNG_ALPHA_PREMULTIPLIED 1 /* as above */ -#define PNG_ALPHA_OPTIMIZED 2 /* 'PNG' for opaque pixels, else 'STANDARD' */ -#define PNG_ALPHA_BROKEN 3 /* the alpha channel is gamma encoded */ - -PNG_FP_EXPORT(227, void, png_set_alpha_mode, (png_structrp png_ptr, int mode, - double output_gamma)) -PNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed, (png_structrp png_ptr, - int mode, png_fixed_point output_gamma)) -#endif - -#if defined(PNG_GAMMA_SUPPORTED) || defined(PNG_READ_ALPHA_MODE_SUPPORTED) -/* The output_gamma value is a screen gamma in libpng terminology: it expresses - * how to decode the output values, not how they are encoded. - */ -#define PNG_DEFAULT_sRGB -1 /* sRGB gamma and color space */ -#define PNG_GAMMA_MAC_18 -2 /* Old Mac '1.8' gamma and color space */ -#define PNG_GAMMA_sRGB 220000 /* Television standards--matches sRGB gamma */ -#define PNG_GAMMA_LINEAR PNG_FP_1 /* Linear */ -#endif - -/* The following are examples of calls to png_set_alpha_mode to achieve the - * required overall gamma correction and, where necessary, alpha - * premultiplication. - * - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); - * This is the default libpng handling of the alpha channel - it is not - * pre-multiplied into the color components. In addition the call states - * that the output is for a sRGB system and causes all PNG files without gAMA - * chunks to be assumed to be encoded using sRGB. - * - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); - * In this case the output is assumed to be something like an sRGB conformant - * display preceded by a power-law lookup table of power 1.45. This is how - * early Mac systems behaved. - * - * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR); - * This is the classic Jim Blinn approach and will work in academic - * environments where everything is done by the book. It has the shortcoming - * of assuming that input PNG data with no gamma information is linear - this - * is unlikely to be correct unless the PNG files where generated locally. - * Most of the time the output precision will be so low as to show - * significant banding in dark areas of the image. - * - * png_set_expand_16(pp); - * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB); - * This is a somewhat more realistic Jim Blinn inspired approach. PNG files - * are assumed to have the sRGB encoding if not marked with a gamma value and - * the output is always 16 bits per component. This permits accurate scaling - * and processing of the data. If you know that your input PNG files were - * generated locally you might need to replace PNG_DEFAULT_sRGB with the - * correct value for your system. - * - * png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB); - * If you just need to composite the PNG image onto an existing background - * and if you control the code that does this you can use the optimization - * setting. In this case you just copy completely opaque pixels to the - * output. For pixels that are not completely transparent (you just skip - * those) you do the composition math using png_composite or png_composite_16 - * below then encode the resultant 8-bit or 16-bit values to match the output - * encoding. - * - * Other cases - * If neither the PNG nor the standard linear encoding work for you because - * of the software or hardware you use then you have a big problem. The PNG - * case will probably result in halos around the image. The linear encoding - * will probably result in a washed out, too bright, image (it's actually too - * contrasty.) Try the ALPHA_OPTIMIZED mode above - this will probably - * substantially reduce the halos. Alternatively try: - * - * png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB); - * This option will also reduce the halos, but there will be slight dark - * halos round the opaque parts of the image where the background is light. - * In the OPTIMIZED mode the halos will be light halos where the background - * is dark. Take your pick - the halos are unavoidable unless you can get - * your hardware/software fixed! (The OPTIMIZED approach is slightly - * faster.) - * - * When the default gamma of PNG files doesn't match the output gamma. - * If you have PNG files with no gamma information png_set_alpha_mode allows - * you to provide a default gamma, but it also sets the output gamma to the - * matching value. If you know your PNG files have a gamma that doesn't - * match the output you can take advantage of the fact that - * png_set_alpha_mode always sets the output gamma but only sets the PNG - * default if it is not already set: - * - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); - * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); - * The first call sets both the default and the output gamma values, the - * second call overrides the output gamma without changing the default. This - * is easier than achieving the same effect with png_set_gamma. You must use - * PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will - * fire if more than one call to png_set_alpha_mode and png_set_background is - * made in the same read operation, however multiple calls with PNG_ALPHA_PNG - * are ignored. - */ - -#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED -PNG_EXPORT(36, void, png_set_strip_alpha, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ - defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) -PNG_EXPORT(37, void, png_set_swap_alpha, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ - defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) -PNG_EXPORT(38, void, png_set_invert_alpha, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) -/* Add a filler byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */ -PNG_EXPORT(39, void, png_set_filler, (png_structrp png_ptr, png_uint_32 filler, - int flags)); -/* The values of the PNG_FILLER_ defines should NOT be changed */ -# define PNG_FILLER_BEFORE 0 -# define PNG_FILLER_AFTER 1 -/* Add an alpha byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */ -PNG_EXPORT(40, void, png_set_add_alpha, (png_structrp png_ptr, - png_uint_32 filler, int flags)); -#endif /* READ_FILLER || WRITE_FILLER */ - -#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) -/* Swap bytes in 16-bit depth files. */ -PNG_EXPORT(41, void, png_set_swap, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) -/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ -PNG_EXPORT(42, void, png_set_packing, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \ - defined(PNG_WRITE_PACKSWAP_SUPPORTED) -/* Swap packing order of pixels in bytes. */ -PNG_EXPORT(43, void, png_set_packswap, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) -/* Converts files to legal bit depths. */ -PNG_EXPORT(44, void, png_set_shift, (png_structrp png_ptr, png_const_color_8p - true_bits)); -#endif - -#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ - defined(PNG_WRITE_INTERLACING_SUPPORTED) -/* Have the code handle the interlacing. Returns the number of passes. - * MUST be called before png_read_update_info or png_start_read_image, - * otherwise it will not have the desired effect. Note that it is still - * necessary to call png_read_row or png_read_rows png_get_image_height - * times for each pass. -*/ -PNG_EXPORT(45, int, png_set_interlace_handling, (png_structrp png_ptr)); -#endif - -#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) -/* Invert monochrome files */ -PNG_EXPORT(46, void, png_set_invert_mono, (png_structrp png_ptr)); -#endif - -#ifdef PNG_READ_BACKGROUND_SUPPORTED -/* Handle alpha and tRNS by replacing with a background color. Prior to - * libpng-1.5.4 this API must not be called before the PNG file header has been - * read. Doing so will result in unexpected behavior and possible warnings or - * errors if the PNG file contains a bKGD chunk. - */ -PNG_FP_EXPORT(47, void, png_set_background, (png_structrp png_ptr, - png_const_color_16p background_color, int background_gamma_code, - int need_expand, double background_gamma)) -PNG_FIXED_EXPORT(215, void, png_set_background_fixed, (png_structrp png_ptr, - png_const_color_16p background_color, int background_gamma_code, - int need_expand, png_fixed_point background_gamma)) -#endif -#ifdef PNG_READ_BACKGROUND_SUPPORTED -# define PNG_BACKGROUND_GAMMA_UNKNOWN 0 -# define PNG_BACKGROUND_GAMMA_SCREEN 1 -# define PNG_BACKGROUND_GAMMA_FILE 2 -# define PNG_BACKGROUND_GAMMA_UNIQUE 3 -#endif - -#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED -/* Scale a 16-bit depth file down to 8-bit, accurately. */ -PNG_EXPORT(229, void, png_set_scale_16, (png_structrp png_ptr)); -#endif - -#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED -#define PNG_READ_16_TO_8_SUPPORTED /* Name prior to 1.5.4 */ -/* Strip the second byte of information from a 16-bit depth file. */ -PNG_EXPORT(48, void, png_set_strip_16, (png_structrp png_ptr)); -#endif - -#ifdef PNG_READ_QUANTIZE_SUPPORTED -/* Turn on quantizing, and reduce the palette to the number of colors - * available. - */ -PNG_EXPORT(49, void, png_set_quantize, (png_structrp png_ptr, - png_colorp palette, int num_palette, int maximum_colors, - png_const_uint_16p histogram, int full_quantize)); -#endif - -#ifdef PNG_READ_GAMMA_SUPPORTED -/* The threshold on gamma processing is configurable but hard-wired into the - * library. The following is the floating point variant. - */ -#define PNG_GAMMA_THRESHOLD (PNG_GAMMA_THRESHOLD_FIXED*.00001) - -/* Handle gamma correction. Screen_gamma=(display_exponent). - * NOTE: this API simply sets the screen and file gamma values. It will - * therefore override the value for gamma in a PNG file if it is called after - * the file header has been read - use with care - call before reading the PNG - * file for best results! - * - * These routines accept the same gamma values as png_set_alpha_mode (described - * above). The PNG_GAMMA_ defines and PNG_DEFAULT_sRGB can be passed to either - * API (floating point or fixed.) Notice, however, that the 'file_gamma' value - * is the inverse of a 'screen gamma' value. - */ -PNG_FP_EXPORT(50, void, png_set_gamma, (png_structrp png_ptr, - double screen_gamma, double override_file_gamma)) -PNG_FIXED_EXPORT(208, void, png_set_gamma_fixed, (png_structrp png_ptr, - png_fixed_point screen_gamma, png_fixed_point override_file_gamma)) -#endif - -#ifdef PNG_WRITE_FLUSH_SUPPORTED -/* Set how many lines between output flushes - 0 for no flushing */ -PNG_EXPORT(51, void, png_set_flush, (png_structrp png_ptr, int nrows)); -/* Flush the current PNG output buffer */ -PNG_EXPORT(52, void, png_write_flush, (png_structrp png_ptr)); -#endif - -/* Optional update palette with requested transformations */ -PNG_EXPORT(53, void, png_start_read_image, (png_structrp png_ptr)); - -/* Optional call to update the users info structure */ -PNG_EXPORT(54, void, png_read_update_info, (png_structrp png_ptr, - png_inforp info_ptr)); - -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -/* Read one or more rows of image data. */ -PNG_EXPORT(55, void, png_read_rows, (png_structrp png_ptr, png_bytepp row, - png_bytepp display_row, png_uint_32 num_rows)); -#endif - -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -/* Read a row of data. */ -PNG_EXPORT(56, void, png_read_row, (png_structrp png_ptr, png_bytep row, - png_bytep display_row)); -#endif - -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -/* Read the whole image into memory at once. */ -PNG_EXPORT(57, void, png_read_image, (png_structrp png_ptr, png_bytepp image)); -#endif - -/* Write a row of image data */ -PNG_EXPORT(58, void, png_write_row, (png_structrp png_ptr, - png_const_bytep row)); - -/* Write a few rows of image data: (*row) is not written; however, the type - * is declared as writeable to maintain compatibility with previous versions - * of libpng and to allow the 'display_row' array from read_rows to be passed - * unchanged to write_rows. - */ -PNG_EXPORT(59, void, png_write_rows, (png_structrp png_ptr, png_bytepp row, - png_uint_32 num_rows)); - -/* Write the image data */ -PNG_EXPORT(60, void, png_write_image, (png_structrp png_ptr, png_bytepp image)); - -/* Write the end of the PNG file. */ -PNG_EXPORT(61, void, png_write_end, (png_structrp png_ptr, - png_inforp info_ptr)); - -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -/* Read the end of the PNG file. */ -PNG_EXPORT(62, void, png_read_end, (png_structrp png_ptr, png_inforp info_ptr)); -#endif - -/* Free any memory associated with the png_info_struct */ -PNG_EXPORT(63, void, png_destroy_info_struct, (png_const_structrp png_ptr, - png_infopp info_ptr_ptr)); - -/* Free any memory associated with the png_struct and the png_info_structs */ -PNG_EXPORT(64, void, png_destroy_read_struct, (png_structpp png_ptr_ptr, - png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); - -/* Free any memory associated with the png_struct and the png_info_structs */ -PNG_EXPORT(65, void, png_destroy_write_struct, (png_structpp png_ptr_ptr, - png_infopp info_ptr_ptr)); - -/* Set the libpng method of handling chunk CRC errors */ -PNG_EXPORT(66, void, png_set_crc_action, (png_structrp png_ptr, int crit_action, - int ancil_action)); - -/* Values for png_set_crc_action() say how to handle CRC errors in - * ancillary and critical chunks, and whether to use the data contained - * therein. Note that it is impossible to "discard" data in a critical - * chunk. For versions prior to 0.90, the action was always error/quit, - * whereas in version 0.90 and later, the action for CRC errors in ancillary - * chunks is warn/discard. These values should NOT be changed. - * - * value action:critical action:ancillary - */ -#define PNG_CRC_DEFAULT 0 /* error/quit warn/discard data */ -#define PNG_CRC_ERROR_QUIT 1 /* error/quit error/quit */ -#define PNG_CRC_WARN_DISCARD 2 /* (INVALID) warn/discard data */ -#define PNG_CRC_WARN_USE 3 /* warn/use data warn/use data */ -#define PNG_CRC_QUIET_USE 4 /* quiet/use data quiet/use data */ -#define PNG_CRC_NO_CHANGE 5 /* use current value use current value */ - -#ifdef PNG_WRITE_SUPPORTED -/* These functions give the user control over the scan-line filtering in - * libpng and the compression methods used by zlib. These functions are - * mainly useful for testing, as the defaults should work with most users. - * Those users who are tight on memory or want faster performance at the - * expense of compression can modify them. See the compression library - * header file (zlib.h) for an explination of the compression functions. - */ - -/* Set the filtering method(s) used by libpng. Currently, the only valid - * value for "method" is 0. - */ -PNG_EXPORT(67, void, png_set_filter, (png_structrp png_ptr, int method, - int filters)); -#endif /* WRITE */ - -/* Flags for png_set_filter() to say which filters to use. The flags - * are chosen so that they don't conflict with real filter types - * below, in case they are supplied instead of the #defined constants. - * These values should NOT be changed. - */ -#define PNG_NO_FILTERS 0x00 -#define PNG_FILTER_NONE 0x08 -#define PNG_FILTER_SUB 0x10 -#define PNG_FILTER_UP 0x20 -#define PNG_FILTER_AVG 0x40 -#define PNG_FILTER_PAETH 0x80 -#define PNG_FAST_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP) -#define PNG_ALL_FILTERS (PNG_FAST_FILTERS | PNG_FILTER_AVG | PNG_FILTER_PAETH) - -/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now. - * These defines should NOT be changed. - */ -#define PNG_FILTER_VALUE_NONE 0 -#define PNG_FILTER_VALUE_SUB 1 -#define PNG_FILTER_VALUE_UP 2 -#define PNG_FILTER_VALUE_AVG 3 -#define PNG_FILTER_VALUE_PAETH 4 -#define PNG_FILTER_VALUE_LAST 5 - -#ifdef PNG_WRITE_SUPPORTED -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* DEPRECATED */ -PNG_FP_EXPORT(68, void, png_set_filter_heuristics, (png_structrp png_ptr, - int heuristic_method, int num_weights, png_const_doublep filter_weights, - png_const_doublep filter_costs)) -PNG_FIXED_EXPORT(209, void, png_set_filter_heuristics_fixed, - (png_structrp png_ptr, int heuristic_method, int num_weights, - png_const_fixed_point_p filter_weights, - png_const_fixed_point_p filter_costs)) -#endif /* WRITE_WEIGHTED_FILTER */ - -/* The following are no longer used and will be removed from libpng-1.7: */ -#define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */ -#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */ -#define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */ -#define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */ - -/* Set the library compression level. Currently, valid values range from - * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 - * (0 - no compression, 9 - "maximal" compression). Note that tests have - * shown that zlib compression levels 3-6 usually perform as well as level 9 - * for PNG images, and do considerably fewer caclulations. In the future, - * these values may not correspond directly to the zlib compression levels. - */ -#ifdef PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED -PNG_EXPORT(69, void, png_set_compression_level, (png_structrp png_ptr, - int level)); - -PNG_EXPORT(70, void, png_set_compression_mem_level, (png_structrp png_ptr, - int mem_level)); - -PNG_EXPORT(71, void, png_set_compression_strategy, (png_structrp png_ptr, - int strategy)); - -/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a - * smaller value of window_bits if it can do so safely. - */ -PNG_EXPORT(72, void, png_set_compression_window_bits, (png_structrp png_ptr, - int window_bits)); - -PNG_EXPORT(73, void, png_set_compression_method, (png_structrp png_ptr, - int method)); -#endif /* WRITE_CUSTOMIZE_COMPRESSION */ - -#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED -/* Also set zlib parameters for compressing non-IDAT chunks */ -PNG_EXPORT(222, void, png_set_text_compression_level, (png_structrp png_ptr, - int level)); - -PNG_EXPORT(223, void, png_set_text_compression_mem_level, (png_structrp png_ptr, - int mem_level)); - -PNG_EXPORT(224, void, png_set_text_compression_strategy, (png_structrp png_ptr, - int strategy)); - -/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a - * smaller value of window_bits if it can do so safely. - */ -PNG_EXPORT(225, void, png_set_text_compression_window_bits, - (png_structrp png_ptr, int window_bits)); - -PNG_EXPORT(226, void, png_set_text_compression_method, (png_structrp png_ptr, - int method)); -#endif /* WRITE_CUSTOMIZE_ZTXT_COMPRESSION */ -#endif /* WRITE */ - -/* These next functions are called for input/output, memory, and error - * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, - * and call standard C I/O routines such as fread(), fwrite(), and - * fprintf(). These functions can be made to use other I/O routines - * at run time for those applications that need to handle I/O in a - * different manner by calling png_set_???_fn(). See libpng-manual.txt for - * more information. - */ - -#ifdef PNG_STDIO_SUPPORTED -/* Initialize the input/output for the PNG file to the default functions. */ -PNG_EXPORT(74, void, png_init_io, (png_structrp png_ptr, png_FILE_p fp)); -#endif - -/* Replace the (error and abort), and warning functions with user - * supplied functions. If no messages are to be printed you must still - * write and use replacement functions. The replacement error_fn should - * still do a longjmp to the last setjmp location if you are using this - * method of error handling. If error_fn or warning_fn is NULL, the - * default function will be used. - */ - -PNG_EXPORT(75, void, png_set_error_fn, (png_structrp png_ptr, - png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); - -/* Return the user pointer associated with the error functions */ -PNG_EXPORT(76, png_voidp, png_get_error_ptr, (png_const_structrp png_ptr)); - -/* Replace the default data output functions with a user supplied one(s). - * If buffered output is not used, then output_flush_fn can be set to NULL. - * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time - * output_flush_fn will be ignored (and thus can be NULL). - * It is probably a mistake to use NULL for output_flush_fn if - * write_data_fn is not also NULL unless you have built libpng with - * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's - * default flush function, which uses the standard *FILE structure, will - * be used. - */ -PNG_EXPORT(77, void, png_set_write_fn, (png_structrp png_ptr, png_voidp io_ptr, - png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); - -/* Replace the default data input function with a user supplied one. */ -PNG_EXPORT(78, void, png_set_read_fn, (png_structrp png_ptr, png_voidp io_ptr, - png_rw_ptr read_data_fn)); - -/* Return the user pointer associated with the I/O functions */ -PNG_EXPORT(79, png_voidp, png_get_io_ptr, (png_const_structrp png_ptr)); - -PNG_EXPORT(80, void, png_set_read_status_fn, (png_structrp png_ptr, - png_read_status_ptr read_row_fn)); - -PNG_EXPORT(81, void, png_set_write_status_fn, (png_structrp png_ptr, - png_write_status_ptr write_row_fn)); - -#ifdef PNG_USER_MEM_SUPPORTED -/* Replace the default memory allocation functions with user supplied one(s). */ -PNG_EXPORT(82, void, png_set_mem_fn, (png_structrp png_ptr, png_voidp mem_ptr, - png_malloc_ptr malloc_fn, png_free_ptr free_fn)); -/* Return the user pointer associated with the memory functions */ -PNG_EXPORT(83, png_voidp, png_get_mem_ptr, (png_const_structrp png_ptr)); -#endif - -#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED -PNG_EXPORT(84, void, png_set_read_user_transform_fn, (png_structrp png_ptr, - png_user_transform_ptr read_user_transform_fn)); -#endif - -#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED -PNG_EXPORT(85, void, png_set_write_user_transform_fn, (png_structrp png_ptr, - png_user_transform_ptr write_user_transform_fn)); -#endif - -#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED -PNG_EXPORT(86, void, png_set_user_transform_info, (png_structrp png_ptr, - png_voidp user_transform_ptr, int user_transform_depth, - int user_transform_channels)); -/* Return the user pointer associated with the user transform functions */ -PNG_EXPORT(87, png_voidp, png_get_user_transform_ptr, - (png_const_structrp png_ptr)); -#endif - -#ifdef PNG_USER_TRANSFORM_INFO_SUPPORTED -/* Return information about the row currently being processed. Note that these - * APIs do not fail but will return unexpected results if called outside a user - * transform callback. Also note that when transforming an interlaced image the - * row number is the row number within the sub-image of the interlace pass, so - * the value will increase to the height of the sub-image (not the full image) - * then reset to 0 for the next pass. - * - * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to - * find the output pixel (x,y) given an interlaced sub-image pixel - * (row,col,pass). (See below for these macros.) - */ -PNG_EXPORT(217, png_uint_32, png_get_current_row_number, (png_const_structrp)); -PNG_EXPORT(218, png_byte, png_get_current_pass_number, (png_const_structrp)); -#endif - -#ifdef PNG_READ_USER_CHUNKS_SUPPORTED -/* This callback is called only for *unknown* chunks. If - * PNG_HANDLE_AS_UNKNOWN_SUPPORTED is set then it is possible to set known - * chunks to be treated as unknown, however in this case the callback must do - * any processing required by the chunk (e.g. by calling the appropriate - * png_set_ APIs.) - * - * There is no write support - on write, by default, all the chunks in the - * 'unknown' list are written in the specified position. - * - * The integer return from the callback function is interpreted thus: - * - * negative: An error occurred; png_chunk_error will be called. - * zero: The chunk was not handled, the chunk will be saved. A critical - * chunk will cause an error at this point unless it is to be saved. - * positive: The chunk was handled, libpng will ignore/discard it. - * - * See "INTERACTION WITH USER CHUNK CALLBACKS" below for important notes about - * how this behavior will change in libpng 1.7 - */ -PNG_EXPORT(88, void, png_set_read_user_chunk_fn, (png_structrp png_ptr, - png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); -#endif - -#ifdef PNG_USER_CHUNKS_SUPPORTED -PNG_EXPORT(89, png_voidp, png_get_user_chunk_ptr, (png_const_structrp png_ptr)); -#endif - -#ifdef PNG_PROGRESSIVE_READ_SUPPORTED -/* Sets the function callbacks for the push reader, and a pointer to a - * user-defined structure available to the callback functions. - */ -PNG_EXPORT(90, void, png_set_progressive_read_fn, (png_structrp png_ptr, - png_voidp progressive_ptr, png_progressive_info_ptr info_fn, - png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn)); - -/* Returns the user pointer associated with the push read functions */ -PNG_EXPORT(91, png_voidp, png_get_progressive_ptr, - (png_const_structrp png_ptr)); - -/* Function to be called when data becomes available */ -PNG_EXPORT(92, void, png_process_data, (png_structrp png_ptr, - png_inforp info_ptr, png_bytep buffer, size_t buffer_size)); - -/* A function which may be called *only* within png_process_data to stop the - * processing of any more data. The function returns the number of bytes - * remaining, excluding any that libpng has cached internally. A subsequent - * call to png_process_data must supply these bytes again. If the argument - * 'save' is set to true the routine will first save all the pending data and - * will always return 0. - */ -PNG_EXPORT(219, size_t, png_process_data_pause, (png_structrp, int save)); - -/* A function which may be called *only* outside (after) a call to - * png_process_data. It returns the number of bytes of data to skip in the - * input. Normally it will return 0, but if it returns a non-zero value the - * application must skip than number of bytes of input data and pass the - * following data to the next call to png_process_data. - */ -PNG_EXPORT(220, png_uint_32, png_process_data_skip, (png_structrp)); - -/* Function that combines rows. 'new_row' is a flag that should come from - * the callback and be non-NULL if anything needs to be done; the library - * stores its own version of the new data internally and ignores the passed - * in value. - */ -PNG_EXPORT(93, void, png_progressive_combine_row, (png_const_structrp png_ptr, - png_bytep old_row, png_const_bytep new_row)); -#endif /* PROGRESSIVE_READ */ - -PNG_EXPORTA(94, png_voidp, png_malloc, (png_const_structrp png_ptr, - png_alloc_size_t size), PNG_ALLOCATED); -/* Added at libpng version 1.4.0 */ -PNG_EXPORTA(95, png_voidp, png_calloc, (png_const_structrp png_ptr, - png_alloc_size_t size), PNG_ALLOCATED); - -/* Added at libpng version 1.2.4 */ -PNG_EXPORTA(96, png_voidp, png_malloc_warn, (png_const_structrp png_ptr, - png_alloc_size_t size), PNG_ALLOCATED); - -/* Frees a pointer allocated by png_malloc() */ -PNG_EXPORT(97, void, png_free, (png_const_structrp png_ptr, png_voidp ptr)); - -/* Free data that was allocated internally */ -PNG_EXPORT(98, void, png_free_data, (png_const_structrp png_ptr, - png_inforp info_ptr, png_uint_32 free_me, int num)); - -/* Reassign responsibility for freeing existing data, whether allocated - * by libpng or by the application; this works on the png_info structure passed - * in, it does not change the state for other png_info structures. - * - * It is unlikely that this function works correctly as of 1.6.0 and using it - * may result either in memory leaks or double free of allocated data. - */ -PNG_EXPORT(99, void, png_data_freer, (png_const_structrp png_ptr, - png_inforp info_ptr, int freer, png_uint_32 mask)); - -/* Assignments for png_data_freer */ -#define PNG_DESTROY_WILL_FREE_DATA 1 -#define PNG_SET_WILL_FREE_DATA 1 -#define PNG_USER_WILL_FREE_DATA 2 -/* Flags for png_ptr->free_me and info_ptr->free_me */ -#define PNG_FREE_HIST 0x0008U -#define PNG_FREE_ICCP 0x0010U -#define PNG_FREE_SPLT 0x0020U -#define PNG_FREE_ROWS 0x0040U -#define PNG_FREE_PCAL 0x0080U -#define PNG_FREE_SCAL 0x0100U -#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED -# define PNG_FREE_UNKN 0x0200U -#endif -/* PNG_FREE_LIST 0x0400U removed in 1.6.0 because it is ignored */ -#define PNG_FREE_PLTE 0x1000U -#define PNG_FREE_TRNS 0x2000U -#define PNG_FREE_TEXT 0x4000U -#define PNG_FREE_EXIF 0x8000U /* Added at libpng-1.6.31 */ -#define PNG_FREE_ALL 0xffffU -#define PNG_FREE_MUL 0x4220U /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ - -#ifdef PNG_USER_MEM_SUPPORTED -PNG_EXPORTA(100, png_voidp, png_malloc_default, (png_const_structrp png_ptr, - png_alloc_size_t size), PNG_ALLOCATED PNG_DEPRECATED); -PNG_EXPORTA(101, void, png_free_default, (png_const_structrp png_ptr, - png_voidp ptr), PNG_DEPRECATED); -#endif - -#ifdef PNG_ERROR_TEXT_SUPPORTED -/* Fatal error in PNG image of libpng - can't continue */ -PNG_EXPORTA(102, void, png_error, (png_const_structrp png_ptr, - png_const_charp error_message), PNG_NORETURN); - -/* The same, but the chunk name is prepended to the error string. */ -PNG_EXPORTA(103, void, png_chunk_error, (png_const_structrp png_ptr, - png_const_charp error_message), PNG_NORETURN); - -#else -/* Fatal error in PNG image of libpng - can't continue */ -PNG_EXPORTA(104, void, png_err, (png_const_structrp png_ptr), PNG_NORETURN); -# define png_error(s1,s2) png_err(s1) -# define png_chunk_error(s1,s2) png_err(s1) -#endif - -#ifdef PNG_WARNINGS_SUPPORTED -/* Non-fatal error in libpng. Can continue, but may have a problem. */ -PNG_EXPORT(105, void, png_warning, (png_const_structrp png_ptr, - png_const_charp warning_message)); - -/* Non-fatal error in libpng, chunk name is prepended to message. */ -PNG_EXPORT(106, void, png_chunk_warning, (png_const_structrp png_ptr, - png_const_charp warning_message)); -#else -# define png_warning(s1,s2) ((void)(s1)) -# define png_chunk_warning(s1,s2) ((void)(s1)) -#endif - -#ifdef PNG_BENIGN_ERRORS_SUPPORTED -/* Benign error in libpng. Can continue, but may have a problem. - * User can choose whether to handle as a fatal error or as a warning. */ -PNG_EXPORT(107, void, png_benign_error, (png_const_structrp png_ptr, - png_const_charp warning_message)); - -#ifdef PNG_READ_SUPPORTED -/* Same, chunk name is prepended to message (only during read) */ -PNG_EXPORT(108, void, png_chunk_benign_error, (png_const_structrp png_ptr, - png_const_charp warning_message)); -#endif - -PNG_EXPORT(109, void, png_set_benign_errors, - (png_structrp png_ptr, int allowed)); -#else -# ifdef PNG_ALLOW_BENIGN_ERRORS -# define png_benign_error png_warning -# define png_chunk_benign_error png_chunk_warning -# else -# define png_benign_error png_error -# define png_chunk_benign_error png_chunk_error -# endif -#endif - -/* The png_set_ functions are for storing values in the png_info_struct. - * Similarly, the png_get_ calls are used to read values from the - * png_info_struct, either storing the parameters in the passed variables, or - * setting pointers into the png_info_struct where the data is stored. The - * png_get_ functions return a non-zero value if the data was available - * in info_ptr, or return zero and do not change any of the parameters if the - * data was not available. - * - * These functions should be used instead of directly accessing png_info - * to avoid problems with future changes in the size and internal layout of - * png_info_struct. - */ -/* Returns "flag" if chunk data is valid in info_ptr. */ -PNG_EXPORT(110, png_uint_32, png_get_valid, (png_const_structrp png_ptr, - png_const_inforp info_ptr, png_uint_32 flag)); - -/* Returns number of bytes needed to hold a transformed row. */ -PNG_EXPORT(111, size_t, png_get_rowbytes, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -#ifdef PNG_INFO_IMAGE_SUPPORTED -/* Returns row_pointers, which is an array of pointers to scanlines that was - * returned from png_read_png(). - */ -PNG_EXPORT(112, png_bytepp, png_get_rows, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Set row_pointers, which is an array of pointers to scanlines for use - * by png_write_png(). - */ -PNG_EXPORT(113, void, png_set_rows, (png_const_structrp png_ptr, - png_inforp info_ptr, png_bytepp row_pointers)); -#endif - -/* Returns number of color channels in image. */ -PNG_EXPORT(114, png_byte, png_get_channels, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -#ifdef PNG_EASY_ACCESS_SUPPORTED -/* Returns image width in pixels. */ -PNG_EXPORT(115, png_uint_32, png_get_image_width, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Returns image height in pixels. */ -PNG_EXPORT(116, png_uint_32, png_get_image_height, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Returns image bit_depth. */ -PNG_EXPORT(117, png_byte, png_get_bit_depth, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Returns image color_type. */ -PNG_EXPORT(118, png_byte, png_get_color_type, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Returns image filter_type. */ -PNG_EXPORT(119, png_byte, png_get_filter_type, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Returns image interlace_type. */ -PNG_EXPORT(120, png_byte, png_get_interlace_type, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Returns image compression_type. */ -PNG_EXPORT(121, png_byte, png_get_compression_type, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); - -/* Returns image resolution in pixels per meter, from pHYs chunk data. */ -PNG_EXPORT(122, png_uint_32, png_get_pixels_per_meter, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); -PNG_EXPORT(123, png_uint_32, png_get_x_pixels_per_meter, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); -PNG_EXPORT(124, png_uint_32, png_get_y_pixels_per_meter, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); - -/* Returns pixel aspect ratio, computed from pHYs chunk data. */ -PNG_FP_EXPORT(125, float, png_get_pixel_aspect_ratio, - (png_const_structrp png_ptr, png_const_inforp info_ptr)) -PNG_FIXED_EXPORT(210, png_fixed_point, png_get_pixel_aspect_ratio_fixed, - (png_const_structrp png_ptr, png_const_inforp info_ptr)) - -/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ -PNG_EXPORT(126, png_int_32, png_get_x_offset_pixels, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); -PNG_EXPORT(127, png_int_32, png_get_y_offset_pixels, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); -PNG_EXPORT(128, png_int_32, png_get_x_offset_microns, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); -PNG_EXPORT(129, png_int_32, png_get_y_offset_microns, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); - -#endif /* EASY_ACCESS */ - -#ifdef PNG_READ_SUPPORTED -/* Returns pointer to signature string read from PNG header */ -PNG_EXPORT(130, png_const_bytep, png_get_signature, (png_const_structrp png_ptr, - png_const_inforp info_ptr)); -#endif - -#ifdef PNG_bKGD_SUPPORTED -PNG_EXPORT(131, png_uint_32, png_get_bKGD, (png_const_structrp png_ptr, - png_inforp info_ptr, png_color_16p *background)); -#endif - -#ifdef PNG_bKGD_SUPPORTED -PNG_EXPORT(132, void, png_set_bKGD, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_color_16p background)); -#endif - -#ifdef PNG_cHRM_SUPPORTED -PNG_FP_EXPORT(133, png_uint_32, png_get_cHRM, (png_const_structrp png_ptr, - png_const_inforp info_ptr, double *white_x, double *white_y, double *red_x, - double *red_y, double *green_x, double *green_y, double *blue_x, - double *blue_y)) -PNG_FP_EXPORT(230, png_uint_32, png_get_cHRM_XYZ, (png_const_structrp png_ptr, - png_const_inforp info_ptr, double *red_X, double *red_Y, double *red_Z, - double *green_X, double *green_Y, double *green_Z, double *blue_X, - double *blue_Y, double *blue_Z)) -PNG_FIXED_EXPORT(134, png_uint_32, png_get_cHRM_fixed, - (png_const_structrp png_ptr, png_const_inforp info_ptr, - png_fixed_point *int_white_x, png_fixed_point *int_white_y, - png_fixed_point *int_red_x, png_fixed_point *int_red_y, - png_fixed_point *int_green_x, png_fixed_point *int_green_y, - png_fixed_point *int_blue_x, png_fixed_point *int_blue_y)) -PNG_FIXED_EXPORT(231, png_uint_32, png_get_cHRM_XYZ_fixed, - (png_const_structrp png_ptr, png_const_inforp info_ptr, - png_fixed_point *int_red_X, png_fixed_point *int_red_Y, - png_fixed_point *int_red_Z, png_fixed_point *int_green_X, - png_fixed_point *int_green_Y, png_fixed_point *int_green_Z, - png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y, - png_fixed_point *int_blue_Z)) -#endif - -#ifdef PNG_cHRM_SUPPORTED -PNG_FP_EXPORT(135, void, png_set_cHRM, (png_const_structrp png_ptr, - png_inforp info_ptr, - double white_x, double white_y, double red_x, double red_y, double green_x, - double green_y, double blue_x, double blue_y)) -PNG_FP_EXPORT(232, void, png_set_cHRM_XYZ, (png_const_structrp png_ptr, - png_inforp info_ptr, double red_X, double red_Y, double red_Z, - double green_X, double green_Y, double green_Z, double blue_X, - double blue_Y, double blue_Z)) -PNG_FIXED_EXPORT(136, void, png_set_cHRM_fixed, (png_const_structrp png_ptr, - png_inforp info_ptr, png_fixed_point int_white_x, - png_fixed_point int_white_y, png_fixed_point int_red_x, - png_fixed_point int_red_y, png_fixed_point int_green_x, - png_fixed_point int_green_y, png_fixed_point int_blue_x, - png_fixed_point int_blue_y)) -PNG_FIXED_EXPORT(233, void, png_set_cHRM_XYZ_fixed, (png_const_structrp png_ptr, - png_inforp info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y, - png_fixed_point int_red_Z, png_fixed_point int_green_X, - png_fixed_point int_green_Y, png_fixed_point int_green_Z, - png_fixed_point int_blue_X, png_fixed_point int_blue_Y, - png_fixed_point int_blue_Z)) -#endif - -#ifdef PNG_eXIf_SUPPORTED -PNG_EXPORT(246, png_uint_32, png_get_eXIf, (png_const_structrp png_ptr, - png_inforp info_ptr, png_bytep *exif)); -PNG_EXPORT(247, void, png_set_eXIf, (png_const_structrp png_ptr, - png_inforp info_ptr, png_bytep exif)); - -PNG_EXPORT(248, png_uint_32, png_get_eXIf_1, (png_const_structrp png_ptr, - png_const_inforp info_ptr, png_uint_32 *num_exif, png_bytep *exif)); -PNG_EXPORT(249, void, png_set_eXIf_1, (png_const_structrp png_ptr, - png_inforp info_ptr, png_uint_32 num_exif, png_bytep exif)); -#endif - -#ifdef PNG_gAMA_SUPPORTED -PNG_FP_EXPORT(137, png_uint_32, png_get_gAMA, (png_const_structrp png_ptr, - png_const_inforp info_ptr, double *file_gamma)) -PNG_FIXED_EXPORT(138, png_uint_32, png_get_gAMA_fixed, - (png_const_structrp png_ptr, png_const_inforp info_ptr, - png_fixed_point *int_file_gamma)) -#endif - -#ifdef PNG_gAMA_SUPPORTED -PNG_FP_EXPORT(139, void, png_set_gAMA, (png_const_structrp png_ptr, - png_inforp info_ptr, double file_gamma)) -PNG_FIXED_EXPORT(140, void, png_set_gAMA_fixed, (png_const_structrp png_ptr, - png_inforp info_ptr, png_fixed_point int_file_gamma)) -#endif - -#ifdef PNG_hIST_SUPPORTED -PNG_EXPORT(141, png_uint_32, png_get_hIST, (png_const_structrp png_ptr, - png_inforp info_ptr, png_uint_16p *hist)); -PNG_EXPORT(142, void, png_set_hIST, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_uint_16p hist)); -#endif - -PNG_EXPORT(143, png_uint_32, png_get_IHDR, (png_const_structrp png_ptr, - png_const_inforp info_ptr, png_uint_32 *width, png_uint_32 *height, - int *bit_depth, int *color_type, int *interlace_method, - int *compression_method, int *filter_method)); - -PNG_EXPORT(144, void, png_set_IHDR, (png_const_structrp png_ptr, - png_inforp info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, - int color_type, int interlace_method, int compression_method, - int filter_method)); - -#ifdef PNG_oFFs_SUPPORTED -PNG_EXPORT(145, png_uint_32, png_get_oFFs, (png_const_structrp png_ptr, - png_const_inforp info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, - int *unit_type)); -#endif - -#ifdef PNG_oFFs_SUPPORTED -PNG_EXPORT(146, void, png_set_oFFs, (png_const_structrp png_ptr, - png_inforp info_ptr, png_int_32 offset_x, png_int_32 offset_y, - int unit_type)); -#endif - -#ifdef PNG_pCAL_SUPPORTED -PNG_EXPORT(147, png_uint_32, png_get_pCAL, (png_const_structrp png_ptr, - png_inforp info_ptr, png_charp *purpose, png_int_32 *X0, - png_int_32 *X1, int *type, int *nparams, png_charp *units, - png_charpp *params)); -#endif - -#ifdef PNG_pCAL_SUPPORTED -PNG_EXPORT(148, void, png_set_pCAL, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_charp purpose, png_int_32 X0, png_int_32 X1, - int type, int nparams, png_const_charp units, png_charpp params)); -#endif - -#ifdef PNG_pHYs_SUPPORTED -PNG_EXPORT(149, png_uint_32, png_get_pHYs, (png_const_structrp png_ptr, - png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, - int *unit_type)); -#endif - -#ifdef PNG_pHYs_SUPPORTED -PNG_EXPORT(150, void, png_set_pHYs, (png_const_structrp png_ptr, - png_inforp info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type)); -#endif - -PNG_EXPORT(151, png_uint_32, png_get_PLTE, (png_const_structrp png_ptr, - png_inforp info_ptr, png_colorp *palette, int *num_palette)); - -PNG_EXPORT(152, void, png_set_PLTE, (png_structrp png_ptr, - png_inforp info_ptr, png_const_colorp palette, int num_palette)); - -#ifdef PNG_sBIT_SUPPORTED -PNG_EXPORT(153, png_uint_32, png_get_sBIT, (png_const_structrp png_ptr, - png_inforp info_ptr, png_color_8p *sig_bit)); -#endif - -#ifdef PNG_sBIT_SUPPORTED -PNG_EXPORT(154, void, png_set_sBIT, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_color_8p sig_bit)); -#endif - -#ifdef PNG_sRGB_SUPPORTED -PNG_EXPORT(155, png_uint_32, png_get_sRGB, (png_const_structrp png_ptr, - png_const_inforp info_ptr, int *file_srgb_intent)); -#endif - -#ifdef PNG_sRGB_SUPPORTED -PNG_EXPORT(156, void, png_set_sRGB, (png_const_structrp png_ptr, - png_inforp info_ptr, int srgb_intent)); -PNG_EXPORT(157, void, png_set_sRGB_gAMA_and_cHRM, (png_const_structrp png_ptr, - png_inforp info_ptr, int srgb_intent)); -#endif - -#ifdef PNG_iCCP_SUPPORTED -PNG_EXPORT(158, png_uint_32, png_get_iCCP, (png_const_structrp png_ptr, - png_inforp info_ptr, png_charpp name, int *compression_type, - png_bytepp profile, png_uint_32 *proflen)); -#endif - -#ifdef PNG_iCCP_SUPPORTED -PNG_EXPORT(159, void, png_set_iCCP, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_charp name, int compression_type, - png_const_bytep profile, png_uint_32 proflen)); -#endif - -#ifdef PNG_sPLT_SUPPORTED -PNG_EXPORT(160, int, png_get_sPLT, (png_const_structrp png_ptr, - png_inforp info_ptr, png_sPLT_tpp entries)); -#endif - -#ifdef PNG_sPLT_SUPPORTED -PNG_EXPORT(161, void, png_set_sPLT, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_sPLT_tp entries, int nentries)); -#endif - -#ifdef PNG_TEXT_SUPPORTED -/* png_get_text also returns the number of text chunks in *num_text */ -PNG_EXPORT(162, int, png_get_text, (png_const_structrp png_ptr, - png_inforp info_ptr, png_textp *text_ptr, int *num_text)); -#endif - -/* Note while png_set_text() will accept a structure whose text, - * language, and translated keywords are NULL pointers, the structure - * returned by png_get_text will always contain regular - * zero-terminated C strings. They might be empty strings but - * they will never be NULL pointers. - */ - -#ifdef PNG_TEXT_SUPPORTED -PNG_EXPORT(163, void, png_set_text, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_textp text_ptr, int num_text)); -#endif - -#ifdef PNG_tIME_SUPPORTED -PNG_EXPORT(164, png_uint_32, png_get_tIME, (png_const_structrp png_ptr, - png_inforp info_ptr, png_timep *mod_time)); -#endif - -#ifdef PNG_tIME_SUPPORTED -PNG_EXPORT(165, void, png_set_tIME, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_timep mod_time)); -#endif - -#ifdef PNG_tRNS_SUPPORTED -PNG_EXPORT(166, png_uint_32, png_get_tRNS, (png_const_structrp png_ptr, - png_inforp info_ptr, png_bytep *trans_alpha, int *num_trans, - png_color_16p *trans_color)); -#endif - -#ifdef PNG_tRNS_SUPPORTED -PNG_EXPORT(167, void, png_set_tRNS, (png_structrp png_ptr, - png_inforp info_ptr, png_const_bytep trans_alpha, int num_trans, - png_const_color_16p trans_color)); -#endif - -#ifdef PNG_sCAL_SUPPORTED -PNG_FP_EXPORT(168, png_uint_32, png_get_sCAL, (png_const_structrp png_ptr, - png_const_inforp info_ptr, int *unit, double *width, double *height)) -#if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \ - defined(PNG_FLOATING_POINT_SUPPORTED) -/* NOTE: this API is currently implemented using floating point arithmetic, - * consequently it can only be used on systems with floating point support. - * In any case the range of values supported by png_fixed_point is small and it - * is highly recommended that png_get_sCAL_s be used instead. - */ -PNG_FIXED_EXPORT(214, png_uint_32, png_get_sCAL_fixed, - (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit, - png_fixed_point *width, png_fixed_point *height)) -#endif -PNG_EXPORT(169, png_uint_32, png_get_sCAL_s, - (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit, - png_charpp swidth, png_charpp sheight)); - -PNG_FP_EXPORT(170, void, png_set_sCAL, (png_const_structrp png_ptr, - png_inforp info_ptr, int unit, double width, double height)) -PNG_FIXED_EXPORT(213, void, png_set_sCAL_fixed, (png_const_structrp png_ptr, - png_inforp info_ptr, int unit, png_fixed_point width, - png_fixed_point height)) -PNG_EXPORT(171, void, png_set_sCAL_s, (png_const_structrp png_ptr, - png_inforp info_ptr, int unit, - png_const_charp swidth, png_const_charp sheight)); -#endif /* sCAL */ - -#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED -/* Provide the default handling for all unknown chunks or, optionally, for - * specific unknown chunks. - * - * NOTE: prior to 1.6.0 the handling specified for particular chunks on read was - * ignored and the default was used, the per-chunk setting only had an effect on - * write. If you wish to have chunk-specific handling on read in code that must - * work on earlier versions you must use a user chunk callback to specify the - * desired handling (keep or discard.) - * - * The 'keep' parameter is a PNG_HANDLE_CHUNK_ value as listed below. The - * parameter is interpreted as follows: - * - * READ: - * PNG_HANDLE_CHUNK_AS_DEFAULT: - * Known chunks: do normal libpng processing, do not keep the chunk (but - * see the comments below about PNG_HANDLE_AS_UNKNOWN_SUPPORTED) - * Unknown chunks: for a specific chunk use the global default, when used - * as the default discard the chunk data. - * PNG_HANDLE_CHUNK_NEVER: - * Discard the chunk data. - * PNG_HANDLE_CHUNK_IF_SAFE: - * Keep the chunk data if the chunk is not critical else raise a chunk - * error. - * PNG_HANDLE_CHUNK_ALWAYS: - * Keep the chunk data. - * - * If the chunk data is saved it can be retrieved using png_get_unknown_chunks, - * below. Notice that specifying "AS_DEFAULT" as a global default is equivalent - * to specifying "NEVER", however when "AS_DEFAULT" is used for specific chunks - * it simply resets the behavior to the libpng default. - * - * INTERACTION WITH USER CHUNK CALLBACKS: - * The per-chunk handling is always used when there is a png_user_chunk_ptr - * callback and the callback returns 0; the chunk is then always stored *unless* - * it is critical and the per-chunk setting is other than ALWAYS. Notice that - * the global default is *not* used in this case. (In effect the per-chunk - * value is incremented to at least IF_SAFE.) - * - * IMPORTANT NOTE: this behavior will change in libpng 1.7 - the global and - * per-chunk defaults will be honored. If you want to preserve the current - * behavior when your callback returns 0 you must set PNG_HANDLE_CHUNK_IF_SAFE - * as the default - if you don't do this libpng 1.6 will issue a warning. - * - * If you want unhandled unknown chunks to be discarded in libpng 1.6 and - * earlier simply return '1' (handled). - * - * PNG_HANDLE_AS_UNKNOWN_SUPPORTED: - * If this is *not* set known chunks will always be handled by libpng and - * will never be stored in the unknown chunk list. Known chunks listed to - * png_set_keep_unknown_chunks will have no effect. If it is set then known - * chunks listed with a keep other than AS_DEFAULT will *never* be processed - * by libpng, in addition critical chunks must either be processed by the - * callback or saved. - * - * The IHDR and IEND chunks must not be listed. Because this turns off the - * default handling for chunks that would otherwise be recognized the - * behavior of libpng transformations may well become incorrect! - * - * WRITE: - * When writing chunks the options only apply to the chunks specified by - * png_set_unknown_chunks (below), libpng will *always* write known chunks - * required by png_set_ calls and will always write the core critical chunks - * (as required for PLTE). - * - * Each chunk in the png_set_unknown_chunks list is looked up in the - * png_set_keep_unknown_chunks list to find the keep setting, this is then - * interpreted as follows: - * - * PNG_HANDLE_CHUNK_AS_DEFAULT: - * Write safe-to-copy chunks and write other chunks if the global - * default is set to _ALWAYS, otherwise don't write this chunk. - * PNG_HANDLE_CHUNK_NEVER: - * Do not write the chunk. - * PNG_HANDLE_CHUNK_IF_SAFE: - * Write the chunk if it is safe-to-copy, otherwise do not write it. - * PNG_HANDLE_CHUNK_ALWAYS: - * Write the chunk. - * - * Note that the default behavior is effectively the opposite of the read case - - * in read unknown chunks are not stored by default, in write they are written - * by default. Also the behavior of PNG_HANDLE_CHUNK_IF_SAFE is very different - * - on write the safe-to-copy bit is checked, on read the critical bit is - * checked and on read if the chunk is critical an error will be raised. - * - * num_chunks: - * =========== - * If num_chunks is positive, then the "keep" parameter specifies the manner - * for handling only those chunks appearing in the chunk_list array, - * otherwise the chunk list array is ignored. - * - * If num_chunks is 0 the "keep" parameter specifies the default behavior for - * unknown chunks, as described above. - * - * If num_chunks is negative, then the "keep" parameter specifies the manner - * for handling all unknown chunks plus all chunks recognized by libpng - * except for the IHDR, PLTE, tRNS, IDAT, and IEND chunks (which continue to - * be processed by libpng. - */ -#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED -PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr, - int keep, png_const_bytep chunk_list, int num_chunks)); -#endif /* HANDLE_AS_UNKNOWN */ - -/* The "keep" PNG_HANDLE_CHUNK_ parameter for the specified chunk is returned; - * the result is therefore true (non-zero) if special handling is required, - * false for the default handling. - */ -PNG_EXPORT(173, int, png_handle_as_unknown, (png_const_structrp png_ptr, - png_const_bytep chunk_name)); -#endif /* SET_UNKNOWN_CHUNKS */ - -#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED -PNG_EXPORT(174, void, png_set_unknown_chunks, (png_const_structrp png_ptr, - png_inforp info_ptr, png_const_unknown_chunkp unknowns, - int num_unknowns)); - /* NOTE: prior to 1.6.0 this routine set the 'location' field of the added - * unknowns to the location currently stored in the png_struct. This is - * invariably the wrong value on write. To fix this call the following API - * for each chunk in the list with the correct location. If you know your - * code won't be compiled on earlier versions you can rely on - * png_set_unknown_chunks(write-ptr, png_get_unknown_chunks(read-ptr)) doing - * the correct thing. - */ - -PNG_EXPORT(175, void, png_set_unknown_chunk_location, - (png_const_structrp png_ptr, png_inforp info_ptr, int chunk, int location)); - -PNG_EXPORT(176, int, png_get_unknown_chunks, (png_const_structrp png_ptr, - png_inforp info_ptr, png_unknown_chunkpp entries)); -#endif - -/* Png_free_data() will turn off the "valid" flag for anything it frees. - * If you need to turn it off for a chunk that your application has freed, - * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); - */ -PNG_EXPORT(177, void, png_set_invalid, (png_const_structrp png_ptr, - png_inforp info_ptr, int mask)); - -#ifdef PNG_INFO_IMAGE_SUPPORTED -/* The "params" pointer is currently not used and is for future expansion. */ -#ifdef PNG_SEQUENTIAL_READ_SUPPORTED -PNG_EXPORT(178, void, png_read_png, (png_structrp png_ptr, png_inforp info_ptr, - int transforms, png_voidp params)); -#endif -#ifdef PNG_WRITE_SUPPORTED -PNG_EXPORT(179, void, png_write_png, (png_structrp png_ptr, png_inforp info_ptr, - int transforms, png_voidp params)); -#endif -#endif - -PNG_EXPORT(180, png_const_charp, png_get_copyright, - (png_const_structrp png_ptr)); -PNG_EXPORT(181, png_const_charp, png_get_header_ver, - (png_const_structrp png_ptr)); -PNG_EXPORT(182, png_const_charp, png_get_header_version, - (png_const_structrp png_ptr)); -PNG_EXPORT(183, png_const_charp, png_get_libpng_ver, - (png_const_structrp png_ptr)); - -#ifdef PNG_MNG_FEATURES_SUPPORTED -PNG_EXPORT(184, png_uint_32, png_permit_mng_features, (png_structrp png_ptr, - png_uint_32 mng_features_permitted)); -#endif - -/* For use in png_set_keep_unknown, added to version 1.2.6 */ -#define PNG_HANDLE_CHUNK_AS_DEFAULT 0 -#define PNG_HANDLE_CHUNK_NEVER 1 -#define PNG_HANDLE_CHUNK_IF_SAFE 2 -#define PNG_HANDLE_CHUNK_ALWAYS 3 -#define PNG_HANDLE_CHUNK_LAST 4 - -/* Strip the prepended error numbers ("#nnn ") from error and warning - * messages before passing them to the error or warning handler. - */ -#ifdef PNG_ERROR_NUMBERS_SUPPORTED -PNG_EXPORT(185, void, png_set_strip_error_numbers, (png_structrp png_ptr, - png_uint_32 strip_mode)); -#endif - -/* Added in libpng-1.2.6 */ -#ifdef PNG_SET_USER_LIMITS_SUPPORTED -PNG_EXPORT(186, void, png_set_user_limits, (png_structrp png_ptr, - png_uint_32 user_width_max, png_uint_32 user_height_max)); -PNG_EXPORT(187, png_uint_32, png_get_user_width_max, - (png_const_structrp png_ptr)); -PNG_EXPORT(188, png_uint_32, png_get_user_height_max, - (png_const_structrp png_ptr)); -/* Added in libpng-1.4.0 */ -PNG_EXPORT(189, void, png_set_chunk_cache_max, (png_structrp png_ptr, - png_uint_32 user_chunk_cache_max)); -PNG_EXPORT(190, png_uint_32, png_get_chunk_cache_max, - (png_const_structrp png_ptr)); -/* Added in libpng-1.4.1 */ -PNG_EXPORT(191, void, png_set_chunk_malloc_max, (png_structrp png_ptr, - png_alloc_size_t user_chunk_cache_max)); -PNG_EXPORT(192, png_alloc_size_t, png_get_chunk_malloc_max, - (png_const_structrp png_ptr)); -#endif - -#if defined(PNG_INCH_CONVERSIONS_SUPPORTED) -PNG_EXPORT(193, png_uint_32, png_get_pixels_per_inch, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); - -PNG_EXPORT(194, png_uint_32, png_get_x_pixels_per_inch, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); - -PNG_EXPORT(195, png_uint_32, png_get_y_pixels_per_inch, - (png_const_structrp png_ptr, png_const_inforp info_ptr)); - -PNG_FP_EXPORT(196, float, png_get_x_offset_inches, - (png_const_structrp png_ptr, png_const_inforp info_ptr)) -#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ -PNG_FIXED_EXPORT(211, png_fixed_point, png_get_x_offset_inches_fixed, - (png_const_structrp png_ptr, png_const_inforp info_ptr)) -#endif - -PNG_FP_EXPORT(197, float, png_get_y_offset_inches, (png_const_structrp png_ptr, - png_const_inforp info_ptr)) -#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ -PNG_FIXED_EXPORT(212, png_fixed_point, png_get_y_offset_inches_fixed, - (png_const_structrp png_ptr, png_const_inforp info_ptr)) -#endif - -# ifdef PNG_pHYs_SUPPORTED -PNG_EXPORT(198, png_uint_32, png_get_pHYs_dpi, (png_const_structrp png_ptr, - png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, - int *unit_type)); -# endif /* pHYs */ -#endif /* INCH_CONVERSIONS */ - -/* Added in libpng-1.4.0 */ -#ifdef PNG_IO_STATE_SUPPORTED -PNG_EXPORT(199, png_uint_32, png_get_io_state, (png_const_structrp png_ptr)); - -/* Removed from libpng 1.6; use png_get_io_chunk_type. */ -PNG_REMOVED(200, png_const_bytep, png_get_io_chunk_name, (png_structrp png_ptr), - PNG_DEPRECATED) - -PNG_EXPORT(216, png_uint_32, png_get_io_chunk_type, - (png_const_structrp png_ptr)); - -/* The flags returned by png_get_io_state() are the following: */ -# define PNG_IO_NONE 0x0000 /* no I/O at this moment */ -# define PNG_IO_READING 0x0001 /* currently reading */ -# define PNG_IO_WRITING 0x0002 /* currently writing */ -# define PNG_IO_SIGNATURE 0x0010 /* currently at the file signature */ -# define PNG_IO_CHUNK_HDR 0x0020 /* currently at the chunk header */ -# define PNG_IO_CHUNK_DATA 0x0040 /* currently at the chunk data */ -# define PNG_IO_CHUNK_CRC 0x0080 /* currently at the chunk crc */ -# define PNG_IO_MASK_OP 0x000f /* current operation: reading/writing */ -# define PNG_IO_MASK_LOC 0x00f0 /* current location: sig/hdr/data/crc */ -#endif /* IO_STATE */ - -/* Interlace support. The following macros are always defined so that if - * libpng interlace handling is turned off the macros may be used to handle - * interlaced images within the application. - */ -#define PNG_INTERLACE_ADAM7_PASSES 7 - -/* Two macros to return the first row and first column of the original, - * full, image which appears in a given pass. 'pass' is in the range 0 - * to 6 and the result is in the range 0 to 7. - */ -#define PNG_PASS_START_ROW(pass) (((1&~(pass))<<(3-((pass)>>1)))&7) -#define PNG_PASS_START_COL(pass) (((1& (pass))<<(3-(((pass)+1)>>1)))&7) - -/* A macro to return the offset between pixels in the output row for a pair of - * pixels in the input - effectively the inverse of the 'COL_SHIFT' macro that - * follows. Note that ROW_OFFSET is the offset from one row to the next whereas - * COL_OFFSET is from one column to the next, within a row. - */ -#define PNG_PASS_ROW_OFFSET(pass) ((pass)>2?(8>>(((pass)-1)>>1)):8) -#define PNG_PASS_COL_OFFSET(pass) (1<<((7-(pass))>>1)) - -/* Two macros to help evaluate the number of rows or columns in each - * pass. This is expressed as a shift - effectively log2 of the number or - * rows or columns in each 8x8 tile of the original image. - */ -#define PNG_PASS_ROW_SHIFT(pass) ((pass)>2?(8-(pass))>>1:3) -#define PNG_PASS_COL_SHIFT(pass) ((pass)>1?(7-(pass))>>1:3) - -/* Hence two macros to determine the number of rows or columns in a given - * pass of an image given its height or width. In fact these macros may - * return non-zero even though the sub-image is empty, because the other - * dimension may be empty for a small image. - */ -#define PNG_PASS_ROWS(height, pass) (((height)+(((1<>PNG_PASS_ROW_SHIFT(pass)) -#define PNG_PASS_COLS(width, pass) (((width)+(((1<>PNG_PASS_COL_SHIFT(pass)) - -/* For the reader row callbacks (both progressive and sequential) it is - * necessary to find the row in the output image given a row in an interlaced - * image, so two more macros: - */ -#define PNG_ROW_FROM_PASS_ROW(y_in, pass) \ - (((y_in)<>(((7-(off))-(pass))<<2)) & 0xF) | \ - ((0x01145AF0>>(((7-(off))-(pass))<<2)) & 0xF0)) - -#define PNG_ROW_IN_INTERLACE_PASS(y, pass) \ - ((PNG_PASS_MASK(pass,0) >> ((y)&7)) & 1) -#define PNG_COL_IN_INTERLACE_PASS(x, pass) \ - ((PNG_PASS_MASK(pass,1) >> ((x)&7)) & 1) - -#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED -/* With these routines we avoid an integer divide, which will be slower on - * most machines. However, it does take more operations than the corresponding - * divide method, so it may be slower on a few RISC systems. There are two - * shifts (by 8 or 16 bits) and an addition, versus a single integer divide. - * - * Note that the rounding factors are NOT supposed to be the same! 128 and - * 32768 are correct for the NODIV code; 127 and 32767 are correct for the - * standard method. - * - * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] - */ - - /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ - -# define png_composite(composite, fg, alpha, bg) \ - { \ - png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \ - * (png_uint_16)(alpha) \ - + (png_uint_16)(bg)*(png_uint_16)(255 \ - - (png_uint_16)(alpha)) + 128); \ - (composite) = (png_byte)(((temp + (temp >> 8)) >> 8) & 0xff); \ - } - -# define png_composite_16(composite, fg, alpha, bg) \ - { \ - png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) \ - * (png_uint_32)(alpha) \ - + (png_uint_32)(bg)*(65535 \ - - (png_uint_32)(alpha)) + 32768); \ - (composite) = (png_uint_16)(0xffff & ((temp + (temp >> 16)) >> 16)); \ - } - -#else /* Standard method using integer division */ - -# define png_composite(composite, fg, alpha, bg) \ - (composite) = \ - (png_byte)(0xff & (((png_uint_16)(fg) * (png_uint_16)(alpha) + \ - (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ - 127) / 255)) - -# define png_composite_16(composite, fg, alpha, bg) \ - (composite) = \ - (png_uint_16)(0xffff & (((png_uint_32)(fg) * (png_uint_32)(alpha) + \ - (png_uint_32)(bg)*(png_uint_32)(65535 - (png_uint_32)(alpha)) + \ - 32767) / 65535)) -#endif /* READ_COMPOSITE_NODIV */ - -#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED -PNG_EXPORT(201, png_uint_32, png_get_uint_32, (png_const_bytep buf)); -PNG_EXPORT(202, png_uint_16, png_get_uint_16, (png_const_bytep buf)); -PNG_EXPORT(203, png_int_32, png_get_int_32, (png_const_bytep buf)); -#endif - -PNG_EXPORT(204, png_uint_32, png_get_uint_31, (png_const_structrp png_ptr, - png_const_bytep buf)); -/* No png_get_int_16 -- may be added if there's a real need for it. */ - -/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */ -#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED -PNG_EXPORT(205, void, png_save_uint_32, (png_bytep buf, png_uint_32 i)); -#endif -#ifdef PNG_SAVE_INT_32_SUPPORTED -PNG_EXPORT(206, void, png_save_int_32, (png_bytep buf, png_int_32 i)); -#endif - -/* Place a 16-bit number into a buffer in PNG byte order. - * The parameter is declared unsigned int, not png_uint_16, - * just to avoid potential problems on pre-ANSI C compilers. - */ -#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED -PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i)); -/* No png_save_int_16 -- may be added if there's a real need for it. */ -#endif - -#ifdef PNG_USE_READ_MACROS -/* Inline macros to do direct reads of bytes from the input buffer. - * The png_get_int_32() routine assumes we are using two's complement - * format for negative values, which is almost certainly true. - */ -# define PNG_get_uint_32(buf) \ - (((png_uint_32)(*(buf)) << 24) + \ - ((png_uint_32)(*((buf) + 1)) << 16) + \ - ((png_uint_32)(*((buf) + 2)) << 8) + \ - ((png_uint_32)(*((buf) + 3)))) - - /* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the - * function) incorrectly returned a value of type png_uint_32. - */ -# define PNG_get_uint_16(buf) \ - ((png_uint_16) \ - (((unsigned int)(*(buf)) << 8) + \ - ((unsigned int)(*((buf) + 1))))) - -# define PNG_get_int_32(buf) \ - ((png_int_32)((*(buf) & 0x80) \ - ? -((png_int_32)(((png_get_uint_32(buf)^0xffffffffU)+1U)&0x7fffffffU)) \ - : (png_int_32)png_get_uint_32(buf))) - -/* If PNG_PREFIX is defined the same thing as below happens in pnglibconf.h, - * but defining a macro name prefixed with PNG_PREFIX. - */ -# ifndef PNG_PREFIX -# define png_get_uint_32(buf) PNG_get_uint_32(buf) -# define png_get_uint_16(buf) PNG_get_uint_16(buf) -# define png_get_int_32(buf) PNG_get_int_32(buf) -# endif -#else -# ifdef PNG_PREFIX - /* No macros; revert to the (redefined) function */ -# define PNG_get_uint_32 (png_get_uint_32) -# define PNG_get_uint_16 (png_get_uint_16) -# define PNG_get_int_32 (png_get_int_32) -# endif -#endif - -#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED -PNG_EXPORT(242, void, png_set_check_for_invalid_index, - (png_structrp png_ptr, int allowed)); -# ifdef PNG_GET_PALETTE_MAX_SUPPORTED -PNG_EXPORT(243, int, png_get_palette_max, (png_const_structp png_ptr, - png_const_infop info_ptr)); -# endif -#endif /* CHECK_FOR_INVALID_INDEX */ - -/******************************************************************************* - * Section 5: SIMPLIFIED API - ******************************************************************************* - * - * Please read the documentation in libpng-manual.txt (TODO: write said - * documentation) if you don't understand what follows. - * - * The simplified API hides the details of both libpng and the PNG file format - * itself. It allows PNG files to be read into a very limited number of - * in-memory bitmap formats or to be written from the same formats. If these - * formats do not accommodate your needs then you can, and should, use the more - * sophisticated APIs above - these support a wide variety of in-memory formats - * and a wide variety of sophisticated transformations to those formats as well - * as a wide variety of APIs to manipulate ancillary information. - * - * To read a PNG file using the simplified API: - * - * 1) Declare a 'png_image' structure (see below) on the stack, set the - * version field to PNG_IMAGE_VERSION and the 'opaque' pointer to NULL - * (this is REQUIRED, your program may crash if you don't do it.) - * 2) Call the appropriate png_image_begin_read... function. - * 3) Set the png_image 'format' member to the required sample format. - * 4) Allocate a buffer for the image and, if required, the color-map. - * 5) Call png_image_finish_read to read the image and, if required, the - * color-map into your buffers. - * - * There are no restrictions on the format of the PNG input itself; all valid - * color types, bit depths, and interlace methods are acceptable, and the - * input image is transformed as necessary to the requested in-memory format - * during the png_image_finish_read() step. The only caveat is that if you - * request a color-mapped image from a PNG that is full-color or makes - * complex use of an alpha channel the transformation is extremely lossy and the - * result may look terrible. - * - * To write a PNG file using the simplified API: - * - * 1) Declare a 'png_image' structure on the stack and memset() it to all zero. - * 2) Initialize the members of the structure that describe the image, setting - * the 'format' member to the format of the image samples. - * 3) Call the appropriate png_image_write... function with a pointer to the - * image and, if necessary, the color-map to write the PNG data. - * - * png_image is a structure that describes the in-memory format of an image - * when it is being read or defines the in-memory format of an image that you - * need to write: - */ -#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) || \ - defined(PNG_SIMPLIFIED_WRITE_SUPPORTED) - -#define PNG_IMAGE_VERSION 1 - -typedef struct png_control *png_controlp; -typedef struct -{ - png_controlp opaque; /* Initialize to NULL, free with png_image_free */ - png_uint_32 version; /* Set to PNG_IMAGE_VERSION */ - png_uint_32 width; /* Image width in pixels (columns) */ - png_uint_32 height; /* Image height in pixels (rows) */ - png_uint_32 format; /* Image format as defined below */ - png_uint_32 flags; /* A bit mask containing informational flags */ - png_uint_32 colormap_entries; - /* Number of entries in the color-map */ - - /* In the event of an error or warning the following field will be set to a - * non-zero value and the 'message' field will contain a '\0' terminated - * string with the libpng error or warning message. If both warnings and - * an error were encountered, only the error is recorded. If there - * are multiple warnings, only the first one is recorded. - * - * The upper 30 bits of this value are reserved, the low two bits contain - * a value as follows: - */ -# define PNG_IMAGE_WARNING 1 -# define PNG_IMAGE_ERROR 2 - /* - * The result is a two-bit code such that a value more than 1 indicates - * a failure in the API just called: - * - * 0 - no warning or error - * 1 - warning - * 2 - error - * 3 - error preceded by warning - */ -# define PNG_IMAGE_FAILED(png_cntrl) ((((png_cntrl).warning_or_error)&0x03)>1) - - png_uint_32 warning_or_error; - - char message[64]; -} png_image, *png_imagep; - -/* The samples of the image have one to four channels whose components have - * original values in the range 0 to 1.0: - * - * 1: A single gray or luminance channel (G). - * 2: A gray/luminance channel and an alpha channel (GA). - * 3: Three red, green, blue color channels (RGB). - * 4: Three color channels and an alpha channel (RGBA). - * - * The components are encoded in one of two ways: - * - * a) As a small integer, value 0..255, contained in a single byte. For the - * alpha channel the original value is simply value/255. For the color or - * luminance channels the value is encoded according to the sRGB specification - * and matches the 8-bit format expected by typical display devices. - * - * The color/gray channels are not scaled (pre-multiplied) by the alpha - * channel and are suitable for passing to color management software. - * - * b) As a value in the range 0..65535, contained in a 2-byte integer. All - * channels can be converted to the original value by dividing by 65535; all - * channels are linear. Color channels use the RGB encoding (RGB end-points) of - * the sRGB specification. This encoding is identified by the - * PNG_FORMAT_FLAG_LINEAR flag below. - * - * When the simplified API needs to convert between sRGB and linear colorspaces, - * the actual sRGB transfer curve defined in the sRGB specification (see the - * article at ) is used, not the gamma=1/2.2 - * approximation used elsewhere in libpng. - * - * When an alpha channel is present it is expected to denote pixel coverage - * of the color or luminance channels and is returned as an associated alpha - * channel: the color/gray channels are scaled (pre-multiplied) by the alpha - * value. - * - * The samples are either contained directly in the image data, between 1 and 8 - * bytes per pixel according to the encoding, or are held in a color-map indexed - * by bytes in the image data. In the case of a color-map the color-map entries - * are individual samples, encoded as above, and the image data has one byte per - * pixel to select the relevant sample from the color-map. - */ - -/* PNG_FORMAT_* - * - * #defines to be used in png_image::format. Each #define identifies a - * particular layout of sample data and, if present, alpha values. There are - * separate defines for each of the two component encodings. - * - * A format is built up using single bit flag values. All combinations are - * valid. Formats can be built up from the flag values or you can use one of - * the predefined values below. When testing formats always use the FORMAT_FLAG - * macros to test for individual features - future versions of the library may - * add new flags. - * - * When reading or writing color-mapped images the format should be set to the - * format of the entries in the color-map then png_image_{read,write}_colormap - * called to read or write the color-map and set the format correctly for the - * image data. Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly! - * - * NOTE: libpng can be built with particular features disabled. If you see - * compiler errors because the definition of one of the following flags has been - * compiled out it is because libpng does not have the required support. It is - * possible, however, for the libpng configuration to enable the format on just - * read or just write; in that case you may see an error at run time. You can - * guard against this by checking for the definition of the appropriate - * "_SUPPORTED" macro, one of: - * - * PNG_SIMPLIFIED_{READ,WRITE}_{BGR,AFIRST}_SUPPORTED - */ -#define PNG_FORMAT_FLAG_ALPHA 0x01U /* format with an alpha channel */ -#define PNG_FORMAT_FLAG_COLOR 0x02U /* color format: otherwise grayscale */ -#define PNG_FORMAT_FLAG_LINEAR 0x04U /* 2-byte channels else 1-byte */ -#define PNG_FORMAT_FLAG_COLORMAP 0x08U /* image data is color-mapped */ - -#ifdef PNG_FORMAT_BGR_SUPPORTED -# define PNG_FORMAT_FLAG_BGR 0x10U /* BGR colors, else order is RGB */ -#endif - -#ifdef PNG_FORMAT_AFIRST_SUPPORTED -# define PNG_FORMAT_FLAG_AFIRST 0x20U /* alpha channel comes first */ -#endif - -#define PNG_FORMAT_FLAG_ASSOCIATED_ALPHA 0x40U /* alpha channel is associated */ - -/* Commonly used formats have predefined macros. - * - * First the single byte (sRGB) formats: - */ -#define PNG_FORMAT_GRAY 0 -#define PNG_FORMAT_GA PNG_FORMAT_FLAG_ALPHA -#define PNG_FORMAT_AG (PNG_FORMAT_GA|PNG_FORMAT_FLAG_AFIRST) -#define PNG_FORMAT_RGB PNG_FORMAT_FLAG_COLOR -#define PNG_FORMAT_BGR (PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_BGR) -#define PNG_FORMAT_RGBA (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_ALPHA) -#define PNG_FORMAT_ARGB (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_AFIRST) -#define PNG_FORMAT_BGRA (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_ALPHA) -#define PNG_FORMAT_ABGR (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_AFIRST) - -/* Then the linear 2-byte formats. When naming these "Y" is used to - * indicate a luminance (gray) channel. - */ -#define PNG_FORMAT_LINEAR_Y PNG_FORMAT_FLAG_LINEAR -#define PNG_FORMAT_LINEAR_Y_ALPHA (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA) -#define PNG_FORMAT_LINEAR_RGB (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR) -#define PNG_FORMAT_LINEAR_RGB_ALPHA \ - (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA) - -/* With color-mapped formats the image data is one byte for each pixel, the byte - * is an index into the color-map which is formatted as above. To obtain a - * color-mapped format it is sufficient just to add the PNG_FOMAT_FLAG_COLORMAP - * to one of the above definitions, or you can use one of the definitions below. - */ -#define PNG_FORMAT_RGB_COLORMAP (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_COLORMAP) -#define PNG_FORMAT_BGR_COLORMAP (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_COLORMAP) -#define PNG_FORMAT_RGBA_COLORMAP (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_COLORMAP) -#define PNG_FORMAT_ARGB_COLORMAP (PNG_FORMAT_ARGB|PNG_FORMAT_FLAG_COLORMAP) -#define PNG_FORMAT_BGRA_COLORMAP (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_COLORMAP) -#define PNG_FORMAT_ABGR_COLORMAP (PNG_FORMAT_ABGR|PNG_FORMAT_FLAG_COLORMAP) - -/* PNG_IMAGE macros - * - * These are convenience macros to derive information from a png_image - * structure. The PNG_IMAGE_SAMPLE_ macros return values appropriate to the - * actual image sample values - either the entries in the color-map or the - * pixels in the image. The PNG_IMAGE_PIXEL_ macros return corresponding values - * for the pixels and will always return 1 for color-mapped formats. The - * remaining macros return information about the rows in the image and the - * complete image. - * - * NOTE: All the macros that take a png_image::format parameter are compile time - * constants if the format parameter is, itself, a constant. Therefore these - * macros can be used in array declarations and case labels where required. - * Similarly the macros are also pre-processor constants (sizeof is not used) so - * they can be used in #if tests. - * - * First the information about the samples. - */ -#define PNG_IMAGE_SAMPLE_CHANNELS(fmt)\ - (((fmt)&(PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA))+1) - /* Return the total number of channels in a given format: 1..4 */ - -#define PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)\ - ((((fmt) & PNG_FORMAT_FLAG_LINEAR) >> 2)+1) - /* Return the size in bytes of a single component of a pixel or color-map - * entry (as appropriate) in the image: 1 or 2. - */ - -#define PNG_IMAGE_SAMPLE_SIZE(fmt)\ - (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)) - /* This is the size of the sample data for one sample. If the image is - * color-mapped it is the size of one color-map entry (and image pixels are - * one byte in size), otherwise it is the size of one image pixel. - */ - -#define PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)\ - (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * 256) - /* The maximum size of the color-map required by the format expressed in a - * count of components. This can be used to compile-time allocate a - * color-map: - * - * png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)]; - * - * png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)]; - * - * Alternatively use the PNG_IMAGE_COLORMAP_SIZE macro below to use the - * information from one of the png_image_begin_read_ APIs and dynamically - * allocate the required memory. - */ - -/* Corresponding information about the pixels */ -#define PNG_IMAGE_PIXEL_(test,fmt)\ - (((fmt)&PNG_FORMAT_FLAG_COLORMAP)?1:test(fmt)) - -#define PNG_IMAGE_PIXEL_CHANNELS(fmt)\ - PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_CHANNELS,fmt) - /* The number of separate channels (components) in a pixel; 1 for a - * color-mapped image. - */ - -#define PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)\ - PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_COMPONENT_SIZE,fmt) - /* The size, in bytes, of each component in a pixel; 1 for a color-mapped - * image. - */ - -#define PNG_IMAGE_PIXEL_SIZE(fmt) PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_SIZE,fmt) - /* The size, in bytes, of a complete pixel; 1 for a color-mapped image. */ - -/* Information about the whole row, or whole image */ -#define PNG_IMAGE_ROW_STRIDE(image)\ - (PNG_IMAGE_PIXEL_CHANNELS((image).format) * (image).width) - /* Return the total number of components in a single row of the image; this - * is the minimum 'row stride', the minimum count of components between each - * row. For a color-mapped image this is the minimum number of bytes in a - * row. - * - * WARNING: this macro overflows for some images with more than one component - * and very large image widths. libpng will refuse to process an image where - * this macro would overflow. - */ - -#define PNG_IMAGE_BUFFER_SIZE(image, row_stride)\ - (PNG_IMAGE_PIXEL_COMPONENT_SIZE((image).format)*(image).height*(row_stride)) - /* Return the size, in bytes, of an image buffer given a png_image and a row - * stride - the number of components to leave space for in each row. - * - * WARNING: this macro overflows a 32-bit integer for some large PNG images, - * libpng will refuse to process an image where such an overflow would occur. - */ - -#define PNG_IMAGE_SIZE(image)\ - PNG_IMAGE_BUFFER_SIZE(image, PNG_IMAGE_ROW_STRIDE(image)) - /* Return the size, in bytes, of the image in memory given just a png_image; - * the row stride is the minimum stride required for the image. - */ - -#define PNG_IMAGE_COLORMAP_SIZE(image)\ - (PNG_IMAGE_SAMPLE_SIZE((image).format) * (image).colormap_entries) - /* Return the size, in bytes, of the color-map of this image. If the image - * format is not a color-map format this will return a size sufficient for - * 256 entries in the given format; check PNG_FORMAT_FLAG_COLORMAP if - * you don't want to allocate a color-map in this case. - */ - -/* PNG_IMAGE_FLAG_* - * - * Flags containing additional information about the image are held in the - * 'flags' field of png_image. - */ -#define PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB 0x01 - /* This indicates that the RGB values of the in-memory bitmap do not - * correspond to the red, green and blue end-points defined by sRGB. - */ - -#define PNG_IMAGE_FLAG_FAST 0x02 - /* On write emphasise speed over compression; the resultant PNG file will be - * larger but will be produced significantly faster, particular for large - * images. Do not use this option for images which will be distributed, only - * used it when producing intermediate files that will be read back in - * repeatedly. For a typical 24-bit image the option will double the read - * speed at the cost of increasing the image size by 25%, however for many - * more compressible images the PNG file can be 10 times larger with only a - * slight speed gain. - */ - -#define PNG_IMAGE_FLAG_16BIT_sRGB 0x04 - /* On read if the image is a 16-bit per component image and there is no gAMA - * or sRGB chunk assume that the components are sRGB encoded. Notice that - * images output by the simplified API always have gamma information; setting - * this flag only affects the interpretation of 16-bit images from an - * external source. It is recommended that the application expose this flag - * to the user; the user can normally easily recognize the difference between - * linear and sRGB encoding. This flag has no effect on write - the data - * passed to the write APIs must have the correct encoding (as defined - * above.) - * - * If the flag is not set (the default) input 16-bit per component data is - * assumed to be linear. - * - * NOTE: the flag can only be set after the png_image_begin_read_ call, - * because that call initializes the 'flags' field. - */ - -#ifdef PNG_SIMPLIFIED_READ_SUPPORTED -/* READ APIs - * --------- - * - * The png_image passed to the read APIs must have been initialized by setting - * the png_controlp field 'opaque' to NULL (or, safer, memset the whole thing.) - */ -#ifdef PNG_STDIO_SUPPORTED -PNG_EXPORT(234, int, png_image_begin_read_from_file, (png_imagep image, - const char *file_name)); - /* The named file is opened for read and the image header is filled in - * from the PNG header in the file. - */ - -PNG_EXPORT(235, int, png_image_begin_read_from_stdio, (png_imagep image, - FILE* file)); - /* The PNG header is read from the stdio FILE object. */ -#endif /* STDIO */ - -PNG_EXPORT(236, int, png_image_begin_read_from_memory, (png_imagep image, - png_const_voidp memory, size_t size)); - /* The PNG header is read from the given memory buffer. */ - -PNG_EXPORT(237, int, png_image_finish_read, (png_imagep image, - png_const_colorp background, void *buffer, png_int_32 row_stride, - void *colormap)); - /* Finish reading the image into the supplied buffer and clean up the - * png_image structure. - * - * row_stride is the step, in byte or 2-byte units as appropriate, - * between adjacent rows. A positive stride indicates that the top-most row - * is first in the buffer - the normal top-down arrangement. A negative - * stride indicates that the bottom-most row is first in the buffer. - * - * background need only be supplied if an alpha channel must be removed from - * a png_byte format and the removal is to be done by compositing on a solid - * color; otherwise it may be NULL and any composition will be done directly - * onto the buffer. The value is an sRGB color to use for the background, - * for grayscale output the green channel is used. - * - * background must be supplied when an alpha channel must be removed from a - * single byte color-mapped output format, in other words if: - * - * 1) The original format from png_image_begin_read_from_* had - * PNG_FORMAT_FLAG_ALPHA set. - * 2) The format set by the application does not. - * 3) The format set by the application has PNG_FORMAT_FLAG_COLORMAP set and - * PNG_FORMAT_FLAG_LINEAR *not* set. - * - * For linear output removing the alpha channel is always done by compositing - * on black and background is ignored. - * - * colormap must be supplied when PNG_FORMAT_FLAG_COLORMAP is set. It must - * be at least the size (in bytes) returned by PNG_IMAGE_COLORMAP_SIZE. - * image->colormap_entries will be updated to the actual number of entries - * written to the colormap; this may be less than the original value. - */ - -PNG_EXPORT(238, void, png_image_free, (png_imagep image)); - /* Free any data allocated by libpng in image->opaque, setting the pointer to - * NULL. May be called at any time after the structure is initialized. - */ -#endif /* SIMPLIFIED_READ */ - -#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED -/* WRITE APIS - * ---------- - * For write you must initialize a png_image structure to describe the image to - * be written. To do this use memset to set the whole structure to 0 then - * initialize fields describing your image. - * - * version: must be set to PNG_IMAGE_VERSION - * opaque: must be initialized to NULL - * width: image width in pixels - * height: image height in rows - * format: the format of the data (image and color-map) you wish to write - * flags: set to 0 unless one of the defined flags applies; set - * PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB for color format images where the RGB - * values do not correspond to the colors in sRGB. - * colormap_entries: set to the number of entries in the color-map (0 to 256) - */ -#ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED -PNG_EXPORT(239, int, png_image_write_to_file, (png_imagep image, - const char *file, int convert_to_8bit, const void *buffer, - png_int_32 row_stride, const void *colormap)); - /* Write the image to the named file. */ - -PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file, - int convert_to_8_bit, const void *buffer, png_int_32 row_stride, - const void *colormap)); - /* Write the image to the given (FILE*). */ -#endif /* SIMPLIFIED_WRITE_STDIO */ - -/* With all write APIs if image is in one of the linear formats with 16-bit - * data then setting convert_to_8_bit will cause the output to be an 8-bit PNG - * gamma encoded according to the sRGB specification, otherwise a 16-bit linear - * encoded PNG file is written. - * - * With color-mapped data formats the colormap parameter point to a color-map - * with at least image->colormap_entries encoded in the specified format. If - * the format is linear the written PNG color-map will be converted to sRGB - * regardless of the convert_to_8_bit flag. - * - * With all APIs row_stride is handled as in the read APIs - it is the spacing - * from one row to the next in component sized units (1 or 2 bytes) and if - * negative indicates a bottom-up row layout in the buffer. If row_stride is - * zero, libpng will calculate it for you from the image width and number of - * channels. - * - * Note that the write API does not support interlacing, sub-8-bit pixels or - * most ancillary chunks. If you need to write text chunks (e.g. for copyright - * notices) you need to use one of the other APIs. - */ - -PNG_EXPORT(245, int, png_image_write_to_memory, (png_imagep image, void *memory, - png_alloc_size_t * PNG_RESTRICT memory_bytes, int convert_to_8_bit, - const void *buffer, png_int_32 row_stride, const void *colormap)); - /* Write the image to the given memory buffer. The function both writes the - * whole PNG data stream to *memory and updates *memory_bytes with the count - * of bytes written. - * - * 'memory' may be NULL. In this case *memory_bytes is not read however on - * success the number of bytes which would have been written will still be - * stored in *memory_bytes. On failure *memory_bytes will contain 0. - * - * If 'memory' is not NULL it must point to memory[*memory_bytes] of - * writeable memory. - * - * If the function returns success memory[*memory_bytes] (if 'memory' is not - * NULL) contains the written PNG data. *memory_bytes will always be less - * than or equal to the original value. - * - * If the function returns false and *memory_bytes was not changed an error - * occurred during write. If *memory_bytes was changed, or is not 0 if - * 'memory' was NULL, the write would have succeeded but for the memory - * buffer being too small. *memory_bytes contains the required number of - * bytes and will be bigger that the original value. - */ - -#define png_image_write_get_memory_size(image, size, convert_to_8_bit, buffer,\ - row_stride, colormap)\ - png_image_write_to_memory(&(image), 0, &(size), convert_to_8_bit, buffer,\ - row_stride, colormap) - /* Return the amount of memory in 'size' required to compress this image. - * The png_image structure 'image' must be filled in as in the above - * function and must not be changed before the actual write call, the buffer - * and all other parameters must also be identical to that in the final - * write call. The 'size' variable need not be initialized. - * - * NOTE: the macro returns true/false, if false is returned 'size' will be - * set to zero and the write failed and probably will fail if tried again. - */ - -/* You can pre-allocate the buffer by making sure it is of sufficient size - * regardless of the amount of compression achieved. The buffer size will - * always be bigger than the original image and it will never be filled. The - * following macros are provided to assist in allocating the buffer. - */ -#define PNG_IMAGE_DATA_SIZE(image) (PNG_IMAGE_SIZE(image)+(image).height) - /* The number of uncompressed bytes in the PNG byte encoding of the image; - * uncompressing the PNG IDAT data will give this number of bytes. - * - * NOTE: while PNG_IMAGE_SIZE cannot overflow for an image in memory this - * macro can because of the extra bytes used in the PNG byte encoding. You - * need to avoid this macro if your image size approaches 2^30 in width or - * height. The same goes for the remainder of these macros; they all produce - * bigger numbers than the actual in-memory image size. - */ -#ifndef PNG_ZLIB_MAX_SIZE -# define PNG_ZLIB_MAX_SIZE(b) ((b)+(((b)+7U)>>3)+(((b)+63U)>>6)+11U) - /* An upper bound on the number of compressed bytes given 'b' uncompressed - * bytes. This is based on deflateBounds() in zlib; different - * implementations of zlib compression may conceivably produce more data so - * if your zlib implementation is not zlib itself redefine this macro - * appropriately. - */ -#endif - -#define PNG_IMAGE_COMPRESSED_SIZE_MAX(image)\ - PNG_ZLIB_MAX_SIZE((png_alloc_size_t)PNG_IMAGE_DATA_SIZE(image)) - /* An upper bound on the size of the data in the PNG IDAT chunks. */ - -#define PNG_IMAGE_PNG_SIZE_MAX_(image, image_size)\ - ((8U/*sig*/+25U/*IHDR*/+16U/*gAMA*/+44U/*cHRM*/+12U/*IEND*/+\ - (((image).format&PNG_FORMAT_FLAG_COLORMAP)?/*colormap: PLTE, tRNS*/\ - 12U+3U*(image).colormap_entries/*PLTE data*/+\ - (((image).format&PNG_FORMAT_FLAG_ALPHA)?\ - 12U/*tRNS*/+(image).colormap_entries:0U):0U)+\ - 12U)+(12U*((image_size)/PNG_ZBUF_SIZE))/*IDAT*/+(image_size)) - /* A helper for the following macro; if your compiler cannot handle the - * following macro use this one with the result of - * PNG_IMAGE_COMPRESSED_SIZE_MAX(image) as the second argument (most - * compilers should handle this just fine.) - */ - -#define PNG_IMAGE_PNG_SIZE_MAX(image)\ - PNG_IMAGE_PNG_SIZE_MAX_(image, PNG_IMAGE_COMPRESSED_SIZE_MAX(image)) - /* An upper bound on the total length of the PNG data stream for 'image'. - * The result is of type png_alloc_size_t, on 32-bit systems this may - * overflow even though PNG_IMAGE_DATA_SIZE does not overflow; the write will - * run out of buffer space but return a corrected size which should work. - */ -#endif /* SIMPLIFIED_WRITE */ -/******************************************************************************* - * END OF SIMPLIFIED API - ******************************************************************************/ -#endif /* SIMPLIFIED_{READ|WRITE} */ - -/******************************************************************************* - * Section 6: IMPLEMENTATION OPTIONS - ******************************************************************************* - * - * Support for arbitrary implementation-specific optimizations. The API allows - * particular options to be turned on or off. 'Option' is the number of the - * option and 'onoff' is 0 (off) or non-0 (on). The value returned is given - * by the PNG_OPTION_ defines below. - * - * HARDWARE: normally hardware capabilities, such as the Intel SSE instructions, - * are detected at run time, however sometimes it may be impossible - * to do this in user mode, in which case it is necessary to discover - * the capabilities in an OS specific way. Such capabilities are - * listed here when libpng has support for them and must be turned - * ON by the application if present. - * - * SOFTWARE: sometimes software optimizations actually result in performance - * decrease on some architectures or systems, or with some sets of - * PNG images. 'Software' options allow such optimizations to be - * selected at run time. - */ -#ifdef PNG_SET_OPTION_SUPPORTED -#ifdef PNG_ARM_NEON_API_SUPPORTED -# define PNG_ARM_NEON 0 /* HARDWARE: ARM Neon SIMD instructions supported */ -#endif -#define PNG_MAXIMUM_INFLATE_WINDOW 2 /* SOFTWARE: force maximum window */ -#define PNG_SKIP_sRGB_CHECK_PROFILE 4 /* SOFTWARE: Check ICC profile for sRGB */ -#ifdef PNG_MIPS_MSA_API_SUPPORTED -# define PNG_MIPS_MSA 6 /* HARDWARE: MIPS Msa SIMD instructions supported */ -#endif -#define PNG_IGNORE_ADLER32 8 -#ifdef PNG_POWERPC_VSX_API_SUPPORTED -# define PNG_POWERPC_VSX 10 /* HARDWARE: PowerPC VSX SIMD instructions supported */ -#endif -#define PNG_OPTION_NEXT 12 /* Next option - numbers must be even */ - -/* Return values: NOTE: there are four values and 'off' is *not* zero */ -#define PNG_OPTION_UNSET 0 /* Unset - defaults to off */ -#define PNG_OPTION_INVALID 1 /* Option number out of range */ -#define PNG_OPTION_OFF 2 -#define PNG_OPTION_ON 3 - -PNG_EXPORT(244, int, png_set_option, (png_structrp png_ptr, int option, - int onoff)); -#endif /* SET_OPTION */ - -/******************************************************************************* - * END OF HARDWARE AND SOFTWARE OPTIONS - ******************************************************************************/ - -/* Maintainer: Put new public prototypes here ^, in libpng.3, in project - * defs, and in scripts/symbols.def. - */ - -/* The last ordinal number (this is the *last* one already used; the next - * one to use is one more than this.) - */ -#ifdef PNG_EXPORT_LAST_ORDINAL - PNG_EXPORT_LAST_ORDINAL(249); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* PNG_VERSION_INFO_ONLY */ -/* Do not put anything past this line */ -#endif /* PNG_H */ diff --git a/libs/include/libpng/pngconf.h b/libs/include/libpng/pngconf.h deleted file mode 100644 index 927a769..0000000 --- a/libs/include/libpng/pngconf.h +++ /dev/null @@ -1,623 +0,0 @@ - -/* pngconf.h - machine-configurable file for libpng - * - * libpng version 1.6.37 - * - * Copyright (c) 2018-2019 Cosmin Truta - * Copyright (c) 1998-2002,2004,2006-2016,2018 Glenn Randers-Pehrson - * Copyright (c) 1996-1997 Andreas Dilger - * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. - * - * This code is released under the libpng license. - * For conditions of distribution and use, see the disclaimer - * and license in png.h - * - * Any machine specific code is near the front of this file, so if you - * are configuring libpng for a machine, you may want to read the section - * starting here down to where it starts to typedef png_color, png_text, - * and png_info. - */ - -#ifndef PNGCONF_H -#define PNGCONF_H - -#ifndef PNG_BUILDING_SYMBOL_TABLE /* else includes may cause problems */ - -/* From libpng 1.6.0 libpng requires an ANSI X3.159-1989 ("ISOC90") compliant C - * compiler for correct compilation. The following header files are required by - * the standard. If your compiler doesn't provide these header files, or they - * do not match the standard, you will need to provide/improve them. - */ -#include -#include - -/* Library header files. These header files are all defined by ISOC90; libpng - * expects conformant implementations, however, an ISOC90 conformant system need - * not provide these header files if the functionality cannot be implemented. - * In this case it will be necessary to disable the relevant parts of libpng in - * the build of pnglibconf.h. - * - * Prior to 1.6.0 string.h was included here; the API changes in 1.6.0 to not - * include this unnecessary header file. - */ - -#ifdef PNG_STDIO_SUPPORTED - /* Required for the definition of FILE: */ -# include -#endif - -#ifdef PNG_SETJMP_SUPPORTED - /* Required for the definition of jmp_buf and the declaration of longjmp: */ -# include -#endif - -#ifdef PNG_CONVERT_tIME_SUPPORTED - /* Required for struct tm: */ -# include -#endif - -#endif /* PNG_BUILDING_SYMBOL_TABLE */ - -/* Prior to 1.6.0, it was possible to turn off 'const' in declarations, - * using PNG_NO_CONST. This is no longer supported. - */ -#define PNG_CONST const /* backward compatibility only */ - -/* This controls optimization of the reading of 16-bit and 32-bit - * values from PNG files. It can be set on a per-app-file basis: it - * just changes whether a macro is used when the function is called. - * The library builder sets the default; if read functions are not - * built into the library the macro implementation is forced on. - */ -#ifndef PNG_READ_INT_FUNCTIONS_SUPPORTED -# define PNG_USE_READ_MACROS -#endif -#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS) -# if PNG_DEFAULT_READ_MACROS -# define PNG_USE_READ_MACROS -# endif -#endif - -/* COMPILER SPECIFIC OPTIONS. - * - * These options are provided so that a variety of difficult compilers - * can be used. Some are fixed at build time (e.g. PNG_API_RULE - * below) but still have compiler specific implementations, others - * may be changed on a per-file basis when compiling against libpng. - */ - -/* The PNGARG macro was used in versions of libpng prior to 1.6.0 to protect - * against legacy (pre ISOC90) compilers that did not understand function - * prototypes. It is not required for modern C compilers. - */ -#ifndef PNGARG -# define PNGARG(arglist) arglist -#endif - -/* Function calling conventions. - * ============================= - * Normally it is not necessary to specify to the compiler how to call - * a function - it just does it - however on x86 systems derived from - * Microsoft and Borland C compilers ('IBM PC', 'DOS', 'Windows' systems - * and some others) there are multiple ways to call a function and the - * default can be changed on the compiler command line. For this reason - * libpng specifies the calling convention of every exported function and - * every function called via a user supplied function pointer. This is - * done in this file by defining the following macros: - * - * PNGAPI Calling convention for exported functions. - * PNGCBAPI Calling convention for user provided (callback) functions. - * PNGCAPI Calling convention used by the ANSI-C library (required - * for longjmp callbacks and sometimes used internally to - * specify the calling convention for zlib). - * - * These macros should never be overridden. If it is necessary to - * change calling convention in a private build this can be done - * by setting PNG_API_RULE (which defaults to 0) to one of the values - * below to select the correct 'API' variants. - * - * PNG_API_RULE=0 Use PNGCAPI - the 'C' calling convention - throughout. - * This is correct in every known environment. - * PNG_API_RULE=1 Use the operating system convention for PNGAPI and - * the 'C' calling convention (from PNGCAPI) for - * callbacks (PNGCBAPI). This is no longer required - * in any known environment - if it has to be used - * please post an explanation of the problem to the - * libpng mailing list. - * - * These cases only differ if the operating system does not use the C - * calling convention, at present this just means the above cases - * (x86 DOS/Windows systems) and, even then, this does not apply to - * Cygwin running on those systems. - * - * Note that the value must be defined in pnglibconf.h so that what - * the application uses to call the library matches the conventions - * set when building the library. - */ - -/* Symbol export - * ============= - * When building a shared library it is almost always necessary to tell - * the compiler which symbols to export. The png.h macro 'PNG_EXPORT' - * is used to mark the symbols. On some systems these symbols can be - * extracted at link time and need no special processing by the compiler, - * on other systems the symbols are flagged by the compiler and just - * the declaration requires a special tag applied (unfortunately) in a - * compiler dependent way. Some systems can do either. - * - * A small number of older systems also require a symbol from a DLL to - * be flagged to the program that calls it. This is a problem because - * we do not know in the header file included by application code that - * the symbol will come from a shared library, as opposed to a statically - * linked one. For this reason the application must tell us by setting - * the magic flag PNG_USE_DLL to turn on the special processing before - * it includes png.h. - * - * Four additional macros are used to make this happen: - * - * PNG_IMPEXP The magic (if any) to cause a symbol to be exported from - * the build or imported if PNG_USE_DLL is set - compiler - * and system specific. - * - * PNG_EXPORT_TYPE(type) A macro that pre or appends PNG_IMPEXP to - * 'type', compiler specific. - * - * PNG_DLL_EXPORT Set to the magic to use during a libpng build to - * make a symbol exported from the DLL. Not used in the - * public header files; see pngpriv.h for how it is used - * in the libpng build. - * - * PNG_DLL_IMPORT Set to the magic to force the libpng symbols to come - * from a DLL - used to define PNG_IMPEXP when - * PNG_USE_DLL is set. - */ - -/* System specific discovery. - * ========================== - * This code is used at build time to find PNG_IMPEXP, the API settings - * and PNG_EXPORT_TYPE(), it may also set a macro to indicate the DLL - * import processing is possible. On Windows systems it also sets - * compiler-specific macros to the values required to change the calling - * conventions of the various functions. - */ -#if defined(_Windows) || defined(_WINDOWS) || defined(WIN32) ||\ - defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) - /* Windows system (DOS doesn't support DLLs). Includes builds under Cygwin or - * MinGW on any architecture currently supported by Windows. Also includes - * Watcom builds but these need special treatment because they are not - * compatible with GCC or Visual C because of different calling conventions. - */ -# if PNG_API_RULE == 2 - /* If this line results in an error, either because __watcall is not - * understood or because of a redefine just below you cannot use *this* - * build of the library with the compiler you are using. *This* build was - * build using Watcom and applications must also be built using Watcom! - */ -# define PNGCAPI __watcall -# endif - -# if defined(__GNUC__) || (defined(_MSC_VER) && (_MSC_VER >= 800)) -# define PNGCAPI __cdecl -# if PNG_API_RULE == 1 - /* If this line results in an error __stdcall is not understood and - * PNG_API_RULE should not have been set to '1'. - */ -# define PNGAPI __stdcall -# endif -# else - /* An older compiler, or one not detected (erroneously) above, - * if necessary override on the command line to get the correct - * variants for the compiler. - */ -# ifndef PNGCAPI -# define PNGCAPI _cdecl -# endif -# if PNG_API_RULE == 1 && !defined(PNGAPI) -# define PNGAPI _stdcall -# endif -# endif /* compiler/api */ - - /* NOTE: PNGCBAPI always defaults to PNGCAPI. */ - -# if defined(PNGAPI) && !defined(PNG_USER_PRIVATEBUILD) -# error "PNG_USER_PRIVATEBUILD must be defined if PNGAPI is changed" -# endif - -# if (defined(_MSC_VER) && _MSC_VER < 800) ||\ - (defined(__BORLANDC__) && __BORLANDC__ < 0x500) - /* older Borland and MSC - * compilers used '__export' and required this to be after - * the type. - */ -# ifndef PNG_EXPORT_TYPE -# define PNG_EXPORT_TYPE(type) type PNG_IMPEXP -# endif -# define PNG_DLL_EXPORT __export -# else /* newer compiler */ -# define PNG_DLL_EXPORT __declspec(dllexport) -# ifndef PNG_DLL_IMPORT -# define PNG_DLL_IMPORT __declspec(dllimport) -# endif -# endif /* compiler */ - -#else /* !Windows */ -# if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) -# define PNGAPI _System -# else /* !Windows/x86 && !OS/2 */ - /* Use the defaults, or define PNG*API on the command line (but - * this will have to be done for every compile!) - */ -# endif /* other system, !OS/2 */ -#endif /* !Windows/x86 */ - -/* Now do all the defaulting . */ -#ifndef PNGCAPI -# define PNGCAPI -#endif -#ifndef PNGCBAPI -# define PNGCBAPI PNGCAPI -#endif -#ifndef PNGAPI -# define PNGAPI PNGCAPI -#endif - -/* PNG_IMPEXP may be set on the compilation system command line or (if not set) - * then in an internal header file when building the library, otherwise (when - * using the library) it is set here. - */ -#ifndef PNG_IMPEXP -# if defined(PNG_USE_DLL) && defined(PNG_DLL_IMPORT) - /* This forces use of a DLL, disallowing static linking */ -# define PNG_IMPEXP PNG_DLL_IMPORT -# endif - -# ifndef PNG_IMPEXP -# define PNG_IMPEXP -# endif -#endif - -/* In 1.5.2 the definition of PNG_FUNCTION has been changed to always treat - * 'attributes' as a storage class - the attributes go at the start of the - * function definition, and attributes are always appended regardless of the - * compiler. This considerably simplifies these macros but may cause problems - * if any compilers both need function attributes and fail to handle them as - * a storage class (this is unlikely.) - */ -#ifndef PNG_FUNCTION -# define PNG_FUNCTION(type, name, args, attributes) attributes type name args -#endif - -#ifndef PNG_EXPORT_TYPE -# define PNG_EXPORT_TYPE(type) PNG_IMPEXP type -#endif - - /* The ordinal value is only relevant when preprocessing png.h for symbol - * table entries, so we discard it here. See the .dfn files in the - * scripts directory. - */ - -#ifndef PNG_EXPORTA -# define PNG_EXPORTA(ordinal, type, name, args, attributes) \ - PNG_FUNCTION(PNG_EXPORT_TYPE(type), (PNGAPI name), PNGARG(args), \ - PNG_LINKAGE_API attributes) -#endif - -/* ANSI-C (C90) does not permit a macro to be invoked with an empty argument, - * so make something non-empty to satisfy the requirement: - */ -#define PNG_EMPTY /*empty list*/ - -#define PNG_EXPORT(ordinal, type, name, args) \ - PNG_EXPORTA(ordinal, type, name, args, PNG_EMPTY) - -/* Use PNG_REMOVED to comment out a removed interface. */ -#ifndef PNG_REMOVED -# define PNG_REMOVED(ordinal, type, name, args, attributes) -#endif - -#ifndef PNG_CALLBACK -# define PNG_CALLBACK(type, name, args) type (PNGCBAPI name) PNGARG(args) -#endif - -/* Support for compiler specific function attributes. These are used - * so that where compiler support is available incorrect use of API - * functions in png.h will generate compiler warnings. - * - * Added at libpng-1.2.41. - */ - -#ifndef PNG_NO_PEDANTIC_WARNINGS -# ifndef PNG_PEDANTIC_WARNINGS_SUPPORTED -# define PNG_PEDANTIC_WARNINGS_SUPPORTED -# endif -#endif - -#ifdef PNG_PEDANTIC_WARNINGS_SUPPORTED - /* Support for compiler specific function attributes. These are used - * so that where compiler support is available, incorrect use of API - * functions in png.h will generate compiler warnings. Added at libpng - * version 1.2.41. Disabling these removes the warnings but may also produce - * less efficient code. - */ -# if defined(__clang__) && defined(__has_attribute) - /* Clang defines both __clang__ and __GNUC__. Check __clang__ first. */ -# if !defined(PNG_USE_RESULT) && __has_attribute(__warn_unused_result__) -# define PNG_USE_RESULT __attribute__((__warn_unused_result__)) -# endif -# if !defined(PNG_NORETURN) && __has_attribute(__noreturn__) -# define PNG_NORETURN __attribute__((__noreturn__)) -# endif -# if !defined(PNG_ALLOCATED) && __has_attribute(__malloc__) -# define PNG_ALLOCATED __attribute__((__malloc__)) -# endif -# if !defined(PNG_DEPRECATED) && __has_attribute(__deprecated__) -# define PNG_DEPRECATED __attribute__((__deprecated__)) -# endif -# if !defined(PNG_PRIVATE) -# ifdef __has_extension -# if __has_extension(attribute_unavailable_with_message) -# define PNG_PRIVATE __attribute__((__unavailable__(\ - "This function is not exported by libpng."))) -# endif -# endif -# endif -# ifndef PNG_RESTRICT -# define PNG_RESTRICT __restrict -# endif - -# elif defined(__GNUC__) -# ifndef PNG_USE_RESULT -# define PNG_USE_RESULT __attribute__((__warn_unused_result__)) -# endif -# ifndef PNG_NORETURN -# define PNG_NORETURN __attribute__((__noreturn__)) -# endif -# if __GNUC__ >= 3 -# ifndef PNG_ALLOCATED -# define PNG_ALLOCATED __attribute__((__malloc__)) -# endif -# ifndef PNG_DEPRECATED -# define PNG_DEPRECATED __attribute__((__deprecated__)) -# endif -# ifndef PNG_PRIVATE -# if 0 /* Doesn't work so we use deprecated instead*/ -# define PNG_PRIVATE \ - __attribute__((warning("This function is not exported by libpng."))) -# else -# define PNG_PRIVATE \ - __attribute__((__deprecated__)) -# endif -# endif -# if ((__GNUC__ > 3) || !defined(__GNUC_MINOR__) || (__GNUC_MINOR__ >= 1)) -# ifndef PNG_RESTRICT -# define PNG_RESTRICT __restrict -# endif -# endif /* __GNUC__.__GNUC_MINOR__ > 3.0 */ -# endif /* __GNUC__ >= 3 */ - -# elif defined(_MSC_VER) && (_MSC_VER >= 1300) -# ifndef PNG_USE_RESULT -# define PNG_USE_RESULT /* not supported */ -# endif -# ifndef PNG_NORETURN -# define PNG_NORETURN __declspec(noreturn) -# endif -# ifndef PNG_ALLOCATED -# if (_MSC_VER >= 1400) -# define PNG_ALLOCATED __declspec(restrict) -# endif -# endif -# ifndef PNG_DEPRECATED -# define PNG_DEPRECATED __declspec(deprecated) -# endif -# ifndef PNG_PRIVATE -# define PNG_PRIVATE __declspec(deprecated) -# endif -# ifndef PNG_RESTRICT -# if (_MSC_VER >= 1400) -# define PNG_RESTRICT __restrict -# endif -# endif - -# elif defined(__WATCOMC__) -# ifndef PNG_RESTRICT -# define PNG_RESTRICT __restrict -# endif -# endif -#endif /* PNG_PEDANTIC_WARNINGS */ - -#ifndef PNG_DEPRECATED -# define PNG_DEPRECATED /* Use of this function is deprecated */ -#endif -#ifndef PNG_USE_RESULT -# define PNG_USE_RESULT /* The result of this function must be checked */ -#endif -#ifndef PNG_NORETURN -# define PNG_NORETURN /* This function does not return */ -#endif -#ifndef PNG_ALLOCATED -# define PNG_ALLOCATED /* The result of the function is new memory */ -#endif -#ifndef PNG_PRIVATE -# define PNG_PRIVATE /* This is a private libpng function */ -#endif -#ifndef PNG_RESTRICT -# define PNG_RESTRICT /* The C99 "restrict" feature */ -#endif - -#ifndef PNG_FP_EXPORT /* A floating point API. */ -# ifdef PNG_FLOATING_POINT_SUPPORTED -# define PNG_FP_EXPORT(ordinal, type, name, args)\ - PNG_EXPORT(ordinal, type, name, args); -# else /* No floating point APIs */ -# define PNG_FP_EXPORT(ordinal, type, name, args) -# endif -#endif -#ifndef PNG_FIXED_EXPORT /* A fixed point API. */ -# ifdef PNG_FIXED_POINT_SUPPORTED -# define PNG_FIXED_EXPORT(ordinal, type, name, args)\ - PNG_EXPORT(ordinal, type, name, args); -# else /* No fixed point APIs */ -# define PNG_FIXED_EXPORT(ordinal, type, name, args) -# endif -#endif - -#ifndef PNG_BUILDING_SYMBOL_TABLE -/* Some typedefs to get us started. These should be safe on most of the common - * platforms. - * - * png_uint_32 and png_int_32 may, currently, be larger than required to hold a - * 32-bit value however this is not normally advisable. - * - * png_uint_16 and png_int_16 should always be two bytes in size - this is - * verified at library build time. - * - * png_byte must always be one byte in size. - * - * The checks below use constants from limits.h, as defined by the ISOC90 - * standard. - */ -#if CHAR_BIT == 8 && UCHAR_MAX == 255 - typedef unsigned char png_byte; -#else -# error "libpng requires 8-bit bytes" -#endif - -#if INT_MIN == -32768 && INT_MAX == 32767 - typedef int png_int_16; -#elif SHRT_MIN == -32768 && SHRT_MAX == 32767 - typedef short png_int_16; -#else -# error "libpng requires a signed 16-bit type" -#endif - -#if UINT_MAX == 65535 - typedef unsigned int png_uint_16; -#elif USHRT_MAX == 65535 - typedef unsigned short png_uint_16; -#else -# error "libpng requires an unsigned 16-bit type" -#endif - -#if INT_MIN < -2147483646 && INT_MAX > 2147483646 - typedef int png_int_32; -#elif LONG_MIN < -2147483646 && LONG_MAX > 2147483646 - typedef long int png_int_32; -#else -# error "libpng requires a signed 32-bit (or more) type" -#endif - -#if UINT_MAX > 4294967294U - typedef unsigned int png_uint_32; -#elif ULONG_MAX > 4294967294U - typedef unsigned long int png_uint_32; -#else -# error "libpng requires an unsigned 32-bit (or more) type" -#endif - -/* Prior to 1.6.0, it was possible to disable the use of size_t and ptrdiff_t. - * From 1.6.0 onwards, an ISO C90 compiler, as well as a standard-compliant - * behavior of sizeof and ptrdiff_t are required. - * The legacy typedefs are provided here for backwards compatibility. - */ -typedef size_t png_size_t; -typedef ptrdiff_t png_ptrdiff_t; - -/* libpng needs to know the maximum value of 'size_t' and this controls the - * definition of png_alloc_size_t, below. This maximum value of size_t limits - * but does not control the maximum allocations the library makes - there is - * direct application control of this through png_set_user_limits(). - */ -#ifndef PNG_SMALL_SIZE_T - /* Compiler specific tests for systems where size_t is known to be less than - * 32 bits (some of these systems may no longer work because of the lack of - * 'far' support; see above.) - */ -# if (defined(__TURBOC__) && !defined(__FLAT__)) ||\ - (defined(_MSC_VER) && defined(MAXSEG_64K)) -# define PNG_SMALL_SIZE_T -# endif -#endif - -/* png_alloc_size_t is guaranteed to be no smaller than size_t, and no smaller - * than png_uint_32. Casts from size_t or png_uint_32 to png_alloc_size_t are - * not necessary; in fact, it is recommended not to use them at all, so that - * the compiler can complain when something turns out to be problematic. - * - * Casts in the other direction (from png_alloc_size_t to size_t or - * png_uint_32) should be explicitly applied; however, we do not expect to - * encounter practical situations that require such conversions. - * - * PNG_SMALL_SIZE_T must be defined if the maximum value of size_t is less than - * 4294967295 - i.e. less than the maximum value of png_uint_32. - */ -#ifdef PNG_SMALL_SIZE_T - typedef png_uint_32 png_alloc_size_t; -#else - typedef size_t png_alloc_size_t; -#endif - -/* Prior to 1.6.0 libpng offered limited support for Microsoft C compiler - * implementations of Intel CPU specific support of user-mode segmented address - * spaces, where 16-bit pointers address more than 65536 bytes of memory using - * separate 'segment' registers. The implementation requires two different - * types of pointer (only one of which includes the segment value.) - * - * If required this support is available in version 1.2 of libpng and may be - * available in versions through 1.5, although the correctness of the code has - * not been verified recently. - */ - -/* Typedef for floating-point numbers that are converted to fixed-point with a - * multiple of 100,000, e.g., gamma - */ -typedef png_int_32 png_fixed_point; - -/* Add typedefs for pointers */ -typedef void * png_voidp; -typedef const void * png_const_voidp; -typedef png_byte * png_bytep; -typedef const png_byte * png_const_bytep; -typedef png_uint_32 * png_uint_32p; -typedef const png_uint_32 * png_const_uint_32p; -typedef png_int_32 * png_int_32p; -typedef const png_int_32 * png_const_int_32p; -typedef png_uint_16 * png_uint_16p; -typedef const png_uint_16 * png_const_uint_16p; -typedef png_int_16 * png_int_16p; -typedef const png_int_16 * png_const_int_16p; -typedef char * png_charp; -typedef const char * png_const_charp; -typedef png_fixed_point * png_fixed_point_p; -typedef const png_fixed_point * png_const_fixed_point_p; -typedef size_t * png_size_tp; -typedef const size_t * png_const_size_tp; - -#ifdef PNG_STDIO_SUPPORTED -typedef FILE * png_FILE_p; -#endif - -#ifdef PNG_FLOATING_POINT_SUPPORTED -typedef double * png_doublep; -typedef const double * png_const_doublep; -#endif - -/* Pointers to pointers; i.e. arrays */ -typedef png_byte * * png_bytepp; -typedef png_uint_32 * * png_uint_32pp; -typedef png_int_32 * * png_int_32pp; -typedef png_uint_16 * * png_uint_16pp; -typedef png_int_16 * * png_int_16pp; -typedef const char * * png_const_charpp; -typedef char * * png_charpp; -typedef png_fixed_point * * png_fixed_point_pp; -#ifdef PNG_FLOATING_POINT_SUPPORTED -typedef double * * png_doublepp; -#endif - -/* Pointers to pointers to pointers; i.e., pointer to array */ -typedef char * * * png_charppp; - -#endif /* PNG_BUILDING_SYMBOL_TABLE */ - -#endif /* PNGCONF_H */ diff --git a/libs/include/libpng/pnglibconf.h b/libs/include/libpng/pnglibconf.h deleted file mode 100644 index 702aad8..0000000 --- a/libs/include/libpng/pnglibconf.h +++ /dev/null @@ -1,219 +0,0 @@ -/* pnglibconf.h - library build configuration */ - -/* libpng version 1.6.37 */ - -/* Copyright (c) 2018-2019 Cosmin Truta */ -/* Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson */ - -/* This code is released under the libpng license. */ -/* For conditions of distribution and use, see the disclaimer */ -/* and license in png.h */ - -/* pnglibconf.h */ -/* Machine generated file: DO NOT EDIT */ -/* Derived from: scripts/pnglibconf.dfa */ -#ifndef PNGLCONF_H -#define PNGLCONF_H -/* options */ -#define PNG_16BIT_SUPPORTED -#define PNG_ALIGNED_MEMORY_SUPPORTED -/*#undef PNG_ARM_NEON_API_SUPPORTED*/ -/*#undef PNG_ARM_NEON_CHECK_SUPPORTED*/ -#define PNG_BENIGN_ERRORS_SUPPORTED -#define PNG_BENIGN_READ_ERRORS_SUPPORTED -/*#undef PNG_BENIGN_WRITE_ERRORS_SUPPORTED*/ -#define PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED -#define PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED -#define PNG_COLORSPACE_SUPPORTED -#define PNG_CONSOLE_IO_SUPPORTED -#define PNG_CONVERT_tIME_SUPPORTED -#define PNG_EASY_ACCESS_SUPPORTED -/*#undef PNG_ERROR_NUMBERS_SUPPORTED*/ -#define PNG_ERROR_TEXT_SUPPORTED -#define PNG_FIXED_POINT_SUPPORTED -#define PNG_FLOATING_ARITHMETIC_SUPPORTED -#define PNG_FLOATING_POINT_SUPPORTED -#define PNG_FORMAT_AFIRST_SUPPORTED -#define PNG_FORMAT_BGR_SUPPORTED -#define PNG_GAMMA_SUPPORTED -#define PNG_GET_PALETTE_MAX_SUPPORTED -#define PNG_HANDLE_AS_UNKNOWN_SUPPORTED -#define PNG_INCH_CONVERSIONS_SUPPORTED -#define PNG_INFO_IMAGE_SUPPORTED -#define PNG_IO_STATE_SUPPORTED -#define PNG_MNG_FEATURES_SUPPORTED -#define PNG_POINTER_INDEXING_SUPPORTED -/*#undef PNG_POWERPC_VSX_API_SUPPORTED*/ -/*#undef PNG_POWERPC_VSX_CHECK_SUPPORTED*/ -#define PNG_PROGRESSIVE_READ_SUPPORTED -#define PNG_READ_16BIT_SUPPORTED -#define PNG_READ_ALPHA_MODE_SUPPORTED -#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED -#define PNG_READ_BACKGROUND_SUPPORTED -#define PNG_READ_BGR_SUPPORTED -#define PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED -#define PNG_READ_COMPOSITE_NODIV_SUPPORTED -#define PNG_READ_COMPRESSED_TEXT_SUPPORTED -#define PNG_READ_EXPAND_16_SUPPORTED -#define PNG_READ_EXPAND_SUPPORTED -#define PNG_READ_FILLER_SUPPORTED -#define PNG_READ_GAMMA_SUPPORTED -#define PNG_READ_GET_PALETTE_MAX_SUPPORTED -#define PNG_READ_GRAY_TO_RGB_SUPPORTED -#define PNG_READ_INTERLACING_SUPPORTED -#define PNG_READ_INT_FUNCTIONS_SUPPORTED -#define PNG_READ_INVERT_ALPHA_SUPPORTED -#define PNG_READ_INVERT_SUPPORTED -#define PNG_READ_OPT_PLTE_SUPPORTED -#define PNG_READ_PACKSWAP_SUPPORTED -#define PNG_READ_PACK_SUPPORTED -#define PNG_READ_QUANTIZE_SUPPORTED -#define PNG_READ_RGB_TO_GRAY_SUPPORTED -#define PNG_READ_SCALE_16_TO_8_SUPPORTED -#define PNG_READ_SHIFT_SUPPORTED -#define PNG_READ_STRIP_16_TO_8_SUPPORTED -#define PNG_READ_STRIP_ALPHA_SUPPORTED -#define PNG_READ_SUPPORTED -#define PNG_READ_SWAP_ALPHA_SUPPORTED -#define PNG_READ_SWAP_SUPPORTED -#define PNG_READ_TEXT_SUPPORTED -#define PNG_READ_TRANSFORMS_SUPPORTED -#define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_READ_USER_CHUNKS_SUPPORTED -#define PNG_READ_USER_TRANSFORM_SUPPORTED -#define PNG_READ_bKGD_SUPPORTED -#define PNG_READ_cHRM_SUPPORTED -#define PNG_READ_eXIf_SUPPORTED -#define PNG_READ_gAMA_SUPPORTED -#define PNG_READ_hIST_SUPPORTED -#define PNG_READ_iCCP_SUPPORTED -#define PNG_READ_iTXt_SUPPORTED -#define PNG_READ_oFFs_SUPPORTED -#define PNG_READ_pCAL_SUPPORTED -#define PNG_READ_pHYs_SUPPORTED -#define PNG_READ_sBIT_SUPPORTED -#define PNG_READ_sCAL_SUPPORTED -#define PNG_READ_sPLT_SUPPORTED -#define PNG_READ_sRGB_SUPPORTED -#define PNG_READ_tEXt_SUPPORTED -#define PNG_READ_tIME_SUPPORTED -#define PNG_READ_tRNS_SUPPORTED -#define PNG_READ_zTXt_SUPPORTED -#define PNG_SAVE_INT_32_SUPPORTED -#define PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_SEQUENTIAL_READ_SUPPORTED -#define PNG_SETJMP_SUPPORTED -#define PNG_SET_OPTION_SUPPORTED -#define PNG_SET_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_SET_USER_LIMITS_SUPPORTED -#define PNG_SIMPLIFIED_READ_AFIRST_SUPPORTED -#define PNG_SIMPLIFIED_READ_BGR_SUPPORTED -#define PNG_SIMPLIFIED_READ_SUPPORTED -#define PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED -#define PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED -#define PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED -#define PNG_SIMPLIFIED_WRITE_SUPPORTED -#define PNG_STDIO_SUPPORTED -#define PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_TEXT_SUPPORTED -#define PNG_TIME_RFC1123_SUPPORTED -#define PNG_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_USER_CHUNKS_SUPPORTED -#define PNG_USER_LIMITS_SUPPORTED -#define PNG_USER_MEM_SUPPORTED -#define PNG_USER_TRANSFORM_INFO_SUPPORTED -#define PNG_USER_TRANSFORM_PTR_SUPPORTED -#define PNG_WARNINGS_SUPPORTED -#define PNG_WRITE_16BIT_SUPPORTED -#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED -#define PNG_WRITE_BGR_SUPPORTED -#define PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED -#define PNG_WRITE_COMPRESSED_TEXT_SUPPORTED -#define PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED -#define PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED -#define PNG_WRITE_FILLER_SUPPORTED -#define PNG_WRITE_FILTER_SUPPORTED -#define PNG_WRITE_FLUSH_SUPPORTED -#define PNG_WRITE_GET_PALETTE_MAX_SUPPORTED -#define PNG_WRITE_INTERLACING_SUPPORTED -#define PNG_WRITE_INT_FUNCTIONS_SUPPORTED -#define PNG_WRITE_INVERT_ALPHA_SUPPORTED -#define PNG_WRITE_INVERT_SUPPORTED -#define PNG_WRITE_OPTIMIZE_CMF_SUPPORTED -#define PNG_WRITE_PACKSWAP_SUPPORTED -#define PNG_WRITE_PACK_SUPPORTED -#define PNG_WRITE_SHIFT_SUPPORTED -#define PNG_WRITE_SUPPORTED -#define PNG_WRITE_SWAP_ALPHA_SUPPORTED -#define PNG_WRITE_SWAP_SUPPORTED -#define PNG_WRITE_TEXT_SUPPORTED -#define PNG_WRITE_TRANSFORMS_SUPPORTED -#define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED -#define PNG_WRITE_USER_TRANSFORM_SUPPORTED -#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED -#define PNG_WRITE_bKGD_SUPPORTED -#define PNG_WRITE_cHRM_SUPPORTED -#define PNG_WRITE_eXIf_SUPPORTED -#define PNG_WRITE_gAMA_SUPPORTED -#define PNG_WRITE_hIST_SUPPORTED -#define PNG_WRITE_iCCP_SUPPORTED -#define PNG_WRITE_iTXt_SUPPORTED -#define PNG_WRITE_oFFs_SUPPORTED -#define PNG_WRITE_pCAL_SUPPORTED -#define PNG_WRITE_pHYs_SUPPORTED -#define PNG_WRITE_sBIT_SUPPORTED -#define PNG_WRITE_sCAL_SUPPORTED -#define PNG_WRITE_sPLT_SUPPORTED -#define PNG_WRITE_sRGB_SUPPORTED -#define PNG_WRITE_tEXt_SUPPORTED -#define PNG_WRITE_tIME_SUPPORTED -#define PNG_WRITE_tRNS_SUPPORTED -#define PNG_WRITE_zTXt_SUPPORTED -#define PNG_bKGD_SUPPORTED -#define PNG_cHRM_SUPPORTED -#define PNG_eXIf_SUPPORTED -#define PNG_gAMA_SUPPORTED -#define PNG_hIST_SUPPORTED -#define PNG_iCCP_SUPPORTED -#define PNG_iTXt_SUPPORTED -#define PNG_oFFs_SUPPORTED -#define PNG_pCAL_SUPPORTED -#define PNG_pHYs_SUPPORTED -#define PNG_sBIT_SUPPORTED -#define PNG_sCAL_SUPPORTED -#define PNG_sPLT_SUPPORTED -#define PNG_sRGB_SUPPORTED -#define PNG_tEXt_SUPPORTED -#define PNG_tIME_SUPPORTED -#define PNG_tRNS_SUPPORTED -#define PNG_zTXt_SUPPORTED -/* end of options */ -/* settings */ -#define PNG_API_RULE 0 -#define PNG_DEFAULT_READ_MACROS 1 -#define PNG_GAMMA_THRESHOLD_FIXED 5000 -#define PNG_IDAT_READ_SIZE PNG_ZBUF_SIZE -#define PNG_INFLATE_BUF_SIZE 1024 -#define PNG_LINKAGE_API extern -#define PNG_LINKAGE_CALLBACK extern -#define PNG_LINKAGE_DATA extern -#define PNG_LINKAGE_FUNCTION extern -#define PNG_MAX_GAMMA_8 11 -#define PNG_QUANTIZE_BLUE_BITS 5 -#define PNG_QUANTIZE_GREEN_BITS 5 -#define PNG_QUANTIZE_RED_BITS 5 -#define PNG_TEXT_Z_DEFAULT_COMPRESSION (-1) -#define PNG_TEXT_Z_DEFAULT_STRATEGY 0 -#define PNG_USER_CHUNK_CACHE_MAX 1000 -#define PNG_USER_CHUNK_MALLOC_MAX 8000000 -#define PNG_USER_HEIGHT_MAX 1000000 -#define PNG_USER_WIDTH_MAX 1000000 -#define PNG_ZBUF_SIZE 8192 -#define PNG_ZLIB_VERNUM 0x1280 -#define PNG_Z_DEFAULT_COMPRESSION (-1) -#define PNG_Z_DEFAULT_NOFILTER_STRATEGY 0 -#define PNG_Z_DEFAULT_STRATEGY 1 -#define PNG_sCAL_PRECISION 5 -#define PNG_sRGB_PROFILE_CHECKS 2 -/* end of settings */ -#endif /* PNGLCONF_H */ diff --git a/libs/libnsbmp/libnsbmp.c b/libs/libnsbmp/libnsbmp.c index f6ebd6c..b4da553 100644 --- a/libs/libnsbmp/libnsbmp.c +++ b/libs/libnsbmp/libnsbmp.c @@ -530,7 +530,7 @@ static bmp_result bmp_decode_rgb32(bmp_image *bmp, uint8_t **start, int bytes) assert(bmp->bpp == 32); data = *start; - swidth = bmp->bitmap_callbacks.bitmap_get_bpp(bmp->bitmap) * bmp->width; + swidth = sizeof(uint32_t) * bmp->width; top = bmp->bitmap_callbacks.bitmap_get_buffer(bmp->bitmap); if (!top) return BMP_INSUFFICIENT_MEMORY; @@ -612,7 +612,7 @@ static bmp_result bmp_decode_rgb24(bmp_image *bmp, uint8_t **start, int bytes) assert(bmp->bpp == 24); data = *start; - swidth = bmp->bitmap_callbacks.bitmap_get_bpp(bmp->bitmap) * bmp->width; + swidth = sizeof(uint32_t) * bmp->width; top = bmp->bitmap_callbacks.bitmap_get_buffer(bmp->bitmap); if (!top) { return BMP_INSUFFICIENT_MEMORY; @@ -683,7 +683,7 @@ static bmp_result bmp_decode_rgb16(bmp_image *bmp, uint8_t **start, int bytes) uint16_t word; data = *start; - swidth = bmp->bitmap_callbacks.bitmap_get_bpp(bmp->bitmap) * bmp->width; + swidth = sizeof(uint32_t) * bmp->width; top = bmp->bitmap_callbacks.bitmap_get_buffer(bmp->bitmap); if (!top) return BMP_INSUFFICIENT_MEMORY; @@ -777,7 +777,7 @@ static bmp_result bmp_decode_rgb(bmp_image *bmp, uint8_t **start, int bytes) bit_shifts[i] = 8 - ((i + 1) * bmp->bpp); data = *start; - swidth = bmp->bitmap_callbacks.bitmap_get_bpp(bmp->bitmap) * bmp->width; + swidth = sizeof(uint32_t) * bmp->width; top = bmp->bitmap_callbacks.bitmap_get_buffer(bmp->bitmap); if (!top) return BMP_INSUFFICIENT_MEMORY; @@ -842,7 +842,7 @@ static bmp_result bmp_decode_mask(bmp_image *bmp, uint8_t *data, int bytes) uint32_t x, y, swidth; uint32_t cur_byte = 0; - swidth = bmp->bitmap_callbacks.bitmap_get_bpp(bmp->bitmap) * bmp->width; + swidth = sizeof(uint32_t) * bmp->width; top = bmp->bitmap_callbacks.bitmap_get_buffer(bmp->bitmap); if (!top) return BMP_INSUFFICIENT_MEMORY; @@ -897,7 +897,7 @@ bmp_decode_rle8(bmp_image *bmp, uint8_t *data, int bytes) if (bmp->ico) return BMP_DATA_ERROR; - swidth = bmp->bitmap_callbacks.bitmap_get_bpp(bmp->bitmap) * bmp->width; + swidth = sizeof(uint32_t) * bmp->width; top = bmp->bitmap_callbacks.bitmap_get_buffer(bmp->bitmap); if (!top) return BMP_INSUFFICIENT_MEMORY; @@ -1051,7 +1051,7 @@ bmp_decode_rle4(bmp_image *bmp, uint8_t *data, int bytes) if (bmp->ico) return BMP_DATA_ERROR; - swidth = bmp->bitmap_callbacks.bitmap_get_bpp(bmp->bitmap) * bmp->width; + swidth = sizeof(uint32_t) * bmp->width; top = bmp->bitmap_callbacks.bitmap_get_buffer(bmp->bitmap); if (!top) return BMP_INSUFFICIENT_MEMORY; diff --git a/libs/libnsbmp/libnsbmp.h b/libs/libnsbmp/libnsbmp.h index 71e7909..74ab31b 100644 --- a/libs/libnsbmp/libnsbmp.h +++ b/libs/libnsbmp/libnsbmp.h @@ -66,8 +66,6 @@ typedef struct bmp_bitmap_callback_vt_s { bmp_bitmap_cb_destroy bitmap_destroy; /** Return a pointer to the pixel data in a bitmap. */ bmp_bitmap_cb_get_buffer bitmap_get_buffer; - /** Find the width of a pixel row in bytes. */ - bmp_bitmap_cb_get_bpp bitmap_get_bpp; } bmp_bitmap_callback_vt; /** From d01ff1fee83cb92af2cbb04a389f15f590e97429 Mon Sep 17 00:00:00 2001 From: Joel16 Date: Thu, 10 Apr 2025 18:20:56 +0100 Subject: [PATCH 15/24] app: Remove unnecessary includes --- app/source/ftppsp.cpp | 1 - app/source/gui.cpp | 1 - 2 files changed, 2 deletions(-) diff --git a/app/source/ftppsp.cpp b/app/source/ftppsp.cpp index 918e8d2..c4e7542 100644 --- a/app/source/ftppsp.cpp +++ b/app/source/ftppsp.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #include #include diff --git a/app/source/gui.cpp b/app/source/gui.cpp index 91adeb4..154ec92 100644 --- a/app/source/gui.cpp +++ b/app/source/gui.cpp @@ -1,5 +1,4 @@ #include -#include #include #include "colours.h" From f1f31f10faaa0299055646c8b7f23b9c87953627 Mon Sep 17 00:00:00 2001 From: Joel16 Date: Thu, 10 Apr 2025 18:21:24 +0100 Subject: [PATCH 16/24] libs: Use updated libFLAC from pspsdk --- libs/include/FLAC/all.h | 371 ----- libs/include/FLAC/assert.h | 46 - libs/include/FLAC/callback.h | 185 --- libs/include/FLAC/export.h | 97 -- libs/include/FLAC/format.h | 1025 ------------- libs/include/FLAC/metadata.h | 2182 ---------------------------- libs/include/FLAC/ordinals.h | 85 -- libs/include/FLAC/stream_decoder.h | 1559 -------------------- libs/include/FLAC/stream_encoder.h | 1790 ----------------------- libs/lib/libFLAC.a | Bin 449644 -> 0 bytes 10 files changed, 7340 deletions(-) delete mode 100644 libs/include/FLAC/all.h delete mode 100644 libs/include/FLAC/assert.h delete mode 100644 libs/include/FLAC/callback.h delete mode 100644 libs/include/FLAC/export.h delete mode 100644 libs/include/FLAC/format.h delete mode 100644 libs/include/FLAC/metadata.h delete mode 100644 libs/include/FLAC/ordinals.h delete mode 100644 libs/include/FLAC/stream_decoder.h delete mode 100644 libs/include/FLAC/stream_encoder.h delete mode 100644 libs/lib/libFLAC.a diff --git a/libs/include/FLAC/all.h b/libs/include/FLAC/all.h deleted file mode 100644 index 6ba03c1..0000000 --- a/libs/include/FLAC/all.h +++ /dev/null @@ -1,371 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000-2009 Josh Coalson - * Copyright (C) 2011-2016 Xiph.Org Foundation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__ALL_H -#define FLAC__ALL_H - -#include "export.h" - -#include "assert.h" -#include "callback.h" -#include "format.h" -#include "metadata.h" -#include "ordinals.h" -#include "stream_decoder.h" -#include "stream_encoder.h" - -/** \mainpage - * - * \section intro Introduction - * - * This is the documentation for the FLAC C and C++ APIs. It is - * highly interconnected; this introduction should give you a top - * level idea of the structure and how to find the information you - * need. As a prerequisite you should have at least a basic - * knowledge of the FLAC format, documented - * here. - * - * \section c_api FLAC C API - * - * The FLAC C API is the interface to libFLAC, a set of structures - * describing the components of FLAC streams, and functions for - * encoding and decoding streams, as well as manipulating FLAC - * metadata in files. The public include files will be installed - * in your include area (for example /usr/include/FLAC/...). - * - * By writing a little code and linking against libFLAC, it is - * relatively easy to add FLAC support to another program. The - * library is licensed under Xiph's BSD license. - * Complete source code of libFLAC as well as the command-line - * encoder and plugins is available and is a useful source of - * examples. - * - * Aside from encoders and decoders, libFLAC provides a powerful - * metadata interface for manipulating metadata in FLAC files. It - * allows the user to add, delete, and modify FLAC metadata blocks - * and it can automatically take advantage of PADDING blocks to avoid - * rewriting the entire FLAC file when changing the size of the - * metadata. - * - * libFLAC usually only requires the standard C library and C math - * library. In particular, threading is not used so there is no - * dependency on a thread library. However, libFLAC does not use - * global variables and should be thread-safe. - * - * libFLAC also supports encoding to and decoding from Ogg FLAC. - * However the metadata editing interfaces currently have limited - * read-only support for Ogg FLAC files. - * - * \section cpp_api FLAC C++ API - * - * The FLAC C++ API is a set of classes that encapsulate the - * structures and functions in libFLAC. They provide slightly more - * functionality with respect to metadata but are otherwise - * equivalent. For the most part, they share the same usage as - * their counterparts in libFLAC, and the FLAC C API documentation - * can be used as a supplement. The public include files - * for the C++ API will be installed in your include area (for - * example /usr/include/FLAC++/...). - * - * libFLAC++ is also licensed under - * Xiph's BSD license. - * - * \section getting_started Getting Started - * - * A good starting point for learning the API is to browse through - * the modules. Modules are logical - * groupings of related functions or classes, which correspond roughly - * to header files or sections of header files. Each module includes a - * detailed description of the general usage of its functions or - * classes. - * - * From there you can go on to look at the documentation of - * individual functions. You can see different views of the individual - * functions through the links in top bar across this page. - * - * If you prefer a more hands-on approach, you can jump right to some - * example code. - * - * \section porting_guide Porting Guide - * - * Starting with FLAC 1.1.3 a \link porting Porting Guide \endlink - * has been introduced which gives detailed instructions on how to - * port your code to newer versions of FLAC. - * - * \section embedded_developers Embedded Developers - * - * libFLAC has grown larger over time as more functionality has been - * included, but much of it may be unnecessary for a particular embedded - * implementation. Unused parts may be pruned by some simple editing of - * src/libFLAC/Makefile.am. In general, the decoders, encoders, and - * metadata interface are all independent from each other. - * - * It is easiest to just describe the dependencies: - * - * - All modules depend on the \link flac_format Format \endlink module. - * - The decoders and encoders depend on the bitbuffer. - * - The decoder is independent of the encoder. The encoder uses the - * decoder because of the verify feature, but this can be removed if - * not needed. - * - Parts of the metadata interface require the stream decoder (but not - * the encoder). - * - Ogg support is selectable through the compile time macro - * \c FLAC__HAS_OGG. - * - * For example, if your application only requires the stream decoder, no - * encoder, and no metadata interface, you can remove the stream encoder - * and the metadata interface, which will greatly reduce the size of the - * library. - * - * Also, there are several places in the libFLAC code with comments marked - * with "OPT:" where a \#define can be changed to enable code that might be - * faster on a specific platform. Experimenting with these can yield faster - * binaries. - */ - -/** \defgroup porting Porting Guide for New Versions - * - * This module describes differences in the library interfaces from - * version to version. It assists in the porting of code that uses - * the libraries to newer versions of FLAC. - * - * One simple facility for making porting easier that has been added - * in FLAC 1.1.3 is a set of \#defines in \c export.h of each - * library's includes (e.g. \c include/FLAC/export.h). The - * \#defines mirror the libraries' - * libtool version numbers, - * e.g. in libFLAC there are \c FLAC_API_VERSION_CURRENT, - * \c FLAC_API_VERSION_REVISION, and \c FLAC_API_VERSION_AGE. - * These can be used to support multiple versions of an API during the - * transition phase, e.g. - * - * \code - * #if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT <= 7 - * legacy code - * #else - * new code - * #endif - * \endcode - * - * The source will work for multiple versions and the legacy code can - * easily be removed when the transition is complete. - * - * Another available symbol is FLAC_API_SUPPORTS_OGG_FLAC (defined in - * include/FLAC/export.h), which can be used to determine whether or not - * the library has been compiled with support for Ogg FLAC. This is - * simpler than trying to call an Ogg init function and catching the - * error. - */ - -/** \defgroup porting_1_1_2_to_1_1_3 Porting from FLAC 1.1.2 to 1.1.3 - * \ingroup porting - * - * \brief - * This module describes porting from FLAC 1.1.2 to FLAC 1.1.3. - * - * The main change between the APIs in 1.1.2 and 1.1.3 is that they have - * been simplified. First, libOggFLAC has been merged into libFLAC and - * libOggFLAC++ has been merged into libFLAC++. Second, both the three - * decoding layers and three encoding layers have been merged into a - * single stream decoder and stream encoder. That is, the functionality - * of FLAC__SeekableStreamDecoder and FLAC__FileDecoder has been merged - * into FLAC__StreamDecoder, and FLAC__SeekableStreamEncoder and - * FLAC__FileEncoder into FLAC__StreamEncoder. Only the - * FLAC__StreamDecoder and FLAC__StreamEncoder remain. What this means - * is there is now a single API that can be used to encode or decode - * streams to/from native FLAC or Ogg FLAC and the single API can work - * on both seekable and non-seekable streams. - * - * Instead of creating an encoder or decoder of a certain layer, now the - * client will always create a FLAC__StreamEncoder or - * FLAC__StreamDecoder. The old layers are now differentiated by the - * initialization function. For example, for the decoder, - * FLAC__stream_decoder_init() has been replaced by - * FLAC__stream_decoder_init_stream(). This init function takes - * callbacks for the I/O, and the seeking callbacks are optional. This - * allows the client to use the same object for seekable and - * non-seekable streams. For decoding a FLAC file directly, the client - * can use FLAC__stream_decoder_init_file() and pass just a filename - * and fewer callbacks; most of the other callbacks are supplied - * internally. For situations where fopen()ing by filename is not - * possible (e.g. Unicode filenames on Windows) the client can instead - * open the file itself and supply the FILE* to - * FLAC__stream_decoder_init_FILE(). The init functions now returns a - * FLAC__StreamDecoderInitStatus instead of FLAC__StreamDecoderState. - * Since the callbacks and client data are now passed to the init - * function, the FLAC__stream_decoder_set_*_callback() functions and - * FLAC__stream_decoder_set_client_data() are no longer needed. The - * rest of the calls to the decoder are the same as before. - * - * There are counterpart init functions for Ogg FLAC, e.g. - * FLAC__stream_decoder_init_ogg_stream(). All the rest of the calls - * and callbacks are the same as for native FLAC. - * - * As an example, in FLAC 1.1.2 a seekable stream decoder would have - * been set up like so: - * - * \code - * FLAC__SeekableStreamDecoder *decoder = FLAC__seekable_stream_decoder_new(); - * if(decoder == NULL) do_something; - * FLAC__seekable_stream_decoder_set_md5_checking(decoder, true); - * [... other settings ...] - * FLAC__seekable_stream_decoder_set_read_callback(decoder, my_read_callback); - * FLAC__seekable_stream_decoder_set_seek_callback(decoder, my_seek_callback); - * FLAC__seekable_stream_decoder_set_tell_callback(decoder, my_tell_callback); - * FLAC__seekable_stream_decoder_set_length_callback(decoder, my_length_callback); - * FLAC__seekable_stream_decoder_set_eof_callback(decoder, my_eof_callback); - * FLAC__seekable_stream_decoder_set_write_callback(decoder, my_write_callback); - * FLAC__seekable_stream_decoder_set_metadata_callback(decoder, my_metadata_callback); - * FLAC__seekable_stream_decoder_set_error_callback(decoder, my_error_callback); - * FLAC__seekable_stream_decoder_set_client_data(decoder, my_client_data); - * if(FLAC__seekable_stream_decoder_init(decoder) != FLAC__SEEKABLE_STREAM_DECODER_OK) do_something; - * \endcode - * - * In FLAC 1.1.3 it is like this: - * - * \code - * FLAC__StreamDecoder *decoder = FLAC__stream_decoder_new(); - * if(decoder == NULL) do_something; - * FLAC__stream_decoder_set_md5_checking(decoder, true); - * [... other settings ...] - * if(FLAC__stream_decoder_init_stream( - * decoder, - * my_read_callback, - * my_seek_callback, // or NULL - * my_tell_callback, // or NULL - * my_length_callback, // or NULL - * my_eof_callback, // or NULL - * my_write_callback, - * my_metadata_callback, // or NULL - * my_error_callback, - * my_client_data - * ) != FLAC__STREAM_DECODER_INIT_STATUS_OK) do_something; - * \endcode - * - * or you could do; - * - * \code - * [...] - * FILE *file = fopen("somefile.flac","rb"); - * if(file == NULL) do_somthing; - * if(FLAC__stream_decoder_init_FILE( - * decoder, - * file, - * my_write_callback, - * my_metadata_callback, // or NULL - * my_error_callback, - * my_client_data - * ) != FLAC__STREAM_DECODER_INIT_STATUS_OK) do_something; - * \endcode - * - * or just: - * - * \code - * [...] - * if(FLAC__stream_decoder_init_file( - * decoder, - * "somefile.flac", - * my_write_callback, - * my_metadata_callback, // or NULL - * my_error_callback, - * my_client_data - * ) != FLAC__STREAM_DECODER_INIT_STATUS_OK) do_something; - * \endcode - * - * Another small change to the decoder is in how it handles unparseable - * streams. Before, when the decoder found an unparseable stream - * (reserved for when the decoder encounters a stream from a future - * encoder that it can't parse), it changed the state to - * \c FLAC__STREAM_DECODER_UNPARSEABLE_STREAM. Now the decoder instead - * drops sync and calls the error callback with a new error code - * \c FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM. This is - * more robust. If your error callback does not discriminate on the the - * error state, your code does not need to be changed. - * - * The encoder now has a new setting: - * FLAC__stream_encoder_set_apodization(). This is for setting the - * method used to window the data before LPC analysis. You only need to - * add a call to this function if the default is not suitable. There - * are also two new convenience functions that may be useful: - * FLAC__metadata_object_cuesheet_calculate_cddb_id() and - * FLAC__metadata_get_cuesheet(). - * - * The \a bytes parameter to FLAC__StreamDecoderReadCallback, - * FLAC__StreamEncoderReadCallback, and FLAC__StreamEncoderWriteCallback - * is now \c size_t instead of \c uint32_t. - */ - -/** \defgroup porting_1_1_3_to_1_1_4 Porting from FLAC 1.1.3 to 1.1.4 - * \ingroup porting - * - * \brief - * This module describes porting from FLAC 1.1.3 to FLAC 1.1.4. - * - * There were no changes to any of the interfaces from 1.1.3 to 1.1.4. - * There was a slight change in the implementation of - * FLAC__stream_encoder_set_metadata(); the function now makes a copy - * of the \a metadata array of pointers so the client no longer needs - * to maintain it after the call. The objects themselves that are - * pointed to by the array are still not copied though and must be - * maintained until the call to FLAC__stream_encoder_finish(). - */ - -/** \defgroup porting_1_1_4_to_1_2_0 Porting from FLAC 1.1.4 to 1.2.0 - * \ingroup porting - * - * \brief - * This module describes porting from FLAC 1.1.4 to FLAC 1.2.0. - * - * There were only very minor changes to the interfaces from 1.1.4 to 1.2.0. - * In libFLAC, \c FLAC__format_sample_rate_is_subset() was added. - * In libFLAC++, \c FLAC::Decoder::Stream::get_decode_position() was added. - * - * Finally, value of the constant \c FLAC__FRAME_HEADER_RESERVED_LEN - * has changed to reflect the conversion of one of the reserved bits - * into active use. It used to be \c 2 and now is \c 1. However the - * FLAC frame header length has not changed, so to skip the proper - * number of bits, use \c FLAC__FRAME_HEADER_RESERVED_LEN + - * \c FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN - */ - -/** \defgroup flac FLAC C API - * - * The FLAC C API is the interface to libFLAC, a set of structures - * describing the components of FLAC streams, and functions for - * encoding and decoding streams, as well as manipulating FLAC - * metadata in files. - * - * You should start with the format components as all other modules - * are dependent on it. - */ - -#endif diff --git a/libs/include/FLAC/assert.h b/libs/include/FLAC/assert.h deleted file mode 100644 index 55b3477..0000000 --- a/libs/include/FLAC/assert.h +++ /dev/null @@ -1,46 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2001-2009 Josh Coalson - * Copyright (C) 2011-2016 Xiph.Org Foundation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__ASSERT_H -#define FLAC__ASSERT_H - -/* we need this since some compilers (like MSVC) leave assert()s on release code (and we don't want to use their ASSERT) */ -#ifndef NDEBUG -#include -#define FLAC__ASSERT(x) assert(x) -#define FLAC__ASSERT_DECLARATION(x) x -#else -#define FLAC__ASSERT(x) -#define FLAC__ASSERT_DECLARATION(x) -#endif - -#endif diff --git a/libs/include/FLAC/callback.h b/libs/include/FLAC/callback.h deleted file mode 100644 index 38e2300..0000000 --- a/libs/include/FLAC/callback.h +++ /dev/null @@ -1,185 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2004-2009 Josh Coalson - * Copyright (C) 2011-2016 Xiph.Org Foundation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__CALLBACK_H -#define FLAC__CALLBACK_H - -#include "ordinals.h" -#include /* for size_t */ - -/** \file include/FLAC/callback.h - * - * \brief - * This module defines the structures for describing I/O callbacks - * to the other FLAC interfaces. - * - * See the detailed documentation for callbacks in the - * \link flac_callbacks callbacks \endlink module. - */ - -/** \defgroup flac_callbacks FLAC/callback.h: I/O callback structures - * \ingroup flac - * - * \brief - * This module defines the structures for describing I/O callbacks - * to the other FLAC interfaces. - * - * The purpose of the I/O callback functions is to create a common way - * for the metadata interfaces to handle I/O. - * - * Originally the metadata interfaces required filenames as the way of - * specifying FLAC files to operate on. This is problematic in some - * environments so there is an additional option to specify a set of - * callbacks for doing I/O on the FLAC file, instead of the filename. - * - * In addition to the callbacks, a FLAC__IOHandle type is defined as an - * opaque structure for a data source. - * - * The callback function prototypes are similar (but not identical) to the - * stdio functions fread, fwrite, fseek, ftell, feof, and fclose. If you use - * stdio streams to implement the callbacks, you can pass fread, fwrite, and - * fclose anywhere a FLAC__IOCallback_Read, FLAC__IOCallback_Write, or - * FLAC__IOCallback_Close is required, and a FILE* anywhere a FLAC__IOHandle - * is required. \warning You generally CANNOT directly use fseek or ftell - * for FLAC__IOCallback_Seek or FLAC__IOCallback_Tell since on most systems - * these use 32-bit offsets and FLAC requires 64-bit offsets to deal with - * large files. You will have to find an equivalent function (e.g. ftello), - * or write a wrapper. The same is true for feof() since this is usually - * implemented as a macro, not as a function whose address can be taken. - * - * \{ - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** This is the opaque handle type used by the callbacks. Typically - * this is a \c FILE* or address of a file descriptor. - */ -typedef void* FLAC__IOHandle; - -/** Signature for the read callback. - * The signature and semantics match POSIX fread() implementations - * and can generally be used interchangeably. - * - * \param ptr The address of the read buffer. - * \param size The size of the records to be read. - * \param nmemb The number of records to be read. - * \param handle The handle to the data source. - * \retval size_t - * The number of records read. - */ -typedef size_t (*FLAC__IOCallback_Read) (void *ptr, size_t size, size_t nmemb, FLAC__IOHandle handle); - -/** Signature for the write callback. - * The signature and semantics match POSIX fwrite() implementations - * and can generally be used interchangeably. - * - * \param ptr The address of the write buffer. - * \param size The size of the records to be written. - * \param nmemb The number of records to be written. - * \param handle The handle to the data source. - * \retval size_t - * The number of records written. - */ -typedef size_t (*FLAC__IOCallback_Write) (const void *ptr, size_t size, size_t nmemb, FLAC__IOHandle handle); - -/** Signature for the seek callback. - * The signature and semantics mostly match POSIX fseek() WITH ONE IMPORTANT - * EXCEPTION: the offset is a 64-bit type whereas fseek() is generally 'long' - * and 32-bits wide. - * - * \param handle The handle to the data source. - * \param offset The new position, relative to \a whence - * \param whence \c SEEK_SET, \c SEEK_CUR, or \c SEEK_END - * \retval int - * \c 0 on success, \c -1 on error. - */ -typedef int (*FLAC__IOCallback_Seek) (FLAC__IOHandle handle, FLAC__int64 offset, int whence); - -/** Signature for the tell callback. - * The signature and semantics mostly match POSIX ftell() WITH ONE IMPORTANT - * EXCEPTION: the offset is a 64-bit type whereas ftell() is generally 'long' - * and 32-bits wide. - * - * \param handle The handle to the data source. - * \retval FLAC__int64 - * The current position on success, \c -1 on error. - */ -typedef FLAC__int64 (*FLAC__IOCallback_Tell) (FLAC__IOHandle handle); - -/** Signature for the EOF callback. - * The signature and semantics mostly match POSIX feof() but WATCHOUT: - * on many systems, feof() is a macro, so in this case a wrapper function - * must be provided instead. - * - * \param handle The handle to the data source. - * \retval int - * \c 0 if not at end of file, nonzero if at end of file. - */ -typedef int (*FLAC__IOCallback_Eof) (FLAC__IOHandle handle); - -/** Signature for the close callback. - * The signature and semantics match POSIX fclose() implementations - * and can generally be used interchangeably. - * - * \param handle The handle to the data source. - * \retval int - * \c 0 on success, \c EOF on error. - */ -typedef int (*FLAC__IOCallback_Close) (FLAC__IOHandle handle); - -/** A structure for holding a set of callbacks. - * Each FLAC interface that requires a FLAC__IOCallbacks structure will - * describe which of the callbacks are required. The ones that are not - * required may be set to NULL. - * - * If the seek requirement for an interface is optional, you can signify that - * a data source is not seekable by setting the \a seek field to \c NULL. - */ -typedef struct { - FLAC__IOCallback_Read read; - FLAC__IOCallback_Write write; - FLAC__IOCallback_Seek seek; - FLAC__IOCallback_Tell tell; - FLAC__IOCallback_Eof eof; - FLAC__IOCallback_Close close; -} FLAC__IOCallbacks; - -/* \} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libs/include/FLAC/export.h b/libs/include/FLAC/export.h deleted file mode 100644 index 3e3e764..0000000 --- a/libs/include/FLAC/export.h +++ /dev/null @@ -1,97 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000-2009 Josh Coalson - * Copyright (C) 2011-2016 Xiph.Org Foundation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__EXPORT_H -#define FLAC__EXPORT_H - -/** \file include/FLAC/export.h - * - * \brief - * This module contains \#defines and symbols for exporting function - * calls, and providing version information and compiled-in features. - * - * See the \link flac_export export \endlink module. - */ - -/** \defgroup flac_export FLAC/export.h: export symbols - * \ingroup flac - * - * \brief - * This module contains \#defines and symbols for exporting function - * calls, and providing version information and compiled-in features. - * - * If you are compiling with MSVC and will link to the static library - * (libFLAC.lib) you should define FLAC__NO_DLL in your project to - * make sure the symbols are exported properly. - * - * \{ - */ - -#if defined(FLAC__NO_DLL) -#define FLAC_API - -#elif defined(_WIN32) -#ifdef FLAC_API_EXPORTS -#define FLAC_API __declspec(dllexport) -#else -#define FLAC_API __declspec(dllimport) -#endif - -#elif defined(FLAC__USE_VISIBILITY_ATTR) -#define FLAC_API __attribute__ ((visibility ("default"))) - -#else -#define FLAC_API - -#endif - -/** These \#defines will mirror the libtool-based library version number, see - * http://www.gnu.org/software/libtool/manual/libtool.html#Libtool-versioning - */ -#define FLAC_API_VERSION_CURRENT 11 -#define FLAC_API_VERSION_REVISION 0 /**< see above */ -#define FLAC_API_VERSION_AGE 3 /**< see above */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** \c 1 if the library has been compiled with support for Ogg FLAC, else \c 0. */ -extern FLAC_API int FLAC_API_SUPPORTS_OGG_FLAC; - -#ifdef __cplusplus -} -#endif - -/* \} */ - -#endif diff --git a/libs/include/FLAC/format.h b/libs/include/FLAC/format.h deleted file mode 100644 index 769ab8a..0000000 --- a/libs/include/FLAC/format.h +++ /dev/null @@ -1,1025 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000-2009 Josh Coalson - * Copyright (C) 2011-2016 Xiph.Org Foundation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__FORMAT_H -#define FLAC__FORMAT_H - -#include "export.h" -#include "ordinals.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** \file include/FLAC/format.h - * - * \brief - * This module contains structure definitions for the representation - * of FLAC format components in memory. These are the basic - * structures used by the rest of the interfaces. - * - * See the detailed documentation in the - * \link flac_format format \endlink module. - */ - -/** \defgroup flac_format FLAC/format.h: format components - * \ingroup flac - * - * \brief - * This module contains structure definitions for the representation - * of FLAC format components in memory. These are the basic - * structures used by the rest of the interfaces. - * - * First, you should be familiar with the - * FLAC format. Many of the values here - * follow directly from the specification. As a user of libFLAC, the - * interesting parts really are the structures that describe the frame - * header and metadata blocks. - * - * The format structures here are very primitive, designed to store - * information in an efficient way. Reading information from the - * structures is easy but creating or modifying them directly is - * more complex. For the most part, as a user of a library, editing - * is not necessary; however, for metadata blocks it is, so there are - * convenience functions provided in the \link flac_metadata metadata - * module \endlink to simplify the manipulation of metadata blocks. - * - * \note - * It's not the best convention, but symbols ending in _LEN are in bits - * and _LENGTH are in bytes. _LENGTH symbols are \#defines instead of - * global variables because they are usually used when declaring byte - * arrays and some compilers require compile-time knowledge of array - * sizes when declared on the stack. - * - * \{ - */ - - -/* - Most of the values described in this file are defined by the FLAC - format specification. There is nothing to tune here. -*/ - -/** The largest legal metadata type code. */ -#define FLAC__MAX_METADATA_TYPE_CODE (126u) - -/** The minimum block size, in samples, permitted by the format. */ -#define FLAC__MIN_BLOCK_SIZE (16u) - -/** The maximum block size, in samples, permitted by the format. */ -#define FLAC__MAX_BLOCK_SIZE (65535u) - -/** The maximum block size, in samples, permitted by the FLAC subset for - * sample rates up to 48kHz. */ -#define FLAC__SUBSET_MAX_BLOCK_SIZE_48000HZ (4608u) - -/** The maximum number of channels permitted by the format. */ -#define FLAC__MAX_CHANNELS (8u) - -/** The minimum sample resolution permitted by the format. */ -#define FLAC__MIN_BITS_PER_SAMPLE (4u) - -/** The maximum sample resolution permitted by the format. */ -#define FLAC__MAX_BITS_PER_SAMPLE (32u) - -/** The maximum sample resolution permitted by libFLAC. - * - * \warning - * FLAC__MAX_BITS_PER_SAMPLE is the limit of the FLAC format. However, - * the reference encoder/decoder is currently limited to 24 bits because - * of prevalent 32-bit math, so make sure and use this value when - * appropriate. - */ -#define FLAC__REFERENCE_CODEC_MAX_BITS_PER_SAMPLE (24u) - -/** The maximum sample rate permitted by the format. The value is - * ((2 ^ 16) - 1) * 10; see FLAC format - * as to why. - */ -#define FLAC__MAX_SAMPLE_RATE (655350u) - -/** The maximum LPC order permitted by the format. */ -#define FLAC__MAX_LPC_ORDER (32u) - -/** The maximum LPC order permitted by the FLAC subset for sample rates - * up to 48kHz. */ -#define FLAC__SUBSET_MAX_LPC_ORDER_48000HZ (12u) - -/** The minimum quantized linear predictor coefficient precision - * permitted by the format. - */ -#define FLAC__MIN_QLP_COEFF_PRECISION (5u) - -/** The maximum quantized linear predictor coefficient precision - * permitted by the format. - */ -#define FLAC__MAX_QLP_COEFF_PRECISION (15u) - -/** The maximum order of the fixed predictors permitted by the format. */ -#define FLAC__MAX_FIXED_ORDER (4u) - -/** The maximum Rice partition order permitted by the format. */ -#define FLAC__MAX_RICE_PARTITION_ORDER (15u) - -/** The maximum Rice partition order permitted by the FLAC Subset. */ -#define FLAC__SUBSET_MAX_RICE_PARTITION_ORDER (8u) - -/** The version string of the release, stamped onto the libraries and binaries. - * - * \note - * This does not correspond to the shared library version number, which - * is used to determine binary compatibility. - */ -extern FLAC_API const char *FLAC__VERSION_STRING; - -/** The vendor string inserted by the encoder into the VORBIS_COMMENT block. - * This is a NUL-terminated ASCII string; when inserted into the - * VORBIS_COMMENT the trailing null is stripped. - */ -extern FLAC_API const char *FLAC__VENDOR_STRING; - -/** The byte string representation of the beginning of a FLAC stream. */ -extern FLAC_API const FLAC__byte FLAC__STREAM_SYNC_STRING[4]; /* = "fLaC" */ - -/** The 32-bit integer big-endian representation of the beginning of - * a FLAC stream. - */ -extern FLAC_API const uint32_t FLAC__STREAM_SYNC; /* = 0x664C6143 */ - -/** The length of the FLAC signature in bits. */ -extern FLAC_API const uint32_t FLAC__STREAM_SYNC_LEN; /* = 32 bits */ - -/** The length of the FLAC signature in bytes. */ -#define FLAC__STREAM_SYNC_LENGTH (4u) - - -/***************************************************************************** - * - * Subframe structures - * - *****************************************************************************/ - -/*****************************************************************************/ - -/** An enumeration of the available entropy coding methods. */ -typedef enum { - FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE = 0, - /**< Residual is coded by partitioning into contexts, each with it's own - * 4-bit Rice parameter. */ - - FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2 = 1 - /**< Residual is coded by partitioning into contexts, each with it's own - * 5-bit Rice parameter. */ -} FLAC__EntropyCodingMethodType; - -/** Maps a FLAC__EntropyCodingMethodType to a C string. - * - * Using a FLAC__EntropyCodingMethodType as the index to this array will - * give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__EntropyCodingMethodTypeString[]; - - -/** Contents of a Rice partitioned residual - */ -typedef struct { - - uint32_t *parameters; - /**< The Rice parameters for each context. */ - - uint32_t *raw_bits; - /**< Widths for escape-coded partitions. Will be non-zero for escaped - * partitions and zero for unescaped partitions. - */ - - uint32_t capacity_by_order; - /**< The capacity of the \a parameters and \a raw_bits arrays - * specified as an order, i.e. the number of array elements - * allocated is 2 ^ \a capacity_by_order. - */ -} FLAC__EntropyCodingMethod_PartitionedRiceContents; - -/** Header for a Rice partitioned residual. (c.f. format specification) - */ -typedef struct { - - uint32_t order; - /**< The partition order, i.e. # of contexts = 2 ^ \a order. */ - - const FLAC__EntropyCodingMethod_PartitionedRiceContents *contents; - /**< The context's Rice parameters and/or raw bits. */ - -} FLAC__EntropyCodingMethod_PartitionedRice; - -extern FLAC_API const uint32_t FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN; /**< == 4 (bits) */ -extern FLAC_API const uint32_t FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN; /**< == 4 (bits) */ -extern FLAC_API const uint32_t FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN; /**< == 5 (bits) */ -extern FLAC_API const uint32_t FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN; /**< == 5 (bits) */ - -extern FLAC_API const uint32_t FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER; -/**< == (1<format specification) - */ -typedef struct { - FLAC__EntropyCodingMethodType type; - union { - FLAC__EntropyCodingMethod_PartitionedRice partitioned_rice; - } data; -} FLAC__EntropyCodingMethod; - -extern FLAC_API const uint32_t FLAC__ENTROPY_CODING_METHOD_TYPE_LEN; /**< == 2 (bits) */ - -/*****************************************************************************/ - -/** An enumeration of the available subframe types. */ -typedef enum { - FLAC__SUBFRAME_TYPE_CONSTANT = 0, /**< constant signal */ - FLAC__SUBFRAME_TYPE_VERBATIM = 1, /**< uncompressed signal */ - FLAC__SUBFRAME_TYPE_FIXED = 2, /**< fixed polynomial prediction */ - FLAC__SUBFRAME_TYPE_LPC = 3 /**< linear prediction */ -} FLAC__SubframeType; - -/** Maps a FLAC__SubframeType to a C string. - * - * Using a FLAC__SubframeType as the index to this array will - * give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__SubframeTypeString[]; - - -/** CONSTANT subframe. (c.f. format specification) - */ -typedef struct { - FLAC__int32 value; /**< The constant signal value. */ -} FLAC__Subframe_Constant; - - -/** VERBATIM subframe. (c.f. format specification) - */ -typedef struct { - const FLAC__int32 *data; /**< A pointer to verbatim signal. */ -} FLAC__Subframe_Verbatim; - - -/** FIXED subframe. (c.f. format specification) - */ -typedef struct { - FLAC__EntropyCodingMethod entropy_coding_method; - /**< The residual coding method. */ - - uint32_t order; - /**< The polynomial order. */ - - FLAC__int32 warmup[FLAC__MAX_FIXED_ORDER]; - /**< Warmup samples to prime the predictor, length == order. */ - - const FLAC__int32 *residual; - /**< The residual signal, length == (blocksize minus order) samples. */ -} FLAC__Subframe_Fixed; - - -/** LPC subframe. (c.f. format specification) - */ -typedef struct { - FLAC__EntropyCodingMethod entropy_coding_method; - /**< The residual coding method. */ - - uint32_t order; - /**< The FIR order. */ - - uint32_t qlp_coeff_precision; - /**< Quantized FIR filter coefficient precision in bits. */ - - int quantization_level; - /**< The qlp coeff shift needed. */ - - FLAC__int32 qlp_coeff[FLAC__MAX_LPC_ORDER]; - /**< FIR filter coefficients. */ - - FLAC__int32 warmup[FLAC__MAX_LPC_ORDER]; - /**< Warmup samples to prime the predictor, length == order. */ - - const FLAC__int32 *residual; - /**< The residual signal, length == (blocksize minus order) samples. */ -} FLAC__Subframe_LPC; - -extern FLAC_API const uint32_t FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN; /**< == 4 (bits) */ -extern FLAC_API const uint32_t FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN; /**< == 5 (bits) */ - - -/** FLAC subframe structure. (c.f. format specification) - */ -typedef struct { - FLAC__SubframeType type; - union { - FLAC__Subframe_Constant constant; - FLAC__Subframe_Fixed fixed; - FLAC__Subframe_LPC lpc; - FLAC__Subframe_Verbatim verbatim; - } data; - uint32_t wasted_bits; -} FLAC__Subframe; - -/** == 1 (bit) - * - * This used to be a zero-padding bit (hence the name - * FLAC__SUBFRAME_ZERO_PAD_LEN) but is now a reserved bit. It still has a - * mandatory value of \c 0 but in the future may take on the value \c 0 or \c 1 - * to mean something else. - */ -extern FLAC_API const uint32_t FLAC__SUBFRAME_ZERO_PAD_LEN; -extern FLAC_API const uint32_t FLAC__SUBFRAME_TYPE_LEN; /**< == 6 (bits) */ -extern FLAC_API const uint32_t FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN; /**< == 1 (bit) */ - -extern FLAC_API const uint32_t FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK; /**< = 0x00 */ -extern FLAC_API const uint32_t FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK; /**< = 0x02 */ -extern FLAC_API const uint32_t FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK; /**< = 0x10 */ -extern FLAC_API const uint32_t FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK; /**< = 0x40 */ - -/*****************************************************************************/ - - -/***************************************************************************** - * - * Frame structures - * - *****************************************************************************/ - -/** An enumeration of the available channel assignments. */ -typedef enum { - FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT = 0, /**< independent channels */ - FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE = 1, /**< left+side stereo */ - FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE = 2, /**< right+side stereo */ - FLAC__CHANNEL_ASSIGNMENT_MID_SIDE = 3 /**< mid+side stereo */ -} FLAC__ChannelAssignment; - -/** Maps a FLAC__ChannelAssignment to a C string. - * - * Using a FLAC__ChannelAssignment as the index to this array will - * give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__ChannelAssignmentString[]; - -/** An enumeration of the possible frame numbering methods. */ -typedef enum { - FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER, /**< number contains the frame number */ - FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER /**< number contains the sample number of first sample in frame */ -} FLAC__FrameNumberType; - -/** Maps a FLAC__FrameNumberType to a C string. - * - * Using a FLAC__FrameNumberType as the index to this array will - * give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__FrameNumberTypeString[]; - - -/** FLAC frame header structure. (c.f. format specification) - */ -typedef struct { - uint32_t blocksize; - /**< The number of samples per subframe. */ - - uint32_t sample_rate; - /**< The sample rate in Hz. */ - - uint32_t channels; - /**< The number of channels (== number of subframes). */ - - FLAC__ChannelAssignment channel_assignment; - /**< The channel assignment for the frame. */ - - uint32_t bits_per_sample; - /**< The sample resolution. */ - - FLAC__FrameNumberType number_type; - /**< The numbering scheme used for the frame. As a convenience, the - * decoder will always convert a frame number to a sample number because - * the rules are complex. */ - - union { - FLAC__uint32 frame_number; - FLAC__uint64 sample_number; - } number; - /**< The frame number or sample number of first sample in frame; - * use the \a number_type value to determine which to use. */ - - FLAC__uint8 crc; - /**< CRC-8 (polynomial = x^8 + x^2 + x^1 + x^0, initialized with 0) - * of the raw frame header bytes, meaning everything before the CRC byte - * including the sync code. - */ -} FLAC__FrameHeader; - -extern FLAC_API const uint32_t FLAC__FRAME_HEADER_SYNC; /**< == 0x3ffe; the frame header sync code */ -extern FLAC_API const uint32_t FLAC__FRAME_HEADER_SYNC_LEN; /**< == 14 (bits) */ -extern FLAC_API const uint32_t FLAC__FRAME_HEADER_RESERVED_LEN; /**< == 1 (bits) */ -extern FLAC_API const uint32_t FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN; /**< == 1 (bits) */ -extern FLAC_API const uint32_t FLAC__FRAME_HEADER_BLOCK_SIZE_LEN; /**< == 4 (bits) */ -extern FLAC_API const uint32_t FLAC__FRAME_HEADER_SAMPLE_RATE_LEN; /**< == 4 (bits) */ -extern FLAC_API const uint32_t FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN; /**< == 4 (bits) */ -extern FLAC_API const uint32_t FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN; /**< == 3 (bits) */ -extern FLAC_API const uint32_t FLAC__FRAME_HEADER_ZERO_PAD_LEN; /**< == 1 (bit) */ -extern FLAC_API const uint32_t FLAC__FRAME_HEADER_CRC_LEN; /**< == 8 (bits) */ - - -/** FLAC frame footer structure. (c.f. format specification) - */ -typedef struct { - FLAC__uint16 crc; - /**< CRC-16 (polynomial = x^16 + x^15 + x^2 + x^0, initialized with - * 0) of the bytes before the crc, back to and including the frame header - * sync code. - */ -} FLAC__FrameFooter; - -extern FLAC_API const uint32_t FLAC__FRAME_FOOTER_CRC_LEN; /**< == 16 (bits) */ - - -/** FLAC frame structure. (c.f. format specification) - */ -typedef struct { - FLAC__FrameHeader header; - FLAC__Subframe subframes[FLAC__MAX_CHANNELS]; - FLAC__FrameFooter footer; -} FLAC__Frame; - -/*****************************************************************************/ - - -/***************************************************************************** - * - * Meta-data structures - * - *****************************************************************************/ - -/** An enumeration of the available metadata block types. */ -typedef enum { - - FLAC__METADATA_TYPE_STREAMINFO = 0, - /**< STREAMINFO block */ - - FLAC__METADATA_TYPE_PADDING = 1, - /**< PADDING block */ - - FLAC__METADATA_TYPE_APPLICATION = 2, - /**< APPLICATION block */ - - FLAC__METADATA_TYPE_SEEKTABLE = 3, - /**< SEEKTABLE block */ - - FLAC__METADATA_TYPE_VORBIS_COMMENT = 4, - /**< VORBISCOMMENT block (a.k.a. FLAC tags) */ - - FLAC__METADATA_TYPE_CUESHEET = 5, - /**< CUESHEET block */ - - FLAC__METADATA_TYPE_PICTURE = 6, - /**< PICTURE block */ - - FLAC__METADATA_TYPE_UNDEFINED = 7, - /**< marker to denote beginning of undefined type range; this number will increase as new metadata types are added */ - - FLAC__MAX_METADATA_TYPE = FLAC__MAX_METADATA_TYPE_CODE, - /**< No type will ever be greater than this. There is not enough room in the protocol block. */ -} FLAC__MetadataType; - -/** Maps a FLAC__MetadataType to a C string. - * - * Using a FLAC__MetadataType as the index to this array will - * give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__MetadataTypeString[]; - - -/** FLAC STREAMINFO structure. (c.f. format specification) - */ -typedef struct { - uint32_t min_blocksize, max_blocksize; - uint32_t min_framesize, max_framesize; - uint32_t sample_rate; - uint32_t channels; - uint32_t bits_per_sample; - FLAC__uint64 total_samples; - FLAC__byte md5sum[16]; -} FLAC__StreamMetadata_StreamInfo; - -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN; /**< == 16 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN; /**< == 16 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN; /**< == 24 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN; /**< == 24 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN; /**< == 20 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN; /**< == 3 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN; /**< == 5 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN; /**< == 36 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_STREAMINFO_MD5SUM_LEN; /**< == 128 (bits) */ - -/** The total stream length of the STREAMINFO block in bytes. */ -#define FLAC__STREAM_METADATA_STREAMINFO_LENGTH (34u) - -/** FLAC PADDING structure. (c.f. format specification) - */ -typedef struct { - int dummy; - /**< Conceptually this is an empty struct since we don't store the - * padding bytes. Empty structs are not allowed by some C compilers, - * hence the dummy. - */ -} FLAC__StreamMetadata_Padding; - - -/** FLAC APPLICATION structure. (c.f. format specification) - */ -typedef struct { - FLAC__byte id[4]; - FLAC__byte *data; -} FLAC__StreamMetadata_Application; - -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_APPLICATION_ID_LEN; /**< == 32 (bits) */ - -/** SeekPoint structure used in SEEKTABLE blocks. (c.f. format specification) - */ -typedef struct { - FLAC__uint64 sample_number; - /**< The sample number of the target frame. */ - - FLAC__uint64 stream_offset; - /**< The offset, in bytes, of the target frame with respect to - * beginning of the first frame. */ - - uint32_t frame_samples; - /**< The number of samples in the target frame. */ -} FLAC__StreamMetadata_SeekPoint; - -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN; /**< == 64 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN; /**< == 64 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN; /**< == 16 (bits) */ - -/** The total stream length of a seek point in bytes. */ -#define FLAC__STREAM_METADATA_SEEKPOINT_LENGTH (18u) - -/** The value used in the \a sample_number field of - * FLAC__StreamMetadataSeekPoint used to indicate a placeholder - * point (== 0xffffffffffffffff). - */ -extern FLAC_API const FLAC__uint64 FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER; - - -/** FLAC SEEKTABLE structure. (c.f. format specification) - * - * \note From the format specification: - * - The seek points must be sorted by ascending sample number. - * - Each seek point's sample number must be the first sample of the - * target frame. - * - Each seek point's sample number must be unique within the table. - * - Existence of a SEEKTABLE block implies a correct setting of - * total_samples in the stream_info block. - * - Behavior is undefined when more than one SEEKTABLE block is - * present in a stream. - */ -typedef struct { - uint32_t num_points; - FLAC__StreamMetadata_SeekPoint *points; -} FLAC__StreamMetadata_SeekTable; - - -/** Vorbis comment entry structure used in VORBIS_COMMENT blocks. (c.f. format specification) - * - * For convenience, the APIs maintain a trailing NUL character at the end of - * \a entry which is not counted toward \a length, i.e. - * \code strlen(entry) == length \endcode - */ -typedef struct { - FLAC__uint32 length; - FLAC__byte *entry; -} FLAC__StreamMetadata_VorbisComment_Entry; - -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN; /**< == 32 (bits) */ - - -/** FLAC VORBIS_COMMENT structure. (c.f. format specification) - */ -typedef struct { - FLAC__StreamMetadata_VorbisComment_Entry vendor_string; - FLAC__uint32 num_comments; - FLAC__StreamMetadata_VorbisComment_Entry *comments; -} FLAC__StreamMetadata_VorbisComment; - -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN; /**< == 32 (bits) */ - - -/** FLAC CUESHEET track index structure. (See the - * format specification for - * the full description of each field.) - */ -typedef struct { - FLAC__uint64 offset; - /**< Offset in samples, relative to the track offset, of the index - * point. - */ - - FLAC__byte number; - /**< The index point number. */ -} FLAC__StreamMetadata_CueSheet_Index; - -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN; /**< == 64 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN; /**< == 8 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN; /**< == 3*8 (bits) */ - - -/** FLAC CUESHEET track structure. (See the - * format specification for - * the full description of each field.) - */ -typedef struct { - FLAC__uint64 offset; - /**< Track offset in samples, relative to the beginning of the FLAC audio stream. */ - - FLAC__byte number; - /**< The track number. */ - - char isrc[13]; - /**< Track ISRC. This is a 12-digit alphanumeric code plus a trailing \c NUL byte */ - - uint32_t type:1; - /**< The track type: 0 for audio, 1 for non-audio. */ - - uint32_t pre_emphasis:1; - /**< The pre-emphasis flag: 0 for no pre-emphasis, 1 for pre-emphasis. */ - - FLAC__byte num_indices; - /**< The number of track index points. */ - - FLAC__StreamMetadata_CueSheet_Index *indices; - /**< NULL if num_indices == 0, else pointer to array of index points. */ - -} FLAC__StreamMetadata_CueSheet_Track; - -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN; /**< == 64 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN; /**< == 8 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN; /**< == 12*8 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN; /**< == 1 (bit) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN; /**< == 1 (bit) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN; /**< == 6+13*8 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN; /**< == 8 (bits) */ - - -/** FLAC CUESHEET structure. (See the - * format specification - * for the full description of each field.) - */ -typedef struct { - char media_catalog_number[129]; - /**< Media catalog number, in ASCII printable characters 0x20-0x7e. In - * general, the media catalog number may be 0 to 128 bytes long; any - * unused characters should be right-padded with NUL characters. - */ - - FLAC__uint64 lead_in; - /**< The number of lead-in samples. */ - - FLAC__bool is_cd; - /**< \c true if CUESHEET corresponds to a Compact Disc, else \c false. */ - - uint32_t num_tracks; - /**< The number of tracks. */ - - FLAC__StreamMetadata_CueSheet_Track *tracks; - /**< NULL if num_tracks == 0, else pointer to array of tracks. */ - -} FLAC__StreamMetadata_CueSheet; - -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN; /**< == 128*8 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN; /**< == 64 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN; /**< == 1 (bit) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN; /**< == 7+258*8 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN; /**< == 8 (bits) */ - - -/** An enumeration of the PICTURE types (see FLAC__StreamMetadataPicture and id3 v2.4 APIC tag). */ -typedef enum { - FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER = 0, /**< Other */ - FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD = 1, /**< 32x32 pixels 'file icon' (PNG only) */ - FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON = 2, /**< Other file icon */ - FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER = 3, /**< Cover (front) */ - FLAC__STREAM_METADATA_PICTURE_TYPE_BACK_COVER = 4, /**< Cover (back) */ - FLAC__STREAM_METADATA_PICTURE_TYPE_LEAFLET_PAGE = 5, /**< Leaflet page */ - FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA = 6, /**< Media (e.g. label side of CD) */ - FLAC__STREAM_METADATA_PICTURE_TYPE_LEAD_ARTIST = 7, /**< Lead artist/lead performer/soloist */ - FLAC__STREAM_METADATA_PICTURE_TYPE_ARTIST = 8, /**< Artist/performer */ - FLAC__STREAM_METADATA_PICTURE_TYPE_CONDUCTOR = 9, /**< Conductor */ - FLAC__STREAM_METADATA_PICTURE_TYPE_BAND = 10, /**< Band/Orchestra */ - FLAC__STREAM_METADATA_PICTURE_TYPE_COMPOSER = 11, /**< Composer */ - FLAC__STREAM_METADATA_PICTURE_TYPE_LYRICIST = 12, /**< Lyricist/text writer */ - FLAC__STREAM_METADATA_PICTURE_TYPE_RECORDING_LOCATION = 13, /**< Recording Location */ - FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_RECORDING = 14, /**< During recording */ - FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_PERFORMANCE = 15, /**< During performance */ - FLAC__STREAM_METADATA_PICTURE_TYPE_VIDEO_SCREEN_CAPTURE = 16, /**< Movie/video screen capture */ - FLAC__STREAM_METADATA_PICTURE_TYPE_FISH = 17, /**< A bright coloured fish */ - FLAC__STREAM_METADATA_PICTURE_TYPE_ILLUSTRATION = 18, /**< Illustration */ - FLAC__STREAM_METADATA_PICTURE_TYPE_BAND_LOGOTYPE = 19, /**< Band/artist logotype */ - FLAC__STREAM_METADATA_PICTURE_TYPE_PUBLISHER_LOGOTYPE = 20, /**< Publisher/Studio logotype */ - FLAC__STREAM_METADATA_PICTURE_TYPE_UNDEFINED -} FLAC__StreamMetadata_Picture_Type; - -/** Maps a FLAC__StreamMetadata_Picture_Type to a C string. - * - * Using a FLAC__StreamMetadata_Picture_Type as the index to this array - * will give the string equivalent. The contents should not be - * modified. - */ -extern FLAC_API const char * const FLAC__StreamMetadata_Picture_TypeString[]; - -/** FLAC PICTURE structure. (See the - * format specification - * for the full description of each field.) - */ -typedef struct { - FLAC__StreamMetadata_Picture_Type type; - /**< The kind of picture stored. */ - - char *mime_type; - /**< Picture data's MIME type, in ASCII printable characters - * 0x20-0x7e, NUL terminated. For best compatibility with players, - * use picture data of MIME type \c image/jpeg or \c image/png. A - * MIME type of '-->' is also allowed, in which case the picture - * data should be a complete URL. In file storage, the MIME type is - * stored as a 32-bit length followed by the ASCII string with no NUL - * terminator, but is converted to a plain C string in this structure - * for convenience. - */ - - FLAC__byte *description; - /**< Picture's description in UTF-8, NUL terminated. In file storage, - * the description is stored as a 32-bit length followed by the UTF-8 - * string with no NUL terminator, but is converted to a plain C string - * in this structure for convenience. - */ - - FLAC__uint32 width; - /**< Picture's width in pixels. */ - - FLAC__uint32 height; - /**< Picture's height in pixels. */ - - FLAC__uint32 depth; - /**< Picture's color depth in bits-per-pixel. */ - - FLAC__uint32 colors; - /**< For indexed palettes (like GIF), picture's number of colors (the - * number of palette entries), or \c 0 for non-indexed (i.e. 2^depth). - */ - - FLAC__uint32 data_length; - /**< Length of binary picture data in bytes. */ - - FLAC__byte *data; - /**< Binary picture data. */ - -} FLAC__StreamMetadata_Picture; - -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_PICTURE_TYPE_LEN; /**< == 32 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN; /**< == 32 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN; /**< == 32 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN; /**< == 32 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN; /**< == 32 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN; /**< == 32 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_PICTURE_COLORS_LEN; /**< == 32 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN; /**< == 32 (bits) */ - - -/** Structure that is used when a metadata block of unknown type is loaded. - * The contents are opaque. The structure is used only internally to - * correctly handle unknown metadata. - */ -typedef struct { - FLAC__byte *data; -} FLAC__StreamMetadata_Unknown; - - -/** FLAC metadata block structure. (c.f. format specification) - */ -typedef struct { - FLAC__MetadataType type; - /**< The type of the metadata block; used determine which member of the - * \a data union to dereference. If type >= FLAC__METADATA_TYPE_UNDEFINED - * then \a data.unknown must be used. */ - - FLAC__bool is_last; - /**< \c true if this metadata block is the last, else \a false */ - - uint32_t length; - /**< Length, in bytes, of the block data as it appears in the stream. */ - - union { - FLAC__StreamMetadata_StreamInfo stream_info; - FLAC__StreamMetadata_Padding padding; - FLAC__StreamMetadata_Application application; - FLAC__StreamMetadata_SeekTable seek_table; - FLAC__StreamMetadata_VorbisComment vorbis_comment; - FLAC__StreamMetadata_CueSheet cue_sheet; - FLAC__StreamMetadata_Picture picture; - FLAC__StreamMetadata_Unknown unknown; - } data; - /**< Polymorphic block data; use the \a type value to determine which - * to use. */ -} FLAC__StreamMetadata; - -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_IS_LAST_LEN; /**< == 1 (bit) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_TYPE_LEN; /**< == 7 (bits) */ -extern FLAC_API const uint32_t FLAC__STREAM_METADATA_LENGTH_LEN; /**< == 24 (bits) */ - -/** The total stream length of a metadata block header in bytes. */ -#define FLAC__STREAM_METADATA_HEADER_LENGTH (4u) - -/*****************************************************************************/ - - -/***************************************************************************** - * - * Utility functions - * - *****************************************************************************/ - -/** Tests that a sample rate is valid for FLAC. - * - * \param sample_rate The sample rate to test for compliance. - * \retval FLAC__bool - * \c true if the given sample rate conforms to the specification, else - * \c false. - */ -FLAC_API FLAC__bool FLAC__format_sample_rate_is_valid(uint32_t sample_rate); - -/** Tests that a blocksize at the given sample rate is valid for the FLAC - * subset. - * - * \param blocksize The blocksize to test for compliance. - * \param sample_rate The sample rate is needed, since the valid subset - * blocksize depends on the sample rate. - * \retval FLAC__bool - * \c true if the given blocksize conforms to the specification for the - * subset at the given sample rate, else \c false. - */ -FLAC_API FLAC__bool FLAC__format_blocksize_is_subset(uint32_t blocksize, uint32_t sample_rate); - -/** Tests that a sample rate is valid for the FLAC subset. The subset rules - * for valid sample rates are slightly more complex since the rate has to - * be expressible completely in the frame header. - * - * \param sample_rate The sample rate to test for compliance. - * \retval FLAC__bool - * \c true if the given sample rate conforms to the specification for the - * subset, else \c false. - */ -FLAC_API FLAC__bool FLAC__format_sample_rate_is_subset(uint32_t sample_rate); - -/** Check a Vorbis comment entry name to see if it conforms to the Vorbis - * comment specification. - * - * Vorbis comment names must be composed only of characters from - * [0x20-0x3C,0x3E-0x7D]. - * - * \param name A NUL-terminated string to be checked. - * \assert - * \code name != NULL \endcode - * \retval FLAC__bool - * \c false if entry name is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_name_is_legal(const char *name); - -/** Check a Vorbis comment entry value to see if it conforms to the Vorbis - * comment specification. - * - * Vorbis comment values must be valid UTF-8 sequences. - * - * \param value A string to be checked. - * \param length A the length of \a value in bytes. May be - * \c (uint32_t)(-1) to indicate that \a value is a plain - * UTF-8 NUL-terminated string. - * \assert - * \code value != NULL \endcode - * \retval FLAC__bool - * \c false if entry name is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_value_is_legal(const FLAC__byte *value, uint32_t length); - -/** Check a Vorbis comment entry to see if it conforms to the Vorbis - * comment specification. - * - * Vorbis comment entries must be of the form 'name=value', and 'name' and - * 'value' must be legal according to - * FLAC__format_vorbiscomment_entry_name_is_legal() and - * FLAC__format_vorbiscomment_entry_value_is_legal() respectively. - * - * \param entry An entry to be checked. - * \param length The length of \a entry in bytes. - * \assert - * \code value != NULL \endcode - * \retval FLAC__bool - * \c false if entry name is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_is_legal(const FLAC__byte *entry, uint32_t length); - -/** Check a seek table to see if it conforms to the FLAC specification. - * See the format specification for limits on the contents of the - * seek table. - * - * \param seek_table A pointer to a seek table to be checked. - * \assert - * \code seek_table != NULL \endcode - * \retval FLAC__bool - * \c false if seek table is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__format_seektable_is_legal(const FLAC__StreamMetadata_SeekTable *seek_table); - -/** Sort a seek table's seek points according to the format specification. - * This includes a "unique-ification" step to remove duplicates, i.e. - * seek points with identical \a sample_number values. Duplicate seek - * points are converted into placeholder points and sorted to the end of - * the table. - * - * \param seek_table A pointer to a seek table to be sorted. - * \assert - * \code seek_table != NULL \endcode - * \retval uint32_t - * The number of duplicate seek points converted into placeholders. - */ -FLAC_API uint32_t FLAC__format_seektable_sort(FLAC__StreamMetadata_SeekTable *seek_table); - -/** Check a cue sheet to see if it conforms to the FLAC specification. - * See the format specification for limits on the contents of the - * cue sheet. - * - * \param cue_sheet A pointer to an existing cue sheet to be checked. - * \param check_cd_da_subset If \c true, check CUESHEET against more - * stringent requirements for a CD-DA (audio) disc. - * \param violation Address of a pointer to a string. If there is a - * violation, a pointer to a string explanation of the - * violation will be returned here. \a violation may be - * \c NULL if you don't need the returned string. Do not - * free the returned string; it will always point to static - * data. - * \assert - * \code cue_sheet != NULL \endcode - * \retval FLAC__bool - * \c false if cue sheet is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__format_cuesheet_is_legal(const FLAC__StreamMetadata_CueSheet *cue_sheet, FLAC__bool check_cd_da_subset, const char **violation); - -/** Check picture data to see if it conforms to the FLAC specification. - * See the format specification for limits on the contents of the - * PICTURE block. - * - * \param picture A pointer to existing picture data to be checked. - * \param violation Address of a pointer to a string. If there is a - * violation, a pointer to a string explanation of the - * violation will be returned here. \a violation may be - * \c NULL if you don't need the returned string. Do not - * free the returned string; it will always point to static - * data. - * \assert - * \code picture != NULL \endcode - * \retval FLAC__bool - * \c false if picture data is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__format_picture_is_legal(const FLAC__StreamMetadata_Picture *picture, const char **violation); - -/* \} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libs/include/FLAC/metadata.h b/libs/include/FLAC/metadata.h deleted file mode 100644 index 4c67b87..0000000 --- a/libs/include/FLAC/metadata.h +++ /dev/null @@ -1,2182 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2001-2009 Josh Coalson - * Copyright (C) 2011-2016 Xiph.Org Foundation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__METADATA_H -#define FLAC__METADATA_H - -#include /* for off_t */ -#include "export.h" -#include "callback.h" -#include "format.h" - -/* -------------------------------------------------------------------- - (For an example of how all these routines are used, see the source - code for the unit tests in src/test_libFLAC/metadata_*.c, or - metaflac in src/metaflac/) - ------------------------------------------------------------------*/ - -/** \file include/FLAC/metadata.h - * - * \brief - * This module provides functions for creating and manipulating FLAC - * metadata blocks in memory, and three progressively more powerful - * interfaces for traversing and editing metadata in FLAC files. - * - * See the detailed documentation for each interface in the - * \link flac_metadata metadata \endlink module. - */ - -/** \defgroup flac_metadata FLAC/metadata.h: metadata interfaces - * \ingroup flac - * - * \brief - * This module provides functions for creating and manipulating FLAC - * metadata blocks in memory, and three progressively more powerful - * interfaces for traversing and editing metadata in native FLAC files. - * Note that currently only the Chain interface (level 2) supports Ogg - * FLAC files, and it is read-only i.e. no writing back changed - * metadata to file. - * - * There are three metadata interfaces of increasing complexity: - * - * Level 0: - * Read-only access to the STREAMINFO, VORBIS_COMMENT, CUESHEET, and - * PICTURE blocks. - * - * Level 1: - * Read-write access to all metadata blocks. This level is write- - * efficient in most cases (more on this below), and uses less memory - * than level 2. - * - * Level 2: - * Read-write access to all metadata blocks. This level is write- - * efficient in all cases, but uses more memory since all metadata for - * the whole file is read into memory and manipulated before writing - * out again. - * - * What do we mean by efficient? Since FLAC metadata appears at the - * beginning of the file, when writing metadata back to a FLAC file - * it is possible to grow or shrink the metadata such that the entire - * file must be rewritten. However, if the size remains the same during - * changes or PADDING blocks are utilized, only the metadata needs to be - * overwritten, which is much faster. - * - * Efficient means the whole file is rewritten at most one time, and only - * when necessary. Level 1 is not efficient only in the case that you - * cause more than one metadata block to grow or shrink beyond what can - * be accommodated by padding. In this case you should probably use level - * 2, which allows you to edit all the metadata for a file in memory and - * write it out all at once. - * - * All levels know how to skip over and not disturb an ID3v2 tag at the - * front of the file. - * - * All levels access files via their filenames. In addition, level 2 - * has additional alternative read and write functions that take an I/O - * handle and callbacks, for situations where access by filename is not - * possible. - * - * In addition to the three interfaces, this module defines functions for - * creating and manipulating various metadata objects in memory. As we see - * from the Format module, FLAC metadata blocks in memory are very primitive - * structures for storing information in an efficient way. Reading - * information from the structures is easy but creating or modifying them - * directly is more complex. The metadata object routines here facilitate - * this by taking care of the consistency and memory management drudgery. - * - * Unless you will be using the level 1 or 2 interfaces to modify existing - * metadata however, you will not probably not need these. - * - * From a dependency standpoint, none of the encoders or decoders require - * the metadata module. This is so that embedded users can strip out the - * metadata module from libFLAC to reduce the size and complexity. - */ - -#ifdef __cplusplus -extern "C" { -#endif - - -/** \defgroup flac_metadata_level0 FLAC/metadata.h: metadata level 0 interface - * \ingroup flac_metadata - * - * \brief - * The level 0 interface consists of individual routines to read the - * STREAMINFO, VORBIS_COMMENT, CUESHEET, and PICTURE blocks, requiring - * only a filename. - * - * They try to skip any ID3v2 tag at the head of the file. - * - * \{ - */ - -/** Read the STREAMINFO metadata block of the given FLAC file. This function - * will try to skip any ID3v2 tag at the head of the file. - * - * \param filename The path to the FLAC file to read. - * \param streaminfo A pointer to space for the STREAMINFO block. Since - * FLAC__StreamMetadata is a simple structure with no - * memory allocation involved, you pass the address of - * an existing structure. It need not be initialized. - * \assert - * \code filename != NULL \endcode - * \code streaminfo != NULL \endcode - * \retval FLAC__bool - * \c true if a valid STREAMINFO block was read from \a filename. Returns - * \c false if there was a memory allocation error, a file decoder error, - * or the file contained no STREAMINFO block. (A memory allocation error - * is possible because this function must set up a file decoder.) - */ -FLAC_API FLAC__bool FLAC__metadata_get_streaminfo(const char *filename, FLAC__StreamMetadata *streaminfo); - -/** Read the VORBIS_COMMENT metadata block of the given FLAC file. This - * function will try to skip any ID3v2 tag at the head of the file. - * - * \param filename The path to the FLAC file to read. - * \param tags The address where the returned pointer will be - * stored. The \a tags object must be deleted by - * the caller using FLAC__metadata_object_delete(). - * \assert - * \code filename != NULL \endcode - * \code tags != NULL \endcode - * \retval FLAC__bool - * \c true if a valid VORBIS_COMMENT block was read from \a filename, - * and \a *tags will be set to the address of the metadata structure. - * Returns \c false if there was a memory allocation error, a file - * decoder error, or the file contained no VORBIS_COMMENT block, and - * \a *tags will be set to \c NULL. - */ -FLAC_API FLAC__bool FLAC__metadata_get_tags(const char *filename, FLAC__StreamMetadata **tags); - -/** Read the CUESHEET metadata block of the given FLAC file. This - * function will try to skip any ID3v2 tag at the head of the file. - * - * \param filename The path to the FLAC file to read. - * \param cuesheet The address where the returned pointer will be - * stored. The \a cuesheet object must be deleted by - * the caller using FLAC__metadata_object_delete(). - * \assert - * \code filename != NULL \endcode - * \code cuesheet != NULL \endcode - * \retval FLAC__bool - * \c true if a valid CUESHEET block was read from \a filename, - * and \a *cuesheet will be set to the address of the metadata - * structure. Returns \c false if there was a memory allocation - * error, a file decoder error, or the file contained no CUESHEET - * block, and \a *cuesheet will be set to \c NULL. - */ -FLAC_API FLAC__bool FLAC__metadata_get_cuesheet(const char *filename, FLAC__StreamMetadata **cuesheet); - -/** Read a PICTURE metadata block of the given FLAC file. This - * function will try to skip any ID3v2 tag at the head of the file. - * Since there can be more than one PICTURE block in a file, this - * function takes a number of parameters that act as constraints to - * the search. The PICTURE block with the largest area matching all - * the constraints will be returned, or \a *picture will be set to - * \c NULL if there was no such block. - * - * \param filename The path to the FLAC file to read. - * \param picture The address where the returned pointer will be - * stored. The \a picture object must be deleted by - * the caller using FLAC__metadata_object_delete(). - * \param type The desired picture type. Use \c -1 to mean - * "any type". - * \param mime_type The desired MIME type, e.g. "image/jpeg". The - * string will be matched exactly. Use \c NULL to - * mean "any MIME type". - * \param description The desired description. The string will be - * matched exactly. Use \c NULL to mean "any - * description". - * \param max_width The maximum width in pixels desired. Use - * \c (uint32_t)(-1) to mean "any width". - * \param max_height The maximum height in pixels desired. Use - * \c (uint32_t)(-1) to mean "any height". - * \param max_depth The maximum color depth in bits-per-pixel desired. - * Use \c (uint32_t)(-1) to mean "any depth". - * \param max_colors The maximum number of colors desired. Use - * \c (uint32_t)(-1) to mean "any number of colors". - * \assert - * \code filename != NULL \endcode - * \code picture != NULL \endcode - * \retval FLAC__bool - * \c true if a valid PICTURE block was read from \a filename, - * and \a *picture will be set to the address of the metadata - * structure. Returns \c false if there was a memory allocation - * error, a file decoder error, or the file contained no PICTURE - * block, and \a *picture will be set to \c NULL. - */ -FLAC_API FLAC__bool FLAC__metadata_get_picture(const char *filename, FLAC__StreamMetadata **picture, FLAC__StreamMetadata_Picture_Type type, const char *mime_type, const FLAC__byte *description, uint32_t max_width, uint32_t max_height, uint32_t max_depth, uint32_t max_colors); - -/* \} */ - - -/** \defgroup flac_metadata_level1 FLAC/metadata.h: metadata level 1 interface - * \ingroup flac_metadata - * - * \brief - * The level 1 interface provides read-write access to FLAC file metadata and - * operates directly on the FLAC file. - * - * The general usage of this interface is: - * - * - Create an iterator using FLAC__metadata_simple_iterator_new() - * - Attach it to a file using FLAC__metadata_simple_iterator_init() and check - * the exit code. Call FLAC__metadata_simple_iterator_is_writable() to - * see if the file is writable, or only read access is allowed. - * - Use FLAC__metadata_simple_iterator_next() and - * FLAC__metadata_simple_iterator_prev() to traverse the blocks. - * This is does not read the actual blocks themselves. - * FLAC__metadata_simple_iterator_next() is relatively fast. - * FLAC__metadata_simple_iterator_prev() is slower since it needs to search - * forward from the front of the file. - * - Use FLAC__metadata_simple_iterator_get_block_type() or - * FLAC__metadata_simple_iterator_get_block() to access the actual data at - * the current iterator position. The returned object is yours to modify - * and free. - * - Use FLAC__metadata_simple_iterator_set_block() to write a modified block - * back. You must have write permission to the original file. Make sure to - * read the whole comment to FLAC__metadata_simple_iterator_set_block() - * below. - * - Use FLAC__metadata_simple_iterator_insert_block_after() to add new blocks. - * Use the object creation functions from - * \link flac_metadata_object here \endlink to generate new objects. - * - Use FLAC__metadata_simple_iterator_delete_block() to remove the block - * currently referred to by the iterator, or replace it with padding. - * - Destroy the iterator with FLAC__metadata_simple_iterator_delete() when - * finished. - * - * \note - * The FLAC file remains open the whole time between - * FLAC__metadata_simple_iterator_init() and - * FLAC__metadata_simple_iterator_delete(), so make sure you are not altering - * the file during this time. - * - * \note - * Do not modify the \a is_last, \a length, or \a type fields of returned - * FLAC__StreamMetadata objects. These are managed automatically. - * - * \note - * If any of the modification functions - * (FLAC__metadata_simple_iterator_set_block(), - * FLAC__metadata_simple_iterator_delete_block(), - * FLAC__metadata_simple_iterator_insert_block_after(), etc.) return \c false, - * you should delete the iterator as it may no longer be valid. - * - * \{ - */ - -struct FLAC__Metadata_SimpleIterator; -/** The opaque structure definition for the level 1 iterator type. - * See the - * \link flac_metadata_level1 metadata level 1 module \endlink - * for a detailed description. - */ -typedef struct FLAC__Metadata_SimpleIterator FLAC__Metadata_SimpleIterator; - -/** Status type for FLAC__Metadata_SimpleIterator. - * - * The iterator's current status can be obtained by calling FLAC__metadata_simple_iterator_status(). - */ -typedef enum { - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_OK = 0, - /**< The iterator is in the normal OK state */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ILLEGAL_INPUT, - /**< The data passed into a function violated the function's usage criteria */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ERROR_OPENING_FILE, - /**< The iterator could not open the target file */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_NOT_A_FLAC_FILE, - /**< The iterator could not find the FLAC signature at the start of the file */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_NOT_WRITABLE, - /**< The iterator tried to write to a file that was not writable */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_BAD_METADATA, - /**< The iterator encountered input that does not conform to the FLAC metadata specification */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR, - /**< The iterator encountered an error while reading the FLAC file */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR, - /**< The iterator encountered an error while seeking in the FLAC file */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_WRITE_ERROR, - /**< The iterator encountered an error while writing the FLAC file */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_RENAME_ERROR, - /**< The iterator encountered an error renaming the FLAC file */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_UNLINK_ERROR, - /**< The iterator encountered an error removing the temporary file */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_MEMORY_ALLOCATION_ERROR, - /**< Memory allocation failed */ - - FLAC__METADATA_SIMPLE_ITERATOR_STATUS_INTERNAL_ERROR - /**< The caller violated an assertion or an unexpected error occurred */ - -} FLAC__Metadata_SimpleIteratorStatus; - -/** Maps a FLAC__Metadata_SimpleIteratorStatus to a C string. - * - * Using a FLAC__Metadata_SimpleIteratorStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__Metadata_SimpleIteratorStatusString[]; - - -/** Create a new iterator instance. - * - * \retval FLAC__Metadata_SimpleIterator* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__Metadata_SimpleIterator *FLAC__metadata_simple_iterator_new(void); - -/** Free an iterator instance. Deletes the object pointed to by \a iterator. - * - * \param iterator A pointer to an existing iterator. - * \assert - * \code iterator != NULL \endcode - */ -FLAC_API void FLAC__metadata_simple_iterator_delete(FLAC__Metadata_SimpleIterator *iterator); - -/** Get the current status of the iterator. Call this after a function - * returns \c false to get the reason for the error. Also resets the status - * to FLAC__METADATA_SIMPLE_ITERATOR_STATUS_OK. - * - * \param iterator A pointer to an existing iterator. - * \assert - * \code iterator != NULL \endcode - * \retval FLAC__Metadata_SimpleIteratorStatus - * The current status of the iterator. - */ -FLAC_API FLAC__Metadata_SimpleIteratorStatus FLAC__metadata_simple_iterator_status(FLAC__Metadata_SimpleIterator *iterator); - -/** Initialize the iterator to point to the first metadata block in the - * given FLAC file. - * - * \param iterator A pointer to an existing iterator. - * \param filename The path to the FLAC file. - * \param read_only If \c true, the FLAC file will be opened - * in read-only mode; if \c false, the FLAC - * file will be opened for edit even if no - * edits are performed. - * \param preserve_file_stats If \c true, the owner and modification - * time will be preserved even if the FLAC - * file is written to. - * \assert - * \code iterator != NULL \endcode - * \code filename != NULL \endcode - * \retval FLAC__bool - * \c false if a memory allocation error occurs, the file can't be - * opened, or another error occurs, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_init(FLAC__Metadata_SimpleIterator *iterator, const char *filename, FLAC__bool read_only, FLAC__bool preserve_file_stats); - -/** Returns \c true if the FLAC file is writable. If \c false, calls to - * FLAC__metadata_simple_iterator_set_block() and - * FLAC__metadata_simple_iterator_insert_block_after() will fail. - * - * \param iterator A pointer to an existing iterator. - * \assert - * \code iterator != NULL \endcode - * \retval FLAC__bool - * See above. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_is_writable(const FLAC__Metadata_SimpleIterator *iterator); - -/** Moves the iterator forward one metadata block, returning \c false if - * already at the end. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval FLAC__bool - * \c false if already at the last metadata block of the chain, else - * \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_next(FLAC__Metadata_SimpleIterator *iterator); - -/** Moves the iterator backward one metadata block, returning \c false if - * already at the beginning. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval FLAC__bool - * \c false if already at the first metadata block of the chain, else - * \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_prev(FLAC__Metadata_SimpleIterator *iterator); - -/** Returns a flag telling if the current metadata block is the last. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval FLAC__bool - * \c true if the current metadata block is the last in the file, - * else \c false. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_is_last(const FLAC__Metadata_SimpleIterator *iterator); - -/** Get the offset of the metadata block at the current position. This - * avoids reading the actual block data which can save time for large - * blocks. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval off_t - * The offset of the metadata block at the current iterator position. - * This is the byte offset relative to the beginning of the file of - * the current metadata block's header. - */ -FLAC_API off_t FLAC__metadata_simple_iterator_get_block_offset(const FLAC__Metadata_SimpleIterator *iterator); - -/** Get the type of the metadata block at the current position. This - * avoids reading the actual block data which can save time for large - * blocks. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval FLAC__MetadataType - * The type of the metadata block at the current iterator position. - */ -FLAC_API FLAC__MetadataType FLAC__metadata_simple_iterator_get_block_type(const FLAC__Metadata_SimpleIterator *iterator); - -/** Get the length of the metadata block at the current position. This - * avoids reading the actual block data which can save time for large - * blocks. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval uint32_t - * The length of the metadata block at the current iterator position. - * The is same length as that in the - * metadata block header, - * i.e. the length of the metadata body that follows the header. - */ -FLAC_API uint32_t FLAC__metadata_simple_iterator_get_block_length(const FLAC__Metadata_SimpleIterator *iterator); - -/** Get the application ID of the \c APPLICATION block at the current - * position. This avoids reading the actual block data which can save - * time for large blocks. - * - * \param iterator A pointer to an existing initialized iterator. - * \param id A pointer to a buffer of at least \c 4 bytes where - * the ID will be stored. - * \assert - * \code iterator != NULL \endcode - * \code id != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval FLAC__bool - * \c true if the ID was successfully read, else \c false, in which - * case you should check FLAC__metadata_simple_iterator_status() to - * find out why. If the status is - * \c FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ILLEGAL_INPUT, then the - * current metadata block is not an \c APPLICATION block. Otherwise - * if the status is - * \c FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR or - * \c FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR, an I/O error - * occurred and the iterator can no longer be used. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_get_application_id(FLAC__Metadata_SimpleIterator *iterator, FLAC__byte *id); - -/** Get the metadata block at the current position. You can modify the - * block but must use FLAC__metadata_simple_iterator_set_block() to - * write it back to the FLAC file. - * - * You must call FLAC__metadata_object_delete() on the returned object - * when you are finished with it. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval FLAC__StreamMetadata* - * The current metadata block, or \c NULL if there was a memory - * allocation error. - */ -FLAC_API FLAC__StreamMetadata *FLAC__metadata_simple_iterator_get_block(FLAC__Metadata_SimpleIterator *iterator); - -/** Write a block back to the FLAC file. This function tries to be - * as efficient as possible; how the block is actually written is - * shown by the following: - * - * Existing block is a STREAMINFO block and the new block is a - * STREAMINFO block: the new block is written in place. Make sure - * you know what you're doing when changing the values of a - * STREAMINFO block. - * - * Existing block is a STREAMINFO block and the new block is a - * not a STREAMINFO block: this is an error since the first block - * must be a STREAMINFO block. Returns \c false without altering the - * file. - * - * Existing block is not a STREAMINFO block and the new block is a - * STREAMINFO block: this is an error since there may be only one - * STREAMINFO block. Returns \c false without altering the file. - * - * Existing block and new block are the same length: the existing - * block will be replaced by the new block, written in place. - * - * Existing block is longer than new block: if use_padding is \c true, - * the existing block will be overwritten in place with the new - * block followed by a PADDING block, if possible, to make the total - * size the same as the existing block. Remember that a padding - * block requires at least four bytes so if the difference in size - * between the new block and existing block is less than that, the - * entire file will have to be rewritten, using the new block's - * exact size. If use_padding is \c false, the entire file will be - * rewritten, replacing the existing block by the new block. - * - * Existing block is shorter than new block: if use_padding is \c true, - * the function will try and expand the new block into the following - * PADDING block, if it exists and doing so won't shrink the PADDING - * block to less than 4 bytes. If there is no following PADDING - * block, or it will shrink to less than 4 bytes, or use_padding is - * \c false, the entire file is rewritten, replacing the existing block - * with the new block. Note that in this case any following PADDING - * block is preserved as is. - * - * After writing the block, the iterator will remain in the same - * place, i.e. pointing to the new block. - * - * \param iterator A pointer to an existing initialized iterator. - * \param block The block to set. - * \param use_padding See above. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \code block != NULL \endcode - * \retval FLAC__bool - * \c true if successful, else \c false. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_set_block(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMetadata *block, FLAC__bool use_padding); - -/** This is similar to FLAC__metadata_simple_iterator_set_block() - * except that instead of writing over an existing block, it appends - * a block after the existing block. \a use_padding is again used to - * tell the function to try an expand into following padding in an - * attempt to avoid rewriting the entire file. - * - * This function will fail and return \c false if given a STREAMINFO - * block. - * - * After writing the block, the iterator will be pointing to the - * new block. - * - * \param iterator A pointer to an existing initialized iterator. - * \param block The block to set. - * \param use_padding See above. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \code block != NULL \endcode - * \retval FLAC__bool - * \c true if successful, else \c false. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_insert_block_after(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMetadata *block, FLAC__bool use_padding); - -/** Deletes the block at the current position. This will cause the - * entire FLAC file to be rewritten, unless \a use_padding is \c true, - * in which case the block will be replaced by an equal-sized PADDING - * block. The iterator will be left pointing to the block before the - * one just deleted. - * - * You may not delete the STREAMINFO block. - * - * \param iterator A pointer to an existing initialized iterator. - * \param use_padding See above. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_simple_iterator_init() - * \retval FLAC__bool - * \c true if successful, else \c false. - */ -FLAC_API FLAC__bool FLAC__metadata_simple_iterator_delete_block(FLAC__Metadata_SimpleIterator *iterator, FLAC__bool use_padding); - -/* \} */ - - -/** \defgroup flac_metadata_level2 FLAC/metadata.h: metadata level 2 interface - * \ingroup flac_metadata - * - * \brief - * The level 2 interface provides read-write access to FLAC file metadata; - * all metadata is read into memory, operated on in memory, and then written - * to file, which is more efficient than level 1 when editing multiple blocks. - * - * Currently Ogg FLAC is supported for read only, via - * FLAC__metadata_chain_read_ogg() but a subsequent - * FLAC__metadata_chain_write() will fail. - * - * The general usage of this interface is: - * - * - Create a new chain using FLAC__metadata_chain_new(). A chain is a - * linked list of FLAC metadata blocks. - * - Read all metadata into the chain from a FLAC file using - * FLAC__metadata_chain_read() or FLAC__metadata_chain_read_ogg() and - * check the status. - * - Optionally, consolidate the padding using - * FLAC__metadata_chain_merge_padding() or - * FLAC__metadata_chain_sort_padding(). - * - Create a new iterator using FLAC__metadata_iterator_new() - * - Initialize the iterator to point to the first element in the chain - * using FLAC__metadata_iterator_init() - * - Traverse the chain using FLAC__metadata_iterator_next and - * FLAC__metadata_iterator_prev(). - * - Get a block for reading or modification using - * FLAC__metadata_iterator_get_block(). The pointer to the object - * inside the chain is returned, so the block is yours to modify. - * Changes will be reflected in the FLAC file when you write the - * chain. You can also add and delete blocks (see functions below). - * - When done, write out the chain using FLAC__metadata_chain_write(). - * Make sure to read the whole comment to the function below. - * - Delete the chain using FLAC__metadata_chain_delete(). - * - * \note - * Even though the FLAC file is not open while the chain is being - * manipulated, you must not alter the file externally during - * this time. The chain assumes the FLAC file will not change - * between the time of FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg() - * and FLAC__metadata_chain_write(). - * - * \note - * Do not modify the is_last, length, or type fields of returned - * FLAC__StreamMetadata objects. These are managed automatically. - * - * \note - * The metadata objects returned by FLAC__metadata_iterator_get_block() - * are owned by the chain; do not FLAC__metadata_object_delete() them. - * In the same way, blocks passed to FLAC__metadata_iterator_set_block() - * become owned by the chain and they will be deleted when the chain is - * deleted. - * - * \{ - */ - -struct FLAC__Metadata_Chain; -/** The opaque structure definition for the level 2 chain type. - */ -typedef struct FLAC__Metadata_Chain FLAC__Metadata_Chain; - -struct FLAC__Metadata_Iterator; -/** The opaque structure definition for the level 2 iterator type. - */ -typedef struct FLAC__Metadata_Iterator FLAC__Metadata_Iterator; - -typedef enum { - FLAC__METADATA_CHAIN_STATUS_OK = 0, - /**< The chain is in the normal OK state */ - - FLAC__METADATA_CHAIN_STATUS_ILLEGAL_INPUT, - /**< The data passed into a function violated the function's usage criteria */ - - FLAC__METADATA_CHAIN_STATUS_ERROR_OPENING_FILE, - /**< The chain could not open the target file */ - - FLAC__METADATA_CHAIN_STATUS_NOT_A_FLAC_FILE, - /**< The chain could not find the FLAC signature at the start of the file */ - - FLAC__METADATA_CHAIN_STATUS_NOT_WRITABLE, - /**< The chain tried to write to a file that was not writable */ - - FLAC__METADATA_CHAIN_STATUS_BAD_METADATA, - /**< The chain encountered input that does not conform to the FLAC metadata specification */ - - FLAC__METADATA_CHAIN_STATUS_READ_ERROR, - /**< The chain encountered an error while reading the FLAC file */ - - FLAC__METADATA_CHAIN_STATUS_SEEK_ERROR, - /**< The chain encountered an error while seeking in the FLAC file */ - - FLAC__METADATA_CHAIN_STATUS_WRITE_ERROR, - /**< The chain encountered an error while writing the FLAC file */ - - FLAC__METADATA_CHAIN_STATUS_RENAME_ERROR, - /**< The chain encountered an error renaming the FLAC file */ - - FLAC__METADATA_CHAIN_STATUS_UNLINK_ERROR, - /**< The chain encountered an error removing the temporary file */ - - FLAC__METADATA_CHAIN_STATUS_MEMORY_ALLOCATION_ERROR, - /**< Memory allocation failed */ - - FLAC__METADATA_CHAIN_STATUS_INTERNAL_ERROR, - /**< The caller violated an assertion or an unexpected error occurred */ - - FLAC__METADATA_CHAIN_STATUS_INVALID_CALLBACKS, - /**< One or more of the required callbacks was NULL */ - - FLAC__METADATA_CHAIN_STATUS_READ_WRITE_MISMATCH, - /**< FLAC__metadata_chain_write() was called on a chain read by - * FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(), - * or - * FLAC__metadata_chain_write_with_callbacks()/FLAC__metadata_chain_write_with_callbacks_and_tempfile() - * was called on a chain read by - * FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg(). - * Matching read/write methods must always be used. */ - - FLAC__METADATA_CHAIN_STATUS_WRONG_WRITE_CALL - /**< FLAC__metadata_chain_write_with_callbacks() was called when the - * chain write requires a tempfile; use - * FLAC__metadata_chain_write_with_callbacks_and_tempfile() instead. - * Or, FLAC__metadata_chain_write_with_callbacks_and_tempfile() was - * called when the chain write does not require a tempfile; use - * FLAC__metadata_chain_write_with_callbacks() instead. - * Always check FLAC__metadata_chain_check_if_tempfile_needed() - * before writing via callbacks. */ - -} FLAC__Metadata_ChainStatus; - -/** Maps a FLAC__Metadata_ChainStatus to a C string. - * - * Using a FLAC__Metadata_ChainStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__Metadata_ChainStatusString[]; - -/*********** FLAC__Metadata_Chain ***********/ - -/** Create a new chain instance. - * - * \retval FLAC__Metadata_Chain* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__Metadata_Chain *FLAC__metadata_chain_new(void); - -/** Free a chain instance. Deletes the object pointed to by \a chain. - * - * \param chain A pointer to an existing chain. - * \assert - * \code chain != NULL \endcode - */ -FLAC_API void FLAC__metadata_chain_delete(FLAC__Metadata_Chain *chain); - -/** Get the current status of the chain. Call this after a function - * returns \c false to get the reason for the error. Also resets the - * status to FLAC__METADATA_CHAIN_STATUS_OK. - * - * \param chain A pointer to an existing chain. - * \assert - * \code chain != NULL \endcode - * \retval FLAC__Metadata_ChainStatus - * The current status of the chain. - */ -FLAC_API FLAC__Metadata_ChainStatus FLAC__metadata_chain_status(FLAC__Metadata_Chain *chain); - -/** Read all metadata from a FLAC file into the chain. - * - * \param chain A pointer to an existing chain. - * \param filename The path to the FLAC file to read. - * \assert - * \code chain != NULL \endcode - * \code filename != NULL \endcode - * \retval FLAC__bool - * \c true if a valid list of metadata blocks was read from - * \a filename, else \c false. On failure, check the status with - * FLAC__metadata_chain_status(). - */ -FLAC_API FLAC__bool FLAC__metadata_chain_read(FLAC__Metadata_Chain *chain, const char *filename); - -/** Read all metadata from an Ogg FLAC file into the chain. - * - * \note Ogg FLAC metadata data writing is not supported yet and - * FLAC__metadata_chain_write() will fail. - * - * \param chain A pointer to an existing chain. - * \param filename The path to the Ogg FLAC file to read. - * \assert - * \code chain != NULL \endcode - * \code filename != NULL \endcode - * \retval FLAC__bool - * \c true if a valid list of metadata blocks was read from - * \a filename, else \c false. On failure, check the status with - * FLAC__metadata_chain_status(). - */ -FLAC_API FLAC__bool FLAC__metadata_chain_read_ogg(FLAC__Metadata_Chain *chain, const char *filename); - -/** Read all metadata from a FLAC stream into the chain via I/O callbacks. - * - * The \a handle need only be open for reading, but must be seekable. - * The equivalent minimum stdio fopen() file mode is \c "r" (or \c "rb" - * for Windows). - * - * \param chain A pointer to an existing chain. - * \param handle The I/O handle of the FLAC stream to read. The - * handle will NOT be closed after the metadata is read; - * that is the duty of the caller. - * \param callbacks - * A set of callbacks to use for I/O. The mandatory - * callbacks are \a read, \a seek, and \a tell. - * \assert - * \code chain != NULL \endcode - * \retval FLAC__bool - * \c true if a valid list of metadata blocks was read from - * \a handle, else \c false. On failure, check the status with - * FLAC__metadata_chain_status(). - */ -FLAC_API FLAC__bool FLAC__metadata_chain_read_with_callbacks(FLAC__Metadata_Chain *chain, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks); - -/** Read all metadata from an Ogg FLAC stream into the chain via I/O callbacks. - * - * The \a handle need only be open for reading, but must be seekable. - * The equivalent minimum stdio fopen() file mode is \c "r" (or \c "rb" - * for Windows). - * - * \note Ogg FLAC metadata data writing is not supported yet and - * FLAC__metadata_chain_write() will fail. - * - * \param chain A pointer to an existing chain. - * \param handle The I/O handle of the Ogg FLAC stream to read. The - * handle will NOT be closed after the metadata is read; - * that is the duty of the caller. - * \param callbacks - * A set of callbacks to use for I/O. The mandatory - * callbacks are \a read, \a seek, and \a tell. - * \assert - * \code chain != NULL \endcode - * \retval FLAC__bool - * \c true if a valid list of metadata blocks was read from - * \a handle, else \c false. On failure, check the status with - * FLAC__metadata_chain_status(). - */ -FLAC_API FLAC__bool FLAC__metadata_chain_read_ogg_with_callbacks(FLAC__Metadata_Chain *chain, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks); - -/** Checks if writing the given chain would require the use of a - * temporary file, or if it could be written in place. - * - * Under certain conditions, padding can be utilized so that writing - * edited metadata back to the FLAC file does not require rewriting the - * entire file. If rewriting is required, then a temporary workfile is - * required. When writing metadata using callbacks, you must check - * this function to know whether to call - * FLAC__metadata_chain_write_with_callbacks() or - * FLAC__metadata_chain_write_with_callbacks_and_tempfile(). When - * writing with FLAC__metadata_chain_write(), the temporary file is - * handled internally. - * - * \param chain A pointer to an existing chain. - * \param use_padding - * Whether or not padding will be allowed to be used - * during the write. The value of \a use_padding given - * here must match the value later passed to - * FLAC__metadata_chain_write_with_callbacks() or - * FLAC__metadata_chain_write_with_callbacks_with_tempfile(). - * \assert - * \code chain != NULL \endcode - * \retval FLAC__bool - * \c true if writing the current chain would require a tempfile, or - * \c false if metadata can be written in place. - */ -FLAC_API FLAC__bool FLAC__metadata_chain_check_if_tempfile_needed(FLAC__Metadata_Chain *chain, FLAC__bool use_padding); - -/** Write all metadata out to the FLAC file. This function tries to be as - * efficient as possible; how the metadata is actually written is shown by - * the following: - * - * If the current chain is the same size as the existing metadata, the new - * data is written in place. - * - * If the current chain is longer than the existing metadata, and - * \a use_padding is \c true, and the last block is a PADDING block of - * sufficient length, the function will truncate the final padding block - * so that the overall size of the metadata is the same as the existing - * metadata, and then just rewrite the metadata. Otherwise, if not all of - * the above conditions are met, the entire FLAC file must be rewritten. - * If you want to use padding this way it is a good idea to call - * FLAC__metadata_chain_sort_padding() first so that you have the maximum - * amount of padding to work with, unless you need to preserve ordering - * of the PADDING blocks for some reason. - * - * If the current chain is shorter than the existing metadata, and - * \a use_padding is \c true, and the final block is a PADDING block, the padding - * is extended to make the overall size the same as the existing data. If - * \a use_padding is \c true and the last block is not a PADDING block, a new - * PADDING block is added to the end of the new data to make it the same - * size as the existing data (if possible, see the note to - * FLAC__metadata_simple_iterator_set_block() about the four byte limit) - * and the new data is written in place. If none of the above apply or - * \a use_padding is \c false, the entire FLAC file is rewritten. - * - * If \a preserve_file_stats is \c true, the owner and modification time will - * be preserved even if the FLAC file is written. - * - * For this write function to be used, the chain must have been read with - * FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg(), not - * FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(). - * - * \param chain A pointer to an existing chain. - * \param use_padding See above. - * \param preserve_file_stats See above. - * \assert - * \code chain != NULL \endcode - * \retval FLAC__bool - * \c true if the write succeeded, else \c false. On failure, - * check the status with FLAC__metadata_chain_status(). - */ -FLAC_API FLAC__bool FLAC__metadata_chain_write(FLAC__Metadata_Chain *chain, FLAC__bool use_padding, FLAC__bool preserve_file_stats); - -/** Write all metadata out to a FLAC stream via callbacks. - * - * (See FLAC__metadata_chain_write() for the details on how padding is - * used to write metadata in place if possible.) - * - * The \a handle must be open for updating and be seekable. The - * equivalent minimum stdio fopen() file mode is \c "r+" (or \c "r+b" - * for Windows). - * - * For this write function to be used, the chain must have been read with - * FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(), - * not FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg(). - * Also, FLAC__metadata_chain_check_if_tempfile_needed() must have returned - * \c false. - * - * \param chain A pointer to an existing chain. - * \param use_padding See FLAC__metadata_chain_write() - * \param handle The I/O handle of the FLAC stream to write. The - * handle will NOT be closed after the metadata is - * written; that is the duty of the caller. - * \param callbacks A set of callbacks to use for I/O. The mandatory - * callbacks are \a write and \a seek. - * \assert - * \code chain != NULL \endcode - * \retval FLAC__bool - * \c true if the write succeeded, else \c false. On failure, - * check the status with FLAC__metadata_chain_status(). - */ -FLAC_API FLAC__bool FLAC__metadata_chain_write_with_callbacks(FLAC__Metadata_Chain *chain, FLAC__bool use_padding, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks); - -/** Write all metadata out to a FLAC stream via callbacks. - * - * (See FLAC__metadata_chain_write() for the details on how padding is - * used to write metadata in place if possible.) - * - * This version of the write-with-callbacks function must be used when - * FLAC__metadata_chain_check_if_tempfile_needed() returns true. In - * this function, you must supply an I/O handle corresponding to the - * FLAC file to edit, and a temporary handle to which the new FLAC - * file will be written. It is the caller's job to move this temporary - * FLAC file on top of the original FLAC file to complete the metadata - * edit. - * - * The \a handle must be open for reading and be seekable. The - * equivalent minimum stdio fopen() file mode is \c "r" (or \c "rb" - * for Windows). - * - * The \a temp_handle must be open for writing. The - * equivalent minimum stdio fopen() file mode is \c "w" (or \c "wb" - * for Windows). It should be an empty stream, or at least positioned - * at the start-of-file (in which case it is the caller's duty to - * truncate it on return). - * - * For this write function to be used, the chain must have been read with - * FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(), - * not FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg(). - * Also, FLAC__metadata_chain_check_if_tempfile_needed() must have returned - * \c true. - * - * \param chain A pointer to an existing chain. - * \param use_padding See FLAC__metadata_chain_write() - * \param handle The I/O handle of the original FLAC stream to read. - * The handle will NOT be closed after the metadata is - * written; that is the duty of the caller. - * \param callbacks A set of callbacks to use for I/O on \a handle. - * The mandatory callbacks are \a read, \a seek, and - * \a eof. - * \param temp_handle The I/O handle of the FLAC stream to write. The - * handle will NOT be closed after the metadata is - * written; that is the duty of the caller. - * \param temp_callbacks - * A set of callbacks to use for I/O on temp_handle. - * The only mandatory callback is \a write. - * \assert - * \code chain != NULL \endcode - * \retval FLAC__bool - * \c true if the write succeeded, else \c false. On failure, - * check the status with FLAC__metadata_chain_status(). - */ -FLAC_API FLAC__bool FLAC__metadata_chain_write_with_callbacks_and_tempfile(FLAC__Metadata_Chain *chain, FLAC__bool use_padding, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks, FLAC__IOHandle temp_handle, FLAC__IOCallbacks temp_callbacks); - -/** Merge adjacent PADDING blocks into a single block. - * - * \note This function does not write to the FLAC file, it only - * modifies the chain. - * - * \warning Any iterator on the current chain will become invalid after this - * call. You should delete the iterator and get a new one. - * - * \param chain A pointer to an existing chain. - * \assert - * \code chain != NULL \endcode - */ -FLAC_API void FLAC__metadata_chain_merge_padding(FLAC__Metadata_Chain *chain); - -/** This function will move all PADDING blocks to the end on the metadata, - * then merge them into a single block. - * - * \note This function does not write to the FLAC file, it only - * modifies the chain. - * - * \warning Any iterator on the current chain will become invalid after this - * call. You should delete the iterator and get a new one. - * - * \param chain A pointer to an existing chain. - * \assert - * \code chain != NULL \endcode - */ -FLAC_API void FLAC__metadata_chain_sort_padding(FLAC__Metadata_Chain *chain); - - -/*********** FLAC__Metadata_Iterator ***********/ - -/** Create a new iterator instance. - * - * \retval FLAC__Metadata_Iterator* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__Metadata_Iterator *FLAC__metadata_iterator_new(void); - -/** Free an iterator instance. Deletes the object pointed to by \a iterator. - * - * \param iterator A pointer to an existing iterator. - * \assert - * \code iterator != NULL \endcode - */ -FLAC_API void FLAC__metadata_iterator_delete(FLAC__Metadata_Iterator *iterator); - -/** Initialize the iterator to point to the first metadata block in the - * given chain. - * - * \param iterator A pointer to an existing iterator. - * \param chain A pointer to an existing and initialized (read) chain. - * \assert - * \code iterator != NULL \endcode - * \code chain != NULL \endcode - */ -FLAC_API void FLAC__metadata_iterator_init(FLAC__Metadata_Iterator *iterator, FLAC__Metadata_Chain *chain); - -/** Moves the iterator forward one metadata block, returning \c false if - * already at the end. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \retval FLAC__bool - * \c false if already at the last metadata block of the chain, else - * \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_iterator_next(FLAC__Metadata_Iterator *iterator); - -/** Moves the iterator backward one metadata block, returning \c false if - * already at the beginning. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \retval FLAC__bool - * \c false if already at the first metadata block of the chain, else - * \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_iterator_prev(FLAC__Metadata_Iterator *iterator); - -/** Get the type of the metadata block at the current position. - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \retval FLAC__MetadataType - * The type of the metadata block at the current iterator position. - */ -FLAC_API FLAC__MetadataType FLAC__metadata_iterator_get_block_type(const FLAC__Metadata_Iterator *iterator); - -/** Get the metadata block at the current position. You can modify - * the block in place but must write the chain before the changes - * are reflected to the FLAC file. You do not need to call - * FLAC__metadata_iterator_set_block() to reflect the changes; - * the pointer returned by FLAC__metadata_iterator_get_block() - * points directly into the chain. - * - * \warning - * Do not call FLAC__metadata_object_delete() on the returned object; - * to delete a block use FLAC__metadata_iterator_delete_block(). - * - * \param iterator A pointer to an existing initialized iterator. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \retval FLAC__StreamMetadata* - * The current metadata block. - */ -FLAC_API FLAC__StreamMetadata *FLAC__metadata_iterator_get_block(FLAC__Metadata_Iterator *iterator); - -/** Set the metadata block at the current position, replacing the existing - * block. The new block passed in becomes owned by the chain and it will be - * deleted when the chain is deleted. - * - * \param iterator A pointer to an existing initialized iterator. - * \param block A pointer to a metadata block. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \code block != NULL \endcode - * \retval FLAC__bool - * \c false if the conditions in the above description are not met, or - * a memory allocation error occurs, otherwise \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_iterator_set_block(FLAC__Metadata_Iterator *iterator, FLAC__StreamMetadata *block); - -/** Removes the current block from the chain. If \a replace_with_padding is - * \c true, the block will instead be replaced with a padding block of equal - * size. You can not delete the STREAMINFO block. The iterator will be - * left pointing to the block before the one just "deleted", even if - * \a replace_with_padding is \c true. - * - * \param iterator A pointer to an existing initialized iterator. - * \param replace_with_padding See above. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \retval FLAC__bool - * \c false if the conditions in the above description are not met, - * otherwise \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_iterator_delete_block(FLAC__Metadata_Iterator *iterator, FLAC__bool replace_with_padding); - -/** Insert a new block before the current block. You cannot insert a block - * before the first STREAMINFO block. You cannot insert a STREAMINFO block - * as there can be only one, the one that already exists at the head when you - * read in a chain. The chain takes ownership of the new block and it will be - * deleted when the chain is deleted. The iterator will be left pointing to - * the new block. - * - * \param iterator A pointer to an existing initialized iterator. - * \param block A pointer to a metadata block to insert. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \retval FLAC__bool - * \c false if the conditions in the above description are not met, or - * a memory allocation error occurs, otherwise \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_iterator_insert_block_before(FLAC__Metadata_Iterator *iterator, FLAC__StreamMetadata *block); - -/** Insert a new block after the current block. You cannot insert a STREAMINFO - * block as there can be only one, the one that already exists at the head when - * you read in a chain. The chain takes ownership of the new block and it will - * be deleted when the chain is deleted. The iterator will be left pointing to - * the new block. - * - * \param iterator A pointer to an existing initialized iterator. - * \param block A pointer to a metadata block to insert. - * \assert - * \code iterator != NULL \endcode - * \a iterator has been successfully initialized with - * FLAC__metadata_iterator_init() - * \retval FLAC__bool - * \c false if the conditions in the above description are not met, or - * a memory allocation error occurs, otherwise \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_iterator_insert_block_after(FLAC__Metadata_Iterator *iterator, FLAC__StreamMetadata *block); - -/* \} */ - - -/** \defgroup flac_metadata_object FLAC/metadata.h: metadata object methods - * \ingroup flac_metadata - * - * \brief - * This module contains methods for manipulating FLAC metadata objects. - * - * Since many are variable length we have to be careful about the memory - * management. We decree that all pointers to data in the object are - * owned by the object and memory-managed by the object. - * - * Use the FLAC__metadata_object_new() and FLAC__metadata_object_delete() - * functions to create all instances. When using the - * FLAC__metadata_object_set_*() functions to set pointers to data, set - * \a copy to \c true to have the function make it's own copy of the data, or - * to \c false to give the object ownership of your data. In the latter case - * your pointer must be freeable by free() and will be free()d when the object - * is FLAC__metadata_object_delete()d. It is legal to pass a null pointer as - * the data pointer to a FLAC__metadata_object_set_*() function as long as - * the length argument is 0 and the \a copy argument is \c false. - * - * The FLAC__metadata_object_new() and FLAC__metadata_object_clone() function - * will return \c NULL in the case of a memory allocation error, otherwise a new - * object. The FLAC__metadata_object_set_*() functions return \c false in the - * case of a memory allocation error. - * - * We don't have the convenience of C++ here, so note that the library relies - * on you to keep the types straight. In other words, if you pass, for - * example, a FLAC__StreamMetadata* that represents a STREAMINFO block to - * FLAC__metadata_object_application_set_data(), you will get an assertion - * failure. - * - * For convenience the FLAC__metadata_object_vorbiscomment_*() functions - * maintain a trailing NUL on each Vorbis comment entry. This is not counted - * toward the length or stored in the stream, but it can make working with plain - * comments (those that don't contain embedded-NULs in the value) easier. - * Entries passed into these functions have trailing NULs added if missing, and - * returned entries are guaranteed to have a trailing NUL. - * - * The FLAC__metadata_object_vorbiscomment_*() functions that take a Vorbis - * comment entry/name/value will first validate that it complies with the Vorbis - * comment specification and return false if it does not. - * - * There is no need to recalculate the length field on metadata blocks you - * have modified. They will be calculated automatically before they are - * written back to a file. - * - * \{ - */ - - -/** Create a new metadata object instance of the given type. - * - * The object will be "empty"; i.e. values and data pointers will be \c 0, - * with the exception of FLAC__METADATA_TYPE_VORBIS_COMMENT, which will have - * the vendor string set (but zero comments). - * - * Do not pass in a value greater than or equal to - * \a FLAC__METADATA_TYPE_UNDEFINED unless you really know what you're - * doing. - * - * \param type Type of object to create - * \retval FLAC__StreamMetadata* - * \c NULL if there was an error allocating memory or the type code is - * greater than FLAC__MAX_METADATA_TYPE_CODE, else the new instance. - */ -FLAC_API FLAC__StreamMetadata *FLAC__metadata_object_new(FLAC__MetadataType type); - -/** Create a copy of an existing metadata object. - * - * The copy is a "deep" copy, i.e. dynamically allocated data within the - * object is also copied. The caller takes ownership of the new block and - * is responsible for freeing it with FLAC__metadata_object_delete(). - * - * \param object Pointer to object to copy. - * \assert - * \code object != NULL \endcode - * \retval FLAC__StreamMetadata* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__StreamMetadata *FLAC__metadata_object_clone(const FLAC__StreamMetadata *object); - -/** Free a metadata object. Deletes the object pointed to by \a object. - * - * The delete is a "deep" delete, i.e. dynamically allocated data within the - * object is also deleted. - * - * \param object A pointer to an existing object. - * \assert - * \code object != NULL \endcode - */ -FLAC_API void FLAC__metadata_object_delete(FLAC__StreamMetadata *object); - -/** Compares two metadata objects. - * - * The compare is "deep", i.e. dynamically allocated data within the - * object is also compared. - * - * \param block1 A pointer to an existing object. - * \param block2 A pointer to an existing object. - * \assert - * \code block1 != NULL \endcode - * \code block2 != NULL \endcode - * \retval FLAC__bool - * \c true if objects are identical, else \c false. - */ -FLAC_API FLAC__bool FLAC__metadata_object_is_equal(const FLAC__StreamMetadata *block1, const FLAC__StreamMetadata *block2); - -/** Sets the application data of an APPLICATION block. - * - * If \a copy is \c true, a copy of the data is stored; otherwise, the object - * takes ownership of the pointer. The existing data will be freed if this - * function is successful, otherwise the original data will remain if \a copy - * is \c true and malloc() fails. - * - * \note It is safe to pass a const pointer to \a data if \a copy is \c true. - * - * \param object A pointer to an existing APPLICATION object. - * \param data A pointer to the data to set. - * \param length The length of \a data in bytes. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_APPLICATION \endcode - * \code (data != NULL && length > 0) || - * (data == NULL && length == 0 && copy == false) \endcode - * \retval FLAC__bool - * \c false if \a copy is \c true and malloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_application_set_data(FLAC__StreamMetadata *object, FLAC__byte *data, uint32_t length, FLAC__bool copy); - -/** Resize the seekpoint array. - * - * If the size shrinks, elements will truncated; if it grows, new placeholder - * points will be added to the end. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param new_num_points The desired length of the array; may be \c 0. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \code (object->data.seek_table.points == NULL && object->data.seek_table.num_points == 0) || - * (object->data.seek_table.points != NULL && object->data.seek_table.num_points > 0) \endcode - * \retval FLAC__bool - * \c false if memory allocation error, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_resize_points(FLAC__StreamMetadata *object, uint32_t new_num_points); - -/** Set a seekpoint in a seektable. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param point_num Index into seekpoint array to set. - * \param point The point to set. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \code object->data.seek_table.num_points > point_num \endcode - */ -FLAC_API void FLAC__metadata_object_seektable_set_point(FLAC__StreamMetadata *object, uint32_t point_num, FLAC__StreamMetadata_SeekPoint point); - -/** Insert a seekpoint into a seektable. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param point_num Index into seekpoint array to set. - * \param point The point to set. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \code object->data.seek_table.num_points >= point_num \endcode - * \retval FLAC__bool - * \c false if memory allocation error, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_insert_point(FLAC__StreamMetadata *object, uint32_t point_num, FLAC__StreamMetadata_SeekPoint point); - -/** Delete a seekpoint from a seektable. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param point_num Index into seekpoint array to set. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \code object->data.seek_table.num_points > point_num \endcode - * \retval FLAC__bool - * \c false if memory allocation error, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_delete_point(FLAC__StreamMetadata *object, uint32_t point_num); - -/** Check a seektable to see if it conforms to the FLAC specification. - * See the format specification for limits on the contents of the - * seektable. - * - * \param object A pointer to an existing SEEKTABLE object. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \retval FLAC__bool - * \c false if seek table is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_is_legal(const FLAC__StreamMetadata *object); - -/** Append a number of placeholder points to the end of a seek table. - * - * \note - * As with the other ..._seektable_template_... functions, you should - * call FLAC__metadata_object_seektable_template_sort() when finished - * to make the seek table legal. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param num The number of placeholder points to append. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \retval FLAC__bool - * \c false if memory allocation fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_placeholders(FLAC__StreamMetadata *object, uint32_t num); - -/** Append a specific seek point template to the end of a seek table. - * - * \note - * As with the other ..._seektable_template_... functions, you should - * call FLAC__metadata_object_seektable_template_sort() when finished - * to make the seek table legal. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param sample_number The sample number of the seek point template. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \retval FLAC__bool - * \c false if memory allocation fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_point(FLAC__StreamMetadata *object, FLAC__uint64 sample_number); - -/** Append specific seek point templates to the end of a seek table. - * - * \note - * As with the other ..._seektable_template_... functions, you should - * call FLAC__metadata_object_seektable_template_sort() when finished - * to make the seek table legal. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param sample_numbers An array of sample numbers for the seek points. - * \param num The number of seek point templates to append. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \retval FLAC__bool - * \c false if memory allocation fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_points(FLAC__StreamMetadata *object, FLAC__uint64 sample_numbers[], uint32_t num); - -/** Append a set of evenly-spaced seek point templates to the end of a - * seek table. - * - * \note - * As with the other ..._seektable_template_... functions, you should - * call FLAC__metadata_object_seektable_template_sort() when finished - * to make the seek table legal. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param num The number of placeholder points to append. - * \param total_samples The total number of samples to be encoded; - * the seekpoints will be spaced approximately - * \a total_samples / \a num samples apart. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \code total_samples > 0 \endcode - * \retval FLAC__bool - * \c false if memory allocation fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_spaced_points(FLAC__StreamMetadata *object, uint32_t num, FLAC__uint64 total_samples); - -/** Append a set of evenly-spaced seek point templates to the end of a - * seek table. - * - * \note - * As with the other ..._seektable_template_... functions, you should - * call FLAC__metadata_object_seektable_template_sort() when finished - * to make the seek table legal. - * - * \param object A pointer to an existing SEEKTABLE object. - * \param samples The number of samples apart to space the placeholder - * points. The first point will be at sample \c 0, the - * second at sample \a samples, then 2*\a samples, and - * so on. As long as \a samples and \a total_samples - * are greater than \c 0, there will always be at least - * one seekpoint at sample \c 0. - * \param total_samples The total number of samples to be encoded; - * the seekpoints will be spaced - * \a samples samples apart. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \code samples > 0 \endcode - * \code total_samples > 0 \endcode - * \retval FLAC__bool - * \c false if memory allocation fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_spaced_points_by_samples(FLAC__StreamMetadata *object, uint32_t samples, FLAC__uint64 total_samples); - -/** Sort a seek table's seek points according to the format specification, - * removing duplicates. - * - * \param object A pointer to a seek table to be sorted. - * \param compact If \c false, behaves like FLAC__format_seektable_sort(). - * If \c true, duplicates are deleted and the seek table is - * shrunk appropriately; the number of placeholder points - * present in the seek table will be the same after the call - * as before. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode - * \retval FLAC__bool - * \c false if realloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_sort(FLAC__StreamMetadata *object, FLAC__bool compact); - -/** Sets the vendor string in a VORBIS_COMMENT block. - * - * For convenience, a trailing NUL is added to the entry if it doesn't have - * one already. - * - * If \a copy is \c true, a copy of the entry is stored; otherwise, the object - * takes ownership of the \c entry.entry pointer. - * - * \note If this function returns \c false, the caller still owns the - * pointer. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param entry The entry to set the vendor string to. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code (entry.entry != NULL && entry.length > 0) || - * (entry.entry == NULL && entry.length == 0) \endcode - * \retval FLAC__bool - * \c false if memory allocation fails or \a entry does not comply with the - * Vorbis comment specification, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_set_vendor_string(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy); - -/** Resize the comment array. - * - * If the size shrinks, elements will truncated; if it grows, new empty - * fields will be added to the end. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param new_num_comments The desired length of the array; may be \c 0. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code (object->data.vorbis_comment.comments == NULL && object->data.vorbis_comment.num_comments == 0) || - * (object->data.vorbis_comment.comments != NULL && object->data.vorbis_comment.num_comments > 0) \endcode - * \retval FLAC__bool - * \c false if memory allocation fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_resize_comments(FLAC__StreamMetadata *object, uint32_t new_num_comments); - -/** Sets a comment in a VORBIS_COMMENT block. - * - * For convenience, a trailing NUL is added to the entry if it doesn't have - * one already. - * - * If \a copy is \c true, a copy of the entry is stored; otherwise, the object - * takes ownership of the \c entry.entry pointer. - * - * \note If this function returns \c false, the caller still owns the - * pointer. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param comment_num Index into comment array to set. - * \param entry The entry to set the comment to. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code comment_num < object->data.vorbis_comment.num_comments \endcode - * \code (entry.entry != NULL && entry.length > 0) || - * (entry.entry == NULL && entry.length == 0) \endcode - * \retval FLAC__bool - * \c false if memory allocation fails or \a entry does not comply with the - * Vorbis comment specification, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_set_comment(FLAC__StreamMetadata *object, uint32_t comment_num, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy); - -/** Insert a comment in a VORBIS_COMMENT block at the given index. - * - * For convenience, a trailing NUL is added to the entry if it doesn't have - * one already. - * - * If \a copy is \c true, a copy of the entry is stored; otherwise, the object - * takes ownership of the \c entry.entry pointer. - * - * \note If this function returns \c false, the caller still owns the - * pointer. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param comment_num The index at which to insert the comment. The comments - * at and after \a comment_num move right one position. - * To append a comment to the end, set \a comment_num to - * \c object->data.vorbis_comment.num_comments . - * \param entry The comment to insert. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code object->data.vorbis_comment.num_comments >= comment_num \endcode - * \code (entry.entry != NULL && entry.length > 0) || - * (entry.entry == NULL && entry.length == 0 && copy == false) \endcode - * \retval FLAC__bool - * \c false if memory allocation fails or \a entry does not comply with the - * Vorbis comment specification, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_insert_comment(FLAC__StreamMetadata *object, uint32_t comment_num, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy); - -/** Appends a comment to a VORBIS_COMMENT block. - * - * For convenience, a trailing NUL is added to the entry if it doesn't have - * one already. - * - * If \a copy is \c true, a copy of the entry is stored; otherwise, the object - * takes ownership of the \c entry.entry pointer. - * - * \note If this function returns \c false, the caller still owns the - * pointer. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param entry The comment to insert. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code (entry.entry != NULL && entry.length > 0) || - * (entry.entry == NULL && entry.length == 0 && copy == false) \endcode - * \retval FLAC__bool - * \c false if memory allocation fails or \a entry does not comply with the - * Vorbis comment specification, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_append_comment(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy); - -/** Replaces comments in a VORBIS_COMMENT block with a new one. - * - * For convenience, a trailing NUL is added to the entry if it doesn't have - * one already. - * - * Depending on the value of \a all, either all or just the first comment - * whose field name(s) match the given entry's name will be replaced by the - * given entry. If no comments match, \a entry will simply be appended. - * - * If \a copy is \c true, a copy of the entry is stored; otherwise, the object - * takes ownership of the \c entry.entry pointer. - * - * \note If this function returns \c false, the caller still owns the - * pointer. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param entry The comment to insert. - * \param all If \c true, all comments whose field name matches - * \a entry's field name will be removed, and \a entry will - * be inserted at the position of the first matching - * comment. If \c false, only the first comment whose - * field name matches \a entry's field name will be - * replaced with \a entry. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code (entry.entry != NULL && entry.length > 0) || - * (entry.entry == NULL && entry.length == 0 && copy == false) \endcode - * \retval FLAC__bool - * \c false if memory allocation fails or \a entry does not comply with the - * Vorbis comment specification, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_replace_comment(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool all, FLAC__bool copy); - -/** Delete a comment in a VORBIS_COMMENT block at the given index. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param comment_num The index of the comment to delete. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code object->data.vorbis_comment.num_comments > comment_num \endcode - * \retval FLAC__bool - * \c false if realloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_delete_comment(FLAC__StreamMetadata *object, uint32_t comment_num); - -/** Creates a Vorbis comment entry from NUL-terminated name and value strings. - * - * On return, the filled-in \a entry->entry pointer will point to malloc()ed - * memory and shall be owned by the caller. For convenience the entry will - * have a terminating NUL. - * - * \param entry A pointer to a Vorbis comment entry. The entry's - * \c entry pointer should not point to allocated - * memory as it will be overwritten. - * \param field_name The field name in ASCII, \c NUL terminated. - * \param field_value The field value in UTF-8, \c NUL terminated. - * \assert - * \code entry != NULL \endcode - * \code field_name != NULL \endcode - * \code field_value != NULL \endcode - * \retval FLAC__bool - * \c false if malloc() fails, or if \a field_name or \a field_value does - * not comply with the Vorbis comment specification, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair(FLAC__StreamMetadata_VorbisComment_Entry *entry, const char *field_name, const char *field_value); - -/** Splits a Vorbis comment entry into NUL-terminated name and value strings. - * - * The returned pointers to name and value will be allocated by malloc() - * and shall be owned by the caller. - * - * \param entry An existing Vorbis comment entry. - * \param field_name The address of where the returned pointer to the - * field name will be stored. - * \param field_value The address of where the returned pointer to the - * field value will be stored. - * \assert - * \code (entry.entry != NULL && entry.length > 0) \endcode - * \code memchr(entry.entry, '=', entry.length) != NULL \endcode - * \code field_name != NULL \endcode - * \code field_value != NULL \endcode - * \retval FLAC__bool - * \c false if memory allocation fails or \a entry does not comply with the - * Vorbis comment specification, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_to_name_value_pair(const FLAC__StreamMetadata_VorbisComment_Entry entry, char **field_name, char **field_value); - -/** Check if the given Vorbis comment entry's field name matches the given - * field name. - * - * \param entry An existing Vorbis comment entry. - * \param field_name The field name to check. - * \param field_name_length The length of \a field_name, not including the - * terminating \c NUL. - * \assert - * \code (entry.entry != NULL && entry.length > 0) \endcode - * \retval FLAC__bool - * \c true if the field names match, else \c false - */ -FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_matches(const FLAC__StreamMetadata_VorbisComment_Entry entry, const char *field_name, uint32_t field_name_length); - -/** Find a Vorbis comment with the given field name. - * - * The search begins at entry number \a offset; use an offset of 0 to - * search from the beginning of the comment array. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param offset The offset into the comment array from where to start - * the search. - * \param field_name The field name of the comment to find. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \code field_name != NULL \endcode - * \retval int - * The offset in the comment array of the first comment whose field - * name matches \a field_name, or \c -1 if no match was found. - */ -FLAC_API int FLAC__metadata_object_vorbiscomment_find_entry_from(const FLAC__StreamMetadata *object, uint32_t offset, const char *field_name); - -/** Remove first Vorbis comment matching the given field name. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param field_name The field name of comment to delete. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \retval int - * \c -1 for memory allocation error, \c 0 for no matching entries, - * \c 1 for one matching entry deleted. - */ -FLAC_API int FLAC__metadata_object_vorbiscomment_remove_entry_matching(FLAC__StreamMetadata *object, const char *field_name); - -/** Remove all Vorbis comments matching the given field name. - * - * \param object A pointer to an existing VORBIS_COMMENT object. - * \param field_name The field name of comments to delete. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode - * \retval int - * \c -1 for memory allocation error, \c 0 for no matching entries, - * else the number of matching entries deleted. - */ -FLAC_API int FLAC__metadata_object_vorbiscomment_remove_entries_matching(FLAC__StreamMetadata *object, const char *field_name); - -/** Create a new CUESHEET track instance. - * - * The object will be "empty"; i.e. values and data pointers will be \c 0. - * - * \retval FLAC__StreamMetadata_CueSheet_Track* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__StreamMetadata_CueSheet_Track *FLAC__metadata_object_cuesheet_track_new(void); - -/** Create a copy of an existing CUESHEET track object. - * - * The copy is a "deep" copy, i.e. dynamically allocated data within the - * object is also copied. The caller takes ownership of the new object and - * is responsible for freeing it with - * FLAC__metadata_object_cuesheet_track_delete(). - * - * \param object Pointer to object to copy. - * \assert - * \code object != NULL \endcode - * \retval FLAC__StreamMetadata_CueSheet_Track* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__StreamMetadata_CueSheet_Track *FLAC__metadata_object_cuesheet_track_clone(const FLAC__StreamMetadata_CueSheet_Track *object); - -/** Delete a CUESHEET track object - * - * \param object A pointer to an existing CUESHEET track object. - * \assert - * \code object != NULL \endcode - */ -FLAC_API void FLAC__metadata_object_cuesheet_track_delete(FLAC__StreamMetadata_CueSheet_Track *object); - -/** Resize a track's index point array. - * - * If the size shrinks, elements will truncated; if it grows, new blank - * indices will be added to the end. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num The index of the track to modify. NOTE: this is not - * necessarily the same as the track's \a number field. - * \param new_num_indices The desired length of the array; may be \c 0. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code object->data.cue_sheet.num_tracks > track_num \endcode - * \code (object->data.cue_sheet.tracks[track_num].indices == NULL && object->data.cue_sheet.tracks[track_num].num_indices == 0) || - * (object->data.cue_sheet.tracks[track_num].indices != NULL && object->data.cue_sheet.tracks[track_num].num_indices > 0) \endcode - * \retval FLAC__bool - * \c false if memory allocation error, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_resize_indices(FLAC__StreamMetadata *object, uint32_t track_num, uint32_t new_num_indices); - -/** Insert an index point in a CUESHEET track at the given index. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num The index of the track to modify. NOTE: this is not - * necessarily the same as the track's \a number field. - * \param index_num The index into the track's index array at which to - * insert the index point. NOTE: this is not necessarily - * the same as the index point's \a number field. The - * indices at and after \a index_num move right one - * position. To append an index point to the end, set - * \a index_num to - * \c object->data.cue_sheet.tracks[track_num].num_indices . - * \param index The index point to insert. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code object->data.cue_sheet.num_tracks > track_num \endcode - * \code object->data.cue_sheet.tracks[track_num].num_indices >= index_num \endcode - * \retval FLAC__bool - * \c false if realloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_insert_index(FLAC__StreamMetadata *object, uint32_t track_num, uint32_t index_num, FLAC__StreamMetadata_CueSheet_Index index); - -/** Insert a blank index point in a CUESHEET track at the given index. - * - * A blank index point is one in which all field values are zero. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num The index of the track to modify. NOTE: this is not - * necessarily the same as the track's \a number field. - * \param index_num The index into the track's index array at which to - * insert the index point. NOTE: this is not necessarily - * the same as the index point's \a number field. The - * indices at and after \a index_num move right one - * position. To append an index point to the end, set - * \a index_num to - * \c object->data.cue_sheet.tracks[track_num].num_indices . - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code object->data.cue_sheet.num_tracks > track_num \endcode - * \code object->data.cue_sheet.tracks[track_num].num_indices >= index_num \endcode - * \retval FLAC__bool - * \c false if realloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_insert_blank_index(FLAC__StreamMetadata *object, uint32_t track_num, uint32_t index_num); - -/** Delete an index point in a CUESHEET track at the given index. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num The index into the track array of the track to - * modify. NOTE: this is not necessarily the same - * as the track's \a number field. - * \param index_num The index into the track's index array of the index - * to delete. NOTE: this is not necessarily the same - * as the index's \a number field. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code object->data.cue_sheet.num_tracks > track_num \endcode - * \code object->data.cue_sheet.tracks[track_num].num_indices > index_num \endcode - * \retval FLAC__bool - * \c false if realloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_delete_index(FLAC__StreamMetadata *object, uint32_t track_num, uint32_t index_num); - -/** Resize the track array. - * - * If the size shrinks, elements will truncated; if it grows, new blank - * tracks will be added to the end. - * - * \param object A pointer to an existing CUESHEET object. - * \param new_num_tracks The desired length of the array; may be \c 0. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code (object->data.cue_sheet.tracks == NULL && object->data.cue_sheet.num_tracks == 0) || - * (object->data.cue_sheet.tracks != NULL && object->data.cue_sheet.num_tracks > 0) \endcode - * \retval FLAC__bool - * \c false if memory allocation error, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_resize_tracks(FLAC__StreamMetadata *object, uint32_t new_num_tracks); - -/** Sets a track in a CUESHEET block. - * - * If \a copy is \c true, a copy of the track is stored; otherwise, the object - * takes ownership of the \a track pointer. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num Index into track array to set. NOTE: this is not - * necessarily the same as the track's \a number field. - * \param track The track to set the track to. You may safely pass in - * a const pointer if \a copy is \c true. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code track_num < object->data.cue_sheet.num_tracks \endcode - * \code (track->indices != NULL && track->num_indices > 0) || - * (track->indices == NULL && track->num_indices == 0) \endcode - * \retval FLAC__bool - * \c false if \a copy is \c true and malloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_set_track(FLAC__StreamMetadata *object, uint32_t track_num, FLAC__StreamMetadata_CueSheet_Track *track, FLAC__bool copy); - -/** Insert a track in a CUESHEET block at the given index. - * - * If \a copy is \c true, a copy of the track is stored; otherwise, the object - * takes ownership of the \a track pointer. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num The index at which to insert the track. NOTE: this - * is not necessarily the same as the track's \a number - * field. The tracks at and after \a track_num move right - * one position. To append a track to the end, set - * \a track_num to \c object->data.cue_sheet.num_tracks . - * \param track The track to insert. You may safely pass in a const - * pointer if \a copy is \c true. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code object->data.cue_sheet.num_tracks >= track_num \endcode - * \retval FLAC__bool - * \c false if \a copy is \c true and malloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_insert_track(FLAC__StreamMetadata *object, uint32_t track_num, FLAC__StreamMetadata_CueSheet_Track *track, FLAC__bool copy); - -/** Insert a blank track in a CUESHEET block at the given index. - * - * A blank track is one in which all field values are zero. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num The index at which to insert the track. NOTE: this - * is not necessarily the same as the track's \a number - * field. The tracks at and after \a track_num move right - * one position. To append a track to the end, set - * \a track_num to \c object->data.cue_sheet.num_tracks . - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code object->data.cue_sheet.num_tracks >= track_num \endcode - * \retval FLAC__bool - * \c false if \a copy is \c true and malloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_insert_blank_track(FLAC__StreamMetadata *object, uint32_t track_num); - -/** Delete a track in a CUESHEET block at the given index. - * - * \param object A pointer to an existing CUESHEET object. - * \param track_num The index into the track array of the track to - * delete. NOTE: this is not necessarily the same - * as the track's \a number field. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \code object->data.cue_sheet.num_tracks > track_num \endcode - * \retval FLAC__bool - * \c false if realloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_delete_track(FLAC__StreamMetadata *object, uint32_t track_num); - -/** Check a cue sheet to see if it conforms to the FLAC specification. - * See the format specification for limits on the contents of the - * cue sheet. - * - * \param object A pointer to an existing CUESHEET object. - * \param check_cd_da_subset If \c true, check CUESHEET against more - * stringent requirements for a CD-DA (audio) disc. - * \param violation Address of a pointer to a string. If there is a - * violation, a pointer to a string explanation of the - * violation will be returned here. \a violation may be - * \c NULL if you don't need the returned string. Do not - * free the returned string; it will always point to static - * data. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \retval FLAC__bool - * \c false if cue sheet is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_is_legal(const FLAC__StreamMetadata *object, FLAC__bool check_cd_da_subset, const char **violation); - -/** Calculate and return the CDDB/freedb ID for a cue sheet. The function - * assumes the cue sheet corresponds to a CD; the result is undefined - * if the cuesheet's is_cd bit is not set. - * - * \param object A pointer to an existing CUESHEET object. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode - * \retval FLAC__uint32 - * The unsigned integer representation of the CDDB/freedb ID - */ -FLAC_API FLAC__uint32 FLAC__metadata_object_cuesheet_calculate_cddb_id(const FLAC__StreamMetadata *object); - -/** Sets the MIME type of a PICTURE block. - * - * If \a copy is \c true, a copy of the string is stored; otherwise, the object - * takes ownership of the pointer. The existing string will be freed if this - * function is successful, otherwise the original string will remain if \a copy - * is \c true and malloc() fails. - * - * \note It is safe to pass a const pointer to \a mime_type if \a copy is \c true. - * - * \param object A pointer to an existing PICTURE object. - * \param mime_type A pointer to the MIME type string. The string must be - * ASCII characters 0x20-0x7e, NUL-terminated. No validation - * is done. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode - * \code (mime_type != NULL) \endcode - * \retval FLAC__bool - * \c false if \a copy is \c true and malloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_picture_set_mime_type(FLAC__StreamMetadata *object, char *mime_type, FLAC__bool copy); - -/** Sets the description of a PICTURE block. - * - * If \a copy is \c true, a copy of the string is stored; otherwise, the object - * takes ownership of the pointer. The existing string will be freed if this - * function is successful, otherwise the original string will remain if \a copy - * is \c true and malloc() fails. - * - * \note It is safe to pass a const pointer to \a description if \a copy is \c true. - * - * \param object A pointer to an existing PICTURE object. - * \param description A pointer to the description string. The string must be - * valid UTF-8, NUL-terminated. No validation is done. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode - * \code (description != NULL) \endcode - * \retval FLAC__bool - * \c false if \a copy is \c true and malloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_picture_set_description(FLAC__StreamMetadata *object, FLAC__byte *description, FLAC__bool copy); - -/** Sets the picture data of a PICTURE block. - * - * If \a copy is \c true, a copy of the data is stored; otherwise, the object - * takes ownership of the pointer. Also sets the \a data_length field of the - * metadata object to what is passed in as the \a length parameter. The - * existing data will be freed if this function is successful, otherwise the - * original data and data_length will remain if \a copy is \c true and - * malloc() fails. - * - * \note It is safe to pass a const pointer to \a data if \a copy is \c true. - * - * \param object A pointer to an existing PICTURE object. - * \param data A pointer to the data to set. - * \param length The length of \a data in bytes. - * \param copy See above. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode - * \code (data != NULL && length > 0) || - * (data == NULL && length == 0 && copy == false) \endcode - * \retval FLAC__bool - * \c false if \a copy is \c true and malloc() fails, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_picture_set_data(FLAC__StreamMetadata *object, FLAC__byte *data, FLAC__uint32 length, FLAC__bool copy); - -/** Check a PICTURE block to see if it conforms to the FLAC specification. - * See the format specification for limits on the contents of the - * PICTURE block. - * - * \param object A pointer to existing PICTURE block to be checked. - * \param violation Address of a pointer to a string. If there is a - * violation, a pointer to a string explanation of the - * violation will be returned here. \a violation may be - * \c NULL if you don't need the returned string. Do not - * free the returned string; it will always point to static - * data. - * \assert - * \code object != NULL \endcode - * \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode - * \retval FLAC__bool - * \c false if PICTURE block is illegal, else \c true. - */ -FLAC_API FLAC__bool FLAC__metadata_object_picture_is_legal(const FLAC__StreamMetadata *object, const char **violation); - -/* \} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libs/include/FLAC/ordinals.h b/libs/include/FLAC/ordinals.h deleted file mode 100644 index 75b830d..0000000 --- a/libs/include/FLAC/ordinals.h +++ /dev/null @@ -1,85 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000-2009 Josh Coalson - * Copyright (C) 2011-2016 Xiph.Org Foundation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__ORDINALS_H -#define FLAC__ORDINALS_H - -#if defined(_MSC_VER) && _MSC_VER < 1600 - -/* Microsoft Visual Studio earlier than the 2010 version did not provide - * the 1999 ISO C Standard header file . - */ - -typedef signed __int8 FLAC__int8; -typedef signed __int16 FLAC__int16; -typedef signed __int32 FLAC__int32; -typedef signed __int64 FLAC__int64; -typedef unsigned __int8 FLAC__uint8; -typedef unsigned __int16 FLAC__uint16; -typedef unsigned __int32 FLAC__uint32; -typedef unsigned __int64 FLAC__uint64; - -#else - -/* For MSVC 2010 and everything else which provides . */ - -#include - -typedef int8_t FLAC__int8; -typedef uint8_t FLAC__uint8; - -typedef int16_t FLAC__int16; -typedef int32_t FLAC__int32; -typedef int64_t FLAC__int64; -typedef uint16_t FLAC__uint16; -typedef uint32_t FLAC__uint32; -typedef uint64_t FLAC__uint64; - -#endif - -typedef int FLAC__bool; - -typedef FLAC__uint8 FLAC__byte; - - -#ifdef true -#undef true -#endif -#ifdef false -#undef false -#endif -#ifndef __cplusplus -#define true 1 -#define false 0 -#endif - -#endif diff --git a/libs/include/FLAC/stream_decoder.h b/libs/include/FLAC/stream_decoder.h deleted file mode 100644 index 57215c5..0000000 --- a/libs/include/FLAC/stream_decoder.h +++ /dev/null @@ -1,1559 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000-2009 Josh Coalson - * Copyright (C) 2011-2016 Xiph.Org Foundation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__STREAM_DECODER_H -#define FLAC__STREAM_DECODER_H - -#include /* for FILE */ -#include "export.h" -#include "format.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/** \file include/FLAC/stream_decoder.h - * - * \brief - * This module contains the functions which implement the stream - * decoder. - * - * See the detailed documentation in the - * \link flac_stream_decoder stream decoder \endlink module. - */ - -/** \defgroup flac_decoder FLAC/ \*_decoder.h: decoder interfaces - * \ingroup flac - * - * \brief - * This module describes the decoder layers provided by libFLAC. - * - * The stream decoder can be used to decode complete streams either from - * the client via callbacks, or directly from a file, depending on how - * it is initialized. When decoding via callbacks, the client provides - * callbacks for reading FLAC data and writing decoded samples, and - * handling metadata and errors. If the client also supplies seek-related - * callback, the decoder function for sample-accurate seeking within the - * FLAC input is also available. When decoding from a file, the client - * needs only supply a filename or open \c FILE* and write/metadata/error - * callbacks; the rest of the callbacks are supplied internally. For more - * info see the \link flac_stream_decoder stream decoder \endlink module. - */ - -/** \defgroup flac_stream_decoder FLAC/stream_decoder.h: stream decoder interface - * \ingroup flac_decoder - * - * \brief - * This module contains the functions which implement the stream - * decoder. - * - * The stream decoder can decode native FLAC, and optionally Ogg FLAC - * (check FLAC_API_SUPPORTS_OGG_FLAC) streams and files. - * - * The basic usage of this decoder is as follows: - * - The program creates an instance of a decoder using - * FLAC__stream_decoder_new(). - * - The program overrides the default settings using - * FLAC__stream_decoder_set_*() functions. - * - The program initializes the instance to validate the settings and - * prepare for decoding using - * - FLAC__stream_decoder_init_stream() or FLAC__stream_decoder_init_FILE() - * or FLAC__stream_decoder_init_file() for native FLAC, - * - FLAC__stream_decoder_init_ogg_stream() or FLAC__stream_decoder_init_ogg_FILE() - * or FLAC__stream_decoder_init_ogg_file() for Ogg FLAC - * - The program calls the FLAC__stream_decoder_process_*() functions - * to decode data, which subsequently calls the callbacks. - * - The program finishes the decoding with FLAC__stream_decoder_finish(), - * which flushes the input and output and resets the decoder to the - * uninitialized state. - * - The instance may be used again or deleted with - * FLAC__stream_decoder_delete(). - * - * In more detail, the program will create a new instance by calling - * FLAC__stream_decoder_new(), then call FLAC__stream_decoder_set_*() - * functions to override the default decoder options, and call - * one of the FLAC__stream_decoder_init_*() functions. - * - * There are three initialization functions for native FLAC, one for - * setting up the decoder to decode FLAC data from the client via - * callbacks, and two for decoding directly from a FLAC file. - * - * For decoding via callbacks, use FLAC__stream_decoder_init_stream(). - * You must also supply several callbacks for handling I/O. Some (like - * seeking) are optional, depending on the capabilities of the input. - * - * For decoding directly from a file, use FLAC__stream_decoder_init_FILE() - * or FLAC__stream_decoder_init_file(). Then you must only supply an open - * \c FILE* or filename and fewer callbacks; the decoder will handle - * the other callbacks internally. - * - * There are three similarly-named init functions for decoding from Ogg - * FLAC streams. Check \c FLAC_API_SUPPORTS_OGG_FLAC to find out if the - * library has been built with Ogg support. - * - * Once the decoder is initialized, your program will call one of several - * functions to start the decoding process: - * - * - FLAC__stream_decoder_process_single() - Tells the decoder to process at - * most one metadata block or audio frame and return, calling either the - * metadata callback or write callback, respectively, once. If the decoder - * loses sync it will return with only the error callback being called. - * - FLAC__stream_decoder_process_until_end_of_metadata() - Tells the decoder - * to process the stream from the current location and stop upon reaching - * the first audio frame. The client will get one metadata, write, or error - * callback per metadata block, audio frame, or sync error, respectively. - * - FLAC__stream_decoder_process_until_end_of_stream() - Tells the decoder - * to process the stream from the current location until the read callback - * returns FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM or - * FLAC__STREAM_DECODER_READ_STATUS_ABORT. The client will get one metadata, - * write, or error callback per metadata block, audio frame, or sync error, - * respectively. - * - * When the decoder has finished decoding (normally or through an abort), - * the instance is finished by calling FLAC__stream_decoder_finish(), which - * ensures the decoder is in the correct state and frees memory. Then the - * instance may be deleted with FLAC__stream_decoder_delete() or initialized - * again to decode another stream. - * - * Seeking is exposed through the FLAC__stream_decoder_seek_absolute() method. - * At any point after the stream decoder has been initialized, the client can - * call this function to seek to an exact sample within the stream. - * Subsequently, the first time the write callback is called it will be - * passed a (possibly partial) block starting at that sample. - * - * If the client cannot seek via the callback interface provided, but still - * has another way of seeking, it can flush the decoder using - * FLAC__stream_decoder_flush() and start feeding data from the new position - * through the read callback. - * - * The stream decoder also provides MD5 signature checking. If this is - * turned on before initialization, FLAC__stream_decoder_finish() will - * report when the decoded MD5 signature does not match the one stored - * in the STREAMINFO block. MD5 checking is automatically turned off - * (until the next FLAC__stream_decoder_reset()) if there is no signature - * in the STREAMINFO block or when a seek is attempted. - * - * The FLAC__stream_decoder_set_metadata_*() functions deserve special - * attention. By default, the decoder only calls the metadata_callback for - * the STREAMINFO block. These functions allow you to tell the decoder - * explicitly which blocks to parse and return via the metadata_callback - * and/or which to skip. Use a FLAC__stream_decoder_set_metadata_respond_all(), - * FLAC__stream_decoder_set_metadata_ignore() ... or FLAC__stream_decoder_set_metadata_ignore_all(), - * FLAC__stream_decoder_set_metadata_respond() ... sequence to exactly specify - * which blocks to return. Remember that metadata blocks can potentially - * be big (for example, cover art) so filtering out the ones you don't - * use can reduce the memory requirements of the decoder. Also note the - * special forms FLAC__stream_decoder_set_metadata_respond_application(id) - * and FLAC__stream_decoder_set_metadata_ignore_application(id) for - * filtering APPLICATION blocks based on the application ID. - * - * STREAMINFO and SEEKTABLE blocks are always parsed and used internally, but - * they still can legally be filtered from the metadata_callback. - * - * \note - * The "set" functions may only be called when the decoder is in the - * state FLAC__STREAM_DECODER_UNINITIALIZED, i.e. after - * FLAC__stream_decoder_new() or FLAC__stream_decoder_finish(), but - * before FLAC__stream_decoder_init_*(). If this is the case they will - * return \c true, otherwise \c false. - * - * \note - * FLAC__stream_decoder_finish() resets all settings to the constructor - * defaults, including the callbacks. - * - * \{ - */ - - -/** State values for a FLAC__StreamDecoder - * - * The decoder's state can be obtained by calling FLAC__stream_decoder_get_state(). - */ -typedef enum { - - FLAC__STREAM_DECODER_SEARCH_FOR_METADATA = 0, - /**< The decoder is ready to search for metadata. */ - - FLAC__STREAM_DECODER_READ_METADATA, - /**< The decoder is ready to or is in the process of reading metadata. */ - - FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC, - /**< The decoder is ready to or is in the process of searching for the - * frame sync code. - */ - - FLAC__STREAM_DECODER_READ_FRAME, - /**< The decoder is ready to or is in the process of reading a frame. */ - - FLAC__STREAM_DECODER_END_OF_STREAM, - /**< The decoder has reached the end of the stream. */ - - FLAC__STREAM_DECODER_OGG_ERROR, - /**< An error occurred in the underlying Ogg layer. */ - - FLAC__STREAM_DECODER_SEEK_ERROR, - /**< An error occurred while seeking. The decoder must be flushed - * with FLAC__stream_decoder_flush() or reset with - * FLAC__stream_decoder_reset() before decoding can continue. - */ - - FLAC__STREAM_DECODER_ABORTED, - /**< The decoder was aborted by the read or write callback. */ - - FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR, - /**< An error occurred allocating memory. The decoder is in an invalid - * state and can no longer be used. - */ - - FLAC__STREAM_DECODER_UNINITIALIZED - /**< The decoder is in the uninitialized state; one of the - * FLAC__stream_decoder_init_*() functions must be called before samples - * can be processed. - */ - -} FLAC__StreamDecoderState; - -/** Maps a FLAC__StreamDecoderState to a C string. - * - * Using a FLAC__StreamDecoderState as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderStateString[]; - - -/** Possible return values for the FLAC__stream_decoder_init_*() functions. - */ -typedef enum { - - FLAC__STREAM_DECODER_INIT_STATUS_OK = 0, - /**< Initialization was successful. */ - - FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER, - /**< The library was not compiled with support for the given container - * format. - */ - - FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS, - /**< A required callback was not supplied. */ - - FLAC__STREAM_DECODER_INIT_STATUS_MEMORY_ALLOCATION_ERROR, - /**< An error occurred allocating memory. */ - - FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE, - /**< fopen() failed in FLAC__stream_decoder_init_file() or - * FLAC__stream_decoder_init_ogg_file(). */ - - FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED - /**< FLAC__stream_decoder_init_*() was called when the decoder was - * already initialized, usually because - * FLAC__stream_decoder_finish() was not called. - */ - -} FLAC__StreamDecoderInitStatus; - -/** Maps a FLAC__StreamDecoderInitStatus to a C string. - * - * Using a FLAC__StreamDecoderInitStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderInitStatusString[]; - - -/** Return values for the FLAC__StreamDecoder read callback. - */ -typedef enum { - - FLAC__STREAM_DECODER_READ_STATUS_CONTINUE, - /**< The read was OK and decoding can continue. */ - - FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM, - /**< The read was attempted while at the end of the stream. Note that - * the client must only return this value when the read callback was - * called when already at the end of the stream. Otherwise, if the read - * itself moves to the end of the stream, the client should still return - * the data and \c FLAC__STREAM_DECODER_READ_STATUS_CONTINUE, and then on - * the next read callback it should return - * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM with a byte count - * of \c 0. - */ - - FLAC__STREAM_DECODER_READ_STATUS_ABORT - /**< An unrecoverable error occurred. The decoder will return from the process call. */ - -} FLAC__StreamDecoderReadStatus; - -/** Maps a FLAC__StreamDecoderReadStatus to a C string. - * - * Using a FLAC__StreamDecoderReadStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderReadStatusString[]; - - -/** Return values for the FLAC__StreamDecoder seek callback. - */ -typedef enum { - - FLAC__STREAM_DECODER_SEEK_STATUS_OK, - /**< The seek was OK and decoding can continue. */ - - FLAC__STREAM_DECODER_SEEK_STATUS_ERROR, - /**< An unrecoverable error occurred. The decoder will return from the process call. */ - - FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED - /**< Client does not support seeking. */ - -} FLAC__StreamDecoderSeekStatus; - -/** Maps a FLAC__StreamDecoderSeekStatus to a C string. - * - * Using a FLAC__StreamDecoderSeekStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderSeekStatusString[]; - - -/** Return values for the FLAC__StreamDecoder tell callback. - */ -typedef enum { - - FLAC__STREAM_DECODER_TELL_STATUS_OK, - /**< The tell was OK and decoding can continue. */ - - FLAC__STREAM_DECODER_TELL_STATUS_ERROR, - /**< An unrecoverable error occurred. The decoder will return from the process call. */ - - FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED - /**< Client does not support telling the position. */ - -} FLAC__StreamDecoderTellStatus; - -/** Maps a FLAC__StreamDecoderTellStatus to a C string. - * - * Using a FLAC__StreamDecoderTellStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderTellStatusString[]; - - -/** Return values for the FLAC__StreamDecoder length callback. - */ -typedef enum { - - FLAC__STREAM_DECODER_LENGTH_STATUS_OK, - /**< The length call was OK and decoding can continue. */ - - FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR, - /**< An unrecoverable error occurred. The decoder will return from the process call. */ - - FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED - /**< Client does not support reporting the length. */ - -} FLAC__StreamDecoderLengthStatus; - -/** Maps a FLAC__StreamDecoderLengthStatus to a C string. - * - * Using a FLAC__StreamDecoderLengthStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderLengthStatusString[]; - - -/** Return values for the FLAC__StreamDecoder write callback. - */ -typedef enum { - - FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE, - /**< The write was OK and decoding can continue. */ - - FLAC__STREAM_DECODER_WRITE_STATUS_ABORT - /**< An unrecoverable error occurred. The decoder will return from the process call. */ - -} FLAC__StreamDecoderWriteStatus; - -/** Maps a FLAC__StreamDecoderWriteStatus to a C string. - * - * Using a FLAC__StreamDecoderWriteStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderWriteStatusString[]; - - -/** Possible values passed back to the FLAC__StreamDecoder error callback. - * \c FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC is the generic catch- - * all. The rest could be caused by bad sync (false synchronization on - * data that is not the start of a frame) or corrupted data. The error - * itself is the decoder's best guess at what happened assuming a correct - * sync. For example \c FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER - * could be caused by a correct sync on the start of a frame, but some - * data in the frame header was corrupted. Or it could be the result of - * syncing on a point the stream that looked like the starting of a frame - * but was not. \c FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM - * could be because the decoder encountered a valid frame made by a future - * version of the encoder which it cannot parse, or because of a false - * sync making it appear as though an encountered frame was generated by - * a future encoder. - */ -typedef enum { - - FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC, - /**< An error in the stream caused the decoder to lose synchronization. */ - - FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER, - /**< The decoder encountered a corrupted frame header. */ - - FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH, - /**< The frame's data did not match the CRC in the footer. */ - - FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM - /**< The decoder encountered reserved fields in use in the stream. */ - -} FLAC__StreamDecoderErrorStatus; - -/** Maps a FLAC__StreamDecoderErrorStatus to a C string. - * - * Using a FLAC__StreamDecoderErrorStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamDecoderErrorStatusString[]; - - -/*********************************************************************** - * - * class FLAC__StreamDecoder - * - ***********************************************************************/ - -struct FLAC__StreamDecoderProtected; -struct FLAC__StreamDecoderPrivate; -/** The opaque structure definition for the stream decoder type. - * See the \link flac_stream_decoder stream decoder module \endlink - * for a detailed description. - */ -typedef struct { - struct FLAC__StreamDecoderProtected *protected_; /* avoid the C++ keyword 'protected' */ - struct FLAC__StreamDecoderPrivate *private_; /* avoid the C++ keyword 'private' */ -} FLAC__StreamDecoder; - -/** Signature for the read callback. - * - * A function pointer matching this signature must be passed to - * FLAC__stream_decoder_init*_stream(). The supplied function will be - * called when the decoder needs more input data. The address of the - * buffer to be filled is supplied, along with the number of bytes the - * buffer can hold. The callback may choose to supply less data and - * modify the byte count but must be careful not to overflow the buffer. - * The callback then returns a status code chosen from - * FLAC__StreamDecoderReadStatus. - * - * Here is an example of a read callback for stdio streams: - * \code - * FLAC__StreamDecoderReadStatus read_cb(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data) - * { - * FILE *file = ((MyClientData*)client_data)->file; - * if(*bytes > 0) { - * *bytes = fread(buffer, sizeof(FLAC__byte), *bytes, file); - * if(ferror(file)) - * return FLAC__STREAM_DECODER_READ_STATUS_ABORT; - * else if(*bytes == 0) - * return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM; - * else - * return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE; - * } - * else - * return FLAC__STREAM_DECODER_READ_STATUS_ABORT; - * } - * \endcode - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param buffer A pointer to a location for the callee to store - * data to be decoded. - * \param bytes A pointer to the size of the buffer. On entry - * to the callback, it contains the maximum number - * of bytes that may be stored in \a buffer. The - * callee must set it to the actual number of bytes - * stored (0 in case of error or end-of-stream) before - * returning. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - * \retval FLAC__StreamDecoderReadStatus - * The callee's return status. Note that the callback should return - * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM if and only if - * zero bytes were read and there is no more data to be read. - */ -typedef FLAC__StreamDecoderReadStatus (*FLAC__StreamDecoderReadCallback)(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data); - -/** Signature for the seek callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_decoder_init*_stream(). The supplied function will be - * called when the decoder needs to seek the input stream. The decoder - * will pass the absolute byte offset to seek to, 0 meaning the - * beginning of the stream. - * - * Here is an example of a seek callback for stdio streams: - * \code - * FLAC__StreamDecoderSeekStatus seek_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) - * { - * FILE *file = ((MyClientData*)client_data)->file; - * if(file == stdin) - * return FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED; - * else if(fseeko(file, (off_t)absolute_byte_offset, SEEK_SET) < 0) - * return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR; - * else - * return FLAC__STREAM_DECODER_SEEK_STATUS_OK; - * } - * \endcode - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param absolute_byte_offset The offset from the beginning of the stream - * to seek to. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - * \retval FLAC__StreamDecoderSeekStatus - * The callee's return status. - */ -typedef FLAC__StreamDecoderSeekStatus (*FLAC__StreamDecoderSeekCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data); - -/** Signature for the tell callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_decoder_init*_stream(). The supplied function will be - * called when the decoder wants to know the current position of the - * stream. The callback should return the byte offset from the - * beginning of the stream. - * - * Here is an example of a tell callback for stdio streams: - * \code - * FLAC__StreamDecoderTellStatus tell_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) - * { - * FILE *file = ((MyClientData*)client_data)->file; - * off_t pos; - * if(file == stdin) - * return FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED; - * else if((pos = ftello(file)) < 0) - * return FLAC__STREAM_DECODER_TELL_STATUS_ERROR; - * else { - * *absolute_byte_offset = (FLAC__uint64)pos; - * return FLAC__STREAM_DECODER_TELL_STATUS_OK; - * } - * } - * \endcode - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param absolute_byte_offset A pointer to storage for the current offset - * from the beginning of the stream. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - * \retval FLAC__StreamDecoderTellStatus - * The callee's return status. - */ -typedef FLAC__StreamDecoderTellStatus (*FLAC__StreamDecoderTellCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data); - -/** Signature for the length callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_decoder_init*_stream(). The supplied function will be - * called when the decoder wants to know the total length of the stream - * in bytes. - * - * Here is an example of a length callback for stdio streams: - * \code - * FLAC__StreamDecoderLengthStatus length_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) - * { - * FILE *file = ((MyClientData*)client_data)->file; - * struct stat filestats; - * - * if(file == stdin) - * return FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED; - * else if(fstat(fileno(file), &filestats) != 0) - * return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR; - * else { - * *stream_length = (FLAC__uint64)filestats.st_size; - * return FLAC__STREAM_DECODER_LENGTH_STATUS_OK; - * } - * } - * \endcode - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param stream_length A pointer to storage for the length of the stream - * in bytes. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - * \retval FLAC__StreamDecoderLengthStatus - * The callee's return status. - */ -typedef FLAC__StreamDecoderLengthStatus (*FLAC__StreamDecoderLengthCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data); - -/** Signature for the EOF callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_decoder_init*_stream(). The supplied function will be - * called when the decoder needs to know if the end of the stream has - * been reached. - * - * Here is an example of a EOF callback for stdio streams: - * FLAC__bool eof_cb(const FLAC__StreamDecoder *decoder, void *client_data) - * \code - * { - * FILE *file = ((MyClientData*)client_data)->file; - * return feof(file)? true : false; - * } - * \endcode - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - * \retval FLAC__bool - * \c true if the currently at the end of the stream, else \c false. - */ -typedef FLAC__bool (*FLAC__StreamDecoderEofCallback)(const FLAC__StreamDecoder *decoder, void *client_data); - -/** Signature for the write callback. - * - * A function pointer matching this signature must be passed to one of - * the FLAC__stream_decoder_init_*() functions. - * The supplied function will be called when the decoder has decoded a - * single audio frame. The decoder will pass the frame metadata as well - * as an array of pointers (one for each channel) pointing to the - * decoded audio. - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param frame The description of the decoded frame. See - * FLAC__Frame. - * \param buffer An array of pointers to decoded channels of data. - * Each pointer will point to an array of signed - * samples of length \a frame->header.blocksize. - * Channels will be ordered according to the FLAC - * specification; see the documentation for the - * frame header. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - * \retval FLAC__StreamDecoderWriteStatus - * The callee's return status. - */ -typedef FLAC__StreamDecoderWriteStatus (*FLAC__StreamDecoderWriteCallback)(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data); - -/** Signature for the metadata callback. - * - * A function pointer matching this signature must be passed to one of - * the FLAC__stream_decoder_init_*() functions. - * The supplied function will be called when the decoder has decoded a - * metadata block. In a valid FLAC file there will always be one - * \c STREAMINFO block, followed by zero or more other metadata blocks. - * These will be supplied by the decoder in the same order as they - * appear in the stream and always before the first audio frame (i.e. - * write callback). The metadata block that is passed in must not be - * modified, and it doesn't live beyond the callback, so you should make - * a copy of it with FLAC__metadata_object_clone() if you will need it - * elsewhere. Since metadata blocks can potentially be large, by - * default the decoder only calls the metadata callback for the - * \c STREAMINFO block; you can instruct the decoder to pass or filter - * other blocks with FLAC__stream_decoder_set_metadata_*() calls. - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param metadata The decoded metadata block. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - */ -typedef void (*FLAC__StreamDecoderMetadataCallback)(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data); - -/** Signature for the error callback. - * - * A function pointer matching this signature must be passed to one of - * the FLAC__stream_decoder_init_*() functions. - * The supplied function will be called whenever an error occurs during - * decoding. - * - * \note In general, FLAC__StreamDecoder functions which change the - * state should not be called on the \a decoder while in the callback. - * - * \param decoder The decoder instance calling the callback. - * \param status The error encountered by the decoder. - * \param client_data The callee's client data set through - * FLAC__stream_decoder_init_*(). - */ -typedef void (*FLAC__StreamDecoderErrorCallback)(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data); - - -/*********************************************************************** - * - * Class constructor/destructor - * - ***********************************************************************/ - -/** Create a new stream decoder instance. The instance is created with - * default settings; see the individual FLAC__stream_decoder_set_*() - * functions for each setting's default. - * - * \retval FLAC__StreamDecoder* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__StreamDecoder *FLAC__stream_decoder_new(void); - -/** Free a decoder instance. Deletes the object pointed to by \a decoder. - * - * \param decoder A pointer to an existing decoder. - * \assert - * \code decoder != NULL \endcode - */ -FLAC_API void FLAC__stream_decoder_delete(FLAC__StreamDecoder *decoder); - - -/*********************************************************************** - * - * Public class method prototypes - * - ***********************************************************************/ - -/** Set the serial number for the FLAC stream within the Ogg container. - * The default behavior is to use the serial number of the first Ogg - * page. Setting a serial number here will explicitly specify which - * stream is to be decoded. - * - * \note - * This does not need to be set for native FLAC decoding. - * - * \default \c use serial number of first page - * \param decoder A decoder instance to set. - * \param serial_number See above. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_ogg_serial_number(FLAC__StreamDecoder *decoder, long serial_number); - -/** Set the "MD5 signature checking" flag. If \c true, the decoder will - * compute the MD5 signature of the unencoded audio data while decoding - * and compare it to the signature from the STREAMINFO block, if it - * exists, during FLAC__stream_decoder_finish(). - * - * MD5 signature checking will be turned off (until the next - * FLAC__stream_decoder_reset()) if there is no signature in the - * STREAMINFO block or when a seek is attempted. - * - * Clients that do not use the MD5 check should leave this off to speed - * up decoding. - * - * \default \c false - * \param decoder A decoder instance to set. - * \param value Flag value (see above). - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_md5_checking(FLAC__StreamDecoder *decoder, FLAC__bool value); - -/** Direct the decoder to pass on all metadata blocks of type \a type. - * - * \default By default, only the \c STREAMINFO block is returned via the - * metadata callback. - * \param decoder A decoder instance to set. - * \param type See above. - * \assert - * \code decoder != NULL \endcode - * \a type is valid - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond(FLAC__StreamDecoder *decoder, FLAC__MetadataType type); - -/** Direct the decoder to pass on all APPLICATION metadata blocks of the - * given \a id. - * - * \default By default, only the \c STREAMINFO block is returned via the - * metadata callback. - * \param decoder A decoder instance to set. - * \param id See above. - * \assert - * \code decoder != NULL \endcode - * \code id != NULL \endcode - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]); - -/** Direct the decoder to pass on all metadata blocks of any type. - * - * \default By default, only the \c STREAMINFO block is returned via the - * metadata callback. - * \param decoder A decoder instance to set. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_all(FLAC__StreamDecoder *decoder); - -/** Direct the decoder to filter out all metadata blocks of type \a type. - * - * \default By default, only the \c STREAMINFO block is returned via the - * metadata callback. - * \param decoder A decoder instance to set. - * \param type See above. - * \assert - * \code decoder != NULL \endcode - * \a type is valid - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore(FLAC__StreamDecoder *decoder, FLAC__MetadataType type); - -/** Direct the decoder to filter out all APPLICATION metadata blocks of - * the given \a id. - * - * \default By default, only the \c STREAMINFO block is returned via the - * metadata callback. - * \param decoder A decoder instance to set. - * \param id See above. - * \assert - * \code decoder != NULL \endcode - * \code id != NULL \endcode - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]); - -/** Direct the decoder to filter out all metadata blocks of any type. - * - * \default By default, only the \c STREAMINFO block is returned via the - * metadata callback. - * \param decoder A decoder instance to set. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if the decoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_all(FLAC__StreamDecoder *decoder); - -/** Get the current decoder state. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__StreamDecoderState - * The current decoder state. - */ -FLAC_API FLAC__StreamDecoderState FLAC__stream_decoder_get_state(const FLAC__StreamDecoder *decoder); - -/** Get the current decoder state as a C string. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval const char * - * The decoder state as a C string. Do not modify the contents. - */ -FLAC_API const char *FLAC__stream_decoder_get_resolved_state_string(const FLAC__StreamDecoder *decoder); - -/** Get the "MD5 signature checking" flag. - * This is the value of the setting, not whether or not the decoder is - * currently checking the MD5 (remember, it can be turned off automatically - * by a seek). When the decoder is reset the flag will be restored to the - * value returned by this function. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * See above. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_get_md5_checking(const FLAC__StreamDecoder *decoder); - -/** Get the total number of samples in the stream being decoded. - * Will only be valid after decoding has started and will contain the - * value from the \c STREAMINFO block. A value of \c 0 means "unknown". - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval uint32_t - * See above. - */ -FLAC_API FLAC__uint64 FLAC__stream_decoder_get_total_samples(const FLAC__StreamDecoder *decoder); - -/** Get the current number of channels in the stream being decoded. - * Will only be valid after decoding has started and will contain the - * value from the most recently decoded frame header. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval uint32_t - * See above. - */ -FLAC_API uint32_t FLAC__stream_decoder_get_channels(const FLAC__StreamDecoder *decoder); - -/** Get the current channel assignment in the stream being decoded. - * Will only be valid after decoding has started and will contain the - * value from the most recently decoded frame header. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__ChannelAssignment - * See above. - */ -FLAC_API FLAC__ChannelAssignment FLAC__stream_decoder_get_channel_assignment(const FLAC__StreamDecoder *decoder); - -/** Get the current sample resolution in the stream being decoded. - * Will only be valid after decoding has started and will contain the - * value from the most recently decoded frame header. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval uint32_t - * See above. - */ -FLAC_API uint32_t FLAC__stream_decoder_get_bits_per_sample(const FLAC__StreamDecoder *decoder); - -/** Get the current sample rate in Hz of the stream being decoded. - * Will only be valid after decoding has started and will contain the - * value from the most recently decoded frame header. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval uint32_t - * See above. - */ -FLAC_API uint32_t FLAC__stream_decoder_get_sample_rate(const FLAC__StreamDecoder *decoder); - -/** Get the current blocksize of the stream being decoded. - * Will only be valid after decoding has started and will contain the - * value from the most recently decoded frame header. - * - * \param decoder A decoder instance to query. - * \assert - * \code decoder != NULL \endcode - * \retval uint32_t - * See above. - */ -FLAC_API uint32_t FLAC__stream_decoder_get_blocksize(const FLAC__StreamDecoder *decoder); - -/** Returns the decoder's current read position within the stream. - * The position is the byte offset from the start of the stream. - * Bytes before this position have been fully decoded. Note that - * there may still be undecoded bytes in the decoder's read FIFO. - * The returned position is correct even after a seek. - * - * \warning This function currently only works for native FLAC, - * not Ogg FLAC streams. - * - * \param decoder A decoder instance to query. - * \param position Address at which to return the desired position. - * \assert - * \code decoder != NULL \endcode - * \code position != NULL \endcode - * \retval FLAC__bool - * \c true if successful, \c false if the stream is not native FLAC, - * or there was an error from the 'tell' callback or it returned - * \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_get_decode_position(const FLAC__StreamDecoder *decoder, FLAC__uint64 *position); - -/** Initialize the decoder instance to decode native FLAC streams. - * - * This flavor of initialization sets up the decoder to decode from a - * native FLAC stream. I/O is performed via callbacks to the client. - * For decoding from a plain file via filename or open FILE*, - * FLAC__stream_decoder_init_file() and FLAC__stream_decoder_init_FILE() - * provide a simpler interface. - * - * This function should be called after FLAC__stream_decoder_new() and - * FLAC__stream_decoder_set_*() but before any of the - * FLAC__stream_decoder_process_*() functions. Will set and return the - * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA - * if initialization succeeded. - * - * \param decoder An uninitialized decoder instance. - * \param read_callback See FLAC__StreamDecoderReadCallback. This - * pointer must not be \c NULL. - * \param seek_callback See FLAC__StreamDecoderSeekCallback. This - * pointer may be \c NULL if seeking is not - * supported. If \a seek_callback is not \c NULL then a - * \a tell_callback, \a length_callback, and \a eof_callback must also be supplied. - * Alternatively, a dummy seek callback that just - * returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param tell_callback See FLAC__StreamDecoderTellCallback. This - * pointer may be \c NULL if not supported by the client. If - * \a seek_callback is not \c NULL then a - * \a tell_callback must also be supplied. - * Alternatively, a dummy tell callback that just - * returns \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param length_callback See FLAC__StreamDecoderLengthCallback. This - * pointer may be \c NULL if not supported by the client. If - * \a seek_callback is not \c NULL then a - * \a length_callback must also be supplied. - * Alternatively, a dummy length callback that just - * returns \c FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param eof_callback See FLAC__StreamDecoderEofCallback. This - * pointer may be \c NULL if not supported by the client. If - * \a seek_callback is not \c NULL then a - * \a eof_callback must also be supplied. - * Alternatively, a dummy length callback that just - * returns \c false - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param write_callback See FLAC__StreamDecoderWriteCallback. This - * pointer must not be \c NULL. - * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This - * pointer may be \c NULL if the callback is not - * desired. - * \param error_callback See FLAC__StreamDecoderErrorCallback. This - * pointer must not be \c NULL. - * \param client_data This value will be supplied to callbacks in their - * \a client_data argument. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__StreamDecoderInitStatus - * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; - * see FLAC__StreamDecoderInitStatus for the meanings of other return values. - */ -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream( - FLAC__StreamDecoder *decoder, - FLAC__StreamDecoderReadCallback read_callback, - FLAC__StreamDecoderSeekCallback seek_callback, - FLAC__StreamDecoderTellCallback tell_callback, - FLAC__StreamDecoderLengthCallback length_callback, - FLAC__StreamDecoderEofCallback eof_callback, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -); - -/** Initialize the decoder instance to decode Ogg FLAC streams. - * - * This flavor of initialization sets up the decoder to decode from a - * FLAC stream in an Ogg container. I/O is performed via callbacks to the - * client. For decoding from a plain file via filename or open FILE*, - * FLAC__stream_decoder_init_ogg_file() and FLAC__stream_decoder_init_ogg_FILE() - * provide a simpler interface. - * - * This function should be called after FLAC__stream_decoder_new() and - * FLAC__stream_decoder_set_*() but before any of the - * FLAC__stream_decoder_process_*() functions. Will set and return the - * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA - * if initialization succeeded. - * - * \note Support for Ogg FLAC in the library is optional. If this - * library has been built without support for Ogg FLAC, this function - * will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER. - * - * \param decoder An uninitialized decoder instance. - * \param read_callback See FLAC__StreamDecoderReadCallback. This - * pointer must not be \c NULL. - * \param seek_callback See FLAC__StreamDecoderSeekCallback. This - * pointer may be \c NULL if seeking is not - * supported. If \a seek_callback is not \c NULL then a - * \a tell_callback, \a length_callback, and \a eof_callback must also be supplied. - * Alternatively, a dummy seek callback that just - * returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param tell_callback See FLAC__StreamDecoderTellCallback. This - * pointer may be \c NULL if not supported by the client. If - * \a seek_callback is not \c NULL then a - * \a tell_callback must also be supplied. - * Alternatively, a dummy tell callback that just - * returns \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param length_callback See FLAC__StreamDecoderLengthCallback. This - * pointer may be \c NULL if not supported by the client. If - * \a seek_callback is not \c NULL then a - * \a length_callback must also be supplied. - * Alternatively, a dummy length callback that just - * returns \c FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param eof_callback See FLAC__StreamDecoderEofCallback. This - * pointer may be \c NULL if not supported by the client. If - * \a seek_callback is not \c NULL then a - * \a eof_callback must also be supplied. - * Alternatively, a dummy length callback that just - * returns \c false - * may also be supplied, all though this is slightly - * less efficient for the decoder. - * \param write_callback See FLAC__StreamDecoderWriteCallback. This - * pointer must not be \c NULL. - * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This - * pointer may be \c NULL if the callback is not - * desired. - * \param error_callback See FLAC__StreamDecoderErrorCallback. This - * pointer must not be \c NULL. - * \param client_data This value will be supplied to callbacks in their - * \a client_data argument. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__StreamDecoderInitStatus - * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; - * see FLAC__StreamDecoderInitStatus for the meanings of other return values. - */ -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_stream( - FLAC__StreamDecoder *decoder, - FLAC__StreamDecoderReadCallback read_callback, - FLAC__StreamDecoderSeekCallback seek_callback, - FLAC__StreamDecoderTellCallback tell_callback, - FLAC__StreamDecoderLengthCallback length_callback, - FLAC__StreamDecoderEofCallback eof_callback, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -); - -/** Initialize the decoder instance to decode native FLAC files. - * - * This flavor of initialization sets up the decoder to decode from a - * plain native FLAC file. For non-stdio streams, you must use - * FLAC__stream_decoder_init_stream() and provide callbacks for the I/O. - * - * This function should be called after FLAC__stream_decoder_new() and - * FLAC__stream_decoder_set_*() but before any of the - * FLAC__stream_decoder_process_*() functions. Will set and return the - * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA - * if initialization succeeded. - * - * \param decoder An uninitialized decoder instance. - * \param file An open FLAC file. The file should have been - * opened with mode \c "rb" and rewound. The file - * becomes owned by the decoder and should not be - * manipulated by the client while decoding. - * Unless \a file is \c stdin, it will be closed - * when FLAC__stream_decoder_finish() is called. - * Note however that seeking will not work when - * decoding from \c stdin since it is not seekable. - * \param write_callback See FLAC__StreamDecoderWriteCallback. This - * pointer must not be \c NULL. - * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This - * pointer may be \c NULL if the callback is not - * desired. - * \param error_callback See FLAC__StreamDecoderErrorCallback. This - * pointer must not be \c NULL. - * \param client_data This value will be supplied to callbacks in their - * \a client_data argument. - * \assert - * \code decoder != NULL \endcode - * \code file != NULL \endcode - * \retval FLAC__StreamDecoderInitStatus - * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; - * see FLAC__StreamDecoderInitStatus for the meanings of other return values. - */ -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_FILE( - FLAC__StreamDecoder *decoder, - FILE *file, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -); - -/** Initialize the decoder instance to decode Ogg FLAC files. - * - * This flavor of initialization sets up the decoder to decode from a - * plain Ogg FLAC file. For non-stdio streams, you must use - * FLAC__stream_decoder_init_ogg_stream() and provide callbacks for the I/O. - * - * This function should be called after FLAC__stream_decoder_new() and - * FLAC__stream_decoder_set_*() but before any of the - * FLAC__stream_decoder_process_*() functions. Will set and return the - * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA - * if initialization succeeded. - * - * \note Support for Ogg FLAC in the library is optional. If this - * library has been built without support for Ogg FLAC, this function - * will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER. - * - * \param decoder An uninitialized decoder instance. - * \param file An open FLAC file. The file should have been - * opened with mode \c "rb" and rewound. The file - * becomes owned by the decoder and should not be - * manipulated by the client while decoding. - * Unless \a file is \c stdin, it will be closed - * when FLAC__stream_decoder_finish() is called. - * Note however that seeking will not work when - * decoding from \c stdin since it is not seekable. - * \param write_callback See FLAC__StreamDecoderWriteCallback. This - * pointer must not be \c NULL. - * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This - * pointer may be \c NULL if the callback is not - * desired. - * \param error_callback See FLAC__StreamDecoderErrorCallback. This - * pointer must not be \c NULL. - * \param client_data This value will be supplied to callbacks in their - * \a client_data argument. - * \assert - * \code decoder != NULL \endcode - * \code file != NULL \endcode - * \retval FLAC__StreamDecoderInitStatus - * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; - * see FLAC__StreamDecoderInitStatus for the meanings of other return values. - */ -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_FILE( - FLAC__StreamDecoder *decoder, - FILE *file, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -); - -/** Initialize the decoder instance to decode native FLAC files. - * - * This flavor of initialization sets up the decoder to decode from a plain - * native FLAC file. If POSIX fopen() semantics are not sufficient, (for - * example, with Unicode filenames on Windows), you must use - * FLAC__stream_decoder_init_FILE(), or FLAC__stream_decoder_init_stream() - * and provide callbacks for the I/O. - * - * This function should be called after FLAC__stream_decoder_new() and - * FLAC__stream_decoder_set_*() but before any of the - * FLAC__stream_decoder_process_*() functions. Will set and return the - * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA - * if initialization succeeded. - * - * \param decoder An uninitialized decoder instance. - * \param filename The name of the file to decode from. The file will - * be opened with fopen(). Use \c NULL to decode from - * \c stdin. Note that \c stdin is not seekable. - * \param write_callback See FLAC__StreamDecoderWriteCallback. This - * pointer must not be \c NULL. - * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This - * pointer may be \c NULL if the callback is not - * desired. - * \param error_callback See FLAC__StreamDecoderErrorCallback. This - * pointer must not be \c NULL. - * \param client_data This value will be supplied to callbacks in their - * \a client_data argument. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__StreamDecoderInitStatus - * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; - * see FLAC__StreamDecoderInitStatus for the meanings of other return values. - */ -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_file( - FLAC__StreamDecoder *decoder, - const char *filename, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -); - -/** Initialize the decoder instance to decode Ogg FLAC files. - * - * This flavor of initialization sets up the decoder to decode from a plain - * Ogg FLAC file. If POSIX fopen() semantics are not sufficient, (for - * example, with Unicode filenames on Windows), you must use - * FLAC__stream_decoder_init_ogg_FILE(), or FLAC__stream_decoder_init_ogg_stream() - * and provide callbacks for the I/O. - * - * This function should be called after FLAC__stream_decoder_new() and - * FLAC__stream_decoder_set_*() but before any of the - * FLAC__stream_decoder_process_*() functions. Will set and return the - * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA - * if initialization succeeded. - * - * \note Support for Ogg FLAC in the library is optional. If this - * library has been built without support for Ogg FLAC, this function - * will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER. - * - * \param decoder An uninitialized decoder instance. - * \param filename The name of the file to decode from. The file will - * be opened with fopen(). Use \c NULL to decode from - * \c stdin. Note that \c stdin is not seekable. - * \param write_callback See FLAC__StreamDecoderWriteCallback. This - * pointer must not be \c NULL. - * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This - * pointer may be \c NULL if the callback is not - * desired. - * \param error_callback See FLAC__StreamDecoderErrorCallback. This - * pointer must not be \c NULL. - * \param client_data This value will be supplied to callbacks in their - * \a client_data argument. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__StreamDecoderInitStatus - * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; - * see FLAC__StreamDecoderInitStatus for the meanings of other return values. - */ -FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_file( - FLAC__StreamDecoder *decoder, - const char *filename, - FLAC__StreamDecoderWriteCallback write_callback, - FLAC__StreamDecoderMetadataCallback metadata_callback, - FLAC__StreamDecoderErrorCallback error_callback, - void *client_data -); - -/** Finish the decoding process. - * Flushes the decoding buffer, releases resources, resets the decoder - * settings to their defaults, and returns the decoder state to - * FLAC__STREAM_DECODER_UNINITIALIZED. - * - * In the event of a prematurely-terminated decode, it is not strictly - * necessary to call this immediately before FLAC__stream_decoder_delete() - * but it is good practice to match every FLAC__stream_decoder_init_*() - * with a FLAC__stream_decoder_finish(). - * - * \param decoder An uninitialized decoder instance. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if MD5 checking is on AND a STREAMINFO block was available - * AND the MD5 signature in the STREAMINFO block was non-zero AND the - * signature does not match the one computed by the decoder; else - * \c true. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder); - -/** Flush the stream input. - * The decoder's input buffer will be cleared and the state set to - * \c FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC. This will also turn - * off MD5 checking. - * - * \param decoder A decoder instance. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c true if successful, else \c false if a memory allocation - * error occurs (in which case the state will be set to - * \c FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR). - */ -FLAC_API FLAC__bool FLAC__stream_decoder_flush(FLAC__StreamDecoder *decoder); - -/** Reset the decoding process. - * The decoder's input buffer will be cleared and the state set to - * \c FLAC__STREAM_DECODER_SEARCH_FOR_METADATA. This is similar to - * FLAC__stream_decoder_finish() except that the settings are - * preserved; there is no need to call FLAC__stream_decoder_init_*() - * before decoding again. MD5 checking will be restored to its original - * setting. - * - * If the decoder is seekable, or was initialized with - * FLAC__stream_decoder_init*_FILE() or FLAC__stream_decoder_init*_file(), - * the decoder will also attempt to seek to the beginning of the file. - * If this rewind fails, this function will return \c false. It follows - * that FLAC__stream_decoder_reset() cannot be used when decoding from - * \c stdin. - * - * If the decoder was initialized with FLAC__stream_encoder_init*_stream() - * and is not seekable (i.e. no seek callback was provided or the seek - * callback returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED), it - * is the duty of the client to start feeding data from the beginning of - * the stream on the next FLAC__stream_decoder_process_*() call. - * - * \param decoder A decoder instance. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c true if successful, else \c false if a memory allocation occurs - * (in which case the state will be set to - * \c FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR) or a seek error - * occurs (the state will be unchanged). - */ -FLAC_API FLAC__bool FLAC__stream_decoder_reset(FLAC__StreamDecoder *decoder); - -/** Decode one metadata block or audio frame. - * This version instructs the decoder to decode a either a single metadata - * block or a single frame and stop, unless the callbacks return a fatal - * error or the read callback returns - * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM. - * - * As the decoder needs more input it will call the read callback. - * Depending on what was decoded, the metadata or write callback will be - * called with the decoded metadata block or audio frame. - * - * Unless there is a fatal read error or end of stream, this function - * will return once one whole frame is decoded. In other words, if the - * stream is not synchronized or points to a corrupt frame header, the - * decoder will continue to try and resync until it gets to a valid - * frame, then decode one frame, then return. If the decoder points to - * a frame whose frame CRC in the frame footer does not match the - * computed frame CRC, this function will issue a - * FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH error to the - * error callback, and return, having decoded one complete, although - * corrupt, frame. (Such corrupted frames are sent as silence of the - * correct length to the write callback.) - * - * \param decoder An initialized decoder instance. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if any fatal read, write, or memory allocation error - * occurred (meaning decoding must stop), else \c true; for more - * information about the decoder, check the decoder state with - * FLAC__stream_decoder_get_state(). - */ -FLAC_API FLAC__bool FLAC__stream_decoder_process_single(FLAC__StreamDecoder *decoder); - -/** Decode until the end of the metadata. - * This version instructs the decoder to decode from the current position - * and continue until all the metadata has been read, or until the - * callbacks return a fatal error or the read callback returns - * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM. - * - * As the decoder needs more input it will call the read callback. - * As each metadata block is decoded, the metadata callback will be called - * with the decoded metadata. - * - * \param decoder An initialized decoder instance. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if any fatal read, write, or memory allocation error - * occurred (meaning decoding must stop), else \c true; for more - * information about the decoder, check the decoder state with - * FLAC__stream_decoder_get_state(). - */ -FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_metadata(FLAC__StreamDecoder *decoder); - -/** Decode until the end of the stream. - * This version instructs the decoder to decode from the current position - * and continue until the end of stream (the read callback returns - * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM), or until the - * callbacks return a fatal error. - * - * As the decoder needs more input it will call the read callback. - * As each metadata block and frame is decoded, the metadata or write - * callback will be called with the decoded metadata or frame. - * - * \param decoder An initialized decoder instance. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if any fatal read, write, or memory allocation error - * occurred (meaning decoding must stop), else \c true; for more - * information about the decoder, check the decoder state with - * FLAC__stream_decoder_get_state(). - */ -FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_stream(FLAC__StreamDecoder *decoder); - -/** Skip one audio frame. - * This version instructs the decoder to 'skip' a single frame and stop, - * unless the callbacks return a fatal error or the read callback returns - * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM. - * - * The decoding flow is the same as what occurs when - * FLAC__stream_decoder_process_single() is called to process an audio - * frame, except that this function does not decode the parsed data into - * PCM or call the write callback. The integrity of the frame is still - * checked the same way as in the other process functions. - * - * This function will return once one whole frame is skipped, in the - * same way that FLAC__stream_decoder_process_single() will return once - * one whole frame is decoded. - * - * This function can be used in more quickly determining FLAC frame - * boundaries when decoding of the actual data is not needed, for - * example when an application is separating a FLAC stream into frames - * for editing or storing in a container. To do this, the application - * can use FLAC__stream_decoder_skip_single_frame() to quickly advance - * to the next frame, then use - * FLAC__stream_decoder_get_decode_position() to find the new frame - * boundary. - * - * This function should only be called when the stream has advanced - * past all the metadata, otherwise it will return \c false. - * - * \param decoder An initialized decoder instance not in a metadata - * state. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c false if any fatal read, write, or memory allocation error - * occurred (meaning decoding must stop), or if the decoder - * is in the FLAC__STREAM_DECODER_SEARCH_FOR_METADATA or - * FLAC__STREAM_DECODER_READ_METADATA state, else \c true; for more - * information about the decoder, check the decoder state with - * FLAC__stream_decoder_get_state(). - */ -FLAC_API FLAC__bool FLAC__stream_decoder_skip_single_frame(FLAC__StreamDecoder *decoder); - -/** Flush the input and seek to an absolute sample. - * Decoding will resume at the given sample. Note that because of - * this, the next write callback may contain a partial block. The - * client must support seeking the input or this function will fail - * and return \c false. Furthermore, if the decoder state is - * \c FLAC__STREAM_DECODER_SEEK_ERROR, then the decoder must be flushed - * with FLAC__stream_decoder_flush() or reset with - * FLAC__stream_decoder_reset() before decoding can continue. - * - * \param decoder A decoder instance. - * \param sample The target sample number to seek to. - * \assert - * \code decoder != NULL \endcode - * \retval FLAC__bool - * \c true if successful, else \c false. - */ -FLAC_API FLAC__bool FLAC__stream_decoder_seek_absolute(FLAC__StreamDecoder *decoder, FLAC__uint64 sample); - -/* \} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libs/include/FLAC/stream_encoder.h b/libs/include/FLAC/stream_encoder.h deleted file mode 100644 index d154ac4..0000000 --- a/libs/include/FLAC/stream_encoder.h +++ /dev/null @@ -1,1790 +0,0 @@ -/* libFLAC - Free Lossless Audio Codec library - * Copyright (C) 2000-2009 Josh Coalson - * Copyright (C) 2011-2016 Xiph.Org Foundation - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * - Neither the name of the Xiph.org Foundation nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef FLAC__STREAM_ENCODER_H -#define FLAC__STREAM_ENCODER_H - -#include /* for FILE */ -#include "export.h" -#include "format.h" -#include "stream_decoder.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -/** \file include/FLAC/stream_encoder.h - * - * \brief - * This module contains the functions which implement the stream - * encoder. - * - * See the detailed documentation in the - * \link flac_stream_encoder stream encoder \endlink module. - */ - -/** \defgroup flac_encoder FLAC/ \*_encoder.h: encoder interfaces - * \ingroup flac - * - * \brief - * This module describes the encoder layers provided by libFLAC. - * - * The stream encoder can be used to encode complete streams either to the - * client via callbacks, or directly to a file, depending on how it is - * initialized. When encoding via callbacks, the client provides a write - * callback which will be called whenever FLAC data is ready to be written. - * If the client also supplies a seek callback, the encoder will also - * automatically handle the writing back of metadata discovered while - * encoding, like stream info, seek points offsets, etc. When encoding to - * a file, the client needs only supply a filename or open \c FILE* and an - * optional progress callback for periodic notification of progress; the - * write and seek callbacks are supplied internally. For more info see the - * \link flac_stream_encoder stream encoder \endlink module. - */ - -/** \defgroup flac_stream_encoder FLAC/stream_encoder.h: stream encoder interface - * \ingroup flac_encoder - * - * \brief - * This module contains the functions which implement the stream - * encoder. - * - * The stream encoder can encode to native FLAC, and optionally Ogg FLAC - * (check FLAC_API_SUPPORTS_OGG_FLAC) streams and files. - * - * The basic usage of this encoder is as follows: - * - The program creates an instance of an encoder using - * FLAC__stream_encoder_new(). - * - The program overrides the default settings using - * FLAC__stream_encoder_set_*() functions. At a minimum, the following - * functions should be called: - * - FLAC__stream_encoder_set_channels() - * - FLAC__stream_encoder_set_bits_per_sample() - * - FLAC__stream_encoder_set_sample_rate() - * - FLAC__stream_encoder_set_ogg_serial_number() (if encoding to Ogg FLAC) - * - FLAC__stream_encoder_set_total_samples_estimate() (if known) - * - If the application wants to control the compression level or set its own - * metadata, then the following should also be called: - * - FLAC__stream_encoder_set_compression_level() - * - FLAC__stream_encoder_set_verify() - * - FLAC__stream_encoder_set_metadata() - * - The rest of the set functions should only be called if the client needs - * exact control over how the audio is compressed; thorough understanding - * of the FLAC format is necessary to achieve good results. - * - The program initializes the instance to validate the settings and - * prepare for encoding using - * - FLAC__stream_encoder_init_stream() or FLAC__stream_encoder_init_FILE() - * or FLAC__stream_encoder_init_file() for native FLAC - * - FLAC__stream_encoder_init_ogg_stream() or FLAC__stream_encoder_init_ogg_FILE() - * or FLAC__stream_encoder_init_ogg_file() for Ogg FLAC - * - The program calls FLAC__stream_encoder_process() or - * FLAC__stream_encoder_process_interleaved() to encode data, which - * subsequently calls the callbacks when there is encoder data ready - * to be written. - * - The program finishes the encoding with FLAC__stream_encoder_finish(), - * which causes the encoder to encode any data still in its input pipe, - * update the metadata with the final encoding statistics if output - * seeking is possible, and finally reset the encoder to the - * uninitialized state. - * - The instance may be used again or deleted with - * FLAC__stream_encoder_delete(). - * - * In more detail, the stream encoder functions similarly to the - * \link flac_stream_decoder stream decoder \endlink, but has fewer - * callbacks and more options. Typically the client will create a new - * instance by calling FLAC__stream_encoder_new(), then set the necessary - * parameters with FLAC__stream_encoder_set_*(), and initialize it by - * calling one of the FLAC__stream_encoder_init_*() functions. - * - * Unlike the decoders, the stream encoder has many options that can - * affect the speed and compression ratio. When setting these parameters - * you should have some basic knowledge of the format (see the - * user-level documentation - * or the formal description). The - * FLAC__stream_encoder_set_*() functions themselves do not validate the - * values as many are interdependent. The FLAC__stream_encoder_init_*() - * functions will do this, so make sure to pay attention to the state - * returned by FLAC__stream_encoder_init_*() to make sure that it is - * FLAC__STREAM_ENCODER_INIT_STATUS_OK. Any parameters that are not set - * before FLAC__stream_encoder_init_*() will take on the defaults from - * the constructor. - * - * There are three initialization functions for native FLAC, one for - * setting up the encoder to encode FLAC data to the client via - * callbacks, and two for encoding directly to a file. - * - * For encoding via callbacks, use FLAC__stream_encoder_init_stream(). - * You must also supply a write callback which will be called anytime - * there is raw encoded data to write. If the client can seek the output - * it is best to also supply seek and tell callbacks, as this allows the - * encoder to go back after encoding is finished to write back - * information that was collected while encoding, like seek point offsets, - * frame sizes, etc. - * - * For encoding directly to a file, use FLAC__stream_encoder_init_FILE() - * or FLAC__stream_encoder_init_file(). Then you must only supply a - * filename or open \c FILE*; the encoder will handle all the callbacks - * internally. You may also supply a progress callback for periodic - * notification of the encoding progress. - * - * There are three similarly-named init functions for encoding to Ogg - * FLAC streams. Check \c FLAC_API_SUPPORTS_OGG_FLAC to find out if the - * library has been built with Ogg support. - * - * The call to FLAC__stream_encoder_init_*() currently will also immediately - * call the write callback several times, once with the \c fLaC signature, - * and once for each encoded metadata block. Note that for Ogg FLAC - * encoding you will usually get at least twice the number of callbacks than - * with native FLAC, one for the Ogg page header and one for the page body. - * - * After initializing the instance, the client may feed audio data to the - * encoder in one of two ways: - * - * - Channel separate, through FLAC__stream_encoder_process() - The client - * will pass an array of pointers to buffers, one for each channel, to - * the encoder, each of the same length. The samples need not be - * block-aligned, but each channel should have the same number of samples. - * - Channel interleaved, through - * FLAC__stream_encoder_process_interleaved() - The client will pass a single - * pointer to data that is channel-interleaved (i.e. channel0_sample0, - * channel1_sample0, ... , channelN_sample0, channel0_sample1, ...). - * Again, the samples need not be block-aligned but they must be - * sample-aligned, i.e. the first value should be channel0_sample0 and - * the last value channelN_sampleM. - * - * Note that for either process call, each sample in the buffers should be a - * signed integer, right-justified to the resolution set by - * FLAC__stream_encoder_set_bits_per_sample(). For example, if the resolution - * is 16 bits per sample, the samples should all be in the range [-32768,32767]. - * - * When the client is finished encoding data, it calls - * FLAC__stream_encoder_finish(), which causes the encoder to encode any - * data still in its input pipe, and call the metadata callback with the - * final encoding statistics. Then the instance may be deleted with - * FLAC__stream_encoder_delete() or initialized again to encode another - * stream. - * - * For programs that write their own metadata, but that do not know the - * actual metadata until after encoding, it is advantageous to instruct - * the encoder to write a PADDING block of the correct size, so that - * instead of rewriting the whole stream after encoding, the program can - * just overwrite the PADDING block. If only the maximum size of the - * metadata is known, the program can write a slightly larger padding - * block, then split it after encoding. - * - * Make sure you understand how lengths are calculated. All FLAC metadata - * blocks have a 4 byte header which contains the type and length. This - * length does not include the 4 bytes of the header. See the format page - * for the specification of metadata blocks and their lengths. - * - * \note - * If you are writing the FLAC data to a file via callbacks, make sure it - * is open for update (e.g. mode "w+" for stdio streams). This is because - * after the first encoding pass, the encoder will try to seek back to the - * beginning of the stream, to the STREAMINFO block, to write some data - * there. (If using FLAC__stream_encoder_init*_file() or - * FLAC__stream_encoder_init*_FILE(), the file is managed internally.) - * - * \note - * The "set" functions may only be called when the encoder is in the - * state FLAC__STREAM_ENCODER_UNINITIALIZED, i.e. after - * FLAC__stream_encoder_new() or FLAC__stream_encoder_finish(), but - * before FLAC__stream_encoder_init_*(). If this is the case they will - * return \c true, otherwise \c false. - * - * \note - * FLAC__stream_encoder_finish() resets all settings to the constructor - * defaults. - * - * \{ - */ - - -/** State values for a FLAC__StreamEncoder. - * - * The encoder's state can be obtained by calling FLAC__stream_encoder_get_state(). - * - * If the encoder gets into any other state besides \c FLAC__STREAM_ENCODER_OK - * or \c FLAC__STREAM_ENCODER_UNINITIALIZED, it becomes invalid for encoding and - * must be deleted with FLAC__stream_encoder_delete(). - */ -typedef enum { - - FLAC__STREAM_ENCODER_OK = 0, - /**< The encoder is in the normal OK state and samples can be processed. */ - - FLAC__STREAM_ENCODER_UNINITIALIZED, - /**< The encoder is in the uninitialized state; one of the - * FLAC__stream_encoder_init_*() functions must be called before samples - * can be processed. - */ - - FLAC__STREAM_ENCODER_OGG_ERROR, - /**< An error occurred in the underlying Ogg layer. */ - - FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR, - /**< An error occurred in the underlying verify stream decoder; - * check FLAC__stream_encoder_get_verify_decoder_state(). - */ - - FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA, - /**< The verify decoder detected a mismatch between the original - * audio signal and the decoded audio signal. - */ - - FLAC__STREAM_ENCODER_CLIENT_ERROR, - /**< One of the callbacks returned a fatal error. */ - - FLAC__STREAM_ENCODER_IO_ERROR, - /**< An I/O error occurred while opening/reading/writing a file. - * Check \c errno. - */ - - FLAC__STREAM_ENCODER_FRAMING_ERROR, - /**< An error occurred while writing the stream; usually, the - * write_callback returned an error. - */ - - FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR - /**< Memory allocation failed. */ - -} FLAC__StreamEncoderState; - -/** Maps a FLAC__StreamEncoderState to a C string. - * - * Using a FLAC__StreamEncoderState as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamEncoderStateString[]; - - -/** Possible return values for the FLAC__stream_encoder_init_*() functions. - */ -typedef enum { - - FLAC__STREAM_ENCODER_INIT_STATUS_OK = 0, - /**< Initialization was successful. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR, - /**< General failure to set up encoder; call FLAC__stream_encoder_get_state() for cause. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_UNSUPPORTED_CONTAINER, - /**< The library was not compiled with support for the given container - * format. - */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_CALLBACKS, - /**< A required callback was not supplied. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_NUMBER_OF_CHANNELS, - /**< The encoder has an invalid setting for number of channels. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BITS_PER_SAMPLE, - /**< The encoder has an invalid setting for bits-per-sample. - * FLAC supports 4-32 bps but the reference encoder currently supports - * only up to 24 bps. - */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_SAMPLE_RATE, - /**< The encoder has an invalid setting for the input sample rate. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BLOCK_SIZE, - /**< The encoder has an invalid setting for the block size. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_MAX_LPC_ORDER, - /**< The encoder has an invalid setting for the maximum LPC order. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_QLP_COEFF_PRECISION, - /**< The encoder has an invalid setting for the precision of the quantized linear predictor coefficients. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER, - /**< The specified block size is less than the maximum LPC order. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE, - /**< The encoder is bound to the Subset but other settings violate it. */ - - FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA, - /**< The metadata input to the encoder is invalid, in one of the following ways: - * - FLAC__stream_encoder_set_metadata() was called with a null pointer but a block count > 0 - * - One of the metadata blocks contains an undefined type - * - It contains an illegal CUESHEET as checked by FLAC__format_cuesheet_is_legal() - * - It contains an illegal SEEKTABLE as checked by FLAC__format_seektable_is_legal() - * - It contains more than one SEEKTABLE block or more than one VORBIS_COMMENT block - */ - - FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED - /**< FLAC__stream_encoder_init_*() was called when the encoder was - * already initialized, usually because - * FLAC__stream_encoder_finish() was not called. - */ - -} FLAC__StreamEncoderInitStatus; - -/** Maps a FLAC__StreamEncoderInitStatus to a C string. - * - * Using a FLAC__StreamEncoderInitStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamEncoderInitStatusString[]; - - -/** Return values for the FLAC__StreamEncoder read callback. - */ -typedef enum { - - FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE, - /**< The read was OK and decoding can continue. */ - - FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM, - /**< The read was attempted at the end of the stream. */ - - FLAC__STREAM_ENCODER_READ_STATUS_ABORT, - /**< An unrecoverable error occurred. */ - - FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED - /**< Client does not support reading back from the output. */ - -} FLAC__StreamEncoderReadStatus; - -/** Maps a FLAC__StreamEncoderReadStatus to a C string. - * - * Using a FLAC__StreamEncoderReadStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamEncoderReadStatusString[]; - - -/** Return values for the FLAC__StreamEncoder write callback. - */ -typedef enum { - - FLAC__STREAM_ENCODER_WRITE_STATUS_OK = 0, - /**< The write was OK and encoding can continue. */ - - FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR - /**< An unrecoverable error occurred. The encoder will return from the process call. */ - -} FLAC__StreamEncoderWriteStatus; - -/** Maps a FLAC__StreamEncoderWriteStatus to a C string. - * - * Using a FLAC__StreamEncoderWriteStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamEncoderWriteStatusString[]; - - -/** Return values for the FLAC__StreamEncoder seek callback. - */ -typedef enum { - - FLAC__STREAM_ENCODER_SEEK_STATUS_OK, - /**< The seek was OK and encoding can continue. */ - - FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR, - /**< An unrecoverable error occurred. */ - - FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED - /**< Client does not support seeking. */ - -} FLAC__StreamEncoderSeekStatus; - -/** Maps a FLAC__StreamEncoderSeekStatus to a C string. - * - * Using a FLAC__StreamEncoderSeekStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamEncoderSeekStatusString[]; - - -/** Return values for the FLAC__StreamEncoder tell callback. - */ -typedef enum { - - FLAC__STREAM_ENCODER_TELL_STATUS_OK, - /**< The tell was OK and encoding can continue. */ - - FLAC__STREAM_ENCODER_TELL_STATUS_ERROR, - /**< An unrecoverable error occurred. */ - - FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED - /**< Client does not support seeking. */ - -} FLAC__StreamEncoderTellStatus; - -/** Maps a FLAC__StreamEncoderTellStatus to a C string. - * - * Using a FLAC__StreamEncoderTellStatus as the index to this array - * will give the string equivalent. The contents should not be modified. - */ -extern FLAC_API const char * const FLAC__StreamEncoderTellStatusString[]; - - -/*********************************************************************** - * - * class FLAC__StreamEncoder - * - ***********************************************************************/ - -struct FLAC__StreamEncoderProtected; -struct FLAC__StreamEncoderPrivate; -/** The opaque structure definition for the stream encoder type. - * See the \link flac_stream_encoder stream encoder module \endlink - * for a detailed description. - */ -typedef struct { - struct FLAC__StreamEncoderProtected *protected_; /* avoid the C++ keyword 'protected' */ - struct FLAC__StreamEncoderPrivate *private_; /* avoid the C++ keyword 'private' */ -} FLAC__StreamEncoder; - -/** Signature for the read callback. - * - * A function pointer matching this signature must be passed to - * FLAC__stream_encoder_init_ogg_stream() if seeking is supported. - * The supplied function will be called when the encoder needs to read back - * encoded data. This happens during the metadata callback, when the encoder - * has to read, modify, and rewrite the metadata (e.g. seekpoints) gathered - * while encoding. The address of the buffer to be filled is supplied, along - * with the number of bytes the buffer can hold. The callback may choose to - * supply less data and modify the byte count but must be careful not to - * overflow the buffer. The callback then returns a status code chosen from - * FLAC__StreamEncoderReadStatus. - * - * Here is an example of a read callback for stdio streams: - * \code - * FLAC__StreamEncoderReadStatus read_cb(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data) - * { - * FILE *file = ((MyClientData*)client_data)->file; - * if(*bytes > 0) { - * *bytes = fread(buffer, sizeof(FLAC__byte), *bytes, file); - * if(ferror(file)) - * return FLAC__STREAM_ENCODER_READ_STATUS_ABORT; - * else if(*bytes == 0) - * return FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM; - * else - * return FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE; - * } - * else - * return FLAC__STREAM_ENCODER_READ_STATUS_ABORT; - * } - * \endcode - * - * \note In general, FLAC__StreamEncoder functions which change the - * state should not be called on the \a encoder while in the callback. - * - * \param encoder The encoder instance calling the callback. - * \param buffer A pointer to a location for the callee to store - * data to be encoded. - * \param bytes A pointer to the size of the buffer. On entry - * to the callback, it contains the maximum number - * of bytes that may be stored in \a buffer. The - * callee must set it to the actual number of bytes - * stored (0 in case of error or end-of-stream) before - * returning. - * \param client_data The callee's client data set through - * FLAC__stream_encoder_set_client_data(). - * \retval FLAC__StreamEncoderReadStatus - * The callee's return status. - */ -typedef FLAC__StreamEncoderReadStatus (*FLAC__StreamEncoderReadCallback)(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data); - -/** Signature for the write callback. - * - * A function pointer matching this signature must be passed to - * FLAC__stream_encoder_init*_stream(). The supplied function will be called - * by the encoder anytime there is raw encoded data ready to write. It may - * include metadata mixed with encoded audio frames and the data is not - * guaranteed to be aligned on frame or metadata block boundaries. - * - * The only duty of the callback is to write out the \a bytes worth of data - * in \a buffer to the current position in the output stream. The arguments - * \a samples and \a current_frame are purely informational. If \a samples - * is greater than \c 0, then \a current_frame will hold the current frame - * number that is being written; otherwise it indicates that the write - * callback is being called to write metadata. - * - * \note - * Unlike when writing to native FLAC, when writing to Ogg FLAC the - * write callback will be called twice when writing each audio - * frame; once for the page header, and once for the page body. - * When writing the page header, the \a samples argument to the - * write callback will be \c 0. - * - * \note In general, FLAC__StreamEncoder functions which change the - * state should not be called on the \a encoder while in the callback. - * - * \param encoder The encoder instance calling the callback. - * \param buffer An array of encoded data of length \a bytes. - * \param bytes The byte length of \a buffer. - * \param samples The number of samples encoded by \a buffer. - * \c 0 has a special meaning; see above. - * \param current_frame The number of the current frame being encoded. - * \param client_data The callee's client data set through - * FLAC__stream_encoder_init_*(). - * \retval FLAC__StreamEncoderWriteStatus - * The callee's return status. - */ -typedef FLAC__StreamEncoderWriteStatus (*FLAC__StreamEncoderWriteCallback)(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, uint32_t samples, uint32_t current_frame, void *client_data); - -/** Signature for the seek callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_encoder_init*_stream(). The supplied function will be called - * when the encoder needs to seek the output stream. The encoder will pass - * the absolute byte offset to seek to, 0 meaning the beginning of the stream. - * - * Here is an example of a seek callback for stdio streams: - * \code - * FLAC__StreamEncoderSeekStatus seek_cb(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) - * { - * FILE *file = ((MyClientData*)client_data)->file; - * if(file == stdin) - * return FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED; - * else if(fseeko(file, (off_t)absolute_byte_offset, SEEK_SET) < 0) - * return FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR; - * else - * return FLAC__STREAM_ENCODER_SEEK_STATUS_OK; - * } - * \endcode - * - * \note In general, FLAC__StreamEncoder functions which change the - * state should not be called on the \a encoder while in the callback. - * - * \param encoder The encoder instance calling the callback. - * \param absolute_byte_offset The offset from the beginning of the stream - * to seek to. - * \param client_data The callee's client data set through - * FLAC__stream_encoder_init_*(). - * \retval FLAC__StreamEncoderSeekStatus - * The callee's return status. - */ -typedef FLAC__StreamEncoderSeekStatus (*FLAC__StreamEncoderSeekCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data); - -/** Signature for the tell callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_encoder_init*_stream(). The supplied function will be called - * when the encoder needs to know the current position of the output stream. - * - * \warning - * The callback must return the true current byte offset of the output to - * which the encoder is writing. If you are buffering the output, make - * sure and take this into account. If you are writing directly to a - * FILE* from your write callback, ftell() is sufficient. If you are - * writing directly to a file descriptor from your write callback, you - * can use lseek(fd, SEEK_CUR, 0). The encoder may later seek back to - * these points to rewrite metadata after encoding. - * - * Here is an example of a tell callback for stdio streams: - * \code - * FLAC__StreamEncoderTellStatus tell_cb(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) - * { - * FILE *file = ((MyClientData*)client_data)->file; - * off_t pos; - * if(file == stdin) - * return FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED; - * else if((pos = ftello(file)) < 0) - * return FLAC__STREAM_ENCODER_TELL_STATUS_ERROR; - * else { - * *absolute_byte_offset = (FLAC__uint64)pos; - * return FLAC__STREAM_ENCODER_TELL_STATUS_OK; - * } - * } - * \endcode - * - * \note In general, FLAC__StreamEncoder functions which change the - * state should not be called on the \a encoder while in the callback. - * - * \param encoder The encoder instance calling the callback. - * \param absolute_byte_offset The address at which to store the current - * position of the output. - * \param client_data The callee's client data set through - * FLAC__stream_encoder_init_*(). - * \retval FLAC__StreamEncoderTellStatus - * The callee's return status. - */ -typedef FLAC__StreamEncoderTellStatus (*FLAC__StreamEncoderTellCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data); - -/** Signature for the metadata callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_encoder_init*_stream(). The supplied function will be called - * once at the end of encoding with the populated STREAMINFO structure. This - * is so the client can seek back to the beginning of the file and write the - * STREAMINFO block with the correct statistics after encoding (like - * minimum/maximum frame size and total samples). - * - * \note In general, FLAC__StreamEncoder functions which change the - * state should not be called on the \a encoder while in the callback. - * - * \param encoder The encoder instance calling the callback. - * \param metadata The final populated STREAMINFO block. - * \param client_data The callee's client data set through - * FLAC__stream_encoder_init_*(). - */ -typedef void (*FLAC__StreamEncoderMetadataCallback)(const FLAC__StreamEncoder *encoder, const FLAC__StreamMetadata *metadata, void *client_data); - -/** Signature for the progress callback. - * - * A function pointer matching this signature may be passed to - * FLAC__stream_encoder_init*_file() or FLAC__stream_encoder_init*_FILE(). - * The supplied function will be called when the encoder has finished - * writing a frame. The \c total_frames_estimate argument to the - * callback will be based on the value from - * FLAC__stream_encoder_set_total_samples_estimate(). - * - * \note In general, FLAC__StreamEncoder functions which change the - * state should not be called on the \a encoder while in the callback. - * - * \param encoder The encoder instance calling the callback. - * \param bytes_written Bytes written so far. - * \param samples_written Samples written so far. - * \param frames_written Frames written so far. - * \param total_frames_estimate The estimate of the total number of - * frames to be written. - * \param client_data The callee's client data set through - * FLAC__stream_encoder_init_*(). - */ -typedef void (*FLAC__StreamEncoderProgressCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 bytes_written, FLAC__uint64 samples_written, uint32_t frames_written, uint32_t total_frames_estimate, void *client_data); - - -/*********************************************************************** - * - * Class constructor/destructor - * - ***********************************************************************/ - -/** Create a new stream encoder instance. The instance is created with - * default settings; see the individual FLAC__stream_encoder_set_*() - * functions for each setting's default. - * - * \retval FLAC__StreamEncoder* - * \c NULL if there was an error allocating memory, else the new instance. - */ -FLAC_API FLAC__StreamEncoder *FLAC__stream_encoder_new(void); - -/** Free an encoder instance. Deletes the object pointed to by \a encoder. - * - * \param encoder A pointer to an existing encoder. - * \assert - * \code encoder != NULL \endcode - */ -FLAC_API void FLAC__stream_encoder_delete(FLAC__StreamEncoder *encoder); - - -/*********************************************************************** - * - * Public class method prototypes - * - ***********************************************************************/ - -/** Set the serial number for the FLAC stream to use in the Ogg container. - * - * \note - * This does not need to be set for native FLAC encoding. - * - * \note - * It is recommended to set a serial number explicitly as the default of '0' - * may collide with other streams. - * - * \default \c 0 - * \param encoder An encoder instance to set. - * \param serial_number See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_ogg_serial_number(FLAC__StreamEncoder *encoder, long serial_number); - -/** Set the "verify" flag. If \c true, the encoder will verify it's own - * encoded output by feeding it through an internal decoder and comparing - * the original signal against the decoded signal. If a mismatch occurs, - * the process call will return \c false. Note that this will slow the - * encoding process by the extra time required for decoding and comparison. - * - * \default \c false - * \param encoder An encoder instance to set. - * \param value Flag value (see above). - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_verify(FLAC__StreamEncoder *encoder, FLAC__bool value); - -/** Set the Subset flag. If \c true, - * the encoder will comply with the Subset and will check the - * settings during FLAC__stream_encoder_init_*() to see if all settings - * comply. If \c false, the settings may take advantage of the full - * range that the format allows. - * - * Make sure you know what it entails before setting this to \c false. - * - * \default \c true - * \param encoder An encoder instance to set. - * \param value Flag value (see above). - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_streamable_subset(FLAC__StreamEncoder *encoder, FLAC__bool value); - -/** Set the number of channels to be encoded. - * - * \default \c 2 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_channels(FLAC__StreamEncoder *encoder, uint32_t value); - -/** Set the sample resolution of the input to be encoded. - * - * \warning - * Do not feed the encoder data that is wider than the value you - * set here or you will generate an invalid stream. - * - * \default \c 16 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_bits_per_sample(FLAC__StreamEncoder *encoder, uint32_t value); - -/** Set the sample rate (in Hz) of the input to be encoded. - * - * \default \c 44100 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_sample_rate(FLAC__StreamEncoder *encoder, uint32_t value); - -/** Set the compression level - * - * The compression level is roughly proportional to the amount of effort - * the encoder expends to compress the file. A higher level usually - * means more computation but higher compression. The default level is - * suitable for most applications. - * - * Currently the levels range from \c 0 (fastest, least compression) to - * \c 8 (slowest, most compression). A value larger than \c 8 will be - * treated as \c 8. - * - * This function automatically calls the following other \c _set_ - * functions with appropriate values, so the client does not need to - * unless it specifically wants to override them: - * - FLAC__stream_encoder_set_do_mid_side_stereo() - * - FLAC__stream_encoder_set_loose_mid_side_stereo() - * - FLAC__stream_encoder_set_apodization() - * - FLAC__stream_encoder_set_max_lpc_order() - * - FLAC__stream_encoder_set_qlp_coeff_precision() - * - FLAC__stream_encoder_set_do_qlp_coeff_prec_search() - * - FLAC__stream_encoder_set_do_escape_coding() - * - FLAC__stream_encoder_set_do_exhaustive_model_search() - * - FLAC__stream_encoder_set_min_residual_partition_order() - * - FLAC__stream_encoder_set_max_residual_partition_order() - * - FLAC__stream_encoder_set_rice_parameter_search_dist() - * - * The actual values set for each level are: - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
leveldo mid-side stereoloose mid-side stereoapodizationmax lpc orderqlp coeff precisionqlp coeff prec searchescape codingexhaustive model searchmin residual partition ordermax residual partition orderrice parameter search dist
0 false false tukey(0.5) 0 0 false false false 0 3 0
1 true true tukey(0.5) 0 0 false false false 0 3 0
2 true false tukey(0.5) 0 0 false false false 0 3 0
3 false false tukey(0.5) 6 0 false false false 0 4 0
4 true true tukey(0.5) 8 0 false false false 0 4 0
5 true false tukey(0.5) 8 0 false false false 0 5 0
6 true false tukey(0.5);partial_tukey(2) 8 0 false false false 0 6 0
7 true false tukey(0.5);partial_tukey(2) 12 0 false false false 0 6 0
8 true false tukey(0.5);partial_tukey(2);punchout_tukey(3) 12 0 false false false 0 6 0
- * - * \default \c 5 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_compression_level(FLAC__StreamEncoder *encoder, uint32_t value); - -/** Set the blocksize to use while encoding. - * - * The number of samples to use per frame. Use \c 0 to let the encoder - * estimate a blocksize; this is usually best. - * - * \default \c 0 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_blocksize(FLAC__StreamEncoder *encoder, uint32_t value); - -/** Set to \c true to enable mid-side encoding on stereo input. The - * number of channels must be 2 for this to have any effect. Set to - * \c false to use only independent channel coding. - * - * \default \c true - * \param encoder An encoder instance to set. - * \param value Flag value (see above). - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_do_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value); - -/** Set to \c true to enable adaptive switching between mid-side and - * left-right encoding on stereo input. Set to \c false to use - * exhaustive searching. Setting this to \c true requires - * FLAC__stream_encoder_set_do_mid_side_stereo() to also be set to - * \c true in order to have any effect. - * - * \default \c false - * \param encoder An encoder instance to set. - * \param value Flag value (see above). - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_loose_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value); - -/** Sets the apodization function(s) the encoder will use when windowing - * audio data for LPC analysis. - * - * The \a specification is a plain ASCII string which specifies exactly - * which functions to use. There may be more than one (up to 32), - * separated by \c ';' characters. Some functions take one or more - * comma-separated arguments in parentheses. - * - * The available functions are \c bartlett, \c bartlett_hann, - * \c blackman, \c blackman_harris_4term_92db, \c connes, \c flattop, - * \c gauss(STDDEV), \c hamming, \c hann, \c kaiser_bessel, \c nuttall, - * \c rectangle, \c triangle, \c tukey(P), \c partial_tukey(n[/ov[/P]]), - * \c punchout_tukey(n[/ov[/P]]), \c welch. - * - * For \c gauss(STDDEV), STDDEV specifies the standard deviation - * (0blocksize / (2 ^ order). - * - * Set both min and max values to \c 0 to force a single context, - * whose Rice parameter is based on the residual signal variance. - * Otherwise, set a min and max order, and the encoder will search - * all orders, using the mean of each context for its Rice parameter, - * and use the best. - * - * \default \c 0 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_min_residual_partition_order(FLAC__StreamEncoder *encoder, uint32_t value); - -/** Set the maximum partition order to search when coding the residual. - * This is used in tandem with - * FLAC__stream_encoder_set_min_residual_partition_order(). - * - * The partition order determines the context size in the residual. - * The context size will be approximately blocksize / (2 ^ order). - * - * Set both min and max values to \c 0 to force a single context, - * whose Rice parameter is based on the residual signal variance. - * Otherwise, set a min and max order, and the encoder will search - * all orders, using the mean of each context for its Rice parameter, - * and use the best. - * - * \default \c 5 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_max_residual_partition_order(FLAC__StreamEncoder *encoder, uint32_t value); - -/** Deprecated. Setting this value has no effect. - * - * \default \c 0 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_rice_parameter_search_dist(FLAC__StreamEncoder *encoder, uint32_t value); - -/** Set an estimate of the total samples that will be encoded. - * This is merely an estimate and may be set to \c 0 if unknown. - * This value will be written to the STREAMINFO block before encoding, - * and can remove the need for the caller to rewrite the value later - * if the value is known before encoding. - * - * \default \c 0 - * \param encoder An encoder instance to set. - * \param value See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__StreamEncoder *encoder, FLAC__uint64 value); - -/** Set the metadata blocks to be emitted to the stream before encoding. - * A value of \c NULL, \c 0 implies no metadata; otherwise, supply an - * array of pointers to metadata blocks. The array is non-const since - * the encoder may need to change the \a is_last flag inside them, and - * in some cases update seek point offsets. Otherwise, the encoder will - * not modify or free the blocks. It is up to the caller to free the - * metadata blocks after encoding finishes. - * - * \note - * The encoder stores only copies of the pointers in the \a metadata array; - * the metadata blocks themselves must survive at least until after - * FLAC__stream_encoder_finish() returns. Do not free the blocks until then. - * - * \note - * The STREAMINFO block is always written and no STREAMINFO block may - * occur in the supplied array. - * - * \note - * By default the encoder does not create a SEEKTABLE. If one is supplied - * in the \a metadata array, but the client has specified that it does not - * support seeking, then the SEEKTABLE will be written verbatim. However - * by itself this is not very useful as the client will not know the stream - * offsets for the seekpoints ahead of time. In order to get a proper - * seektable the client must support seeking. See next note. - * - * \note - * SEEKTABLE blocks are handled specially. Since you will not know - * the values for the seek point stream offsets, you should pass in - * a SEEKTABLE 'template', that is, a SEEKTABLE object with the - * required sample numbers (or placeholder points), with \c 0 for the - * \a frame_samples and \a stream_offset fields for each point. If the - * client has specified that it supports seeking by providing a seek - * callback to FLAC__stream_encoder_init_stream() or both seek AND read - * callback to FLAC__stream_encoder_init_ogg_stream() (or by using - * FLAC__stream_encoder_init*_file() or FLAC__stream_encoder_init*_FILE()), - * then while it is encoding the encoder will fill the stream offsets in - * for you and when encoding is finished, it will seek back and write the - * real values into the SEEKTABLE block in the stream. There are helper - * routines for manipulating seektable template blocks; see metadata.h: - * FLAC__metadata_object_seektable_template_*(). If the client does - * not support seeking, the SEEKTABLE will have inaccurate offsets which - * will slow down or remove the ability to seek in the FLAC stream. - * - * \note - * The encoder instance \b will modify the first \c SEEKTABLE block - * as it transforms the template to a valid seektable while encoding, - * but it is still up to the caller to free all metadata blocks after - * encoding. - * - * \note - * A VORBIS_COMMENT block may be supplied. The vendor string in it - * will be ignored. libFLAC will use it's own vendor string. libFLAC - * will not modify the passed-in VORBIS_COMMENT's vendor string, it - * will simply write it's own into the stream. If no VORBIS_COMMENT - * block is present in the \a metadata array, libFLAC will write an - * empty one, containing only the vendor string. - * - * \note The Ogg FLAC mapping requires that the VORBIS_COMMENT block be - * the second metadata block of the stream. The encoder already supplies - * the STREAMINFO block automatically. If \a metadata does not contain a - * VORBIS_COMMENT block, the encoder will supply that too. Otherwise, if - * \a metadata does contain a VORBIS_COMMENT block and it is not the - * first, the init function will reorder \a metadata by moving the - * VORBIS_COMMENT block to the front; the relative ordering of the other - * blocks will remain as they were. - * - * \note The Ogg FLAC mapping limits the number of metadata blocks per - * stream to \c 65535. If \a num_blocks exceeds this the function will - * return \c false. - * - * \default \c NULL, 0 - * \param encoder An encoder instance to set. - * \param metadata See above. - * \param num_blocks See above. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * \c false if the encoder is already initialized, else \c true. - * \c false if the encoder is already initialized, or if - * \a num_blocks > 65535 if encoding to Ogg FLAC, else \c true. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, uint32_t num_blocks); - -/** Get the current encoder state. - * - * \param encoder An encoder instance to query. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__StreamEncoderState - * The current encoder state. - */ -FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_get_state(const FLAC__StreamEncoder *encoder); - -/** Get the state of the verify stream decoder. - * Useful when the stream encoder state is - * \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR. - * - * \param encoder An encoder instance to query. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__StreamDecoderState - * The verify stream decoder state. - */ -FLAC_API FLAC__StreamDecoderState FLAC__stream_encoder_get_verify_decoder_state(const FLAC__StreamEncoder *encoder); - -/** Get the current encoder state as a C string. - * This version automatically resolves - * \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR by getting the - * verify decoder's state. - * - * \param encoder A encoder instance to query. - * \assert - * \code encoder != NULL \endcode - * \retval const char * - * The encoder state as a C string. Do not modify the contents. - */ -FLAC_API const char *FLAC__stream_encoder_get_resolved_state_string(const FLAC__StreamEncoder *encoder); - -/** Get relevant values about the nature of a verify decoder error. - * Useful when the stream encoder state is - * \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR. The arguments should - * be addresses in which the stats will be returned, or NULL if value - * is not desired. - * - * \param encoder An encoder instance to query. - * \param absolute_sample The absolute sample number of the mismatch. - * \param frame_number The number of the frame in which the mismatch occurred. - * \param channel The channel in which the mismatch occurred. - * \param sample The number of the sample (relative to the frame) in - * which the mismatch occurred. - * \param expected The expected value for the sample in question. - * \param got The actual value returned by the decoder. - * \assert - * \code encoder != NULL \endcode - */ -FLAC_API void FLAC__stream_encoder_get_verify_decoder_error_stats(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_sample, uint32_t *frame_number, uint32_t *channel, uint32_t *sample, FLAC__int32 *expected, FLAC__int32 *got); - -/** Get the "verify" flag. - * - * \param encoder An encoder instance to query. - * \assert - * \code encoder != NULL \endcode - * \retval FLAC__bool - * See FLAC__stream_encoder_set_verify(). - */ -FLAC_API FLAC__bool FLAC__stream_encoder_get_verify(const FLAC__StreamEncoder *encoder); - -/** Get the frame header. - * - * \param encoder An initialized encoder instance in the OK state. - * \param buffer An array of pointers to each channel's signal. - * \param samples The number of samples in one channel. - * \assert - * \code encoder != NULL \endcode - * \code FLAC__stream_encoder_get_state(encoder) == FLAC__STREAM_ENCODER_OK \endcode - * \retval FLAC__bool - * \c true if successful, else \c false; in this case, check the - * encoder state with FLAC__stream_encoder_get_state() to see what - * went wrong. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_process(FLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], uint32_t samples); - -/** Submit data for encoding. - * This version allows you to supply the input data where the channels - * are interleaved into a single array (i.e. channel0_sample0, - * channel1_sample0, ... , channelN_sample0, channel0_sample1, ...). - * The samples need not be block-aligned but they must be - * sample-aligned, i.e. the first value should be channel0_sample0 - * and the last value channelN_sampleM. Each sample should be a signed - * integer, right-justified to the resolution set by - * FLAC__stream_encoder_set_bits_per_sample(). For example, if the - * resolution is 16 bits per sample, the samples should all be in the - * range [-32768,32767]. - * - * For applications where channel order is important, channels must - * follow the order as described in the - * frame header. - * - * \param encoder An initialized encoder instance in the OK state. - * \param buffer An array of channel-interleaved data (see above). - * \param samples The number of samples in one channel, the same as for - * FLAC__stream_encoder_process(). For example, if - * encoding two channels, \c 1000 \a samples corresponds - * to a \a buffer of 2000 values. - * \assert - * \code encoder != NULL \endcode - * \code FLAC__stream_encoder_get_state(encoder) == FLAC__STREAM_ENCODER_OK \endcode - * \retval FLAC__bool - * \c true if successful, else \c false; in this case, check the - * encoder state with FLAC__stream_encoder_get_state() to see what - * went wrong. - */ -FLAC_API FLAC__bool FLAC__stream_encoder_process_interleaved(FLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], uint32_t samples); - -/* \} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libs/lib/libFLAC.a b/libs/lib/libFLAC.a deleted file mode 100644 index 006c4124454ab1e086cb6c7be55eeb96df66dd97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 449644 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 z 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 z%0A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 Date: Thu, 10 Apr 2025 18:28:26 +0100 Subject: [PATCH 17/24] libs: Use updated libmpg123 libogg libxmp from psp packages --- app/source/audio/ogg.cpp | 4 +- app/source/audio/xm.cpp | 3 +- libs/include/fmt123.h | 135 --- libs/include/mpg123.h | 2001 -------------------------------------- libs/include/xmp.h | 358 ------- libs/lib/libmpg123.a | Bin 291496 -> 0 bytes 6 files changed, 4 insertions(+), 2497 deletions(-) delete mode 100644 libs/include/fmt123.h delete mode 100644 libs/include/mpg123.h delete mode 100644 libs/include/xmp.h delete mode 100644 libs/lib/libmpg123.a diff --git a/app/source/audio/ogg.cpp b/app/source/audio/ogg.cpp index 335a106..2f64849 100644 --- a/app/source/audio/ogg.cpp +++ b/app/source/audio/ogg.cpp @@ -1,9 +1,9 @@ #include +#include +#include #include "audio.h" #include "utils.h" -#include "vorbis/codec.h" -#include "vorbis/vorbisfile.h" namespace OGG { static OggVorbis_File ogg; diff --git a/app/source/audio/xm.cpp b/app/source/audio/xm.cpp index 16fa5e1..01be638 100644 --- a/app/source/audio/xm.cpp +++ b/app/source/audio/xm.cpp @@ -1,5 +1,6 @@ +#include + #include "audio.h" -#include "xmp.h" namespace XM { static xmp_context xmp; diff --git a/libs/include/fmt123.h b/libs/include/fmt123.h deleted file mode 100644 index cc30a06..0000000 --- a/libs/include/fmt123.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - libmpg123: MPEG Audio Decoder library - - separate header just for audio format definitions not tied to - library code - - copyright 1995-2015 by the mpg123 project - free software under the terms of the LGPL 2.1 - see COPYING and AUTHORS files in distribution or http://mpg123.org -*/ - -#ifndef MPG123_ENC_H -#define MPG123_ENC_H - -/** \file fmt123.h Audio format definitions. */ - -/** \defgroup mpg123_enc mpg123 PCM sample encodings - * These are definitions for audio formats used by libmpg123 and - * libout123. - * - * @{ - */ - -/** An enum over all sample types possibly known to mpg123. - * The values are designed as bit flags to allow bitmasking for encoding - * families. - * This is also why the enum is not used as type for actual encoding variables, - * plain integers (at least 16 bit, 15 bit being used) cover the possible - * combinations of these flags. - * - * Note that (your build of) libmpg123 does not necessarily support all these. - * Usually, you can expect the 8bit encodings and signed 16 bit. - * Also 32bit float will be usual beginning with mpg123-1.7.0 . - * What you should bear in mind is that (SSE, etc) optimized routines may be - * absent for some formats. We do have SSE for 16, 32 bit and float, though. - * 24 bit integer is done via postprocessing of 32 bit output -- just cutting - * the last byte, no rounding, even. If you want better, do it yourself. - * - * All formats are in native byte order. If you need different endinaness, you - * can simply postprocess the output buffers (libmpg123 wouldn't do anything - * else). The macro MPG123_SAMPLESIZE() can be helpful there. - */ -enum mpg123_enc_enum -{ -/* 0000 0000 0000 1111 Some 8 bit integer encoding. */ - MPG123_ENC_8 = 0x00f -/* 0000 0000 0100 0000 Some 16 bit integer encoding. */ -, MPG123_ENC_16 = 0x040 -/* 0100 0000 0000 0000 Some 24 bit integer encoding. */ -, MPG123_ENC_24 = 0x4000 -/* 0000 0001 0000 0000 Some 32 bit integer encoding. */ -, MPG123_ENC_32 = 0x100 -/* 0000 0000 1000 0000 Some signed integer encoding. */ -, MPG123_ENC_SIGNED = 0x080 -/* 0000 1110 0000 0000 Some float encoding. */ -, MPG123_ENC_FLOAT = 0xe00 -/* 0000 0000 1101 0000 signed 16 bit */ -, MPG123_ENC_SIGNED_16 = (MPG123_ENC_16|MPG123_ENC_SIGNED|0x10) -/* 0000 0000 0110 0000 unsigned 16 bit */ -, MPG123_ENC_UNSIGNED_16 = (MPG123_ENC_16|0x20) -/* 0000 0000 0000 0001 unsigned 8 bit */ -, MPG123_ENC_UNSIGNED_8 = 0x01 -/* 0000 0000 1000 0010 signed 8 bit */ -, MPG123_ENC_SIGNED_8 = (MPG123_ENC_SIGNED|0x02) -/* 0000 0000 0000 0100 ulaw 8 bit */ -, MPG123_ENC_ULAW_8 = 0x04 -/* 0000 0000 0000 1000 alaw 8 bit */ -, MPG123_ENC_ALAW_8 = 0x08 -/* 0001 0001 1000 0000 signed 32 bit */ -, MPG123_ENC_SIGNED_32 = MPG123_ENC_32|MPG123_ENC_SIGNED|0x1000 -/* 0010 0001 0000 0000 unsigned 32 bit */ -, MPG123_ENC_UNSIGNED_32 = MPG123_ENC_32|0x2000 -/* 0101 0000 1000 0000 signed 24 bit */ -, MPG123_ENC_SIGNED_24 = MPG123_ENC_24|MPG123_ENC_SIGNED|0x1000 -/* 0110 0000 0000 0000 unsigned 24 bit */ -, MPG123_ENC_UNSIGNED_24 = MPG123_ENC_24|0x2000 -/* 0000 0010 0000 0000 32bit float */ -, MPG123_ENC_FLOAT_32 = 0x200 -/* 0000 0100 0000 0000 64bit float */ -, MPG123_ENC_FLOAT_64 = 0x400 -/* Any possibly known encoding from the list above. */ -, MPG123_ENC_ANY = ( MPG123_ENC_SIGNED_16 | MPG123_ENC_UNSIGNED_16 - | MPG123_ENC_UNSIGNED_8 | MPG123_ENC_SIGNED_8 - | MPG123_ENC_ULAW_8 | MPG123_ENC_ALAW_8 - | MPG123_ENC_SIGNED_32 | MPG123_ENC_UNSIGNED_32 - | MPG123_ENC_SIGNED_24 | MPG123_ENC_UNSIGNED_24 - | MPG123_ENC_FLOAT_32 | MPG123_ENC_FLOAT_64 ) -}; - -/** Get size of one PCM sample with given encoding. - * This is included both in libmpg123 and libout123. Both offer - * an API function to provide the macro results from library - * compile-time, not that of you application. This most likely - * does not matter as I do not expect any fresh PCM sample - * encoding to appear. But who knows? Perhaps the encoding type - * will be abused for funny things in future, not even plain PCM. - * And, by the way: Thomas really likes the ?: operator. - * \param enc the encoding (mpg123_enc_enum value) - * \return size of one sample in bytes - */ -#define MPG123_SAMPLESIZE(enc) ( \ - (enc) & MPG123_ENC_8 \ - ? 1 \ - : ( (enc) & MPG123_ENC_16 \ - ? 2 \ - : ( (enc) & MPG123_ENC_24 \ - ? 3 \ - : ( ( (enc) & MPG123_ENC_32 \ - || (enc) == MPG123_ENC_FLOAT_32 ) \ - ? 4 \ - : ( (enc) == MPG123_ENC_FLOAT_64 \ - ? 8 \ - : 0 \ -) ) ) ) ) - -/** Structure defining an audio format. - * Providing the members as individual function arguments to define a certain - * output format is easy enough. This struct makes is more comfortable to deal - * with a list of formats. - * Negative values for the members might be used to communicate use of default - * values. - */ -struct mpg123_fmt -{ - long rate; /**< sampling rate in Hz */ - int channels; /**< channel count */ - /** encoding code, can be single value or bitwise or of members of - * mpg123_enc_enum */ - int encoding; -}; - -/* @} */ - -#endif - diff --git a/libs/include/mpg123.h b/libs/include/mpg123.h deleted file mode 100644 index c7f8ecc..0000000 --- a/libs/include/mpg123.h +++ /dev/null @@ -1,2001 +0,0 @@ -/* - libmpg123: MPEG Audio Decoder library (version 1.28.2) - - copyright 1995-2015 by the mpg123 project - free software under the terms of the LGPL 2.1 - see COPYING and AUTHORS files in distribution or http://mpg123.org -*/ - -#ifndef MPG123_LIB_H -#define MPG123_LIB_H - -#include - -/** \file mpg123.h The header file for the libmpg123 MPEG Audio decoder */ - -/** A macro to check at compile time which set of API functions to expect. - * This should be incremented at least each time a new symbol is added - * to the header. - */ -#ifndef MPG123_API_VERSION -#define MPG123_API_VERSION 46 -#endif - -#ifndef MPG123_EXPORT -/** Defines needed for MS Visual Studio(tm) DLL builds. - * Every public function must be prefixed with MPG123_EXPORT. When building - * the DLL ensure to define BUILD_MPG123_DLL. This makes the function accessible - * for clients and includes it in the import library which is created together - * with the DLL. When consuming the DLL ensure to define LINK_MPG123_DLL which - * imports the functions from the DLL. - */ -#ifdef BUILD_MPG123_DLL -/* The dll exports. */ -#define MPG123_EXPORT __declspec(dllexport) -#else -#ifdef LINK_MPG123_DLL -/* The exe imports. */ -#define MPG123_EXPORT __declspec(dllimport) -#else -/* Nothing on normal/UNIX builds */ -#define MPG123_EXPORT -#endif -#endif -#endif - -/** Earlier versions of libmpg123 put enums into public API calls, - * thich is not exactly safe. There are ABI rules, but you can use - * compiler switches to change the sizes of enums. It is safer not - * to have them in API calls. Thus, the default is to remap calls and - * structs to variants that use plain ints. Define MPG123_ENUM_API to - * prevent that remapping. - * - * You might want to define this to increase the chance of your binary - * working with an older version of the library. But if that is your goal, - * you should better build with an older version to begin with. - */ -#ifndef MPG123_ENUM_API - -#define mpg123_param mpg123_param2 -#define mpg123_getparam mpg123_getparam2 -#define mpg123_feature mpg123_feature2 -#define mpg123_eq mpg123_eq2 -#define mpg123_geteq mpg123_geteq2 -#define mpg123_frameinfo mpg123_frameinfo2 -#define mpg123_info mpg123_info2 -#define mpg123_getstate mpg123_getstate2 -#define mpg123_enc_from_id3 mpg123_enc_from_id3_2 -#define mpg123_store_utf8 mpg123_store_utf8_2 -#define mpg123_par mpg123_par2 -#define mpg123_getpar mpg123_getpar2 - -#endif - -/* You can use this file directly, avoiding the autoconf replacements. - Might have to set MPG123_NO_LARGENAME, too, in case you have - _FILE_OFFSET_BITS defined where it does not make sense. */ -#ifndef MPG123_NO_CONFIGURE - -#include -#include - -/* A little hack to help MSVC not having ssize_t. */ -#ifdef _MSC_VER -#include -typedef ptrdiff_t mpg123_ssize_t; -#else -typedef ssize_t mpg123_ssize_t; -#endif - -/* You can always enforce largefile hackery by setting MPG123_LARGESUFFIX. */ -/* Otherwise, this header disables it if the build system decided so. */ -#if !defined(MPG123_LARGESUFFIX) && 0 -#ifndef MPG123_NO_LARGENAME -#define MPG123_NO_LARGENAME -#endif -#endif - -#endif /* MPG123_NO_CONFIGURE */ - -/* Simplified large file handling. - I used to have a check here that prevents building for a library with conflicting large file setup - (application that uses 32 bit offsets with library that uses 64 bits). - While that was perfectly fine in an environment where there is one incarnation of the library, - it hurt GNU/Linux and Solaris systems with multilib where the distribution fails to provide the - correct header matching the 32 bit library (where large files need explicit support) or - the 64 bit library (where there is no distinction). - - New approach: When the app defines _FILE_OFFSET_BITS, it wants non-default large file support, - and thus functions with added suffix (mpg123_open_64). - Any mismatch will be caught at link time because of the _FILE_OFFSET_BITS setting used when - building libmpg123. Plus, there's dual mode large file support in mpg123 since 1.12 now. - Link failure is not the expected outcome of any half-sane usage anymore. - - More complication: What about client code defining _LARGEFILE64_SOURCE? It might want direct access to the _64 functions, along with the ones without suffix. Well, that's possible now via defining MPG123_NO_LARGENAME and MPG123_LARGESUFFIX, respectively, for disabling or enforcing the suffix names. -*/ - -/* - Now, the renaming of large file aware functions. - By default, it appends underscore _FILE_OFFSET_BITS (so, mpg123_seek_64 for mpg123_seek), if _FILE_OFFSET_BITS is defined. You can force a different suffix via MPG123_LARGESUFFIX (that must include the underscore), or you can just disable the whole mess by defining MPG123_NO_LARGENAME. -*/ -#if (!defined MPG123_NO_LARGENAME) && ((defined _FILE_OFFSET_BITS) || (defined MPG123_LARGESUFFIX)) - -/* Need some trickery to concatenate the value(s) of the given macro(s). */ -#define MPG123_MACROCAT_REALLY(a, b) a ## b -#define MPG123_MACROCAT(a, b) MPG123_MACROCAT_REALLY(a, b) -#ifndef MPG123_LARGESUFFIX -#define MPG123_LARGESUFFIX MPG123_MACROCAT(_, _FILE_OFFSET_BITS) -#endif -#define MPG123_LARGENAME(func) MPG123_MACROCAT(func, MPG123_LARGESUFFIX) - -#define mpg123_open_fixed MPG123_LARGENAME(mpg123_open_fixed) -#define mpg123_open MPG123_LARGENAME(mpg123_open) -#define mpg123_open_fd MPG123_LARGENAME(mpg123_open_fd) -#define mpg123_open_handle MPG123_LARGENAME(mpg123_open_handle) -#define mpg123_framebyframe_decode MPG123_LARGENAME(mpg123_framebyframe_decode) -#define mpg123_decode_frame MPG123_LARGENAME(mpg123_decode_frame) -#define mpg123_tell MPG123_LARGENAME(mpg123_tell) -#define mpg123_tellframe MPG123_LARGENAME(mpg123_tellframe) -#define mpg123_tell_stream MPG123_LARGENAME(mpg123_tell_stream) -#define mpg123_seek MPG123_LARGENAME(mpg123_seek) -#define mpg123_feedseek MPG123_LARGENAME(mpg123_feedseek) -#define mpg123_seek_frame MPG123_LARGENAME(mpg123_seek_frame) -#define mpg123_timeframe MPG123_LARGENAME(mpg123_timeframe) -#define mpg123_index MPG123_LARGENAME(mpg123_index) -#define mpg123_set_index MPG123_LARGENAME(mpg123_set_index) -#define mpg123_position MPG123_LARGENAME(mpg123_position) -#define mpg123_length MPG123_LARGENAME(mpg123_length) -#define mpg123_framelength MPG123_LARGENAME(mpg123_framelength) -#define mpg123_set_filesize MPG123_LARGENAME(mpg123_set_filesize) -#define mpg123_replace_reader MPG123_LARGENAME(mpg123_replace_reader) -#define mpg123_replace_reader_handle MPG123_LARGENAME(mpg123_replace_reader_handle) -#define mpg123_framepos MPG123_LARGENAME(mpg123_framepos) - -#endif /* largefile hackery */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** \defgroup mpg123_init mpg123 library and handle setup - * - * Functions to initialise and shutdown the mpg123 library and handles. - * The parameters of handles have workable defaults, you only have to tune them when you want to tune something;-) - * Tip: Use a RVA setting... - * - * @{ - */ - -/** Opaque structure for the libmpg123 decoder handle. */ -struct mpg123_handle_struct; - -/** Opaque structure for the libmpg123 decoder handle. - * Most functions take a pointer to a mpg123_handle as first argument and operate on its data in an object-oriented manner. - */ -typedef struct mpg123_handle_struct mpg123_handle; - -/** Useless no-op that used to do initialization work. - * - * For API version before 46 (mpg123 1.27.0), you had to ensure to have - * this called once before creating a handle. To be pure, this had to - * happen in a single-threaded context, too (while in practice, there was no - * harm done possibly racing to compute the same numbers again). - * - * Now this function really does nothing anymore. The only reason to call - * it is to be compatible with old versions of the library that still require - * it. - * - * \return MPG123_OK if successful, otherwise an error number. - */ -MPG123_EXPORT int mpg123_init(void); - -/** Superfluous Function to close down the mpg123 library. - * This was created with the thought that there sometime will be cleanup code - * to be run after library use. This never materialized. You can forget about - * this function and it is only here for old programs that do call it. - */ -MPG123_EXPORT void mpg123_exit(void); - -/** Create a handle with optional choice of decoder (named by a string, see mpg123_decoders() or mpg123_supported_decoders()). - * and optional retrieval of an error code to feed to mpg123_plain_strerror(). - * Optional means: Any of or both the parameters may be NULL. - * - * \param decoder optional choice of decoder variant (NULL for default) - * \param error optional address to store error codes - * \return Non-NULL pointer to fresh handle when successful. - */ -MPG123_EXPORT mpg123_handle *mpg123_new(const char* decoder, int *error); - -/** Delete handle, mh is either a valid mpg123 handle or NULL. - * \param mh handle - */ -MPG123_EXPORT void mpg123_delete(mpg123_handle *mh); - -/** Free plain memory allocated within libmpg123. - * This is for library users that are not sure to use the same underlying - * memory allocator as libmpg123. It is just a wrapper over free() in - * the underlying C library. - */ -MPG123_EXPORT void mpg123_free(void *ptr); - -/** Enumeration of the parameters types that it is possible to set/get. */ -enum mpg123_parms -{ - MPG123_VERBOSE = 0, /**< set verbosity value for enabling messages to stderr, >= 0 makes sense (integer) */ - MPG123_FLAGS, /**< set all flags, p.ex val = MPG123_GAPLESS|MPG123_MONO_MIX (integer) */ - MPG123_ADD_FLAGS, /**< add some flags (integer) */ - MPG123_FORCE_RATE, /**< when value > 0, force output rate to that value (integer) */ - MPG123_DOWN_SAMPLE, /**< 0=native rate, 1=half rate, 2=quarter rate (integer) */ - MPG123_RVA, /**< one of the RVA choices above (integer) */ - MPG123_DOWNSPEED, /**< play a frame N times (integer) */ - MPG123_UPSPEED, /**< play every Nth frame (integer) */ - MPG123_START_FRAME, /**< start with this frame (skip frames before that, integer) */ - MPG123_DECODE_FRAMES, /**< decode only this number of frames (integer) */ - MPG123_ICY_INTERVAL, /**< Stream contains ICY metadata with this interval (integer). - Make sure to set this _before_ opening a stream.*/ - MPG123_OUTSCALE, /**< the scale for output samples (amplitude - integer or float according to mpg123 output format, normally integer) */ - MPG123_TIMEOUT, /**< timeout for reading from a stream (not supported on win32, integer) */ - MPG123_REMOVE_FLAGS, /**< remove some flags (inverse of MPG123_ADD_FLAGS, integer) */ - MPG123_RESYNC_LIMIT, /**< Try resync on frame parsing for that many bytes or until end of stream (<0 ... integer). This can enlarge the limit for skipping junk on beginning, too (but not reduce it). */ - MPG123_INDEX_SIZE /**< Set the frame index size (if supported). Values <0 mean that the index is allowed to grow dynamically in these steps (in positive direction, of course) -- Use this when you really want a full index with every individual frame. */ - ,MPG123_PREFRAMES /**< Decode/ignore that many frames in advance for layer 3. This is needed to fill bit reservoir after seeking, for example (but also at least one frame in advance is needed to have all "normal" data for layer 3). Give a positive integer value, please.*/ - ,MPG123_FEEDPOOL /**< For feeder mode, keep that many buffers in a pool to avoid frequent malloc/free. The pool is allocated on mpg123_open_feed(). If you change this parameter afterwards, you can trigger growth and shrinkage during decoding. The default value could change any time. If you care about this, then set it. (integer) */ - ,MPG123_FEEDBUFFER /**< Minimal size of one internal feeder buffer, again, the default value is subject to change. (integer) */ - ,MPG123_FREEFORMAT_SIZE /**< Tell the parser a free-format frame size to - * avoid read-ahead to get it. A value of -1 (default) means that the parser - * will determine it. The parameter value is applied during decoder setup - * for a freshly opened stream only. - */ -}; - -/** Flag bits for MPG123_FLAGS, use the usual binary or to combine. */ -enum mpg123_param_flags -{ - MPG123_FORCE_MONO = 0x7 /**< 0111 Force some mono mode: This is a test bitmask for seeing if any mono forcing is active. */ - ,MPG123_MONO_LEFT = 0x1 /**< 0001 Force playback of left channel only. */ - ,MPG123_MONO_RIGHT = 0x2 /**< 0010 Force playback of right channel only. */ - ,MPG123_MONO_MIX = 0x4 /**< 0100 Force playback of mixed mono. */ - ,MPG123_FORCE_STEREO = 0x8 /**< 1000 Force stereo output. */ - ,MPG123_FORCE_8BIT = 0x10 /**< 00010000 Force 8bit formats. */ - ,MPG123_QUIET = 0x20 /**< 00100000 Suppress any printouts (overrules verbose). */ - ,MPG123_GAPLESS = 0x40 /**< 01000000 Enable gapless decoding (default on if libmpg123 has support). */ - ,MPG123_NO_RESYNC = 0x80 /**< 10000000 Disable resync stream after error. */ - ,MPG123_SEEKBUFFER = 0x100 /**< 000100000000 Enable small buffer on non-seekable streams to allow some peek-ahead (for better MPEG sync). */ - ,MPG123_FUZZY = 0x200 /**< 001000000000 Enable fuzzy seeks (guessing byte offsets or using approximate seek points from Xing TOC) */ - ,MPG123_FORCE_FLOAT = 0x400 /**< 010000000000 Force floating point output (32 or 64 bits depends on mpg123 internal precision). */ - ,MPG123_PLAIN_ID3TEXT = 0x800 /**< 100000000000 Do not translate ID3 text data to UTF-8. ID3 strings will contain the raw text data, with the first byte containing the ID3 encoding code. */ - ,MPG123_IGNORE_STREAMLENGTH = 0x1000 /**< 1000000000000 Ignore any stream length information contained in the stream, which can be contained in a 'TLEN' frame of an ID3v2 tag or a Xing tag */ - ,MPG123_SKIP_ID3V2 = 0x2000 /**< 10 0000 0000 0000 Do not parse ID3v2 tags, just skip them. */ - ,MPG123_IGNORE_INFOFRAME = 0x4000 /**< 100 0000 0000 0000 Do not parse the LAME/Xing info frame, treat it as normal MPEG data. */ - ,MPG123_AUTO_RESAMPLE = 0x8000 /**< 1000 0000 0000 0000 Allow automatic internal resampling of any kind (default on if supported). Especially when going lowlevel with replacing output buffer, you might want to unset this flag. Setting MPG123_DOWNSAMPLE or MPG123_FORCE_RATE will override this. */ - ,MPG123_PICTURE = 0x10000 /**< 17th bit: Enable storage of pictures from tags (ID3v2 APIC). */ - ,MPG123_NO_PEEK_END = 0x20000 /**< 18th bit: Do not seek to the end of - * the stream in order to probe - * the stream length and search for the id3v1 field. This also means - * the file size is unknown unless set using mpg123_set_filesize() and - * the stream is assumed as non-seekable unless overridden. - */ - ,MPG123_FORCE_SEEKABLE = 0x40000 /**< 19th bit: Force the stream to be seekable. */ - ,MPG123_STORE_RAW_ID3 = 0x80000 /**< store raw ID3 data (even if skipping) */ - ,MPG123_FORCE_ENDIAN = 0x100000 /**< Enforce endianess of output samples. - * This is not reflected in the format codes. If this flag is set along with - * MPG123_BIG_ENDIAN, MPG123_ENC_SIGNED16 means s16be, without - * MPG123_BIG_ENDIAN, it means s16le. Normal operation without - * MPG123_FORCE_ENDIAN produces output in native byte order. - */ - ,MPG123_BIG_ENDIAN = 0x200000 /**< Choose big endian instead of little. */ - ,MPG123_NO_READAHEAD = 0x400000 /**< Disable read-ahead in parser. If - * you know you provide full frames to the feeder API, this enables - * decoder output from the first one on, instead of having to wait for - * the next frame to confirm that the stream is healthy. It also disables - * free format support unless you provide a frame size using - * MPG123_FREEFORMAT_SIZE. - */ - ,MPG123_FLOAT_FALLBACK = 0x800000 /**< Consider floating point output encoding only after - * trying other (possibly downsampled) rates and encodings first. This is to - * support efficient playback where floating point output is only configured for - * an external resampler, bypassing that resampler when the desired rate can - * be produced directly. This is enabled by default to be closer to older versions - * of libmpg123 which did not enable float automatically at all. If disabled, - * float is considered after the 16 bit default and higher-bit integer encodings - * for any rate. */ - ,MPG123_NO_FRANKENSTEIN = 0x1000000 /**< Disable support for Frankenstein streams - * (different MPEG streams stiched together). Do not accept serious change of MPEG - * header inside a single stream. With this flag, the audio output format cannot - * change during decoding unless you open a new stream. This also stops decoding - * after an announced end of stream (Info header contained a number of frames - * and this number has been reached). This makes your MP3 files behave more like - * ordinary media files with defined structure, rather than stream dumps with - * some sugar. */ -}; - -/** choices for MPG123_RVA */ -enum mpg123_param_rva -{ - MPG123_RVA_OFF = 0 /**< RVA disabled (default). */ - ,MPG123_RVA_MIX = 1 /**< Use mix/track/radio gain. */ - ,MPG123_RVA_ALBUM = 2 /**< Use album/audiophile gain */ - ,MPG123_RVA_MAX = MPG123_RVA_ALBUM /**< The maximum RVA code, may increase in future. */ -}; - -#ifdef MPG123_ENUM_API -/** Set a specific parameter on a handle. - * - * Note that this name is mapped to mpg123_param2() instead unless - * MPG123_ENUM_API is defined. - * - * \param mh handle - * \param type parameter choice - * \param value integer value - * \param fvalue floating point value - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_param( mpg123_handle *mh -, enum mpg123_parms type, long value, double fvalue ); -#endif - -/** Set a specific parameter on a handle. No enums. - * - * This is actually called instead of mpg123_param() - * unless MPG123_ENUM_API is defined. - * - * \param mh handle - * \param type parameter choice (from enum #mpg123_parms) - * \param value integer value - * \param fvalue floating point value - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_param2( mpg123_handle *mh -, int type, long value, double fvalue ); - -#ifdef MPG123_ENUM_API -/** Get a specific parameter from a handle. - * - * Note that this name is mapped to mpg123_getparam2() instead unless - * MPG123_ENUM_API is defined. - * - * \param mh handle - * \param type parameter choice - * \param value integer value return address - * \param fvalue floating point value return address - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getparam( mpg123_handle *mh -, enum mpg123_parms type, long *value, double *fvalue ); -#endif - -/** Get a specific parameter from a handle. No enums. - * - * This is actually called instead of mpg123_getparam() unless MPG123_ENUM_API - * is defined. - * - * \param mh handle - * \param type parameter choice (from enum #mpg123_parms) - * \param value integer value return address - * \param fvalue floating point value return address - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getparam2( mpg123_handle *mh -, int type, long *value, double *fvalue ); - -/** Feature set available for query with mpg123_feature. */ -enum mpg123_feature_set -{ - MPG123_FEATURE_ABI_UTF8OPEN = 0 /**< mpg123 expects path names to be given in UTF-8 encoding instead of plain native. */ - ,MPG123_FEATURE_OUTPUT_8BIT /**< 8bit output */ - ,MPG123_FEATURE_OUTPUT_16BIT /**< 16bit output */ - ,MPG123_FEATURE_OUTPUT_32BIT /**< 32bit output */ - ,MPG123_FEATURE_INDEX /**< support for building a frame index for accurate seeking */ - ,MPG123_FEATURE_PARSE_ID3V2 /**< id3v2 parsing */ - ,MPG123_FEATURE_DECODE_LAYER1 /**< mpeg layer-1 decoder enabled */ - ,MPG123_FEATURE_DECODE_LAYER2 /**< mpeg layer-2 decoder enabled */ - ,MPG123_FEATURE_DECODE_LAYER3 /**< mpeg layer-3 decoder enabled */ - ,MPG123_FEATURE_DECODE_ACCURATE /**< accurate decoder rounding */ - ,MPG123_FEATURE_DECODE_DOWNSAMPLE /**< downsample (sample omit) */ - ,MPG123_FEATURE_DECODE_NTOM /**< flexible rate decoding */ - ,MPG123_FEATURE_PARSE_ICY /**< ICY support */ - ,MPG123_FEATURE_TIMEOUT_READ /**< Reader with timeout (network). */ - ,MPG123_FEATURE_EQUALIZER /**< tunable equalizer */ - ,MPG123_FEATURE_MOREINFO /**< more info extraction (for frame analyzer) */ - ,MPG123_FEATURE_OUTPUT_FLOAT32 /**< 32 bit float output */ - ,MPG123_FEATURE_OUTPUT_FLOAT64 /**< 64 bit float output (usually never) */ -}; - -#ifdef MPG123_ENUM_API -/** Query libmpg123 features. - * - * Note that this name is mapped to mpg123_feature2() instead unless - * MPG123_ENUM_API is defined. - * - * \param key feature selection - * \return 1 for success, 0 for unimplemented functions - */ -MPG123_EXPORT int mpg123_feature(const enum mpg123_feature_set key); -#endif - -/** Query libmpg123 features. No enums. - * - * This is actually called instead of mpg123_feature() unless MPG123_ENUM_API - * is defined. - * - * \param key feature selection (from enum #mpg123_feature_set) - * \return 1 for success, 0 for unimplemented functions - */ -MPG123_EXPORT int mpg123_feature2(int key); - -/** @} */ - - -/** \defgroup mpg123_error mpg123 error handling - * - * Functions to get text version of the error numbers and an enumeration - * of the error codes returned by libmpg123. - * - * Most functions operating on a mpg123_handle simply return MPG123_OK (0) - * on success and MPG123_ERR (-1) on failure, setting the internal error - * variable of the handle to the specific error code. If there was not a valid - * (non-NULL) handle provided to a function operating on one, MPG123_BAD_HANDLE - * may be returned if this can not be confused with a valid positive return - * value. - * Meaning: A function expected to return positive integers on success will - * always indicate error or a special condition by returning a negative one. - * - * Decoding/seek functions may also return message codes MPG123_DONE, - * MPG123_NEW_FORMAT and MPG123_NEED_MORE (all negative, see below on how to - * react). Note that calls to those can be nested, so generally watch out - * for these codes after initial handle setup. - * Especially any function that needs information about the current stream - * to work will try to at least parse the beginning if that did not happen - * yet. - * - * On a function that is supposed to return MPG123_OK on success and - * MPG123_ERR on failure, make sure you check for != MPG123_OK, not - * == MPG123_ERR, as the error code could get more specific in future, - * or there is just a special message from a decoding routine as indicated - * above. - * - * @{ - */ - -/** Enumeration of the message and error codes and returned by libmpg123 functions. */ -enum mpg123_errors -{ - MPG123_DONE=-12, /**< Message: Track ended. Stop decoding. */ - MPG123_NEW_FORMAT=-11, /**< Message: Output format will be different on next call. Note that some libmpg123 versions between 1.4.3 and 1.8.0 insist on you calling mpg123_getformat() after getting this message code. Newer verisons behave like advertised: You have the chance to call mpg123_getformat(), but you can also just continue decoding and get your data. */ - MPG123_NEED_MORE=-10, /**< Message: For feed reader: "Feed me more!" (call mpg123_feed() or mpg123_decode() with some new input data). */ - MPG123_ERR=-1, /**< Generic Error */ - MPG123_OK=0, /**< Success */ - MPG123_BAD_OUTFORMAT, /**< Unable to set up output format! */ - MPG123_BAD_CHANNEL, /**< Invalid channel number specified. */ - MPG123_BAD_RATE, /**< Invalid sample rate specified. */ - MPG123_ERR_16TO8TABLE, /**< Unable to allocate memory for 16 to 8 converter table! */ - MPG123_BAD_PARAM, /**< Bad parameter id! */ - MPG123_BAD_BUFFER, /**< Bad buffer given -- invalid pointer or too small size. */ - MPG123_OUT_OF_MEM, /**< Out of memory -- some malloc() failed. */ - MPG123_NOT_INITIALIZED, /**< You didn't initialize the library! */ - MPG123_BAD_DECODER, /**< Invalid decoder choice. */ - MPG123_BAD_HANDLE, /**< Invalid mpg123 handle. */ - MPG123_NO_BUFFERS, /**< Unable to initialize frame buffers (out of memory?). */ - MPG123_BAD_RVA, /**< Invalid RVA mode. */ - MPG123_NO_GAPLESS, /**< This build doesn't support gapless decoding. */ - MPG123_NO_SPACE, /**< Not enough buffer space. */ - MPG123_BAD_TYPES, /**< Incompatible numeric data types. */ - MPG123_BAD_BAND, /**< Bad equalizer band. */ - MPG123_ERR_NULL, /**< Null pointer given where valid storage address needed. */ - MPG123_ERR_READER, /**< Error reading the stream. */ - MPG123_NO_SEEK_FROM_END,/**< Cannot seek from end (end is not known). */ - MPG123_BAD_WHENCE, /**< Invalid 'whence' for seek function.*/ - MPG123_NO_TIMEOUT, /**< Build does not support stream timeouts. */ - MPG123_BAD_FILE, /**< File access error. */ - MPG123_NO_SEEK, /**< Seek not supported by stream. */ - MPG123_NO_READER, /**< No stream opened. */ - MPG123_BAD_PARS, /**< Bad parameter handle. */ - MPG123_BAD_INDEX_PAR, /**< Bad parameters to mpg123_index() and mpg123_set_index() */ - MPG123_OUT_OF_SYNC, /**< Lost track in bytestream and did not try to resync. */ - MPG123_RESYNC_FAIL, /**< Resync failed to find valid MPEG data. */ - MPG123_NO_8BIT, /**< No 8bit encoding possible. */ - MPG123_BAD_ALIGN, /**< Stack aligmnent error */ - MPG123_NULL_BUFFER, /**< NULL input buffer with non-zero size... */ - MPG123_NO_RELSEEK, /**< Relative seek not possible (screwed up file offset) */ - MPG123_NULL_POINTER, /**< You gave a null pointer somewhere where you shouldn't have. */ - MPG123_BAD_KEY, /**< Bad key value given. */ - MPG123_NO_INDEX, /**< No frame index in this build. */ - MPG123_INDEX_FAIL, /**< Something with frame index went wrong. */ - MPG123_BAD_DECODER_SETUP, /**< Something prevents a proper decoder setup */ - MPG123_MISSING_FEATURE /**< This feature has not been built into libmpg123. */ - ,MPG123_BAD_VALUE /**< A bad value has been given, somewhere. */ - ,MPG123_LSEEK_FAILED /**< Low-level seek failed. */ - ,MPG123_BAD_CUSTOM_IO /**< Custom I/O not prepared. */ - ,MPG123_LFS_OVERFLOW /**< Offset value overflow during translation of large file API calls -- your client program cannot handle that large file. */ - ,MPG123_INT_OVERFLOW /**< Some integer overflow. */ - ,MPG123_BAD_FLOAT /**< Floating-point computations work not as expected. */ -}; - -/** Look up error strings given integer code. - * \param errcode integer error code - * \return string describing what that error error code means - */ -MPG123_EXPORT const char* mpg123_plain_strerror(int errcode); - -/** Give string describing what error has occured in the context of handle mh. - * When a function operating on an mpg123 handle returns MPG123_ERR, you should check for the actual reason via - * char *errmsg = mpg123_strerror(mh) - * This function will catch mh == NULL and return the message for MPG123_BAD_HANDLE. - * \param mh handle - * \return error message - */ -MPG123_EXPORT const char* mpg123_strerror(mpg123_handle *mh); - -/** Return the plain errcode intead of a string. - * \param mh handle - * \return error code recorded in handle or MPG123_BAD_HANDLE - */ -MPG123_EXPORT int mpg123_errcode(mpg123_handle *mh); - -/** @} */ - - -/** \defgroup mpg123_decoder mpg123 decoder selection - * - * Functions to list and select the available decoders. - * Perhaps the most prominent feature of mpg123: You have several (optimized) decoders to choose from (on x86 and PPC (MacOS) systems, that is). - * - * @{ - */ - -/** Get available decoder list. - * \return NULL-terminated array of generally available decoder names (plain 8bit ASCII) - */ -MPG123_EXPORT const char **mpg123_decoders(void); - -/** Get supported decoder list. - * - * This possibly writes to static storage in the library, so avoid - * calling concurrently, please. - * - * \return NULL-terminated array of the decoders supported by the CPU (plain 8bit ASCII) - */ -MPG123_EXPORT const char **mpg123_supported_decoders(void); - -/** Set the active decoder. - * \param mh handle - * \param decoder_name name of decoder - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_decoder(mpg123_handle *mh, const char* decoder_name); - -/** Get the currently active decoder name. - * The active decoder engine can vary depening on output constraints, - * mostly non-resampling, integer output is accelerated via 3DNow & Co. but for - * other modes a fallback engine kicks in. - * Note that this can return a decoder that is only active in the hidden and not - * available as decoder choice from the outside. - * \param mh handle - * \return The decoder name or NULL on error. - */ -MPG123_EXPORT const char* mpg123_current_decoder(mpg123_handle *mh); - -/** @} */ - - -/** \defgroup mpg123_output mpg123 output audio format - * - * Functions to get and select the format of the decoded audio. - * - * Before you dive in, please be warned that you might get confused by this. - * This seems to happen a lot, therefore I am trying to explain in advance. - * If you do feel confused and just want to decode your normal MPEG audio files that - * don't alter properties in the middle, just use mpg123_open_fixed() with a fixed encoding - * and channel count and forget about a matrix of audio formats. If you want to get funky, - * read ahead ... - * - * The mpg123 library decides what output format to use when encountering the first frame in a stream, or actually any frame that is still valid but differs from the frames before in the prompted output format. At such a deciding point, an internal table of allowed encodings, sampling rates and channel setups is consulted. According to this table, an output format is chosen and the decoding engine set up accordingly (including optimized routines for different output formats). This might seem unusual but it just follows from the non-existence of "MPEG audio files" with defined overall properties. There are streams, streams are concatenations of (semi) independent frames. We store streams on disk and call them "MPEG audio files", but that does not change their nature as the decoder is concerned (the LAME/Xing header for gapless decoding makes things interesting again). - * - * To get to the point: What you do with mpg123_format() and friends is to fill the internal table of allowed formats before it is used. That includes removing support for some formats or adding your forced sample rate (see MPG123_FORCE_RATE) that will be used with the crude internal resampler. Also keep in mind that the sample encoding is just a question of choice -- the MPEG frames do only indicate their native sampling rate and channel count. If you want to decode to integer or float samples, 8 or 16 bit ... that is your decision. In a "clean" world, libmpg123 would always decode to 32 bit float and let you handle any sample conversion. But there are optimized routines that work faster by directly decoding to the desired encoding / accuracy. We prefer efficiency over conceptual tidyness. - * - * People often start out thinking that mpg123_format() should change the actual decoding format on the fly. That is wrong. It only has effect on the next natural change of output format, when libmpg123 will consult its format table again. To make life easier, you might want to call mpg123_format_none() before any thing else and then just allow one desired encoding and a limited set of sample rates / channel choices that you actually intend to deal with. You can force libmpg123 to decode everything to 44100 KHz, stereo, 16 bit integer ... it will duplicate mono channels and even do resampling if needed (unless that feature is disabled in the build, same with some encodings). But I have to stress that the resampling of libmpg123 is very crude and doesn't even contain any kind of "proper" interpolation. - * - * In any case, watch out for MPG123_NEW_FORMAT as return message from decoding routines and call mpg123_getformat() to get the currently active output format. - * - * @{ - */ - -/** They can be combined into one number (3) to indicate mono and stereo... */ -enum mpg123_channelcount -{ - MPG123_MONO = 1 /**< mono */ - ,MPG123_STEREO = 2 /**< stereo */ -}; - -/** An array of supported standard sample rates - * These are possible native sample rates of MPEG audio files. - * You can still force mpg123 to resample to a different one, but by - * default you will only get audio in one of these samplings. - * This list is in ascending order. - * \param list Store a pointer to the sample rates array there. - * \param number Store the number of sample rates there. */ -MPG123_EXPORT void mpg123_rates(const long **list, size_t *number); - -/** An array of supported audio encodings. - * An audio encoding is one of the fully qualified members of mpg123_enc_enum (MPG123_ENC_SIGNED_16, not MPG123_SIGNED). - * \param list Store a pointer to the encodings array there. - * \param number Store the number of encodings there. */ -MPG123_EXPORT void mpg123_encodings(const int **list, size_t *number); - -/** Return the size (in bytes) of one mono sample of the named encoding. - * \param encoding The encoding value to analyze. - * \return positive size of encoding in bytes, 0 on invalid encoding. */ -MPG123_EXPORT int mpg123_encsize(int encoding); - -/** Configure a mpg123 handle to accept no output format at all, - * use before specifying supported formats with mpg123_format - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_format_none(mpg123_handle *mh); - -/** Configure mpg123 handle to accept all formats - * (also any custom rate you may set) -- this is default. - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_format_all(mpg123_handle *mh); - -/** Set the audio format support of a mpg123_handle in detail: - * \param mh handle - * \param rate The sample rate value (in Hertz). - * \param channels A combination of MPG123_STEREO and MPG123_MONO. - * \param encodings A combination of accepted encodings for rate and channels, p.ex MPG123_ENC_SIGNED16 | MPG123_ENC_ULAW_8 (or 0 for no support). Please note that some encodings may not be supported in the library build and thus will be ignored here. - * \return MPG123_OK on success, MPG123_ERR if there was an error. */ -MPG123_EXPORT int mpg123_format( mpg123_handle *mh -, long rate, int channels, int encodings ); - -/** Set the audio format support of a mpg123_handle in detail: - * \param mh handle - * \param rate The sample rate value (in Hertz). Special value 0 means - * all rates (the reason for this variant of mpg123_format()). - * \param channels A combination of MPG123_STEREO and MPG123_MONO. - * \param encodings A combination of accepted encodings for rate and channels, - * p.ex MPG123_ENC_SIGNED16 | MPG123_ENC_ULAW_8 (or 0 for no support). - * Please note that some encodings may not be supported in the library build - * and thus will be ignored here. - * \return MPG123_OK on success, MPG123_ERR if there was an error. */ -MPG123_EXPORT int mpg123_format2( mpg123_handle *mh -, long rate, int channels, int encodings ); - -/** Check to see if a specific format at a specific rate is supported - * by mpg123_handle. - * \param mh handle - * \param rate sampling rate - * \param encoding encoding - * \return 0 for no support (that includes invalid parameters), MPG123_STEREO, - * MPG123_MONO or MPG123_STEREO|MPG123_MONO. */ -MPG123_EXPORT int mpg123_format_support( mpg123_handle *mh -, long rate, int encoding ); - -/** Get the current output format written to the addresses given. - * If the stream is freshly loaded, this will try to parse enough - * of it to give you the format to come. This clears the flag that - * would otherwise make the first decoding call return - * MPG123_NEW_FORMAT. - * \param mh handle - * \param rate sampling rate return address - * \param channels channel count return address - * \param encoding encoding return address - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getformat( mpg123_handle *mh -, long *rate, int *channels, int *encoding ); - -/** Get the current output format written to the addresses given. - * This differs from plain mpg123_getformat() in that you can choose - * _not_ to clear the flag that would trigger the next decoding call - * to return MPG123_NEW_FORMAT in case of a new format arriving. - * \param mh handle - * \param rate sampling rate return address - * \param channels channel count return address - * \param encoding encoding return address - * \param clear_flag if true, clear internal format flag - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getformat2( mpg123_handle *mh -, long *rate, int *channels, int *encoding, int clear_flag ); - -/** @} */ - - -/** \defgroup mpg123_input mpg123 file input and decoding - * - * Functions for input bitstream and decoding operations. - * Decoding/seek functions may also return message codes MPG123_DONE, MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!). - * @{ - */ - -/** Open a simple MPEG file with fixed properties. - * - * This function shall simplify the common use case of a plain MPEG - * file on disk that you want to decode, with one fixed sample - * rate and channel count, and usually a length defined by a Lame/Info/Xing - * tag. It will: - * - * - set the MPG123_NO_FRANKENSTEIN flag - * - set up format support according to given parameters, - * - open the file, - * - query audio format, - * - fix the audio format support table to ensure the format stays the same, - * - call mpg123_scan() if there is no header frame to tell the track length. - * - * From that on, you can call mpg123_getformat() for querying the sample - * rate (and channel count in case you allowed both) and mpg123_length() - * to get a pretty safe number for the duration. - * Only the sample rate is left open as that indeed is a fixed property of - * MPEG files. You could set MPG123_FORCE_RATE beforehand, but that may trigger - * low-quality resampling in the decoder, only do so if in dire need. - * The library will convert mono files to stereo for you, and vice versa. - * If any constraint cannot be satisified (most likely because of a non-default - * build of libmpg123), you get MPG123_ERR returned and can query the detailed - * cause from the handle. Only on MPG123_OK there will an open file that you - * then close using mpg123_close(), or implicitly on mpg123_delete() or the next - * call to open another file. - * - * So, for your usual CD rip collection, you could use - * - * mpg123_open_fixed(mh, path, MPG123_STEREO, MPG123_ENC_SIGNED_16) - * - * and be happy calling mpg123_getformat() to verify 44100 Hz rate, then just - * playing away with mpg123_read(). The occasional mono file, or MP2 file, - * will also be decoded without you really noticing. Just the speed could be - * wrong if you do not care about sample rate at all. - * \param mh handle - * \param path filesystem path (see mpg123_open()) - * \param channels allowed channel count, either 1 (MPG123_MONO) or - * 2 (MPG123_STEREO), or bitwise or of them, but then you're halfway back to - * calling mpg123_format() again;-) - * \param encoding a definite encoding from enum mpg123_enc_enum - * or a bitmask like for mpg123_format(), defeating the purpose somewhat - */ -MPG123_EXPORT int mpg123_open_fixed(mpg123_handle *mh, const char *path -, int channels, int encoding); - -/** Open and prepare to decode the specified file by filesystem path. - * This does not open HTTP urls; libmpg123 contains no networking code. - * If you want to decode internet streams, use mpg123_open_fd() or mpg123_open_feed(). - * - * The path parameter usually is just a string that is handed to the underlying - * OS routine for opening, treated as a blob of binary data. On platforms - * where encoding needs to be involved, something like _wopen() is called - * underneath and the path argument to libmpg123 is assumed to be encoded in UTF-8. - * So, if you have to ask yourself which encoding is needed, the answer is - * UTF-8, which also fits any sane modern install of Unix-like systems. - * - * \param mh handle - * \param path filesystem - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_open(mpg123_handle *mh, const char *path); - -/** Use an already opened file descriptor as the bitstream input - * mpg123_close() will _not_ close the file descriptor. - * \param mh handle - * \param fd file descriptor - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_open_fd(mpg123_handle *mh, int fd); - -/** Use an opaque handle as bitstream input. This works only with the - * replaced I/O from mpg123_replace_reader_handle()! - * mpg123_close() will call the cleanup callback for your handle (if you gave one). - * \param mh handle - * \param iohandle your handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_open_handle(mpg123_handle *mh, void *iohandle); - -/** Open a new bitstream and prepare for direct feeding - * This works together with mpg123_decode(); you are responsible for reading and feeding the input bitstream. - * Also, you are expected to handle ICY metadata extraction yourself. This - * input method does not handle MPG123_ICY_INTERVAL. It does parse ID3 frames, though. - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_open_feed(mpg123_handle *mh); - -/** Closes the source, if libmpg123 opened it. - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_close(mpg123_handle *mh); - -/** Read from stream and decode up to outmemsize bytes. - * - * Note: The type of outmemory changed to a void pointer in mpg123 1.26.0 - * (API version 45). - * - * \param mh handle - * \param outmemory address of output buffer to write to - * \param outmemsize maximum number of bytes to write - * \param done address to store the number of actually decoded bytes to - * \return MPG123_OK or error/message code - */ -MPG123_EXPORT int mpg123_read(mpg123_handle *mh -, void *outmemory, size_t outmemsize, size_t *done ); - -/** Feed data for a stream that has been opened with mpg123_open_feed(). - * It's give and take: You provide the bytestream, mpg123 gives you the decoded samples. - * \param mh handle - * \param in input buffer - * \param size number of input bytes - * \return MPG123_OK or error/message code. - */ -MPG123_EXPORT int mpg123_feed( mpg123_handle *mh -, const unsigned char *in, size_t size ); - -/** Decode MPEG Audio from inmemory to outmemory. - * This is very close to a drop-in replacement for old mpglib. - * When you give zero-sized output buffer the input will be parsed until - * decoded data is available. This enables you to get MPG123_NEW_FORMAT (and query it) - * without taking decoded data. - * Think of this function being the union of mpg123_read() and mpg123_feed() (which it actually is, sort of;-). - * You can actually always decide if you want those specialized functions in separate steps or one call this one here. - * - * Note: The type of outmemory changed to a void pointer in mpg123 1.26.0 - * (API version 45). - * - * \param mh handle - * \param inmemory input buffer - * \param inmemsize number of input bytes - * \param outmemory output buffer - * \param outmemsize maximum number of output bytes - * \param done address to store the number of actually decoded bytes to - * \return error/message code (watch out especially for MPG123_NEED_MORE) - */ -MPG123_EXPORT int mpg123_decode( mpg123_handle *mh -, const unsigned char *inmemory, size_t inmemsize -, void *outmemory, size_t outmemsize, size_t *done ); - -/** Decode next MPEG frame to internal buffer - * or read a frame and return after setting a new format. - * \param mh handle - * \param num current frame offset gets stored there - * \param audio This pointer is set to the internal buffer to read the decoded audio from. - * \param bytes number of output bytes ready in the buffer - * \return MPG123_OK or error/message code - */ -MPG123_EXPORT int mpg123_decode_frame( mpg123_handle *mh -, off_t *num, unsigned char **audio, size_t *bytes ); - -/** Decode current MPEG frame to internal buffer. - * Warning: This is experimental API that might change in future releases! - * Please watch mpg123 development closely when using it. - * \param mh handle - * \param num last frame offset gets stored there - * \param audio this pointer is set to the internal buffer to read the decoded audio from. - * \param bytes number of output bytes ready in the buffer - * \return MPG123_OK or error/message code - */ -MPG123_EXPORT int mpg123_framebyframe_decode( mpg123_handle *mh -, off_t *num, unsigned char **audio, size_t *bytes ); - -/** Find, read and parse the next mp3 frame - * Warning: This is experimental API that might change in future releases! - * Please watch mpg123 development closely when using it. - * \param mh handle - * \return MPG123_OK or error/message code - */ -MPG123_EXPORT int mpg123_framebyframe_next(mpg123_handle *mh); - -/** Get access to the raw input data for the last parsed frame. - * This gives you a direct look (and write access) to the frame body data. - * Together with the raw header, you can reconstruct the whole raw MPEG stream without junk and meta data, or play games by actually modifying the frame body data before decoding this frame (mpg123_framebyframe_decode()). - * A more sane use would be to use this for CRC checking (see mpg123_info() and MPG123_CRC), the first two bytes of the body make up the CRC16 checksum, if present. - * You can provide NULL for a parameter pointer when you are not interested in the value. - * - * \param mh handle - * \param header the 4-byte MPEG header - * \param bodydata pointer to the frame body stored in the handle (without the header) - * \param bodybytes size of frame body in bytes (without the header) - * \return MPG123_OK if there was a yet un-decoded frame to get the - * data from, MPG123_BAD_HANDLE or MPG123_ERR otherwise (without further - * explanation, the error state of the mpg123_handle is not modified by - * this function). - */ -MPG123_EXPORT int mpg123_framedata( mpg123_handle *mh -, unsigned long *header, unsigned char **bodydata, size_t *bodybytes ); - -/** Get the input position (byte offset in stream) of the last parsed frame. - * This can be used for external seek index building, for example. - * It just returns the internally stored offset, regardless of validity -- - * you ensure that a valid frame has been parsed before! - * \param mh handle - * \return byte offset in stream - */ -MPG123_EXPORT off_t mpg123_framepos(mpg123_handle *mh); - -/** @} */ - - -/** \defgroup mpg123_seek mpg123 position and seeking - * - * Functions querying and manipulating position in the decoded audio bitstream. - * The position is measured in decoded audio samples or MPEG frame offset for - * the specific functions. The term sample refers to a group of samples for - * multiple channels, normally dubbed PCM frames. The latter term is - * avoided here because frame means something different in the context of MPEG - * audio. Since all samples of a PCM frame occur at the same time, there is only - * very limited ambiguity when talking about playback offset, as counting each - * channel sample individually does not make sense. - * - * If gapless code is in effect, the positions are adjusted to compensate the - * skipped padding/delay - meaning, you should not care about that at all and - * just use the position defined for the samples you get out of the decoder;-) - * The general usage is modelled after stdlib's ftell() and fseek(). - * Especially, the whence parameter for the seek functions has the same meaning - * as the one for fseek() and needs the same constants from stdlib.h: - * - * - SEEK_SET: set position to (or near to) specified offset - * - SEEK_CUR: change position by offset from now - * - SEEK_END: set position to offset from end - * - * Note that sample-accurate seek only works when gapless support has been - * enabled at compile time; seek is frame-accurate otherwise. - * Also, really sample-accurate seeking (meaning that you get the identical - * sample value after seeking compared to plain decoding up to the position) - * is only guaranteed when you do not mess with the position code by using - * #MPG123_UPSPEED, #MPG123_DOWNSPEED or #MPG123_START_FRAME. The first two mainly - * should cause trouble with NtoM resampling, but in any case with these options - * in effect, you have to keep in mind that the sample offset is not the same - * as counting the samples you get from decoding since mpg123 counts the skipped - * samples, too (or the samples played twice only once)! - * - * Short: When you care about the sample position, don't mess with those - * parameters;-) - * - * Streams may be openend in ways that do not support seeking. Also, consider - * the effect of #MPG123_FUZZY. - * - * @{ - */ - -/** Returns the current position in samples. - * On the next successful read, you'd get audio data with that offset. - * \param mh handle - * \return sample (PCM frame) offset or MPG123_ERR (null handle) - */ -MPG123_EXPORT off_t mpg123_tell(mpg123_handle *mh); - -/** Returns the frame number that the next read will give you data from. - * \param mh handle - * \return frame offset or MPG123_ERR (null handle) - */ -MPG123_EXPORT off_t mpg123_tellframe(mpg123_handle *mh); - -/** Returns the current byte offset in the input stream. - * \param mh handle - * \return byte offset or MPG123_ERR (null handle) - */ -MPG123_EXPORT off_t mpg123_tell_stream(mpg123_handle *mh); - -/** Seek to a desired sample offset. - * Usage is modelled afer the standard lseek(). - * \param mh handle - * \param sampleoff offset in samples (PCM frames) - * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END - * \return The resulting offset >= 0 or error/message code - */ -MPG123_EXPORT off_t mpg123_seek( mpg123_handle *mh -, off_t sampleoff, int whence ); - -/** Seek to a desired sample offset in data feeding mode. - * This just prepares things to be right only if you ensure that the next chunk - * of input data will be from input_offset byte position. - * \param mh handle - * \param sampleoff offset in samples (PCM frames) - * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END - * \param input_offset The position it expects to be at the - * next time data is fed to mpg123_decode(). - * \return The resulting offset >= 0 or error/message code - */ -MPG123_EXPORT off_t mpg123_feedseek( mpg123_handle *mh -, off_t sampleoff, int whence, off_t *input_offset ); - -/** Seek to a desired MPEG frame offset. - * Usage is modelled afer the standard lseek(). - * \param mh handle - * \param frameoff offset in MPEG frames - * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END - * \return The resulting offset >= 0 or error/message code */ -MPG123_EXPORT off_t mpg123_seek_frame( mpg123_handle *mh -, off_t frameoff, int whence ); - -/** Return a MPEG frame offset corresponding to an offset in seconds. - * This assumes that the samples per frame do not change in the file/stream, which is a good assumption for any sane file/stream only. - * \return frame offset >= 0 or error/message code */ -MPG123_EXPORT off_t mpg123_timeframe(mpg123_handle *mh, double sec); - -/** Give access to the frame index table that is managed for seeking. - * You are asked not to modify the values... Use mpg123_set_index to set the - * seek index - * \param mh handle - * \param offsets pointer to the index array - * \param step one index byte offset advances this many MPEG frames - * \param fill number of recorded index offsets; size of the array - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_index( mpg123_handle *mh -, off_t **offsets, off_t *step, size_t *fill ); - -/** Set the frame index table - * Setting offsets to NULL and fill > 0 will allocate fill entries. Setting offsets - * to NULL and fill to 0 will clear the index and free the allocated memory used by the index. - * \param mh handle - * \param offsets pointer to the index array - * \param step one index byte offset advances this many MPEG frames - * \param fill number of recorded index offsets; size of the array - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_set_index( mpg123_handle *mh -, off_t *offsets, off_t step, size_t fill ); - -/** An old crutch to keep old mpg123 binaries happy. - * WARNING: This function is there only to avoid runtime linking errors with - * standalone mpg123 before version 1.23.0 (if you strangely update the - * library but not the end-user program) and actually is broken - * for various cases (p.ex. 24 bit output). Do never use. It might eventually - * be purged from the library. - */ -MPG123_EXPORT int mpg123_position( mpg123_handle *mh, off_t frame_offset, off_t buffered_bytes, off_t *current_frame, off_t *frames_left, double *current_seconds, double *seconds_left); - -/** @} */ - - -/** \defgroup mpg123_voleq mpg123 volume and equalizer - * - * @{ - */ - -/** another channel enumeration, for left/right choice */ -enum mpg123_channels -{ - MPG123_LEFT=0x1 /**< The Left Channel. */ - ,MPG123_RIGHT=0x2 /**< The Right Channel. */ - ,MPG123_LR=0x3 /**< Both left and right channel; same as MPG123_LEFT|MPG123_RIGHT */ -}; - -#ifdef MPG123_ENUM_API -/** Set the 32 Band Audio Equalizer settings. - * - * Note that this name is mapped to mpg123_eq2() instead unless - * MPG123_ENUM_API is defined. - * - * \param mh handle - * \param channel Can be #MPG123_LEFT, #MPG123_RIGHT or - * #MPG123_LEFT|#MPG123_RIGHT for both. - * \param band The equaliser band to change (from 0 to 31) - * \param val The (linear) adjustment factor. - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_eq( mpg123_handle *mh -, enum mpg123_channels channel, int band, double val ); -#endif - -/** Set the 32 Band Audio Equalizer settings. No enums. - * - * This is actually called instead of mpg123_eq() unless MPG123_ENUM_API - * is defined. - * - * \param mh handle - * \param channel Can be #MPG123_LEFT, #MPG123_RIGHT or - * #MPG123_LEFT|#MPG123_RIGHT for both. - * \param band The equaliser band to change (from 0 to 31) - * \param val The (linear) adjustment factor. - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_eq2( mpg123_handle *mh -, int channel, int band, double val ); - -#ifdef MPG123_ENUM_API -/** Get the 32 Band Audio Equalizer settings. - * - * Note that this name is mapped to mpg123_geteq2() instead unless - * MPG123_ENUM_API is defined. - * - * \param mh handle - * \param channel Can be #MPG123_LEFT, #MPG123_RIGHT or - * #MPG123_LEFT|MPG123_RIGHT for (arithmetic mean of) both. - * \param band The equaliser band to change (from 0 to 31) - * \return The (linear) adjustment factor (zero for pad parameters) */ -MPG123_EXPORT double mpg123_geteq(mpg123_handle *mh - , enum mpg123_channels channel, int band); -#endif - -/** Get the 32 Band Audio Equalizer settings. - * - * This is actually called instead of mpg123_geteq() unless MPG123_ENUM_API - * is defined. - * - * \param mh handle - * \param channel Can be #MPG123_LEFT, #MPG123_RIGHT or - * #MPG123_LEFT|MPG123_RIGHT for (arithmetic mean of) both. - * \param band The equaliser band to change (from 0 to 31) - * \return The (linear) adjustment factor (zero for pad parameters) */ -MPG123_EXPORT double mpg123_geteq2(mpg123_handle *mh, int channel, int band); - -/** Reset the 32 Band Audio Equalizer settings to flat - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_reset_eq(mpg123_handle *mh); - -/** Set the absolute output volume including the RVA setting, - * vol<0 just applies (a possibly changed) RVA setting. - * \param mh handle - * \param vol volume value (linear factor) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_volume(mpg123_handle *mh, double vol); - -/** Adjust output volume including the RVA setting by chosen amount - * \param mh handle - * \param change volume value (linear factor increment) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_volume_change(mpg123_handle *mh, double change); - -/** Return current volume setting, the actual value due to RVA, and the RVA - * adjustment itself. It's all as double float value to abstract the sample - * format. The volume values are linear factors / amplitudes (not percent) - * and the RVA value is in decibels. - * \param mh handle - * \param base return address for base volume (linear factor) - * \param really return address for actual volume (linear factor) - * \param rva_db return address for RVA value (decibels) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getvolume(mpg123_handle *mh, double *base, double *really, double *rva_db); - -/* TODO: Set some preamp in addition / to replace internal RVA handling? */ - -/** @} */ - - -/** \defgroup mpg123_status mpg123 status and information - * - * @{ - */ - -/** Enumeration of the mode types of Variable Bitrate */ -enum mpg123_vbr { - MPG123_CBR=0, /**< Constant Bitrate Mode (default) */ - MPG123_VBR, /**< Variable Bitrate Mode */ - MPG123_ABR /**< Average Bitrate Mode */ -}; - -/** Enumeration of the MPEG Versions */ -enum mpg123_version { - MPG123_1_0=0, /**< MPEG Version 1.0 */ - MPG123_2_0, /**< MPEG Version 2.0 */ - MPG123_2_5 /**< MPEG Version 2.5 */ -}; - - -/** Enumeration of the MPEG Audio mode. - * Only the mono mode has 1 channel, the others have 2 channels. */ -enum mpg123_mode { - MPG123_M_STEREO=0, /**< Standard Stereo. */ - MPG123_M_JOINT, /**< Joint Stereo. */ - MPG123_M_DUAL, /**< Dual Channel. */ - MPG123_M_MONO /**< Single Channel. */ -}; - - -/** Enumeration of the MPEG Audio flag bits */ -enum mpg123_flags { - MPG123_CRC=0x1, /**< The bitstream is error protected using 16-bit CRC. */ - MPG123_COPYRIGHT=0x2, /**< The bitstream is copyrighted. */ - MPG123_PRIVATE=0x4, /**< The private bit has been set. */ - MPG123_ORIGINAL=0x8 /**< The bitstream is an original, not a copy. */ -}; - -#ifdef MPG123_ENUM_API -/** Data structure for storing information about a frame of MPEG Audio */ -struct mpg123_frameinfo -{ - enum mpg123_version version; /**< The MPEG version (1.0/2.0/2.5). */ - int layer; /**< The MPEG Audio Layer (MP1/MP2/MP3). */ - long rate; /**< The sampling rate in Hz. */ - enum mpg123_mode mode; /**< The audio mode (Mono, Stereo, Joint-stero, Dual Channel). */ - int mode_ext; /**< The mode extension bit flag. */ - int framesize; /**< The size of the frame (in bytes, including header). */ - enum mpg123_flags flags; /**< MPEG Audio flag bits. Just now I realize that it should be declared as int, not enum. It's a bitwise combination of the enum values. */ - int emphasis; /**< The emphasis type. */ - int bitrate; /**< Bitrate of the frame (kbps). */ - int abr_rate; /**< The target average bitrate. */ - enum mpg123_vbr vbr; /**< The VBR mode. */ -}; -#endif - -/** Data structure for storing information about a frame of MPEG Audio without enums */ -struct mpg123_frameinfo2 -{ - int version; /**< The MPEG version (1.0/2.0/2.5), enum mpg123_version. */ - int layer; /**< The MPEG Audio Layer (MP1/MP2/MP3). */ - long rate; /**< The sampling rate in Hz. */ - int mode; /**< The audio mode (enum mpg123_mode, Mono, Stereo, Joint-stero, Dual Channel). */ - int mode_ext; /**< The mode extension bit flag. */ - int framesize; /**< The size of the frame (in bytes, including header). */ - int flags; /**< MPEG Audio flag bits. Bitwise combination of enum mpg123_flags values. */ - int emphasis; /**< The emphasis type. */ - int bitrate; /**< Bitrate of the frame (kbps). */ - int abr_rate; /**< The target average bitrate. */ - int vbr; /**< The VBR mode, enum mpg123_vbr. */ -}; - -/** Data structure for even more detailed information out of the decoder, - * for MPEG layer III only. - * This was added to support the frame analyzer by the Lame project and - * just follows what was used there before. You know what the fields mean - * if you want use this structure. */ -struct mpg123_moreinfo -{ - double xr[2][2][576]; /**< internal data */ - double sfb[2][2][22]; /**< [2][2][SBMAX_l] */ - double sfb_s[2][2][3*13]; /**< [2][2][3*SBMAX_s] */ - int qss[2][2]; /**< internal data */ - int big_values[2][2]; /**< internal data */ - int sub_gain[2][2][3]; /**< internal data */ - int scalefac_scale[2][2]; /**< internal data */ - int preflag[2][2]; /**< internal data */ - int blocktype[2][2]; /**< internal data */ - int mixed[2][2]; /**< internal data */ - int mainbits[2][2]; /**< internal data */ - int sfbits[2][2]; /**< internal data */ - int scfsi[2]; /**< internal data */ - int maindata; /**< internal data */ - int padding; /**< internal data */ -}; - -#ifdef MPG123_ENUM_API -/** Get frame information about the MPEG audio bitstream and store - * it in a mpg123_frameinfo structure. - * - * Note that this name is mapped to mpg123_info2() instead unless - * MPG123_ENUM_API is defined. - * - * \param mh handle - * \param mi address of existing frameinfo structure to write to - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_info(mpg123_handle *mh, struct mpg123_frameinfo *mi); -#endif - -/** Get frame information about the MPEG audio bitstream and store - * it in a mpg123_frameinfo2 structure. - * - * This is actually called instead of mpg123_info() - * unless MPG123_ENUM_API is defined. - * - * \param mh handle - * \param mi address of existing frameinfo structure to write to - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_info2(mpg123_handle *mh, struct mpg123_frameinfo2 *mi); - -/** Trigger collection of additional decoder information while decoding. - * \param mh handle - * \param mi pointer to data storage (NULL to disable collection) - * \return MPG123_OK if the collection was enabled/disabled as desired, MPG123_ERR - * otherwise (e.g. if the feature is disabled) - */ -MPG123_EXPORT int mpg123_set_moreinfo( mpg123_handle *mh -, struct mpg123_moreinfo *mi ); - -/** Get the safe output buffer size for all cases - * (when you want to replace the internal buffer) - * \return safe buffer size - */ -MPG123_EXPORT size_t mpg123_safe_buffer(void); - -/** Make a full parsing scan of each frame in the file. ID3 tags are found. An - * accurate length value is stored. Seek index will be filled. A seek back to - * current position is performed. At all, this function refuses work when - * stream is not seekable. - * \param mh handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_scan(mpg123_handle *mh); - -/** Return, if possible, the full (expected) length of current track in - * MPEG frames. - * \param mh handle - * \return length >= 0 or MPG123_ERR if there is no length guess possible. - */ -MPG123_EXPORT off_t mpg123_framelength(mpg123_handle *mh); - -/** Return, if possible, the full (expected) length of current - * track in samples (PCM frames). - * - * This relies either on an Info frame at the beginning or a previous - * call to mpg123_scan() to get the real number of MPEG frames in a - * file. It will guess based on file size if neither Info frame nor - * scan data are present. In any case, there is no guarantee that the - * decoder will not give you more data, for example in case the open - * file gets appended to during decoding. - * \param mh handle - * \return length >= 0 or MPG123_ERR if there is no length guess possible. - */ -MPG123_EXPORT off_t mpg123_length(mpg123_handle *mh); - -/** Override the value for file size in bytes. - * Useful for getting sensible track length values in feed mode or for HTTP streams. - * \param mh handle - * \param size file size in bytes - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_set_filesize(mpg123_handle *mh, off_t size); - -/** Get MPEG frame duration in seconds. - * \param mh handle - * \return frame duration in seconds, <0 on error - */ -MPG123_EXPORT double mpg123_tpf(mpg123_handle *mh); - -/** Get MPEG frame duration in samples. - * \param mh handle - * \return samples per frame for the most recently parsed frame; <0 on errors - */ -MPG123_EXPORT int mpg123_spf(mpg123_handle *mh); - -/** Get and reset the clip count. - * \param mh handle - * \return count of clipped samples - */ -MPG123_EXPORT long mpg123_clip(mpg123_handle *mh); - - -/** The key values for state information from mpg123_getstate(). */ -enum mpg123_state -{ - MPG123_ACCURATE = 1 /**< Query if positons are currently accurate (integer value, 0 if false, 1 if true). */ - ,MPG123_BUFFERFILL /**< Get fill of internal (feed) input buffer as integer byte count returned as long and as double. An error is returned on integer overflow while converting to (signed) long, but the returned floating point value shold still be fine. */ - ,MPG123_FRANKENSTEIN /**< Stream consists of carelessly stitched together files. Seeking may yield unexpected results (also with MPG123_ACCURATE, it may be confused). */ - ,MPG123_FRESH_DECODER /**< Decoder structure has been updated, possibly indicating changed stream (integer value, 0 if false, 1 if true). Flag is cleared after retrieval. */ - ,MPG123_ENC_DELAY /** Encoder delay read from Info tag (layer III, -1 if unknown). */ - ,MPG123_ENC_PADDING /** Encoder padding read from Info tag (layer III, -1 if unknown). */ - ,MPG123_DEC_DELAY /** Decoder delay (for layer III only, -1 otherwise). */ -}; - -#ifdef MPG123_ENUM_API -/** Get various current decoder/stream state information. - * - * Note that this name is mapped to mpg123_getstate2() instead unless - * MPG123_ENUM_API is defined. - * - * \param mh handle - * \param key the key to identify the information to give. - * \param val the address to return (long) integer values to - * \param fval the address to return floating point values to - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getstate( mpg123_handle *mh -, enum mpg123_state key, long *val, double *fval ); -#endif - -/** Get various current decoder/stream state information. No enums. - * - * This is actually called instead of mpg123_getstate() - * unless MPG123_ENUM_API is defined. - * - * \param mh handle - * \param key the key to identify the information to give (enum mpg123_state) - * \param val the address to return (long) integer values to - * \param fval the address to return floating point values to - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getstate2( mpg123_handle *mh -, int key, long *val, double *fval ); - -/** @} */ - - -/** \defgroup mpg123_metadata mpg123 metadata handling - * - * Functions to retrieve the metadata from MPEG Audio files and streams. - * Also includes string handling functions. - * - * @{ - */ - -/** Data structure for storing strings in a safer way than a standard C-String. - * Can also hold a number of null-terminated strings. */ -typedef struct -{ - char* p; /**< pointer to the string data */ - size_t size; /**< raw number of bytes allocated */ - size_t fill; /**< number of used bytes (including closing zero byte) */ -} mpg123_string; - -/** Allocate and intialize a new string. - * \param val optional initial string value (can be NULL) - */ -MPG123_EXPORT mpg123_string* mpg123_new_string(const char* val); - -/** Free memory of contents and the string structure itself. - * \param sb string handle - */ -MPG123_EXPORT void mpg123_delete_string(mpg123_string* sb); - -/** Initialize an existing mpg123_string structure to {NULL, 0, 0}. - * If you hand in a NULL pointer here, your program should crash. The other - * string functions are more forgiving, but this one here is too basic. - * \param sb string handle (address of existing structure on your side) - */ -MPG123_EXPORT void mpg123_init_string(mpg123_string* sb); - -/** Free-up memory of the contents of an mpg123_string (not the struct itself). - * This also calls mpg123_init_string() and hence is safe to be called - * repeatedly. - * \param sb string handle - */ -MPG123_EXPORT void mpg123_free_string(mpg123_string* sb); - -/** Change the size of a mpg123_string - * \param sb string handle - * \param news new size in bytes - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_resize_string(mpg123_string* sb, size_t news); - -/** Increase size of a mpg123_string if necessary (it may stay larger). - * Note that the functions for adding and setting in current libmpg123 - * use this instead of mpg123_resize_string(). - * That way, you can preallocate memory and safely work afterwards with - * pieces. - * \param sb string handle - * \param news new minimum size - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_grow_string(mpg123_string* sb, size_t news); - -/** Copy the contents of one mpg123_string string to another. - * Yes the order of arguments is reversed compated to memcpy(). - * \param from string handle - * \param to string handle - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_copy_string(mpg123_string* from, mpg123_string* to); - -/** Move the contents of one mpg123_string string to another. - * This frees any memory associated with the target and moves over the - * pointers from the source, leaving the source without content after - * that. The only possible error is that you hand in NULL pointers. - * If you handed in a valid source, its contents will be gone, even if - * there was no target to move to. If you hand in a valid target, its - * original contents will also always be gone, to be replaced with the - * source's contents if there was some. - * \param from source string handle - * \param to target string handle - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_move_string(mpg123_string* from, mpg123_string* to); - -/** Append a C-String to an mpg123_string - * \param sb string handle - * \param stuff to append - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_add_string(mpg123_string* sb, const char* stuff); - -/** Append a C-substring to an mpg123 string - * \param sb string handle - * \param stuff content to copy - * \param from offset to copy from - * \param count number of characters to copy (a null-byte is always appended) - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_add_substring( mpg123_string *sb -, const char *stuff, size_t from, size_t count ); - -/** Set the content of a mpg123_string to a C-string - * \param sb string handle - * \param stuff content to copy - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_set_string(mpg123_string* sb, const char* stuff); - -/** Set the content of a mpg123_string to a C-substring - * \param sb string handle - * \param stuff the future content - * \param from offset to copy from - * \param count number of characters to copy (a null-byte is always appended) - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_set_substring( mpg123_string *sb -, const char *stuff, size_t from, size_t count ); - -/** Count characters in a mpg123 string (non-null bytes or Unicode points). - * This function is of limited use, as it does just count code points - * encoded in an UTF-8 string, only loosely related to the count of visible - * characters. Get your full Unicode handling support elsewhere. - * \param sb string handle - * \param utf8 a flag to tell if the string is in utf8 encoding - * \return character count -*/ -MPG123_EXPORT size_t mpg123_strlen(mpg123_string *sb, int utf8); - -/** Remove trailing \\r and \\n, if present. - * \param sb string handle - * \return 0 on error, 1 on success - */ -MPG123_EXPORT int mpg123_chomp_string(mpg123_string *sb); - -/** Determine if two strings contain the same data. - * This only returns 1 if both given handles are non-NULL and - * if they are filled with the same bytes. - * \param a first string handle - * \param b second string handle - * \return 0 for different strings, 1 for identical - */ -MPG123_EXPORT int mpg123_same_string(mpg123_string *a, mpg123_string *b); - -/** The mpg123 text encodings. This contains encodings we encounter in ID3 tags or ICY meta info. */ -enum mpg123_text_encoding -{ - mpg123_text_unknown = 0 /**< Unkown encoding... mpg123_id3_encoding can return that on invalid codes. */ - ,mpg123_text_utf8 = 1 /**< UTF-8 */ - ,mpg123_text_latin1 = 2 /**< ISO-8859-1. Note that sometimes latin1 in ID3 is abused for totally different encodings. */ - ,mpg123_text_icy = 3 /**< ICY metadata encoding, usually CP-1252 but we take it as UTF-8 if it qualifies as such. */ - ,mpg123_text_cp1252 = 4 /**< Really CP-1252 without any guessing. */ - ,mpg123_text_utf16 = 5 /**< Some UTF-16 encoding. The last of a set of leading BOMs (byte order mark) rules. - * When there is no BOM, big endian ordering is used. Note that UCS-2 qualifies as UTF-8 when - * you don't mess with the reserved code points. If you want to decode little endian data - * without BOM you need to prepend 0xff 0xfe yourself. */ - ,mpg123_text_utf16bom = 6 /**< Just an alias for UTF-16, ID3v2 has this as distinct code. */ - ,mpg123_text_utf16be = 7 /**< Another alias for UTF16 from ID3v2. Note, that, because of the mess that is reality, - * BOMs are used if encountered. There really is not much distinction between the UTF16 types for mpg123 - * One exception: Since this is seen in ID3v2 tags, leading null bytes are skipped for all other UTF16 - * types (we expect a BOM before real data there), not so for utf16be!*/ - ,mpg123_text_max = 7 /**< Placeholder for the maximum encoding value. */ -}; - -/** The encoding byte values from ID3v2. */ -enum mpg123_id3_enc -{ - mpg123_id3_latin1 = 0 /**< Note: This sometimes can mean anything in practice... */ - ,mpg123_id3_utf16bom = 1 /**< UTF16, UCS-2 ... it's all the same for practical purposes. */ - ,mpg123_id3_utf16be = 2 /**< Big-endian UTF-16, BOM see note for mpg123_text_utf16be. */ - ,mpg123_id3_utf8 = 3 /**< Our lovely overly ASCII-compatible 8 byte encoding for the world. */ - ,mpg123_id3_enc_max = 3 /**< Placeholder to check valid range of encoding byte. */ -}; - -#ifdef MPG123_ENUM_API -/** Convert ID3 encoding byte to mpg123 encoding index. - * - * Note that this name is mapped to mpg123_enc_from_id3_2() instead unless - * MPG123_ENUM_API is defined. - * - * \param id3_enc_byte the ID3 encoding code - * \return the mpg123 encoding index - */ -MPG123_EXPORT enum mpg123_text_encoding mpg123_enc_from_id3(unsigned char id3_enc_byte); -#endif - -/** Convert ID3 encoding byte to mpg123 encoding index. No enums. - * - * This is actually called instead of mpg123_enc_from_id3() - * unless MPG123_ENUM_API is defined. - * - * \param id3_enc_byte the ID3 encoding code - * \return the mpg123 encoding index - */ -MPG123_EXPORT int mpg123_enc_from_id3_2(unsigned char id3_enc_byte); - -#ifdef MPG123_ENUM_API -/** Store text data in string, after converting to UTF-8 from indicated encoding. - * - * Note that this name is mapped to mpg123_store_utf8_2() instead unless - * MPG123_ENUM_API is defined. - * - * A prominent error can be that you provided an unknown encoding value, or this build of libmpg123 lacks support for certain encodings (ID3 or ICY stuff missing). - * Also, you might want to take a bit of care with preparing the data; for example, strip leading zeroes (I have seen that). - * \param sb target string - * \param enc mpg123 text encoding value - * \param source source buffer with plain unsigned bytes (you might need to cast from signed char) - * \param source_size number of bytes in the source buffer - * \return 0 on error, 1 on success (on error, mpg123_free_string is called on sb) - */ -MPG123_EXPORT int mpg123_store_utf8(mpg123_string *sb, enum mpg123_text_encoding enc, const unsigned char *source, size_t source_size); -#endif - -/** Store text data in string, after converting to UTF-8 from indicated encoding. No enums. - * - * This is actually called instead of mpg123_store_utf8() - * unless MPG123_ENUM_API is defined. - * - * A prominent error can be that you provided an unknown encoding value, or this build of libmpg123 lacks support for certain encodings (ID3 or ICY stuff missing). - * Also, you might want to take a bit of care with preparing the data; for example, strip leading zeroes (I have seen that). - * \param sb target string - * \param enc mpg123 text encoding value (enum mpg123_text_encoding) - * \param source source buffer with plain unsigned bytes (you might need to cast from signed char) - * \param source_size number of bytes in the source buffer - * \return 0 on error, 1 on success (on error, mpg123_free_string is called on sb) - */ -MPG123_EXPORT int mpg123_store_utf8_2(mpg123_string *sb -, int enc, const unsigned char *source, size_t source_size); - -/** Sub data structure for ID3v2, for storing various text fields (including comments). - * This is for ID3v2 COMM, TXXX and all the other text fields. - * Only COMM, TXXX and USLT may have a description, only COMM and USLT - * have a language. - * You should consult the ID3v2 specification for the use of the various text fields - * ("frames" in ID3v2 documentation, I use "fields" here to separate from MPEG frames). */ -typedef struct -{ - char lang[3]; /**< Three-letter language code (not terminated). */ - char id[4]; /**< The ID3v2 text field id, like TALB, TPE2, ... (4 characters, no string termination). */ - mpg123_string description; /**< Empty for the generic comment... */ - mpg123_string text; /**< ... */ -} mpg123_text; - -/** The picture type values from ID3v2. */ -enum mpg123_id3_pic_type -{ - mpg123_id3_pic_other = 0 /**< see ID3v2 docs */ - ,mpg123_id3_pic_icon = 1 /**< see ID3v2 docs */ - ,mpg123_id3_pic_other_icon = 2 /**< see ID3v2 docs */ - ,mpg123_id3_pic_front_cover = 3 /**< see ID3v2 docs */ - ,mpg123_id3_pic_back_cover = 4 /**< see ID3v2 docs */ - ,mpg123_id3_pic_leaflet = 5 /**< see ID3v2 docs */ - ,mpg123_id3_pic_media = 6 /**< see ID3v2 docs */ - ,mpg123_id3_pic_lead = 7 /**< see ID3v2 docs */ - ,mpg123_id3_pic_artist = 8 /**< see ID3v2 docs */ - ,mpg123_id3_pic_conductor = 9 /**< see ID3v2 docs */ - ,mpg123_id3_pic_orchestra = 10 /**< see ID3v2 docs */ - ,mpg123_id3_pic_composer = 11 /**< see ID3v2 docs */ - ,mpg123_id3_pic_lyricist = 12 /**< see ID3v2 docs */ - ,mpg123_id3_pic_location = 13 /**< see ID3v2 docs */ - ,mpg123_id3_pic_recording = 14 /**< see ID3v2 docs */ - ,mpg123_id3_pic_performance = 15 /**< see ID3v2 docs */ - ,mpg123_id3_pic_video = 16 /**< see ID3v2 docs */ - ,mpg123_id3_pic_fish = 17 /**< see ID3v2 docs */ - ,mpg123_id3_pic_illustration = 18 /**< see ID3v2 docs */ - ,mpg123_id3_pic_artist_logo = 19 /**< see ID3v2 docs */ - ,mpg123_id3_pic_publisher_logo = 20 /**< see ID3v2 docs */ -}; - -/** Sub data structure for ID3v2, for storing picture data including comment. - * This is for the ID3v2 APIC field. You should consult the ID3v2 specification - * for the use of the APIC field ("frames" in ID3v2 documentation, I use "fields" - * here to separate from MPEG frames). */ -typedef struct -{ - char type; /**< mpg123_id3_pic_type value */ - mpg123_string description; /**< description string */ - mpg123_string mime_type; /**< MIME type */ - size_t size; /**< size in bytes */ - unsigned char* data; /**< pointer to the image data */ -} mpg123_picture; - -/** Data structure for storing IDV3v2 tags. - * This structure is not a direct binary mapping with the file contents. - * The ID3v2 text frames are allowed to contain multiple strings. - * So check for null bytes until you reach the mpg123_string fill. - * All text is encoded in UTF-8. */ -typedef struct -{ - unsigned char version; /**< 3 or 4 for ID3v2.3 or ID3v2.4. */ - mpg123_string *title; /**< Title string (pointer into text_list). */ - mpg123_string *artist; /**< Artist string (pointer into text_list). */ - mpg123_string *album; /**< Album string (pointer into text_list). */ - mpg123_string *year; /**< The year as a string (pointer into text_list). */ - mpg123_string *genre; /**< Genre String (pointer into text_list). The genre string(s) may very well need postprocessing, esp. for ID3v2.3. */ - mpg123_string *comment; /**< Pointer to last encountered comment text with empty description. */ - /* Encountered ID3v2 fields are appended to these lists. - There can be multiple occurences, the pointers above always point to the last encountered data. */ - mpg123_text *comment_list; /**< Array of comments. */ - size_t comments; /**< Number of comments. */ - mpg123_text *text; /**< Array of ID3v2 text fields (including USLT) */ - size_t texts; /**< Numer of text fields. */ - mpg123_text *extra; /**< The array of extra (TXXX) fields. */ - size_t extras; /**< Number of extra text (TXXX) fields. */ - mpg123_picture *picture; /**< Array of ID3v2 pictures fields (APIC). - Only populated if MPG123_PICTURE flag is set! */ - size_t pictures; /**< Number of picture (APIC) fields. */ -} mpg123_id3v2; - -/** Data structure for ID3v1 tags (the last 128 bytes of a file). - * Don't take anything for granted (like string termination)! - * Also note the change ID3v1.1 did: comment[28] = 0; comment[29] = track_number - * It is your task to support ID3v1 only or ID3v1.1 ...*/ -typedef struct -{ - char tag[3]; /**< Always the string "TAG", the classic intro. */ - char title[30]; /**< Title string. */ - char artist[30]; /**< Artist string. */ - char album[30]; /**< Album string. */ - char year[4]; /**< Year string. */ - char comment[30]; /**< Comment string. */ - unsigned char genre; /**< Genre index. */ -} mpg123_id3v1; - -#define MPG123_ID3 0x3 /**< 0011 There is some ID3 info. Also matches 0010 or NEW_ID3. */ -#define MPG123_NEW_ID3 0x1 /**< 0001 There is ID3 info that changed since last call to mpg123_id3. */ -#define MPG123_ICY 0xc /**< 1100 There is some ICY info. Also matches 0100 or NEW_ICY.*/ -#define MPG123_NEW_ICY 0x4 /**< 0100 There is ICY info that changed since last call to mpg123_icy. */ - -/** Query if there is (new) meta info, be it ID3 or ICY (or something new in future). - * \param mh handle - * \return combination of flags, 0 on error (same as "nothing new") - */ -MPG123_EXPORT int mpg123_meta_check(mpg123_handle *mh); - -/** Clean up meta data storage (ID3v2 and ICY), freeing memory. - * \param mh handle - */ -MPG123_EXPORT void mpg123_meta_free(mpg123_handle *mh); - -/** Point v1 and v2 to existing data structures wich may change on any next read/decode function call. - * v1 and/or v2 can be set to NULL when there is no corresponding data. - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_id3( mpg123_handle *mh -, mpg123_id3v1 **v1, mpg123_id3v2 **v2 ); - -/** Return pointers to and size of stored raw ID3 data if storage has - * been configured with MPG123_RAW_ID3 and stream parsing passed the - * metadata already. Null value with zero size is a possibility! - * The storage can change at any next API call. - * - * \param mh mpg123 handle - * \param v1 address to store pointer to v1 tag - * \param v1_size size of v1 data in bytes - * \param v2 address to store pointer to v2 tag - * \param v2_size size of v2 data in bytes - * \return MPG123_OK or MPG123_ERR. Only on MPG123_OK the output - * values are set. - */ -MPG123_EXPORT int mpg123_id3_raw( mpg123_handle *mh -, unsigned char **v1, size_t *v1_size -, unsigned char **v2, size_t *v2_size ); - -/** Point icy_meta to existing data structure wich may change on any next read/decode function call. - * \param mh handle - * \param icy_meta return address for ICY meta string (set to NULL if nothing there) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_icy(mpg123_handle *mh, char **icy_meta); - -/** Decode from windows-1252 (the encoding ICY metainfo used) to UTF-8. - * Note that this is very similar to mpg123_store_utf8(&sb, mpg123_text_icy, icy_text, strlen(icy_text+1)) . - * \param icy_text The input data in ICY encoding - * \return pointer to newly allocated buffer with UTF-8 data (You free() it!) */ -MPG123_EXPORT char* mpg123_icy2utf8(const char* icy_text); - - -/** @} */ - - -/** \defgroup mpg123_advpar mpg123 advanced parameter API - * - * Direct access to a parameter set without full handle around it. - * Possible uses: - * - Influence behaviour of library _during_ initialization of handle (MPG123_VERBOSE). - * - Use one set of parameters for multiple handles. - * - * The functions for handling mpg123_pars (mpg123_par() and mpg123_fmt() - * family) directly return a fully qualified mpg123 error code, the ones - * operating on full handles normally MPG123_OK or MPG123_ERR, storing the - * specific error code itseld inside the handle. - * - * @{ - */ - -/** Opaque structure for the libmpg123 decoder parameters. */ -struct mpg123_pars_struct; - -/** Opaque structure for the libmpg123 decoder parameters. */ -typedef struct mpg123_pars_struct mpg123_pars; - -/** Create a handle with preset parameters. - * \param mp parameter handle - * \param decoder decoder choice - * \param error error code return address - * \return mpg123 handle - */ -MPG123_EXPORT mpg123_handle *mpg123_parnew( mpg123_pars *mp -, const char* decoder, int *error ); - -/** Allocate memory for and return a pointer to a new mpg123_pars - * \param error error code return address - * \return new parameter handle - */ -MPG123_EXPORT mpg123_pars *mpg123_new_pars(int *error); - -/** Delete and free up memory used by a mpg123_pars data structure - * \param mp parameter handle - */ -MPG123_EXPORT void mpg123_delete_pars(mpg123_pars* mp); - -/** Configure mpg123 parameters to accept no output format at all, - * use before specifying supported formats with mpg123_format - * \param mp parameter handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_fmt_none(mpg123_pars *mp); - -/** Configure mpg123 parameters to accept all formats - * (also any custom rate you may set) -- this is default. - * \param mp parameter handle - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_fmt_all(mpg123_pars *mp); - -/** Set the audio format support of a mpg123_pars in detail: - * \param mp parameter handle - * \param rate The sample rate value (in Hertz). - * \param channels A combination of MPG123_STEREO and MPG123_MONO. - * \param encodings A combination of accepted encodings for rate and channels, - * p.ex MPG123_ENC_SIGNED16|MPG123_ENC_ULAW_8 (or 0 for no - * support). - * \return MPG123_OK on success -*/ -MPG123_EXPORT int mpg123_fmt(mpg123_pars *mp -, long rate, int channels, int encodings); - -/** Set the audio format support of a mpg123_pars in detail: - * \param mp parameter handle - * \param rate The sample rate value (in Hertz). Special value 0 means - * all rates (reason for this variant of mpg123_fmt). - * \param channels A combination of MPG123_STEREO and MPG123_MONO. - * \param encodings A combination of accepted encodings for rate and channels, - * p.ex MPG123_ENC_SIGNED16|MPG123_ENC_ULAW_8 (or 0 for no - * support). - * \return MPG123_OK on success -*/ -MPG123_EXPORT int mpg123_fmt2(mpg123_pars *mp -, long rate, int channels, int encodings); - -/** Check to see if a specific format at a specific rate is supported - * by mpg123_pars. - * \param mp parameter handle - * \param rate sampling rate - * \param encoding encoding - * \return 0 for no support (that includes invalid parameters), MPG123_STEREO, - * MPG123_MONO or MPG123_STEREO|MPG123_MONO. */ -MPG123_EXPORT int mpg123_fmt_support(mpg123_pars *mp, long rate, int encoding); - -#ifdef MPG123_ENUM_API -/** Set a specific parameter in a par handle. - * - * Note that this name is mapped to mpg123_par2() instead unless - * MPG123_ENUM_API is defined. - * - * \param mp parameter handle - * \param type parameter choice - * \param value integer value - * \param fvalue floating point value - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_par( mpg123_pars *mp -, enum mpg123_parms type, long value, double fvalue ); -#endif - -/** Set a specific parameter in a par handle. No enums. - * - * This is actually called instead of mpg123_par() - * unless MPG123_ENUM_API is defined. - * - * \param mp parameter handle - * \param type parameter choice (enum mpg123_parms) - * \param value integer value - * \param fvalue floating point value - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_par2( mpg123_pars *mp -, int type, long value, double fvalue ); - -#ifdef MPG123_ENUM_API -/** Get a specific parameter from a par handle. - * - * Note that this name is mapped to mpg123_getpar2() instead unless - * MPG123_ENUM_API is defined. - * - * \param mp parameter handle - * \param type parameter choice - * \param value integer value return address - * \param fvalue floating point value return address - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getpar( mpg123_pars *mp -, enum mpg123_parms type, long *value, double *fvalue ); -#endif - -/** Get a specific parameter from a par handle. No enums. - * - * This is actually called instead of mpg123_getpar() - * unless MPG123_ENUM_API is defined. - * - * \param mp parameter handle - * \param type parameter choice (enum mpg123_parms) - * \param value integer value return address - * \param fvalue floating point value return address - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_getpar2( mpg123_pars *mp -, int type, long *value, double *fvalue ); - -/** @} */ - - -/** \defgroup mpg123_lowio mpg123 low level I/O - * You may want to do tricky stuff with I/O that does not work with mpg123's default file access or you want to make it decode into your own pocket... - * - * @{ */ - -/** Replace default internal buffer with user-supplied buffer. - * Instead of working on it's own private buffer, mpg123 will directly use the one you provide for storing decoded audio. - * Note that the required buffer size could be bigger than expected from output - * encoding if libmpg123 has to convert from primary decoder output (p.ex. 32 bit - * storage for 24 bit output). - * - * Note: The type of data changed to a void pointer in mpg123 1.26.0 - * (API version 45). - * - * \param mh handle - * \param data pointer to user buffer - * \param size of buffer in bytes - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_replace_buffer(mpg123_handle *mh -, void *data, size_t size); - -/** The max size of one frame's decoded output with current settings. - * Use that to determine an appropriate minimum buffer size for decoding one frame. - * \param mh handle - * \return maximum decoded data size in bytes - */ -MPG123_EXPORT size_t mpg123_outblock(mpg123_handle *mh); - -/** Replace low-level stream access functions; read and lseek as known in POSIX. - * You can use this to make any fancy file opening/closing yourself, - * using mpg123_open_fd() to set the file descriptor for your read/lseek - * (doesn't need to be a "real" file descriptor...). - * Setting a function to NULL means that the default internal read is - * used (active from next mpg123_open call on). - * Note: As it would be troublesome to mess with this while having a file open, - * this implies mpg123_close(). - * \param mh handle - * \param r_read callback for reading (behaviour like POSIX read) - * \param r_lseek callback for seeking (like POSIX lseek) - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_replace_reader( mpg123_handle *mh -, mpg123_ssize_t (*r_read) (int, void *, size_t) -, off_t (*r_lseek)(int, off_t, int) -); - -/** Replace I/O functions with your own ones operating on some kind of - * handle instead of integer descriptors. - * The handle is a void pointer, so you can pass any data you want... - * mpg123_open_handle() is the call you make to use the I/O defined here. - * There is no fallback to internal read/seek here. - * Note: As it would be troublesome to mess with this while having a file open, - * this mpg123_close() is implied here. - * \param mh handle - * \param r_read callback for reading (behaviour like POSIX read) - * \param r_lseek callback for seeking (like POSIX lseek) - * \param cleanup A callback to clean up an I/O handle on mpg123_close, - * can be NULL for none (you take care of cleaning your handles). - * \return MPG123_OK on success - */ -MPG123_EXPORT int mpg123_replace_reader_handle( mpg123_handle *mh -, mpg123_ssize_t (*r_read) (void *, void *, size_t) -, off_t (*r_lseek)(void *, off_t, int) -, void (*cleanup)(void*) ); - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libs/include/xmp.h b/libs/include/xmp.h deleted file mode 100644 index e3d223e..0000000 --- a/libs/include/xmp.h +++ /dev/null @@ -1,358 +0,0 @@ -#ifndef XMP_H -#define XMP_H - -#ifdef __cplusplus -extern "C" { -#endif - -#define XMP_VERSION "4.4.1" -#define XMP_VERCODE 0x040401 -#define XMP_VER_MAJOR 4 -#define XMP_VER_MINOR 4 -#define XMP_VER_RELEASE 1 - -#if defined(_WIN32) && !defined(__CYGWIN__) -# if defined(BUILDING_STATIC) -# define EXPORT -# elif defined(BUILDING_DLL) -# define EXPORT __declspec(dllexport) -# else -# define EXPORT __declspec(dllimport) -# endif -#elif __GNUC__ >= 4 || defined(__HP_cc) -# define EXPORT __attribute__((visibility ("default"))) -#elif defined(__SUNPRO_C) -# define EXPORT __global -#elif defined(EMSCRIPTEN) -# define EXPORT EMSCRIPTEN_KEEPALIVE -#else -# define EXPORT -#endif - -#define XMP_NAME_SIZE 64 /* Size of module name and type */ - -#define XMP_KEY_OFF 0x81 /* Note number for key off event */ -#define XMP_KEY_CUT 0x82 /* Note number for key cut event */ -#define XMP_KEY_FADE 0x83 /* Note number for fade event */ - -/* mixer parameter macros */ - -/* sample format flags */ -#define XMP_FORMAT_8BIT (1 << 0) /* Mix to 8-bit instead of 16 */ -#define XMP_FORMAT_UNSIGNED (1 << 1) /* Mix to unsigned samples */ -#define XMP_FORMAT_MONO (1 << 2) /* Mix to mono instead of stereo */ - -/* player parameters */ -#define XMP_PLAYER_AMP 0 /* Amplification factor */ -#define XMP_PLAYER_MIX 1 /* Stereo mixing */ -#define XMP_PLAYER_INTERP 2 /* Interpolation type */ -#define XMP_PLAYER_DSP 3 /* DSP effect flags */ -#define XMP_PLAYER_FLAGS 4 /* Player flags */ -#define XMP_PLAYER_CFLAGS 5 /* Player flags for current module */ -#define XMP_PLAYER_SMPCTL 6 /* Sample control flags */ -#define XMP_PLAYER_VOLUME 7 /* Player module volume */ -#define XMP_PLAYER_STATE 8 /* Internal player state (read only) */ -#define XMP_PLAYER_SMIX_VOLUME 9 /* SMIX volume */ -#define XMP_PLAYER_DEFPAN 10 /* Default pan setting */ -#define XMP_PLAYER_MODE 11 /* Player personality */ -#define XMP_PLAYER_MIXER_TYPE 12 /* Current mixer (read only) */ -#define XMP_PLAYER_VOICES 13 /* Maximum number of mixer voices */ - -/* interpolation types */ -#define XMP_INTERP_NEAREST 0 /* Nearest neighbor */ -#define XMP_INTERP_LINEAR 1 /* Linear (default) */ -#define XMP_INTERP_SPLINE 2 /* Cubic spline */ - -/* dsp effect types */ -#define XMP_DSP_LOWPASS (1 << 0) /* Lowpass filter effect */ -#define XMP_DSP_ALL (XMP_DSP_LOWPASS) - -/* player state */ -#define XMP_STATE_UNLOADED 0 /* Context created */ -#define XMP_STATE_LOADED 1 /* Module loaded */ -#define XMP_STATE_PLAYING 2 /* Module playing */ - -/* player flags */ -#define XMP_FLAGS_VBLANK (1 << 0) /* Use vblank timing */ -#define XMP_FLAGS_FX9BUG (1 << 1) /* Emulate FX9 bug */ -#define XMP_FLAGS_FIXLOOP (1 << 2) /* Emulate sample loop bug */ -#define XMP_FLAGS_A500 (1 << 3) /* Use Paula mixer in Amiga modules */ - -/* player modes */ -#define XMP_MODE_AUTO 0 /* Autodetect mode (default) */ -#define XMP_MODE_MOD 1 /* Play as a generic MOD player */ -#define XMP_MODE_NOISETRACKER 2 /* Play using Noisetracker quirks */ -#define XMP_MODE_PROTRACKER 3 /* Play using Protracker quirks */ -#define XMP_MODE_S3M 4 /* Play as a generic S3M player */ -#define XMP_MODE_ST3 5 /* Play using ST3 bug emulation */ -#define XMP_MODE_ST3GUS 6 /* Play using ST3+GUS quirks */ -#define XMP_MODE_XM 7 /* Play as a generic XM player */ -#define XMP_MODE_FT2 8 /* Play using FT2 bug emulation */ -#define XMP_MODE_IT 9 /* Play using IT quirks */ -#define XMP_MODE_ITSMP 10 /* Play using IT sample mode quirks */ - -/* mixer types */ -#define XMP_MIXER_STANDARD 0 /* Standard mixer */ -#define XMP_MIXER_A500 1 /* Amiga 500 */ -#define XMP_MIXER_A500F 2 /* Amiga 500 with led filter */ - -/* sample flags */ -#define XMP_SMPCTL_SKIP (1 << 0) /* Don't load samples */ - -/* limits */ -#define XMP_MAX_KEYS 121 /* Number of valid keys */ -#define XMP_MAX_ENV_POINTS 32 /* Max number of envelope points */ -#define XMP_MAX_MOD_LENGTH 256 /* Max number of patterns in module */ -#define XMP_MAX_CHANNELS 64 /* Max number of channels in module */ -#define XMP_MAX_SRATE 49170 /* max sampling rate (Hz) */ -#define XMP_MIN_SRATE 4000 /* min sampling rate (Hz) */ -#define XMP_MIN_BPM 20 /* min BPM */ -/* frame rate = (50 * bpm / 125) Hz */ -/* frame size = (sampling rate * channels * size) / frame rate */ -#define XMP_MAX_FRAMESIZE (5 * XMP_MAX_SRATE * 2 / XMP_MIN_BPM) - -/* error codes */ -#define XMP_END 1 -#define XMP_ERROR_INTERNAL 2 /* Internal error */ -#define XMP_ERROR_FORMAT 3 /* Unsupported module format */ -#define XMP_ERROR_LOAD 4 /* Error loading file */ -#define XMP_ERROR_DEPACK 5 /* Error depacking file */ -#define XMP_ERROR_SYSTEM 6 /* System error */ -#define XMP_ERROR_INVALID 7 /* Invalid parameter */ -#define XMP_ERROR_STATE 8 /* Invalid player state */ - -struct xmp_channel { - int pan; /* Channel pan (0x80 is center) */ - int vol; /* Channel volume */ -#define XMP_CHANNEL_SYNTH (1 << 0) /* Channel is synthesized */ -#define XMP_CHANNEL_MUTE (1 << 1) /* Channel is muted */ -#define XMP_CHANNEL_SPLIT (1 << 2) /* Split Amiga channel in bits 5-4 */ -#define XMP_CHANNEL_SURROUND (1 << 4) /* Surround channel */ - int flg; /* Channel flags */ -}; - -struct xmp_pattern { - int rows; /* Number of rows */ - int index[1]; /* Track index */ -}; - -struct xmp_event { - unsigned char note; /* Note number (0 means no note) */ - unsigned char ins; /* Patch number */ - unsigned char vol; /* Volume (0 to basevol) */ - unsigned char fxt; /* Effect type */ - unsigned char fxp; /* Effect parameter */ - unsigned char f2t; /* Secondary effect type */ - unsigned char f2p; /* Secondary effect parameter */ - unsigned char _flag; /* Internal (reserved) flags */ -}; - -struct xmp_track { - int rows; /* Number of rows */ - struct xmp_event event[1]; /* Event data */ -}; - -struct xmp_envelope { -#define XMP_ENVELOPE_ON (1 << 0) /* Envelope is enabled */ -#define XMP_ENVELOPE_SUS (1 << 1) /* Envelope has sustain point */ -#define XMP_ENVELOPE_LOOP (1 << 2) /* Envelope has loop */ -#define XMP_ENVELOPE_FLT (1 << 3) /* Envelope is used for filter */ -#define XMP_ENVELOPE_SLOOP (1 << 4) /* Envelope has sustain loop */ -#define XMP_ENVELOPE_CARRY (1 << 5) /* Don't reset envelope position */ - int flg; /* Flags */ - int npt; /* Number of envelope points */ - int scl; /* Envelope scaling */ - int sus; /* Sustain start point */ - int sue; /* Sustain end point */ - int lps; /* Loop start point */ - int lpe; /* Loop end point */ - short data[XMP_MAX_ENV_POINTS * 2]; -}; - -struct xmp_instrument { - char name[32]; /* Instrument name */ - int vol; /* Instrument volume */ - int nsm; /* Number of samples */ - int rls; /* Release (fadeout) */ - struct xmp_envelope aei; /* Amplitude envelope info */ - struct xmp_envelope pei; /* Pan envelope info */ - struct xmp_envelope fei; /* Frequency envelope info */ - - struct { - unsigned char ins; /* Instrument number for each key */ - signed char xpo; /* Instrument transpose for each key */ - } map[XMP_MAX_KEYS]; - - struct xmp_subinstrument { - int vol; /* Default volume */ - int gvl; /* Global volume */ - int pan; /* Pan */ - int xpo; /* Transpose */ - int fin; /* Finetune */ - int vwf; /* Vibrato waveform */ - int vde; /* Vibrato depth */ - int vra; /* Vibrato rate */ - int vsw; /* Vibrato sweep */ - int rvv; /* Random volume/pan variation (IT) */ - int sid; /* Sample number */ -#define XMP_INST_NNA_CUT 0x00 -#define XMP_INST_NNA_CONT 0x01 -#define XMP_INST_NNA_OFF 0x02 -#define XMP_INST_NNA_FADE 0x03 - int nna; /* New note action */ -#define XMP_INST_DCT_OFF 0x00 -#define XMP_INST_DCT_NOTE 0x01 -#define XMP_INST_DCT_SMP 0x02 -#define XMP_INST_DCT_INST 0x03 - int dct; /* Duplicate check type */ -#define XMP_INST_DCA_CUT XMP_INST_NNA_CUT -#define XMP_INST_DCA_OFF XMP_INST_NNA_OFF -#define XMP_INST_DCA_FADE XMP_INST_NNA_FADE - int dca; /* Duplicate check action */ - int ifc; /* Initial filter cutoff */ - int ifr; /* Initial filter resonance */ - } *sub; - - void *extra; /* Extra fields */ -}; - -struct xmp_sample { - char name[32]; /* Sample name */ - int len; /* Sample length */ - int lps; /* Loop start */ - int lpe; /* Loop end */ -#define XMP_SAMPLE_16BIT (1 << 0) /* 16bit sample */ -#define XMP_SAMPLE_LOOP (1 << 1) /* Sample is looped */ -#define XMP_SAMPLE_LOOP_BIDIR (1 << 2) /* Bidirectional sample loop */ -#define XMP_SAMPLE_LOOP_REVERSE (1 << 3) /* Backwards sample loop */ -#define XMP_SAMPLE_LOOP_FULL (1 << 4) /* Play full sample before looping */ -#define XMP_SAMPLE_SLOOP (1 << 5) /* Sample has sustain loop */ -#define XMP_SAMPLE_SLOOP_BIDIR (1 << 6) /* Bidirectional sustain loop */ -#define XMP_SAMPLE_SYNTH (1 << 15) /* Data contains synth patch */ - int flg; /* Flags */ - unsigned char *data; /* Sample data */ -}; - -struct xmp_sequence { - int entry_point; - int duration; -}; - -struct xmp_module { - char name[XMP_NAME_SIZE]; /* Module title */ - char type[XMP_NAME_SIZE]; /* Module format */ - int pat; /* Number of patterns */ - int trk; /* Number of tracks */ - int chn; /* Tracks per pattern */ - int ins; /* Number of instruments */ - int smp; /* Number of samples */ - int spd; /* Initial speed */ - int bpm; /* Initial BPM */ - int len; /* Module length in patterns */ - int rst; /* Restart position */ - int gvl; /* Global volume */ - - struct xmp_pattern **xxp; /* Patterns */ - struct xmp_track **xxt; /* Tracks */ - struct xmp_instrument *xxi; /* Instruments */ - struct xmp_sample *xxs; /* Samples */ - struct xmp_channel xxc[XMP_MAX_CHANNELS]; /* Channel info */ - unsigned char xxo[XMP_MAX_MOD_LENGTH]; /* Orders */ -}; - -struct xmp_test_info { - char name[XMP_NAME_SIZE]; /* Module title */ - char type[XMP_NAME_SIZE]; /* Module format */ -}; - -struct xmp_module_info { - unsigned char md5[16]; /* MD5 message digest */ - int vol_base; /* Volume scale */ - struct xmp_module *mod; /* Pointer to module data */ - char *comment; /* Comment text, if any */ - int num_sequences; /* Number of valid sequences */ - struct xmp_sequence *seq_data; /* Pointer to sequence data */ -}; - -struct xmp_frame_info { /* Current frame information */ - int pos; /* Current position */ - int pattern; /* Current pattern */ - int row; /* Current row in pattern */ - int num_rows; /* Number of rows in current pattern */ - int frame; /* Current frame */ - int speed; /* Current replay speed */ - int bpm; /* Current bpm */ - int time; /* Current module time in ms */ - int total_time; /* Estimated replay time in ms*/ - int frame_time; /* Frame replay time in us */ - void *buffer; /* Pointer to sound buffer */ - int buffer_size; /* Used buffer size */ - int total_size; /* Total buffer size */ - int volume; /* Current master volume */ - int loop_count; /* Loop counter */ - int virt_channels; /* Number of virtual channels */ - int virt_used; /* Used virtual channels */ - int sequence; /* Current sequence */ - - struct xmp_channel_info { /* Current channel information */ - unsigned int period; /* Sample period (* 4096) */ - unsigned int position; /* Sample position */ - short pitchbend; /* Linear bend from base note*/ - unsigned char note; /* Current base note number */ - unsigned char instrument; /* Current instrument number */ - unsigned char sample; /* Current sample number */ - unsigned char volume; /* Current volume */ - unsigned char pan; /* Current stereo pan */ - unsigned char reserved; /* Reserved */ - struct xmp_event event; /* Current track event */ - } channel_info[XMP_MAX_CHANNELS]; -}; - - -typedef char *xmp_context; - -EXPORT extern const char *xmp_version; -EXPORT extern const unsigned int xmp_vercode; - -EXPORT xmp_context xmp_create_context (void); -EXPORT void xmp_free_context (xmp_context); -EXPORT int xmp_test_module (char *, struct xmp_test_info *); -EXPORT int xmp_load_module (xmp_context, char *); -EXPORT void xmp_scan_module (xmp_context); -EXPORT void xmp_release_module (xmp_context); -EXPORT int xmp_start_player (xmp_context, int, int); -EXPORT int xmp_play_frame (xmp_context); -EXPORT int xmp_play_buffer (xmp_context, void *, int, int); -EXPORT void xmp_get_frame_info (xmp_context, struct xmp_frame_info *); -EXPORT void xmp_end_player (xmp_context); -EXPORT void xmp_inject_event (xmp_context, int, struct xmp_event *); -EXPORT void xmp_get_module_info (xmp_context, struct xmp_module_info *); -EXPORT char **xmp_get_format_list (void); -EXPORT int xmp_next_position (xmp_context); -EXPORT int xmp_prev_position (xmp_context); -EXPORT int xmp_set_position (xmp_context, int); -EXPORT void xmp_stop_module (xmp_context); -EXPORT void xmp_restart_module (xmp_context); -EXPORT int xmp_seek_time (xmp_context, int); -EXPORT int xmp_channel_mute (xmp_context, int, int); -EXPORT int xmp_channel_vol (xmp_context, int, int); -EXPORT int xmp_set_player (xmp_context, int, int); -EXPORT int xmp_get_player (xmp_context, int); -EXPORT int xmp_set_instrument_path (xmp_context, char *); -EXPORT int xmp_load_module_from_memory (xmp_context, void *, long); -EXPORT int xmp_load_module_from_file (xmp_context, void *, long); - -/* External sample mixer API */ -EXPORT int xmp_start_smix (xmp_context, int, int); -EXPORT void xmp_end_smix (xmp_context); -EXPORT int xmp_smix_play_instrument(xmp_context, int, int, int, int); -EXPORT int xmp_smix_play_sample (xmp_context, int, int, int, int); -EXPORT int xmp_smix_channel_pan (xmp_context, int, int); -EXPORT int xmp_smix_load_sample (xmp_context, int, char *); -EXPORT int xmp_smix_release_sample (xmp_context, int); - -#ifdef __cplusplus -} -#endif - -#endif /* XMP_H */ diff --git a/libs/lib/libmpg123.a b/libs/lib/libmpg123.a deleted file mode 100644 index c607ca0dadf33349ca53f07431bc288c72182a0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291496 zcmeFa4|r79buYT+uSP<^NC*&)5}z?=!~g=1glx-+5|51l+1A7|1{=3dB_WNF%8VpS z!iL06CKzlIOCvez3+W@zVFPMwg0TW_S$Q&z4o5H_wm)X^tN_j+Q`vdAYxl7@`?Hnf3_pd|69+0*)Q@R{T#bXaNJW zO+78WeHPvpiAGRZc2IAGTut$4RHb`I|JEJt?cmcaw>Q!gZD|FcM(DIEc6PNzb~b^` zjvk8_gGy&tCo0^Msq9qf^mGQ%zF7mC6ob>F+B>7srvC2M>7lbEjO^^}w`!mYZ)@pq zu>x4{Sa)xvv#Y&(Iwhk*?EtyqeN~W54x=+eB0GB`t^G}mXo>YiBe@yc+fnv((%V{? zuCIwAn>_|<5xsQmjviDkNA*}iRqMV;WczfYecL;8+KP#@)3tRs_1=?_)ji$O9kGZd zIRk5I?P%%RmI;LVO;4qYhLT#j*f%mrq^q^Nt+Q)ec0ga}=W}WR38Hs2wRiW%TBaH@ z*5B0C-IXcWh@BpUBrVaXRkE2PJ0#X$H9d9;jZKv_qujn7Jw4sMISHDqP_tKbcHM)f zVtZJen-OghR65ez)VHgvzoTjEF3Q7X{Z_cu>bc3xHjK1c2{UDGZEfm-`D^LT6pIj= zAd7z{=)1t1E$HrvbTw^l$(S95GvTxZef_Wn zu~~we&>`ERnG#|x+aqRen)+L|X4xSX)7ss2PvzD9-8Dv}MX#p|2F|ql%HEj2vu!Da zfflt=W&JdzYQ@m@o7wRbJZB@B9*3yRZ&;D6Oa?ZU&%$$(XQO@nw1Z|jNU!ir0*rH3 zb?(jtBGpv5LNeNGG(hK0G!=Bf5|L5MCe!Ac1p8XrGsB}9WOY)jOl1+b?oz;Pm|3H` zB0DoC#w<(a$t0#mm}MC87DnH}`rR6ZjW<)NF)r(OcHIr@I5Wh`+us?BOe?-WGG$u% zdq!lFsi9_pRA4o+i6Frel4rFm_oat>3Xoe+$MY z*n(*xaKtjSX^PC8G+(_f8C~vd-Ia-H-BqQmnwb(q7P#(?DML0(SW`xXh8fJxI~6jO zN_iPpVKfBO0$QWpeHnhKhL-YWt0YXkMPMp;dPqhcR07jLnA{tAvXsg4@~B2LeLo}A zGBPF&!=<#!%oZ{n#?CIK3cbDEy;h1yZ!ZTy3#F#0Xww3=cTRVKI-8W;nTo}Dl+t1(L`HzMS3f(1ZwCrf~vqLJlk1gl7GN zr~BSnxH8#pD?Qw~wm{m~Ivnx5w%x(ndmd+W_BYuH@i~EzBQT7kfl5bokfmThD#{S3{tAnvy+;N%H>K`bp|ObbQZ3r zqH;;8YR@2Lh0a21Dk_(hsyfVT#-+>>7K3LYmdSDnam}QrgmMXLS#i0%DFMu+mIOujfLx; z6+~Ys2URq3!c6ZdD^xi|Q(Rj9Qf`VF#4N`wE1|J;F-0rmS7fCD*J|M?D@c(x+^ek6 z83Ckb`Dt0{rn?Q7j+m0XIi4GnPqE8j*+|&RQ z%@`e}JD81I^o)L`LRpu-{zztU%LMX=m0krJa-X@HV@AdpGc7}B*YtIwDJtFYF-%rf z-QoUV5yT3j_eAZ;3NlyhrUx26P)^Eiz1{cb1hsbe?8*s>b>EX)1RN-=U~HXUgbJL- ziIP`tGDC>j40EPGofI%Al2ymn4y<_Qrr_$SnaR=wq-yDJ;%uzz9!t1fEJYyQ)|{aB z*}~dp2{hd5>4mh<7TDT?i72KX)01}gwRQI9gdt=$0tlX^d`|7ygK}svIE(U*E-VuF zHr?CXIkl!|hQW4b{9QAseOfv&-rCXExveWp>p3;0(Z!09RWPTky}5y=fYB6fShR=7?5b;wfA%!3xggrP)l~Fo%PLIi`y#8mubdvL`qj)(wdgh@SS?!32*vDe zMi`cYI%9B0);;c)QT8E1rNsxTu)S=kw(##CbV;Hue!XL6r$?`LE%Y!`jg z*`sC;ZGwk#i5P0cjHqaPAC^u#TV{$0rguha%N);$Fb(mHaGJsyfkxNIA|+!AuC$cM z)UQhG|Klo6s|*GaoB6)_YW#CtdF|C#Aqt=7f-kLWSZ}l0#QNC8BU6~jcoqI(4j%AU zs{{cll6f+jcGT*D`z2oKkpw#+^|i)GHjQDVfl!;G+UADAlt(3@fqlGdys>`dRn!Gq#CNGSZ%JZXMd3MwnkBe_ODQ6lU9Elek zyiZ(*?yHrg7j@IWzo{7YyZKt1L@Prbh2rZOv7KrtOugM8DPR3DTRi{HFUIADFWT=b zmWvJfDVzM_+LEw6CFkm@91{4HP4aa+_^=6FhL3IfV#vPvi(=pMMagga;)JaIqC+-R z*<^1;fj3|~->@Kcp`j!t;e{z@xHRPnFG&@KFHd>Hj#OzlFI5+IrFKfZO6!x524OOki`&W zG34`VcGQ1}G7HFemz`?xpkAKTpQpv^mam{)RxCf44s9k45l5{^hkmsq4|4Y6_ng|h z#9b~D@rw)$AwglG>=}F)d0C!K-txQU7t0GpTO{(<2zmOuw01jbjmPW>hpY?yO**;B zpzQ%YkN;=LTMPQlu?2}j>96{j#BXniEle=4L$qR%Zw+AsgV)G2A9+e^3*|J*UV`6e z{QqFj(?jB3MqWhx%Z|pJ$opt;A{}2up2lN&DEFTO-%TeMQ63@-kgucsFHr8yDAyNA zItt}LBL6~2e45zLNT}4eFC-tNOKY97K%cl+a?PH(3-yNBk_6LwrE)0$f@WvhzcbSc z%4tBk<)uw_y#{LqGFf7iNO_s;9~1f6y)kwehN({iU+fcCleD^0{kw%3FH8XRi1r-hyP73`zL%#KrVamlZct zX4>M*I1jR(*vvKv1&ieZ+S9l5uSEW2 zzWDYnacFWK`Y77A=5o{rZF}TA#PvM#+fko&dZ|S0uv@5)1NGUi#~Yz5%{QYygM$)w zC!E7!`^EHIdU1$#3N5-!ij6wKd+|;D+*SrV#j=y({KSgm`L;hwYqt?U8uNm$qN>Rc zj6N^&DB8=3_S&n%PN2NYVL#qeef6u*g&%)l*o`98`A;D$4fWRK*~$}{{Kd#Sul8Z3 zH|xvaL3)wb{J%=O_2VCu7qfpmk&k`;gS5R?3fJr9rF%uMX~(!Tsm7gn{+|2d`G+vh z?5lCelQlLeSY?xytIAPdo9td?jXMpo-2>+^Za6VEc;(gs55^9`*ineFgJXs2^TQLe z(CqUiXfMR6eqSN?4|t{7>lBwxUAFXi4*I8&#+9g$!w8=cpC0WsqdPf_%&hJE77?YuYW2y`f%GeaXf1n{eG+>jh!?5odb7R9& zWfym2c8T>Mkm1SfRDcRV6_(iD`>d%v_P{Ed}T=am_Bi;9k>D_`cazW2$Y=!1g&X-mNMj<9Cl^rHM%Z%L#l&y$o8e{QJp=P3UP}J0wln09Z`CIr z7;wsi1HM2r0}6dw2>uLpVA8?%a7sJsz7={n>F||K$WFBXo6ymn^1acr@HYpd@MoH# zqxYfC{qpi?kGwS60sp2A{>@#G!4~Mq9(nQoxV-RwkN;}}z9Vsge>1vVLf*&1-yA82 z{-)DwA^cD1>Ga0((%3ggO7I}gc6UzWlK z|Dke*(MH*%ME{YE^+?+5V+T^;YY4m!fwv*>HUxf$z}pab9s++u;BN^0y#fB-@Ok5Q z@UH5<4|VVH-w(Y;88&ZiX)Kx2<4!vqf#MSU-WNWU$dhDgI(=9Vgr7*PK)X6cHV0x) zCf`RFnIkc=$evGh574{TuK{5nUl!C?**tN?6?X`9C z3T(%}EUT9TqZ84`6JzL`$U6i&NGpXQIW&sAC4fVccItIE=GE%KgCc9rz$PSNbB>o_ zj2k@~O{SQhUIb-e_8eh@St2+oy> zO%0$o9(w{b&jj)zZ{oG#CwIF=Q@=&NI#eeIhYWh_1{rVoR(*r{7n+s4R+#c?X)CPt zjfu4MKjIg820rTZn{D#f>riSj5~b56y3Kj*>VkbsK)XDb zFH_fGyR}J22>qV2#v^~14tc3dWpa4g$4z~Ko}e#;WWHSQ6ghx#Y7Bb47$;4RknHchQbYcWcm(C2iNQ-&9(wC$F%} zh9%3&(2wqvZ!Ds$8lW$mu6OAhFs?hh4;^-QKXo9l``H5?`Q^ZU@O3@ihsrJ8_;K3M zZ|QzE(HwgQx_20SRa|YCBUfqi*FotXNtLE27B$C?q{g8q4tZ<&!t^9`4}C%QK%Q*x zy#t0!>hyWwpK-NWGWnia2K{SSx(>5Wx4t;N-dlk2@#XXeWjp>{$uht8XzWO0BKmYf zhY#k5uW*emzOV*1io6v{s&b8OqDWL7M-#gI0{W_%c49o?+aHoL*r^h+W3CXwxRbQM zBWs-vu~!o5bgBMdWlPDg(o5hoQ(t~nby6m7XWLuzt!tqxocD+nDSN{CPN|fm->UIj zKW^$u-Hos}Ykr2Y;wy_9uXof^zkdlI$rsSrfU^_6bj53GpsqdED zcbPINlZHSUY=uK^McH#e~rEz*5G2OXI2 zJzOZ0m<#ODFQ)&vgkcS_0|^iGvP3q)&oTP*6CYf!?ATqZea65WNmr2;oXA)(!QR(@5Y^%Li-*?(3J)7VUS3^#(LXY-?KIfIX@=*)LHH1cn zf62H3^t+^8mzU7i6ZS%R1Y?J%))&;^D{p|TT#5&u){MFNVU+)u!FSUWx3WCukIOID z+$hbMgZ^yIsjjCI2gAu!zGw?W^3*8#%cH*vn`q3dIVK%c^q|v&3=cu}Ht8#0xv#^% z05*^I@+f4-`MoAf)&xXb0R0?oh40L^K8pUX$>ORrA57j(8)MAFT(!PXvwgEGPp`o| z?C+F6eF!$^b=X3;(o@<)+QKr7b+jLa5-Kz5kOIB8D*y3=N%Vt*qqFt7_m%9&AS=Tz z{YdqtBSU|UwkEH&;a7M6I6VndcmGhmJc%)=8FFkh`>fx80_iA$?|h(b{+QyK?ag(E z#j3rH{^2QaRs6qa_J@c*igKCWE_ZHXKl&A(2IxK8t4zkAdt#?={;J8JF)m$`(YJ=! z;|brG(NA^wT{5rFUi^sqD}><(;U?4Aatk@zw7-sBX23%1PP$Wd;O1qSEffD z5M=ladBU;(V1l;(F*RPrG4_Nuahzs2+uebBmdT@;{`Tf?t-eHka96#Oo=`Fp$wRqk z^mkFt9VlD*Tkc2i%U6ESVc5Qd3Ae;i-r)qx;u!GN--a5=6T@`*5z1&*{dGM0L}Jf; z4`lu{))n&LLmvjbcaZYGn7&mnt`|8HUg7tRJ%uUgk6`oB&jZc&-}}I@`Qy=N;8TvE z%<+UxQhux>RlX1%NsUFHPi?Zx;_>Jx#-Ue+0^!FKjrJDjMD!J`m%NHGz^>n9e`j%Z z_}SF4hJ)}2-1<-Cfs#`VhZ3AqYMA@X3HfcTn-8ZBB=ptbXY8Sc)pBICEc`P3$T|KM z$$M?r+T+Dsuk$s3A7Jp|tL#bGvCrziN&kGa&pToBjdf!jf9q>EN~!(>xv+VQEWy~m z)oz#khr2MgEw`^&*e;8)b~fkXa{IjtyQNTfO3A}Z?U;Vxqsg8i{IHU08HeBU4ERhf z_h9~R_|bn1eVC87IBoX#*Ah&}xN7u4C;ZBJX#Z;Xls367xI~(Zxjt1bj}LK-ambhS z72bCp=WU_J@#s^^H#gEB!dlqjgm~Wwj>@FhHy#2XZ(*J|xzH}xRndQP$dZ-t-_Req z&i4rTXoH=gKNtaz*Hv96lM9@3O;t7g2ezq0?$B4%yl4L#+vF@|9YI<7m7}5+as1O{ zQDp)80P~N>Mv!-Kxf}i`ZKk;{VAgjpe3EObV4pX7q!MMNP}adjE7lTM1Wwz&XG@x8 zVVrK zu}$8}F!1Tfhc42WC%+n?;Y;s@9wbZPhd*w~A3iJO&w0bcDAR%QgzJ&IX+tAukIT)m z__P|6XuBjCuS;P(rVQx!RLB#{g79;6If69npnC^ZS{>!sWqsg}WuoLLe1M>g451xX zaUP(_&w~!k*|0u@I=?bhf$^nD7O(mS+F=ZH7RDFK1lp^pb{xL9LryOrmiQ)->eo3= zHp=0lP4dJLR^h<|eO%hDL;8a-*i2IdpDG{yPlH`72)!%KwqGyw?Ps59{aPpd%)4w~ zD(OO>b4cWCciIk=Y(sj?dB1kM?G4O*=vx=*mB_23Z_k6yoUY0DuWY;#bC!@41kiHw z7eN>1otO`%d^NC>LFO{%N=IWafd7H2Theh;*AG(v0yn3rfAhfWA7kv9#MpDpl=Ex; zI+R77Z-lK_An~&5Fxt_3lQd#3YmDb_1aD7I!Uv*0b56Ws`9`dh6X%)>$1<+#am|H% zz!xdM2{akMbnL70^Yr(NHE~t0!}_<8hiUlX`e@srQzC=ZMSKcChI|m18x1ip$d4VuM%uqV%~=1FE{|-$C6Bx%><|ttlNE zk39vs+y>j$d^>f>Sc_smI%f8x2>Q`0ux*c{j3*QMavl0F*4MmPhn4li1+r`z=dknT zN5KW?o7M8fDCe;bxo5c-w!{OS5ZO26Yu<+RgYY+c#a^0gP`aE*AeS@&aR zTfAG&ymRF4;(X~|4POiE6)rtbBCz{T{Y7cpXoqco9=dA-hN zWGngv``xSHi}vtGmxNw= zSVz0yPotfnw^zchFObVh#P98rwCy%<@km{~eu+#ZGkZTW~o#6xTG0ZLU@oLP^H97Rg9)$Pfxi5U^ zJ%*wGV=S5v8U4JxNUnseQ=?LIF1Pi7pmt$%KYm#*Xbb{N7QZEx4DtyR{*x4SeoyA6MDKL@E0;4dduI8v&)KWG&viD|GKay{1oaiI22IflV$X? zeKi_v9(@ni&E;o4_$Q4usQZ})t|!dL8s}S^i5qL2htQ5(<2+c-Fq=FAJJ(!Xf$`{M z6zhUAv9UJ%?CwDLdx;a#16XhT{vE_Qmu0@=(Szm0@t@FT>2wgk#||{ap2Hfl4xY@!v%A zrnC4@fNSE+P>wjRy-q}p|8A`RYxv&{|HoO1wQgTLjy3H2Q5Joa!+Ko9e-NsVvreZ6 zE~@_(3-CYK&Hi{j{*P#02|XDcJk>A{|D!{%q2u@zI<+6zrt~;u>am9L)%f3r|JPXm zr|`c4tRsMTH~(+PdcLuSZ}|D|4E{f;zf*oXIDs{N)~y!fNe$NZVedwR^3rGp*7gIK z%j;On*H9O(sg+_qzYz9A92OqLeHE;(a+6HBq4UV`;zl~0?1U=9wk?g~f! zOMrVpgLonQZ7=Xb=pN;v(y;&24zTZ=`mbyP@}7_GR&vCOD*vNu+!uZb{fhJ7_3(K% z3^I?Rfqa&{nP$B--`W@(#M=G6Hmt>NR=;cJz<-=9SvuZh^Nq7;+N4RlhxM#!hTRDn zVX#;H4W8gHX(oLuOwj&#nC4uwkvzU)rRaA~+%9q=Ws@Y}%h21Gum&`-k^lQ3 zG0KyVTps>cK%N8W(~sjB8*<@44DN+-;(riAk$!}KF@^RYLi=Ox^70VcAHMjDLumgY zwEqy=AAS5;tp6GR)rFv2f09nRSbtsq9%~q|weSmv!(WH3{$_%9UDXeA@dYN>Ptaxu zM%`E^XpAKwd)6UtXWcm`WLP2A{u#bhd&_3X4S8#fyh=`xCFA)!5Z;gR+Pi>xR~#?J zx`?)5>4j4J(xBJj8(%N~Dg6@+=iniU=bXsX&~@^q z1fGrd7dzq=@2p$qH|D77x28dFkk``pIPx(s^&@EJg$`xsB@ZkceBwW=ss98^(KeQC zx|mM?k_CLpiw4R1Z0PRSy1F%PN?m1~5yNln)YNzYN5e@&ttEy8{TlZb-WzGt`nxr5 zvC~>Q@V#1ozpuCT%FG_RD~&yXt)KMw1(tu(-}yOBo%{Ku=I<*IxwCtR){Zljpn?MW zySugScI^CIt!<37@94vRSQ6j117}$kKS;|H!P)#Ywea*!(`u2mEnVa)+TFdK=~RZ9 z>F@3A?*R8*tGM}^ha**u7+@Th1t-{+hI5uaisZB1{gF>zs%U?-6IGCPIMTd>XZw+r zLbI5pG$Oqf+SVOlxCMJZm87i7SOWdX@>*}SK@3ul^lJUsQ?13&7%ez@y9-Uz7SVXv zPYd`vwOY;Jx!gzIK4M!m@O+fU6Sl~y+BS167F1DKXCJE38Eqrck4V$xmpa3C-P*Yg zZQeFBKeqZ}Yh&N)ju{%VskhURnbIyW#&nu$K!{#zxd%dJ3$89O+v%nqUE4LNM}J2| z+Zx%{*@f-2+q6J%r$1N|-MJiP8|~Qu73tHWo!im)+Qu8#uh)#W0-;Qs--eU&Jt#ga z8kPTub>Gl=4@=(BqxE59dus;~bv9fJH?G@YmZr5p)q6EoMVT7?98juTvPm6~e z>(<;;sr9#PQw(0eVciz;`4M?By9L!9@;8gx+S0n6ZE2KqBUEZzOH{jlM_Xt2Dzdn$ zUMa6;ijG3X7Iy6VCc7DVukGFu1w~5nhHxY7!PXryt);g=TaKH0cbVN7yVrMhwXR-0 zRloYqehr7$S@A%oHJ5A9=@zYR2X~jlu&7LInCUW^5*rj0$M1HiQa_?hrrO7#KcgvD zX}h|2^qQ7HgZ6jPD0a3+z`hoUwd_KrJG)w;n94|*RHE2_+^@kJKq?)PXwPyb2xe{R z?~lZ=KN&Sr*3y)Ov>G;xjic;Mc4MhFLcPr})d{#?+*F?mNFBE!tTJu0vRT(@bvru1 z;)m+Sy*S7XW=t!bDMKmAnrt1($bAcvU)cbwb>)pTGe(Ee+OSW*wLijcZRygsu5Q(G z%wQO5*p5hR%Z|PX8#>&$fmfT{xZ$(6Y+ToL+op}{t`9e?`|O5I^;0yM6|6-uHqhu{ zpfL4x8f~M~d}Pul4aJsW;f(=}#k6(u&J*ytOY^t;{V29Ors~!k>+FiOUAe9Eo=BI* z{rf79GOcolCBqpc(N#!_r~VB?UFr8%Xze>b|9MzyG&Lmy9b(Ukkg!TF`$-Ee()9hyu0J68L5`1>r` zsu=bo@g5VFJtbdLvJe(z!>GB8xy zPD3@a=-<$}O*1ZL(E@6aF$G?sspAP1iv1iKrhU6Eo6jsdsu#3(_V)Gvdq}eBByPjw zG#+!H7o26LEmPhi)0n5jT6%DPe;e?7BmMVw_ih*EDdFUOBw~1R#?=Ap6u6j2_Y5n9 zJiOPYiGwG8*NvdO@8HKDiClph(!}S0e+G+^D@7*ZCx$LZ96lPJ5T0f{aXd*p6L==^ zaE7Yk3E^qR6UURpGl9qYX!t?T8B;YyrxCCjPY<3ro+O?LJd=0?`9gT&Ir*`)^*hrb zIes)e|5o|Kh)?1f!!vRvjFxD9G`tSz#2$F|iGoD9Ojh}GL# zai0qgpV4`5isFtf2KII{CrMYXuC`DMu5Rt?ugOM`0u*Ani3a4lcC3ac(A$YAL8Q;9 z+eiDR%ChOy#1*ib+5G%6KImfV^D%s5?_1_Gay{C24pwy#!u(9fc4JoJ4m|u+XVD_g zIDXJ&RQeA~7eqSn*26sfkRJ8Q`mkKmyw-$Pc*7;it^bJW(6traDw81TDM!M@t#YGg zI=dPE=#?U67J@KKe*I>;Vl&-XrP0SsRLO$!`*KdYNu(>Z5&@DPA1-FF-jokNXOYgL zO`LIjzK-Xg)9G#i_4xqlycPn;H2f6dvD$+8JXHJ%{xCmQI>M~#N%K|cLFgQ$ITsIk z<8SIpHa+drB44qDfjEmEeop&jhjWJ_`X9qOJXGH=!ko)RsxJTAa z!wY2NG<=RUO~dnL+cexYrHBZ3pk;PVi=QiB$-;Y2yx`U7C5#`DVoGT3%mi1bkvOB3Y>JP%cS1}+yjL5<;k+W z!0UjQnfTX%Hv>B}^6aP*Q{y%c?U*_O8C^wFT z$c04)y#-myPJXcEKl35J8aQnLeMHu`7I-Osvo8?8DJMPtY*pi-)xOQZsSlRCx^mL* z$-y7W!4Ku&&*$KO0=!xWW_s3z{Qg5$e#-m(9Q+qK_^)$t{2?d0 z4;cYTznD0b?QOF>f3{ITtycgKAa}Yk>zdZRX+8NYOGpcw{Z` z!mRju;M74Ye;D|iS@=faYy&I)4&ZDH<5M7?13vXBkXGPqU*l6CoxrEe+8pTy{&p6< z9l&46!oL8VvN1j$`7(Z&W#JFv_ns_#5Wl0a4OaR`fG4x!zk%OJvhZ)=x1M1LJ5Yh2 z&5C~-zw5K&p9Ow23x64STNeIZ;QO=iKLy^H#m}Dszb^}a3;1vr{$GI~%fkN_`1vgS zC&0b1CszI52VRqf|0D26v+!R6Kav>~Jo0Pc$FlG=@X0LP1>VnO;d3%|VTp632>7|I zcx?I*9M&~I9{D)%;jH+jz}Z)fPk}54ekv>dmB0g8>8}D_olz){dLg9qRpA z_y)ueXW?Ps85I292K;Cyz$148pUlFWm>%}aq8|Z{%}5!1JMe}q{BGbQS@^xc&u8I( z1YEPS!^+(cJdlOUOrQ7P?ds0v;u=0N{9enEzLd{v{u>~ixtW)>VO3X62$h4KGqY=I z;#H7MO{=f2tO`m~Coav!MUy@Kz0%%;Ri^%S$x2Zfv@SWYZtJQPc>jHoXcLy41T)FI zGxv2^DKa;PSOIHH*3^{~omgEK%sw%7ZBiWfb#%7(i?w8pn-tYun?0C=Wcax1+G{gJ z)dc=`yB|0fiM96ZBDrXHOF!22Sw*ZVw6$mM3FC~!x;wb3sjc%K#x*s?u?+7 zUCpm+_;oG6DphKz9)4G=xJs3)()g`1Lx@bNXjH0P5E4S5()>2cQ@N^CvDjkDaFwe{ zQK(YXsuYDaD%Tp73-eK=T%+=?QMuNr^lMb!Y84ClAWgN3tv2{E!c`jFH^*3mnn7Rj zR&CVCsJ9BaN`+iy)K^ivO3}GW(Z9+FQS`4;G_O+huTm7QQWUNZ(j*h7RT@QPS@!Abo56F1z!xq;K7#A51xP>_A zMTrCU05U)Q2-5FoIN*NbYvC&s2i%0Q$%S2tcLBNq`-vm}0CB*BCO%@~9@tvOmjW`r zka!*VBo2tpl#0JCfUb3*%W%MEK=N}R!{My#VL0Gp#6f4AIN(VWKV{-&7?)j3P=7!- zV4OJ8?IR9&(8Q0JxD(?Z<>LW#tp|UAZom@aNMA}Eunds=)S2OpW_UgE4Ui{sz@2#p zz54)}pW`m`KMKhFafa7Jt_%mPz_`bB9AB9ZTUZp{VB%wdP9OL|obw9s0qD9B@&j}O za$F>=0CX;eA4>ct@M*#chHKChLeSy3$oW$e&c6F*$P>^7c+kX;5O2VEN*wSk@i6=g z;(+Ige^%&rh#QdWC!|+TxB~P5DbFLsQQvbWeu4N(v}d6azYmaj9ME+O^as!lIL2_$ zE5zi3aw!3%Ts*`ZQ66!?GC-E20kWKWLgZ^R;Z75tG+`8z6{g2=U{!7ppzBuf1Ly`E zU^wzu&qw%1_-}x2zz`tw)iE4=G%_4;6QC-W;pit@7!G)p_-*LN!~u^3I#(k-94^w? z0!TVhK+@>}B%Qk$z6t$_;eamyGW|HiH-j$20Ve<{w-aXkX~tt6_Z;H^&odtMYB2F( z{#roS9jFJO8?X+L`G*;f@{S22qkxphBp~UWC60Wj0bO^ZJU}<#MTR3? z8PYIa1s;}vfqL?LnCAd@1J;@G^?`=GvOE@(~khUTF{PwZoqNIBmEgdq%XtVoassdU0cC7 zpc_yJWV$Vcm1q}2q(2JC^b>%tR_GU?8}K;e!K-I6pbz{3GF^x`!m9yYZIC~p8?c^u z1oARrBg27j0;HaHFuWc8gyDd3hF4+yA-)ac4j}2DV>sxa1$1>l?-&nwoH){5Bo5dQ zo9$c!y8y_1M~EZeen3|z@R{tpG)@DLBE0n+{j0A1U`Kf?iWphm$O z#`{q}LZrKkupI3I$a3R=t|Za^HI6IU#3egY5TO9|1gaX|91pE&3~3h25QdIjhPJjQV7|3$*9p#PTx zqTdXd@F*bjPXM}hB0ZoR@J+_EUlJm{7rZfD37~5i$_I1jq?92ulDNUTWf+3GV}RUIY6= z2>QoNc+!Mt2qD*tgrHxBG_Eh89|5`nbrV(qGF=-Xo}DI+&3dXGju3tdeik8~GlZl| zSPT7NTV0EGAw>I)5hCswA<8{L_({|cag5(di1-0Q#P26W{6Rw2$BaKth;mMv@mE$= zY1yC354-=Ys-`NaGJN>`XQ!a^x%Z#(4l)hzlwdm zFJWKri`et{g1X0q_mTPbPss1dBsFbhAMOy@BJnN5;gUon?$6pRA@v)r3@-;w&Hc8? zX8tVn9SH&OOy_$8PI-R-alohcJ^F%4?CFf#Ghu;dBOd8mc}GlrJ?>(GUEH_ArqW9s6{*4f?q6KM=S3hRu9qA!E;PO*8nIFzJGyEV?zgOXY*~T-}Df^?J`B=x$B< zCVpYB3C~N_hUXt(IcTLv8gYLQ_bC(SzET)%)T4aJDa(eY)gy>9Re6(UdCm4|@%utp z)91ZsFJsT_OV~5};t*t;*{jJtxV-<2dp5aGllPxdwvUDvX6>7eo3xYmv*}Rj2Wf|1 z6Lw{~`Cm zBCT=nka3sI@$NlvWnUe2U~eq-g)~Xnr-}V|x1`?0!>|(y@{CCv+B-6kP8UJWxPA=x z&_%&x2kxLLiAkyyk07lVFc2ae6Pc1h}JR8kXo&ftDK9bw1tdmrEc z(v<=3$1{xQQ9K%+9)$Pf*@@rx;fdqfgJ-hKoxndNsT$p$T8afsJ(iau-;W`#EGDVb zps&S>u;&@P0M;U`8cz+L5S}_bK|HKqg$a*$JIl{@c@j=Q)}8h4@k{DFXw`>3sdL>$ zsq=W^XdmYDVN9Cnb|##VANS@n3=h7zPygAW3FJS9hq^!=;9h;opR(qDWA;zVpIK^b zPJNj=Ll6S$taaj^C!8@GKv}h+_#4&Y^yp_C`MMKlfJ<%bM#^k!N3f@T#3P{*oD&=I z;wiyXibsgsLL+5>nyr3Bx7|1ru-$}k@C+Sr;S3l~Mc^);xq5|dPAX_COyTTEakXtO z3GyxzKA*tJ7nC2xHnjWb5i8RI-`h|h5YLV zF_NP#Jbn-E6dcIh59aqnaa7+qiE}ke11?!vx(<8vn@iq~?j7;%Bg43N4gDwEmQMAf z=WtHFn01G)(0)Nqv9FCxg1>Wk&fqzVCkXwk##4(Ygs0yhA352L-?+Pr^`TrSPxcM| zK8QQ=j^L3vj(&&idh%vR$_LxB|7L_C{xK8MUJz#-;d#g-3fcDHxeHG}o}GB^!*d39 z;4Gf=UB#($u!Gf@MUBUp--W(@ctGR{^mPyVdj3`7EI?nMgT7v{Nbg z0(6eyIgaN|JSXss69>JMfTy5mZ+Fd6JWh5Mrd;%5ymQgd=jo@roT)Qib5m!#<^j4B zr@LGU@;m?@$p2)6q#goJo5gm00r*ioOfz9Zrek~X?l|h%1*C<{Gq$b9X4yr}{yy}H zlYCM!m|DHZK;da29qemIBvRIH2EB#QS5m)yxUzNllQ`ANS6eB7e1>k2@7AZw=~&svanZAGC#L4`NJUIQlU9;8!a-UR_F$99V6r){9b0 zw|o`-G3u{HSs`b_uh|Fv&F&$8+_T?5QTPqNS1(MJ=yOx0`n*(`K0l=a*YP``m!|T- zQ-!`H71A$H#61o@PkwqE>5w1A6=2-s)N8>P!*M^DH}0|PC%bV^Bf^SM-#Xn1SxVt` z%bhy!GCA38PhBVLgHEoZ*y>>~)=Nm<(fJ#TLAoryQ9p$=Z+ClAlNggucju$d&cth= z&3;p@E7_|t>QB%XtUvFDtN7e**v2vR7vru$_K|TsW6|9sFW@s4@xBFn{bT*Cx-lL5Hg(zuy|ri{oFCOLp|GLf z)c4tVwCItJWk)GDD?jB;+e%w%g|U5ukO9N10j=zZqxpn=yu;)lWs;xWnp{ z{$_MZ;&?PK5%-p2FF+0MD11kXFOZMxQZ?!h)~y3J30yrFV@VDCv{Kn;EA9|k+Vc#S ze&1U4bKIXpTF9Ws_#tAyAqc%}oIwA`P6Ij~ruhZ> z)ltMvHtbV(X5wx^!Jet*)DfH`MxCkK;>wG=Y-|h22-P?Am2H9jQ?T*wg^bH?qoc99 z0ZoR3IJS7T{E&X&4yPbnfm-mmU8CXLznm}~MeU+k`w5#yLolXJm;&hYaP_~qSL#=W0q;H5cpFV;H$S;!@~PP6fb zGn%H1$XgwF8y?7udoLj?mp&i&3K;wt@|ohtxDSCo27Qfc@Ds}NF=prI{;W1@4}k9I ze5LneqeZgSc{En9c z#xAXSLW=A^)oWw-kJKPt2oL*d9U$}lD`-~(R>$_Lx>G+{ZQ z?*P^U@~{@b`O;b3E6ngxV^?1x%dA5hi(i&Sy|(<;fa$x_Z(W76=`8PT!-E6tTP&|s zmf1C&)#X~mO5CYXjB!gBzq;!dt2L096L&l$1@j=-dM9Kig}jSkMetVpWoRq*N#1kK zdpvl*4$tA&0;g=P`>uSUko^mgu~*tn8SnL{)5UrqRy^yRkY)H#M-B0u9~%9BreD1x z@GS0GNtTcn=R*cB*1f)CqaoA_VHq2EC3L+EZ5W6>FtAD{wxn?vCw)$qSA+IgQFE*K zcrRNZBsH<3L|IllEDc;?uZX!YZ*?UuQ}>Z#lr{MbAuaQ0+3D-Aum?G(z`f4cGpR3> z=)%da0<0^{*DHE%v6aP2Gd6GO@p%qCwghcBHIDL*bebZ9D=}sA#M}wb#-ul-C^iA=7QT9rHh) zhhG(XLXJZRC*dz}y^QnBGVo)qk6G(y)X^S{tGsK+E)MXu7VU%eaIC4>FxOiNs}aY| zK)zwOy(hc@W0gmb;9UboKZnm3Zg_nsp6qoq-d*n7*DRXcTv>>5j%WVIW9q)`<-98i ztEaH5L(qNRsS|>MKb>{I$!pMI#=D1{k~f6;ikf%$)H(P|tYc{*B^$1loq#`nvMUcV zn+jtY#yVHhSaSn!_!Js<5wyea+BPlyLf8VV_n?opAufWotfavM*85m5Up@2RKg9g# zd*HtfJ_PQ|h75g;C}T_9J|B0$;Y_~LVcuOtdRRvSEwes20}X#>(**7sKi_qEViE45 zK>G|4?+6#eU)B~xu_nZ@+;um$xeq#F=(Fa~V2_OUxC(2F)q_|UOnetQ;FMO}4>Nmy zt1mF`$KfxbLgu=eF~_8@;)_p;nvVws?H@PK!E2l!jUqYyZt$?yd7|sq6#a2u9P7*Y zeX^@DrQ*?cv>Dc1isQfKAJeyBzoBo2`=M0%yqDSModk^s22OT8XpCLx_q3_h(~KS0 znvL-sGEg+l_C-SF|5+|6J5Je2G^es!1sH6#ErX4j>B$sg!c|a z!w({yKH(c94D;cC3EWxW^_8NPv9{~PeZsyi>?2=6A6emFiMzJ>UI3pqAU)whtR2qN zna3%qBId!TaA$bnm~UqYzLRlh0oH6_j~sXmzsMR_EL(!HSn*yFp1Pj{XW*YFF`JSW ze;J>gbEIms((0LK*gIP8!4W=ev+BiLcW^?QrwDm4PMws;NxTZJ3vb!fj5B$P2u_XS zrRg{Yh?k~o0lt2w6FG5y6z8Ouo5#e#!bdD$ouU7TX>Vw0)7rZ4#hW?RyUBS_e7VNs ztbHBoz-kwcscwyE*dW!%ZErqx_Aocozm=Ynn>z2d5ign1%%ar!cu1i$bI?*9Ei+D4 znp?nTq@8};ZR)7nN0rUGE}Y~ys%n(qmwj~JDis^#d=Ld#!=ZU~$gZxl4~NQmgwIN& z4kId#ySneincK`6#@&B~W$@`6?q+*$ zeD^Hxr=R&sdyBq7PrU;zr;N;N&}M`~_4%e&zGEsUj;~Bs-G?#O=g!aUqs^7%d2 z86iC;w9bW{yY4@IgP$j_TeSJb?>xKR9ukRP_kYfZVI2nob1pWd#&4(j6Mq8={<6({ zj;+LgANPl!539+d#mqL70>iN)VGyM+W75H6ZroTTY z{eIw+NZ)9te-3yM1vi`c3E;!Pt@@q?4pg0wWPSb>_&#*(i)Q+T)Lj^I&BT`hw?54G zN#F+&KaAh3Ph(DeBnzj#=*z*s0G#_jdCrmfzmgSC`hzA8ktzB7=d5_rdmQ*(ST%^_ zH}gLW{B7V{O#F4=)o84vCjMjK=YUgwO#eRcsZW8N1y0>IJ_Yg%;N-)?e+8Vj!oq(8 zT(eMtqGydMScenWG~6Qvz&B;mdt^TFcoxpR>}+e}l$HMfGv}+!nJN$DWSt+%91Y4G7MeOIqtfl@ zGEW*=XNOvh6Gw)Vudb%S3!uB&aEJ;Q^5ExAT!?^KYowpYsxoi2<%@5dwzjlca|D&5 z2`_8S325CVIOoLN=CK^UJ(wqvgmbj+Rx7wY){mExMlIBQDYB8UXB+PkGD?WtZ55E2 zm6)@M>?31S$C`pTPh%Y*GdZx{Wo_m&Cs77DHD@;`E>=V*i^ilq>*!MuXKAcxB_{Q% zXK-tUwnf@;amf_c+8S-a^%G_ul{)Jk*aki&yUs3kg%~D&O~!>NR>rNZO_(U6oJ>35 z&=hl1$UICogQ@8uMwK&s76lNHj5^J!Bk ze`hPoj5mU#k__v@+|g_?#izQ&!wi5v;WhHTxE!awJ5!9=5S)1`1-6Pe!)JM6cV_xJ zr7xAiYo-%a)84Fjoa!sB1a_b~BcuRxonf#+;~UWyeXc8QGD_ z3N#on*E0;&m?j4+2KVw{AhAvCMnp4GafS zTe`Mo0&ymAdMd>n7RGo|P91_XPV5mi&erjlI{Bs!zNvF>>e!n)^;T(QG0x4Y6LaPX zL3LuT(m0WKHO6C%FHQ{DQ4`W%;(3jofIP2pp9%Lc9=^(cLJYD82{EX1tY-dWfUaho zQvh@WzG=d@0h#Zd2`>^NA2vmZ6TV0_A@cL?2%hT*0lER}OxOU({LLne60%%E_#&qX zk^j62Js2OEzKjr#Lp>oJ{<{d_4Dg&D&xH&lFJT98H(=C+weSg@aOmp@G0)~XJf0EQ zM+iFfF}WB2Bp}a;oH8N)UQv7N>)&X0gU~``w5p}A3PxGJqE~gB}V|=fCq_#?ig{v7XV3rKf|}- zybQwuLwN{afqgNASWt-)YM@UDrTs9=u8j?onwHc^8&-Si8^;j{W-<(o1sUr1jh;0NDR z-hp~zUdB4Bb9KKD`ouSjTv=V6eVj!5u=6C>)?967`0(>27tl|$&y#p%F6MvO`y_({ zyD>3}2XRk*{b8H0CuwubpKZ3upFfQMcd=LZxNT|8<4DUr9}i;5=^4LM{?h;3^i$vd zApI8)e~^Cq+v)V15A*-_bb93522K2@828lf)<74=-G}@R*|rHUzJN)abfD(}*I=F1 zTBX+)4A_2~4&c2>3~3)ZZ~SkI7I4(=$0;5DU&?nMp|u9*%DccgN4^33NY|G*xz||Y zjr@<(BYOt$PrbK1a1ie?$p=2^nB(=^j5woQ-`ScbdFj}^e$4!kck4#VsVw1N94@Smw2_1X3e|NAs#``u;7u}>j@ zeF{9U6T}%F4f`kXt~s0`0AKMq?%_{jPVUD0<(ut3ybr1ZXMA+*x#7EGe8Uh4>yXrN z)e_!8k9P?A@LngMCiYLOF7+bzJ%zk>lxxsPvK3=ra(3fe?D5Xm9rCkk-?7*iXs#TH&|d1Ag~;#kmLWj$NOF9T}Dl;Qp{N z?p21KF(ccd%-;<}=u%V!RKFXJ9(O zNAa5L@qT-F6SZDhxF#e?{N}qU_&&CuEt|l;AhaodIAGZI>6|6;^XnV##ir#=rm zV%V%={VlYk8};K}sM&bKdwTI6n^Np?d1=TKb0$jBck^%(+k*C$=bc zK3bS)ldlx94T(Er3lNr{Li3{!YqpQuLS+|lriFWYEdAr29$!eaeO~dY^bjV_zwEEU z6M4lMp*2qI-@!j5sE@05Lh0NQ{d)=q%8x1dmGbW^cq8nfVK0txZ&Z$~^8z>6EP4L` z{h0OPoS~u9*ZqZtd=BZ zCwSpB-YIqz`yQw0EK+;UvgMo?_`coZ>xpz|lflq?NmHl$+m!=LC=Sv=Xh_&3wUqG z^RUOy!5%*gdu-U?M%ZAB-uR&KdK!Z+}QMc?!D9{nEv?_rnrv*e@+e zvv$h@$OhwIXu|#n&|SRo0kbJX_RAm>>aI<0M|fVXZ+ybOUp~Nbfw_%LcH2 z*LO~{bD!USS?<4F{s8Y%e!2VyY3d8xbOG$?z2*7x=POoXKWaRPD)3!qW6bjj`d`YqzmxUxZFvu}jNstx?DpgzKM28A z{&o4EAwBEoYfK~kx=W`23DT$2edVtsJ%k{6^4Th!Wr3%=5bZL*_5l_CEB_t^Un>8q zfrDR?)0Di6lIK#|S&ndL6Lcc>Zftjd>bicVk;D+WF9McAl#<6PMLRYlS~4{-Hn z6;?D~zZjjLLXm|Raehy*r?dhz*|r+miMp4s$`ENX+s$R-m#Og%BQE@3YhN7qC({qa zUUhXo1+&NjhwKgHVeHVtHd>TrSnY9P*F&L5Ps%eZ$KGI8w0yT9H~KeUPESoQngDXUZPEvOGp z*aRK2*5E&s!M`Ylzfl4o12aE_$GvPHhx}=f`#m-6-=;s~+t2pdgZ=ACgzXK^g&z2Z zCn1-1>`{ILfBjCv?+H{{=O5V*c_xAV&}Y8mhi5jJ1~Oe}la=Tf$ zR)y@t`1%lR!e2m-1~5M>#EkMG^xHjnFIxh>*ddJ9zgWO`r{i6&kjaBshB`Rf0Ul`^ zd>ZFe-trYYm)K$Vi$W84y`R_1eg32LCF7+q1K^A20X=v(ENvwH8XNY8bM99t^K^Cg z99BTz`B(Bz`mIeY+k^KG!`~UgIX_t%T8|y^d>`6&@$HP-eG{i`KSo|n=05%()ju5Y zElhxUZ=ELS9s^Ww(&5HFy>=XT;un01zak^P@eSS7Hj?E@{D(7&sw>8`*#vqf$h zChv^5Ny9K?jJCTu`9ZoNxw3IB#_bT&+?+{cmo38%mFAY@Z_`_nEbm{_)9EX=(o@OpJ)C(Gv}EZb0^{4ln9zC!d*^y)rpsB zM_GhR-$NZ@t$=-`snjF*`ypYz6q#3liroDukxK1k42sX7-%9*Be%NpAJ5RZ5-^OX` zvbRq&VwRyJ9*4Ub)XincvJ-mWWuIWYHo% z1!VUwmCpONiDq6?pO3c8oMbY6qV~*bey2Tr4ZEDV->FD9bNQUKy>nl2^EAYsM`ONu zg7qc#E9Ef`t<8;{^P3~spFzF}=iNZPY}^?ReU|cEN?-FprTCQK4&E1Xd{sZSX}W({ zX;fOjI1=t?x|L>+zkhTId#zE(jmk#tK>HHByXK}Svb3j)n-p5E4=r^x=XFn*)zY^2 zxADQPtE01hBbUFS`W(JU@7rDlcL}9@DaCU|N@rtxQAkm>wzs*z7;U8#fpIy9&dPSI z?)>G#ysgb%6^BYTUn6y|7oTQ1D%HK}EgV{=lVCg1|L)qNdv^HO(p>#}_G+B}qj3~T zX+4DY_y0nCYuZ~ILtL4HQhOU0&unbhy)`%7aD&|$Fu}V^XH*>?MGQB;Thi|QSuV~< zHGQnLdl%0g>(O6_Z;cKI-3$3h?!suZEoLv~ExK%M8zFP5?mg?alq_D?)xK^E2b`wU zo1icF;_Q@zrx0OIQ{MHwan0z%V6AIFN3esR3@awUo5lM-UrV2CgJ=^zP`HY?k>p0nW;G2|zs7^HE+tfs8z- zD3c_XlQBsz3xrKe+d-4x`X-b9$gLjOZ_Dn(+!f=Fv~|dj9)-sz=aEP0Q_;9i-WE(0zh||bDgW^iSEKyva@`^G+edoy9&cr!-+DjC ztMHU>Jr%g~{D_vF-p})<>yh7ryBy5CM{e|}`FK1Q{VCl2iGH|`=T7M5K~_5JFGPaW z&uaiy+7!O(KzevO=R??C!t#= zBK5lN{{mY21H&%;*U3p@*Q4fC~R@P~Y)A`=3F-0-?ExfCsr9b4^Be2@K?9p?fM;|K2Z}=XA z^!vL$?CJtXbXl;`Y;0=pK;qci+10d8mod5$%A!(9EL)LKbW>ny+tyaodfz(z-eNYc z$A=U$?^`z_?-+hr%`?ZwQPoTrb|m~$=s4)Zw|OntJmR}WADa1Mx)ntk*4E|gVK?}tvEhP zwvOlvJN`!8kqGy~;t?b3b;Q)o=w(%Co%;kk*KseaTc{%{m#zk;%GTbz>B*m#urlg} zDw;^78&F}s+jYI=UW%Swrp@cyJfCS3n{}?b@hG=Tox}Xcs2N&SL9172RSKOG_oa1c z6%MVg;U(1!6EvP+7PB!h6U?Tq1$diyWiA~)nV*(4Tf!qQo^tUW z7jtN*vafSdI(p-fX;}0&K{~VDU?$ivTImrD>Q0;ho#%d;UrYEh2hWJc{vFX^cEF)o zjI?wp=)_k6DxMlJxEMJP%miCRUq|008r&wDaHPYh@VY_8yItnxq*LbLaha2k0OM7F zPFnj46n-8k|3#qu^FiAB*O~c2gvc_PgEgXwuTC^*&(6OdT_Vv!#rHA#P|=`t3-!gR zMKss}1`w`Uw6W<(y7aJ1XN`003x%Y!!KFJ~`gxZ=?b2slI-4}heW8%>D_yz?RQ|Ss z;@@^q{OcD@`lTzVd?Y~m<0HStV=lf3iZ7>m#g|i}QLZ>68hi&7pBb90JLwwAU7kzx zamLc+E?wc$y8A}qu660%pwj<}i`fhXqWRchu^v=hwHFyr%k2nuuU>l0wcYP%{_5*%Ib;5%)drrtOuWc|7)|uYhS>={>1r|??kxv zK!(;`4zS-vk18sAs>*5l{98ahkFZOpe$giO)N@HXB0 z_HQR{{GDvlvXnTN%zokS$yGl~t<2qT7QStWFJ!W252gMZU8f{-neV+AGiP5spLz+m zZ%5)gr&j$kRWReY`N^;$UPHR>GI7g~db0-1B5y0Ad|;?Dq(k}Dn&N+?vaTF5%ihc~ zciTMX@V$v|G?8My@tjXhfrp3qRCUarW0EivX2(fG_*BdnPNGU?0w>R>q9+Y}IGJh0Cw;iHAQ=)xf{ENXu9Ivd!k`ZZije@>7VP*(X@5eo^7xczqW6of9QITV^kO zasu?*k$1^A-`UCcQ+-LZBpR-k-y-rcpZJbB@ok($e2%}Lr*6UhzY*U7;u{}1YO2Y@ zoqXriZrPlZ%z96R%bWTAlNWE?o>L|MDqiUnzR)ubJ}jJZKDCJWzSI{pOZlc>l}lKI z+3+R2ElFjh?9B$!z5WFJoo#$iQy%DFnZ$`~^EhQV5H-F5$~U8GC^h^h-{4N5S9Bst zT^dfk4Sg8;sS}^0ZoIJCUv(z+qc`cX@%!|N&ykN8w)m>vN&Ogw$D=1^nP*O@JkO?n z@@B4i?nEAOBq_IdQ*XSusoT{lnhJ+pwc&N-1| zW|OCRC*q~!tIYM8Rk5|>t2o~)nrG&c#zOKKrhQb+fcJ#0@DHF5Q}be>x#h)jQ~P4X ztbVb~#9k~il`n?OQrcS8i^+|Xt76l$t72U_Rmq*xs*<}+Rm>NtN|pqwVrE4oWL6Fr zn^nVw=GNhIvu2oY9K&U1`EZfBY548bCgS??V7+mJ6UKBp3E~(o-8MxSjLWFld)?!>F*nk`*#n={CkFtfA4V8 z7axxMb`HmU4^n?08cv#rhvVk+!!h%@;Q;AsFb7W7nZc7?=Gl`qCULUG96EUyY2U82 znV#X;@A#`wXs67M3@5iwt1^$8s-!Qo%JO@KuZp87Pv(-RGV+v7o{GrFEb>u7xH0oI zaSagXQR04vG(1OI9w$u)N!t^o@k!Epm^6Qhw10UxmT_b_o^b$vJT{!A?*~48Kj5Pv zPb$TLmHzx+UTeMFHFxPr{Gi{6RLtTT3tdNLV1LjhfPnk+qadQs$diPSScRBj{mUK0 zu8F!d9ld>CP76y0ic8NtUb+7;cg46NZ6i~Bg{OGENAW7mvFoVAmx;I9b?^DVoI7tF zRq^YQJ4BI@M{(-i#GAgJseQ&dBd$jCJ9a%YlT6)n33m$9pJu)jCMBT}(=7j$Uxlx- z@OZ~hdl%Jx`r$qb=Tc9)`EPzbGiVS!N1hBySp4>$3{t(;BS5WB*1NRooYs?C)9fuD z{}~e8o`I7&fOjx$)TIXhs50?o~ zGdD<=38&gG75<8NVUW4;GUOt4LqA4WDQ@y(2hCh``Dd8Wt@)vYn15-vzU_w#2TlIk zQ)XU$JNMDY(Q}#Xhw6i&+{kU z0-d2Za&|lU4tJxY5KnNX9T4Jcl%7n`Z{4aoVy?Qg`57`gx6{XdEn9Tsc+%ohP~#6$>?KTox$ZaB_E@F<0djc!`xCZFL?r; z0mJM`{nyiv`puHP=9lOwSr(dsjqqizIyyM)3v@pP(+uop@C5pN@`U99<*kFTGO?y00N@Ud<{SVoyOb zH6dcozg^}-kM(RSJ2G$E9>aNzGgzG`j*i}d`Alzk_f+&-V+R80z-5_D1J1dM&!eCA zTpzqe#+GiFQ%7{BVt})B2`^%@^5^?ZbCKW7i+)FKBJqen+_9VeGmo-Yrq>_d)(_AA zb+0k6KWhFPJV;yvzaA*%{Al>qzrc^3-~9N|_yO1<`<#Utsf^{tk&cJ_(c}POOw8EP z!pJ=D$DfVQdGoV3n15RoJ$1wv&3VfgO&l`ODX- zrMJ)Pj_P^dhUk|8K1>pdxGwRF!Ozfp zPML*^{Ez3-mlJQ{!=y>^HR4b4v?t!eZw7wPP&c!wo9S&KmpYh3-K73F?V&$u!rdCP z3$E~)u7WW4<4{VJUySw<5g^*|@1xOG0_nS*t$tgNV*owf7Gd*86o9tj=Fm ze#7xN;gYBBBs2I}j?zgj=UmW`lh?u+nAsc7`5w+<3BF3Wd3lb!JWF0i&wEuqjxyIT z_dP?OlE8hiqQdv=;69^z{zOE4-DeKYuJN&-#P^j!WZA(opZZ*rUFmxs^jFC3KC>M6 z;&UQnpLuR}I4;?224-FMOxkeBOIzF@X3v9kCF3#FpVn$cv}G6Pdq?Dk@{-7qUFbV9 zc)WFGZ^(S5WTHvj9zM*z!q!^|>$`Kt(XI-8Pm$LeLAYo>GfRwEN*RoZ0iH%9zHt6em3KqqBG|c#;}A%9j5-q^{q|kwf-6X%2zI` zzl@*MjnO_PpM4hc7edE2oJbmU)!E~4FcO11|Ac!@)MrXxU+Kv-$!R**I9!+{?eb^*@1o-`KjFfJH4}e-%)Sko zX&;Sv@I&t585`eQ^fz)N-95S4*&a`HbH_;!?{40Gy#2iUc@Od?c#rTN=6#;`DDQDz z)uCgcGd4SIlkwKJP4z#=xocov-Zkih*XJJNo&lws*BopQ79_Y2%9X zK8m?BWAc#1a0Ty`>@CqfX-5Z( z2wUU7!oD2O9C>65WvTM~3h&?W{=DF$=KFUXZqMsI*v`4i+l;x%{J1XBKE8K9eBvv5 zE@7)(=8(3&M0-YWEIiKc^?WyVD6+pjb3pd8Bh7uJnf1P}P{%Jlb{5l~Vh>Lv|J0f8 zsTmn2TA=Y;e34ueBtDS#kzdf=o-v?(h?0GrJ}5roE->OQQXn1f-R%L|uKFpb&MB-> zH`f$Mr@V)|MjSWEON4Vnf%=Ml?N?hjwwyvke)d*Tmsc0$nk5CVVc*|Ab0Bu(6z+a2 z^yQcpyE0Av)Le5*ls!PZkX=7_G?id~@sFc2+uuHUK)Q~i)rW+u6EvC&@3vF_;houS z$H{K`kNA-Bqq`sOH$L|N9#KCYPq2%}hs+syOEx9}PE^`J6t= zxeJbSwXM!S>F!f~4|7g;nDJWUl*TJg6Wo<$LK%{YRM+PfpZ5J-Drx%-V`lI9Won51 z%Q*%A9X=2ri?K;`dAZlf9ZS7)%16de#rHj)g5v6K{-16+kFL5)&$fyMZ@l1g|Ho?Yd>(DrM{qxe4uC=^(q`2Vje$a$L??} zLG=166Rfx!zHRrt6u~X;Bh*pJAQz6?j$W+E(%79!oy46!b8afgLarI2@06c^qVJPG znmyrWMNh+<&k(lyE!=abhnXD}Ql+h+lG<@**CvU4{eZ8vek~#lg|ygT{Xa z``3{Bd}i4J^uP}VOl5)gRV&SmF$Zec*Jy^E1n{c%1okETHlzGEeS(JN46?1?KSHh32Wf#pX+UOU#$|M)St| zj<;Uf8x1YWm3#J}S>JT+zyWzGJMSOR&hvNvT4m=B2O%Olo4 z^ltHF6Q5RXw9fwqpB(EMi*u2;bZ@}}g<0%Zm|_MHWwhT)^Rk_`j%cr#{KyVj;5O}R zeLwYG?u9uspGHUrG?Vakzr{RcMeXm&rL6ne7y1<8=POQ%(DxsDG%x8EFKJMoCXt>OcRgy;F*47L{yz0d^&uDkgvA{{ znZ*5Vc$Ao-@QisF|C2%8(-)zSP57U)VZ7wFqc<5JvMM5pGqjDk-8)G`XI#jQ{4y11 zKXX<^xO}U>h;L77Yf5jJcJ?Xm(^Q=~&ixqd`=1svi%YfdGGuNqWj{J!J|%ZgrF`bh z4ce1Cq@S<8zS1q5MtI?bML)5+2AXSGm{&vCz&7ZG52H{vz>aI{H`xrJTb$3dV-1ef7{IK-s=A?6S_UqG^1smyh1W0 z;~D8!xjE&q-*+hT&!goRm761hm!_-Cz7|j!X7xtT75bt%>wMAj4ZhHBir~ZUv_5L$%-1~i- zBL7Sna_fT+e;W8S^>`Zlu70s6W^P#YCxIdMN@w*>Bp)$kmt(D0P$u7>i~LN!zQrn@ z&Ok`tU%9+T?qnAy98Qo#?tb-SS6@9fax?%bQ<^xU7nbWD)qZ3SZ5haEU(-Zwh>h0)9 z%y3b_#F2q|qVo3#mhYLp@1~C2Ho^2g%C&m5%R_x-%tLKmEBt{^bj%F))v!NqXZwUb z;oXNa!u{=jzG)o@cTdmI*#yVwpNv_&$B&FqVyfY1*&cJ(6(+iEv(N0wHGD5yL|--| z+P%tu4Blp#ncOWBx-v#y=$(15pv{Cx`_A4neY2&Wv+uY-_OoqJTJrP&PRP_m!0FAxd9X9j;&gFCpYtUf6o-t&XxY-tylGi%zt0>LMm~) z@-BJXk-yc}&lG%uJ3y!#1y@;l;{^3n=LWoRWrn$7k9mo_bh9?bXW{7XIsR`^f6VWV zGtoTOb?X1h9}T^e5h@B$UlV~?D{ec!;fpVl+n0QrBPH(}2M<26=J@ddPkD=K58&?msi%`7514OHhsVs-Un+SjkjxDqWd#ww z#i;vEyvC1SX?7*?>h3_WZ#8^S-PN9^kXc@G3wz2$JNF%{k5`{vIQw>|94Ma$==XM6 zUg+*5^<{GZ_o**lp>%!1r9&n(P4Vmg8}Utf4Ihn}NytidjP1v1zajIz($ZAub|*f` zmYRD_RD9768{dO=zQ9@-ajxB?HEuAW`=RUw{hmk-f->r z;BD+N?lJW@P`_%;;l4=T6yJ3A<cV;hVZqU!qrtS~brBWpY$2gONbBQ$m-X_|S z*{b$g#dNl?a*5oc}V!yg*~~)Qaoa@7Cihpe&TG<)labyY|gj_B`=^atz|#BWc`q7EP0K)y&QQ!_bOFK ztDSUH22(1&Z{v8AKI@YOA-C_YqhC;+RG#Z>+;d3UR{|^UCA&3WXjB5&e?q-q)aeBHmLH<-(BkSnJ0@>FY>!f8Ah8*w62_s zyeD4QQhrX|nprZv6ennb(MSMdL)mizAApkkqG)A*h&7HR58mu zxJz=dWA{Y#>&U2@(;ZL6r)e%s`Qq+`&1bDSI9R|q5wG<#hRR(0wP8j>7ntkZCz%Il za}Rc!`_Z*p}3`lXpmZj|{Gkv(=D(H~Ko!n-GM zuUU03bBQ@UsnB%s&el`-7Ba(&eCDAd)miZ`mvTZEsc#4KbHdUiGuAxn?eB0XX11-2 zz2)@@lj##U)S&7Z=j<@hYrpnw@s+Uw`I85apW)&d1}~=Ff%ZgH?j%cYrtWmC{Nw<# z&8O5i>r9%EsVV-~_v16X{$@XQbC`alg+2#)aK7Xq`VGoDfZKwrla>PJfK=&T+p}r?kGKcuqtzh)3qP`jLqfiqR=c zmA!teE;x0-DW?v2=G1{nq~p+>M^ec;KjrH9%jNq=jQ#5MW+UM-W-)H6FZyCB<2yW> zRN=i3di2b1L^Tkw)J20=^(1d;?)y2UfF5wKCVL{ znU|^$l#F20kDbrd70E7~m_pllkpAJ-!du@r)3JxY<9p>_ZY#}GeCt{fnO8f{k1R;t zI847Yk8i_E79gEY50|f?4ds?BeLoKGHSesBrrtyO(8>X+-9D2M`Pln!kk4R6c=uA) zEtl?~f81j>&@P*H(x*T6BJx^g$V@H?WyGue8+}!i856im?X6?2Q{d-YbC^?c?i$}& z-Ewg1roJo1D40lEn+nqRPK?A?#s{vVo^`BzWI*jYT#ml6J2q%s(7L@dK7P7njW5P` zl^A_w5FUKBu+0}Dt@p$KnmqxtYd-hDGZr;a23ZyHj%?b()lu!UN6(XXp!uBY#+#94 zzBppH#u-OWegC}#jMtc}@v3n43D)+mAx(ENkCe=C){Z4rxaZ#Qz^>o_$$JUp6Z_aP zN8ze{py5n^ps}(SekW&eUPkfT@9DcW`H#i@!-V@&_+8`6oK1UR4poV~n1}oE^H`Ie z5iV4i7q1D(o$M~`7lOTN3t9u9?&PBLTm15S;)n97_Hias!`kOr;`=w^%`dM+elA=X zE{?OFXXsCy`JdA#Jl^+ys*o|RvLL@Z!>2JS?0)NY`k+a@Q?0Br(8n0gT9zSCYPW%k z8oP#53C|_}X)HN2`#kZ9C-B)6Omk)+PMIQMN|y!>kO zTI$_MI8jH&cG@yJ-ag63t2`JJCmrzteeXNgE}1w!klaS!Q~bIw&iv@L)cD!qM6>TZ z$Tv#MQ{+|r9bH?yiazLX=aF~p|B$rl+gpQ;2ffl>ypVU}|BGL_Yig`5;SiZ*T4d|5 zPTet?^)LO_ckFrFwzBphTkp0OA*(-yIc=B__V*F|;Dxf|P^XBPasT|+Febzbt0 zC);WKS9&GeWtg9lz9iAA{am=lbt&UO8yfqE(X|;Ji#(0!r{)qKM<#8`z zXdP^)tuxu&jp~J=ekd7ub^G&X==}Ao~o;K;v~7 zod@LaVw2Tf%=hUcbg2p?Z>e9<+NNZHXU@mm^f>+3)8|9fk4O5hGf&;W*c`t9TJz-n z^yBwC-&Z6ns6Tk1;PLZLoqnC~bc*``{jA!F9o)-}`ujTi0gX$VJ0r`_S6qrmb0+lzP0Rz3<7s;fk=sr%2N>U*pZvZr zzx$j|Yv`CoO;#a(H_sRUJlP+=gE{2y2j>lA$<o0G)?lQWJ>{*#>DVC!DCiSmt4vbVx<(pO4d@s2=j2$I9Su6pJ6^rzl+pf9!l{8sV8Qz8B|P zpW;^7ltG#-jtq?~?&O878!QbwAVT3lM|&`PMxm#w<+m)eSXJYg-@J0UrB^I>>}zgx{MV2%xnH@w(&DOG$K9$b$9$C=-m2A(zf~|v z?rWEqxLE4qA{WaXT(!o*+nn^TA>%xCt6`|cWh*SMx%sypT;s%hGYpaa%`nA5C*0*Q zNAy}4B)oI^YT=mkcDNbn5(oI)>|Ascx~;CNWN~QA*3QoM&FpRtb*yjh46X07N8S{2 zSWIzQ%eFZzH7oqi^=(^PaMTdGxpL7xr3*?!_RawL$sd2?HPr%tNb+Qv~m zmvO!^%D)L8lFpIaTkmLW?raEkt>^kyt^x{08!kA}CKTNonjgBEOItZPhm(vpa8k~F zp{~y6R?@_YIO{thIlE^I2k~?@DPzMWN;`p$(nwcQ@+VS+i_? zo9^j#t{x)dPVOqv)wp;r(wRiM1(rS7?Vb1C@F962*D9CW+_QqZxQ1oq zz#uYNq%^O;yD`+(9@0%JoY+)EraC+Cvv&w@9XUHmo7)>Zy#%XZDB}6$p~4GNUKIK? zrxI~dGCRs|m~+v&PnW4PD)s9_H+FVz4u?ihYhq)0`$p9ru3!$?9ox2qY#j;d?jQ=N ztMfkbp44pNjvC_S@Tm0-PQ7xEM+*Pib$97{r#`eawr%ce3Kgof*i^o;Y0LUejdQNo z8ArvX7rY+}-Pyi1v>A8nLmTi-+H8$#;sh(3h+Epb8n1V&b+nnXzb6E!(oxtW`I_LK zx3q>l*sFq_Jjz)Imr`%t!XNhSZ*APtMW`QK-XrzfhH-u9j`p_MT{OSWE!<5^wHyuF z-bdWJ{?pWAN_I>TN&MxZLLi?Tb{hc>o1G=^H&->1u_bvt%r zgW9H3e9c}HWnT?fT5Z{q)}G19hxH#L>Auvx*kkI=h+8-6t!?)5qb*&{8{IR=#5xsY zlbB3}b{T8ii&G}nh$PCTy|7C4$h|=OKC;_PXqY(cvNu(IFyGxasX9c(X`4S%aTcn- zXi;mQ;}-lTokO;%v%S?`KhB-v4WTA#ZDZ&47uPUS{A!Ivsnr+d}T)+uG65 z-l>7ihCk|dv>P4i)b4HXyj!eu4w0}uTSMb~!l1+P`0b>UY;5jq=iIueS{wR?BD^^4 zt>Wr}9VhB0i$c11e1UO%+m6!h(deQ^dFk4Bb#84_FWaEe`64fA&VRjn=#BqQNS6I7 zNqX?Y3r`4K-*%rJHyt717Dk`;)>hq@Zbztvx=p>AOYa-EZ0v0A=%RDt^QXs`HQbpl z-g#bZTcX&#qf;iBv{9t1Ydv+IOA0;b8W2YMWox)_>z0--8<*;g%Pi9Dj3bwFYZG}1 zx1IN_H@xdwo3~k{)7*GB@yV=neM57*`+I%M29B6<%-3(lyrZePrO~0)-DBmZQ8&~( zH_JyiH7p%%iyjZ0j`?B^$iG@Ty|z;pAIR5B^2_lpe|8MD&HcX3w7qpUTk9@J<7#yV z_uYgogEE;8$>Bm>a<4RB1irFIl39BFqq%)z}A zpI4@~s4i8cm#)`t360d#drCu+g!Rv9O>SeP)o8%JFs_c~ja^$i8>u9WM>p2qyv(UC zRQ=I9AwjjZ87ZLaz7AX>Fu1-xHZrn$CUlS&`b%rUAL`TASua7h<02~OR?*O=_027$ z^O7;9$GLvAy}Kb@(B9#V&7>EL!x~z$vW7@K!klZkT* zeB;gIbvZugP8H6Gzk8fB zPnjvL+uF6MWbp>>zU1-Fuu{OBGuE}K+_J{_vC~U->|KZF`JtChSI)YGorJ5`Ft@E? zc|mm-r+U~zxNO<=p~9PPxou8p$$~`-iVceP9Dvfc)v$M!I^;JCw%pg+wSEKG)#+f9 z_p7t9<>LLpo!;Kx)`rFnTQ@IgT)&~2gUl9e-pFZZi1mz74eMIk+cwLvvt9LHL6!tM+|u=b=)BVH>NMRa;NsYQ_Ib3gS~w!6h`(}|#T#|$3{cO}w6H|Wt)6+j za{poOigAF#%3cXsiH-wH3J%({;kZwIvE zS3T2nhPsDx>d52qPyN975mVYBoy9TSDM*=n{M*KFg*S~?Pc|BxUKpbFTkiwBawq=i z$-$lHN3`tp_VT8m18@!Qaxn8AxzRI~*DDLrrMUZoez=e4PMDTGv+Wb4fea|jY+j{J zzm=!-@DAU^j!)X1_juuXw1?^Dzxi_jSRwZ!0(DO5>I>)(JJ&SZ_UE1#bO~*L?$J6o zV24ZW2DP(U{red*C7$RU%Kf11Jo`iZ4q;yj%Kcw}-XlNX_6Sh)_jwy|Uj)ki8=(4c z)i2Ti4yupSd6}a506Fr=|77SSugY8LnKi~9<;jsp?yrN^J+Z_5R(Ms=>Oa-Ni(WIv z{cl5`#l9Mpz0T3|9);HhT}}sD!Ef0=FvecvknVTY_$2!$#@K,oW9{{Z?OI+hsW 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%0A2=MPbL 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 Date: Thu, 10 Apr 2025 18:50:53 +0100 Subject: [PATCH 18/24] textures: Use libturbojpeg to view jpgs --- app/Makefile | 2 +- app/source/textures.cpp | 48 +++++++++++++++++++---------------------- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/app/Makefile b/app/Makefile index 4224dc2..0aa04cf 100644 --- a/app/Makefile +++ b/app/Makefile @@ -25,7 +25,7 @@ BUILD_PRX = 1 LIBDIR = ../libs/lib LDFLAGS = LIBS = -lintrafont -lglib2d -lxmp -lmpg123 -lvorbisfile -lvorbis -lopusfile -lopus -lFLAC -logg \ - -larchive -llzma -ljpeg -lpng16 -lstdc++ -lz \ + -larchive -llzma -lturbojpeg -ljpeg -lpng16 -lstdc++ -lz \ -lpspkubridge -lpspsystemctrl_user -lpspusbdevice \ -lpspgu -lpspvram -lpspaudio -lpsppower -lpspreg -lpspusb -lpspusbstor -lpspumd diff --git a/app/source/textures.cpp b/app/source/textures.cpp index 3efb88a..065d9e4 100644 --- a/app/source/textures.cpp +++ b/app/source/textures.cpp @@ -1,8 +1,8 @@ #include #include #include -#include #include +#include #include "fs.h" #include "libnsbmp.h" @@ -179,47 +179,43 @@ namespace Textures { } g2dTexture *LoadImageBufferJPEG(unsigned char *data, int size) { - struct jpeg_decompress_struct info; - struct jpeg_error_mgr err; - - info.err = jpeg_std_error(&err); - jpeg_create_decompress(&info); - jpeg_mem_src(&info, data, size); + tjhandle tj = tjInitDecompress(); + if (!tj) { + Log::Error("%s(tjInitDecompress) failed: %s\n", __func__, tjGetErrorStr()); + return nullptr; + } - if (jpeg_read_header(&info, TRUE) != JPEG_HEADER_OK) { - Log::Error("%s(jpeg_read_header) failed\n", __func__); - jpeg_destroy_decompress(&info); + int width = 0, height = 0, jpegSubsamp = 0; + if (tjDecompressHeader2(tj, data, size, &width, &height, &jpegSubsamp) != 0) { + Log::Error("%s(tjDecompressHeader2) failed: %s\n", __func__, tjGetErrorStr()); + tjDestroy(tj); return nullptr; } - info.out_color_space = JCS_EXT_RGBA; - jpeg_start_decompress(&info); - - if (info.output_width > 512 || info.output_height > 512) { + if (width > 512 || height > 512) { Log::Error("%s g2d does not support images greater than 512x512\n", __func__); - jpeg_destroy_decompress(&info); + tjDestroy(tj); return nullptr; } - int stride = info.output_width * 4; - u8 *buffer = static_cast(std::malloc(stride * info.output_height)); + int stride = width * 4; + u8 *buffer = static_cast(std::malloc(stride * height)); if (!buffer) { Log::Error("%s failed to allocate buffer\n", __func__); - jpeg_destroy_decompress(&info); + tjDestroy(tj); return nullptr; } - while (info.output_scanline < info.output_height) { - u8 *ptr = buffer + stride * info.output_scanline; - jpeg_read_scanlines(&info, &ptr, 1); + if (tjDecompress2(tj, data, size, buffer, width, stride, height, TJPF_RGBA, TJFLAG_FASTDCT) != 0) { + Log::Error("%s(tjDecompress2) failed: %s\n", __func__, tjGetErrorStr()); + std::free(buffer); + tjDestroy(tj); + return nullptr; } - g2dTexture *tex = g2dTexLoad(buffer, info.output_width, info.output_height, G2D_SWIZZLE); - - jpeg_finish_decompress(&info); - jpeg_destroy_decompress(&info); + g2dTexture *tex = g2dTexLoad(buffer, width, height, G2D_SWIZZLE); std::free(buffer); - + tjDestroy(tj); return tex; } From d98e75e047448aa2b4e724a2f63dd952f7c32ae4 Mon Sep 17 00:00:00 2001 From: Joel16 Date: Thu, 10 Apr 2025 20:23:06 +0100 Subject: [PATCH 19/24] textures: Update libnsgif to v1.00 --- app/source/textures.cpp | 92 +- libs/include/turbojpeg/jconfig.h | 74 - libs/include/turbojpeg/turbojpeg.h | 1545 --------------------- libs/libnsgif/gif.c | 2076 ++++++++++++++++++++++++++++ libs/libnsgif/libnsgif.c | 1169 ---------------- libs/libnsgif/libnsgif.h | 191 --- libs/libnsgif/lzw.c | 530 +++++-- libs/libnsgif/lzw.h | 100 +- libs/libnsgif/nsgif.h | 535 +++++++ 9 files changed, 3097 insertions(+), 3215 deletions(-) delete mode 100644 libs/include/turbojpeg/jconfig.h delete mode 100644 libs/include/turbojpeg/turbojpeg.h create mode 100755 libs/libnsgif/gif.c delete mode 100644 libs/libnsgif/libnsgif.c delete mode 100644 libs/libnsgif/libnsgif.h mode change 100644 => 100755 libs/libnsgif/lzw.c mode change 100644 => 100755 libs/libnsgif/lzw.h create mode 100755 libs/libnsgif/nsgif.h diff --git a/app/source/textures.cpp b/app/source/textures.cpp index 065d9e4..47b81a8 100644 --- a/app/source/textures.cpp +++ b/app/source/textures.cpp @@ -6,7 +6,7 @@ #include "fs.h" #include "libnsbmp.h" -#include "libnsgif.h" +#include "nsgif.h" #include "log.h" #include "textures.h" #include "utils.h" @@ -59,10 +59,9 @@ g2dTexture *file_icons[NUM_FILE_ICONS], *icon_dir[NUM_THEMES], *icon_check[NUM_T *bg_header, *icon_sd[NUM_THEMES], *icon_secure[NUM_THEMES], *ic_play_btn, *ftp_icon[NUM_THEMES], *sort_icon[NUM_THEMES], \ *dark_theme_icon[NUM_THEMES], *dev_options_icon[NUM_THEMES], *about_icon[NUM_THEMES]; -namespace Image { +namespace Bitmap { static void *Create(int width, int height, [[maybe_unused]] unsigned int state) { - /* ensure a stupidly large (>50Megs or so) bitmap is not created */ - if ((static_cast(width) * static_cast(height)) > (MAX_IMAGE_BYTES/BYTES_PER_PIXEL)) { + if (width > 512 && height > 512) { return nullptr; } @@ -70,50 +69,33 @@ namespace Image { } static void *Create(int width, int height) { - /* ensure a stupidly large bitmap is not created */ - if ((static_cast(width) * static_cast(height)) > (MAX_IMAGE_BYTES/BYTES_PER_PIXEL)) { + if (width > 512 && height > 512) { return nullptr; } return std::calloc(width * height, BYTES_PER_PIXEL); } - - static void SetOpaque([[maybe_unused]] void *bitmap, [[maybe_unused]] bool opaque) { - assert(bitmap); - } - - static bool TestOpaque([[maybe_unused]] void *bitmap) { - assert(bitmap); - return false; - } static unsigned char *GetBuffer(void *bitmap) { - assert(bitmap); return static_cast(bitmap); } static void Destroy(void *bitmap) { - assert(bitmap); std::free(bitmap); } - - static void Modified([[maybe_unused]] void *bitmap) { - assert(bitmap); - return; - } } namespace Textures { static g2dTexture *LoadImageBufferBMP(unsigned char *data, int size) { - bmp_bitmap_callback_vt bitmap_callbacks = { - Image::Create, - Image::Destroy, - Image::GetBuffer + bmp_bitmap_callback_vt callbacks = { + .bitmap_create = Bitmap::Create, + .bitmap_destroy = Bitmap::Destroy, + .bitmap_get_buffer = Bitmap::GetBuffer, }; bmp_result code = BMP_OK; bmp_image bmp; - bmp_create(&bmp, &bitmap_callbacks); + bmp_create(&bmp, &callbacks); code = bmp_analyse(&bmp, size, data); if (code != BMP_OK) { @@ -132,7 +114,6 @@ namespace Textures { /* skip if the decoded image would be ridiculously large */ if ((bmp.width * bmp.height) > 200000) { - Log::Error("bmp_decode failed: width*height is over 200000\n"); Log::Error("%s(bmp_decode) failed: width*height is over 200000\n", __func__); bmp_finalise(&bmp); return nullptr; @@ -145,36 +126,37 @@ namespace Textures { } static g2dTexture *LoadImageBufferGIF(unsigned char *data, int size) { - gif_bitmap_callback_vt bitmap_callbacks = { - Image::Create, - Image::Destroy, - Image::GetBuffer, - Image::SetOpaque, - Image::TestOpaque, - Image::Modified + const nsgif_bitmap_cb_vt callbacks = { + .create = Bitmap::Create, + .destroy = Bitmap::Destroy, + .get_buffer = Bitmap::GetBuffer, }; - - gif_animation gif; - gif_result code = GIF_OK; - gif_create(&gif, &bitmap_callbacks); - - do { - code = gif_initialise(&gif, size, data); - if (code != GIF_OK && code != GIF_WORKING) { - Log::Error("%s(gif_initialise) failed: %d\n", __func__, code); - gif_finalise(&gif); - return nullptr; - } - } while (code != GIF_OK); - - code = gif_decode_frame(&gif, 0); - if (code != GIF_OK) { - Log::Error("%s(gif_decode_frame) failed: %d\n", __func__, code); + + nsgif_t *gif; + nsgif_error err = nsgif_create(&callbacks, NSGIF_BITMAP_FMT_ABGR8888, &gif); + if (err != NSGIF_OK) { + Log::Error("%s(nsgif_create) failed: %d\n", __func__, err); return nullptr; } - - g2dTexture *tex = g2dTexLoad(static_cast(gif.frame_image), gif.width, gif.height, G2D_SWIZZLE); - gif_finalise(&gif); + + err = nsgif_data_scan(gif, size, data); + if (err != NSGIF_OK) { + Log::Error("%s(nsgif_data_scan) failed: %d\n", __func__, err); + nsgif_destroy(gif); + return nullptr; + } + + nsgif_bitmap_t *bitmap; + const nsgif_info_t *info = nsgif_get_info(gif); + err = nsgif_frame_decode(gif, 0, &bitmap); + if (err != NSGIF_OK) { + Log::Error("%s(nsgif_frame_decode) failed: %d\n", __func__, err); + nsgif_destroy(gif); + return nullptr; + } + + g2dTexture *tex = g2dTexLoad(static_cast(bitmap), info->width, info->height, G2D_SWIZZLE); + nsgif_destroy(gif); return tex; } diff --git a/libs/include/turbojpeg/jconfig.h b/libs/include/turbojpeg/jconfig.h deleted file mode 100644 index 04ca8da..0000000 --- a/libs/include/turbojpeg/jconfig.h +++ /dev/null @@ -1,74 +0,0 @@ -/* jconfig.h. Generated from jconfig.h.in by configure. */ -/* Version ID for the JPEG library. - * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". - */ -#define JPEG_LIB_VERSION 62 - -/* libjpeg-turbo version */ -#define LIBJPEG_TURBO_VERSION 1.5.3 - -/* libjpeg-turbo version in integer form */ -#define LIBJPEG_TURBO_VERSION_NUMBER 1005003 - -/* Support arithmetic encoding */ -#define C_ARITH_CODING_SUPPORTED 1 - -/* Support arithmetic decoding */ -#define D_ARITH_CODING_SUPPORTED 1 - -/* - * Define BITS_IN_JSAMPLE as either - * 8 for 8-bit sample values (the usual setting) - * 12 for 12-bit sample values - * Only 8 and 12 are legal data precisions for lossy JPEG according to the - * JPEG standard, and the IJG code does not support anything else! - * We do not support run-time selection of data precision, sorry. - */ - -#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ - -/* Define to 1 if you have the header file. */ -#define HAVE_LOCALE_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDDEF_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if the system has the type `unsigned char'. */ -#define HAVE_UNSIGNED_CHAR 1 - -/* Define to 1 if the system has the type `unsigned short'. */ -#define HAVE_UNSIGNED_SHORT 1 - -/* Compiler does not support pointers to undefined structures. */ -/* #undef INCOMPLETE_TYPES_BROKEN */ - -/* Support in-memory source/destination managers */ -#define MEM_SRCDST_SUPPORTED 1 - -/* Define if you have BSD-like bzero and bcopy in rather than - memset/memcpy in . */ -/* #undef NEED_BSD_STRINGS */ - -/* Define if you need to include to get size_t. */ -#define NEED_SYS_TYPES_H 1 - -/* Define if your (broken) compiler shifts signed values as if they were - unsigned. */ -/* #undef RIGHT_SHIFT_IS_UNSIGNED */ - -/* Use accelerated SIMD routines. */ -/* #undef WITH_SIMD */ - -/* Define to 1 if type `char' is unsigned and you are not using gcc. */ -#ifndef __CHAR_UNSIGNED__ -/* # undef __CHAR_UNSIGNED__ */ -#endif - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define to `unsigned int' if does not define. */ -/* #undef size_t */ diff --git a/libs/include/turbojpeg/turbojpeg.h b/libs/include/turbojpeg/turbojpeg.h deleted file mode 100644 index 307dc6f..0000000 --- a/libs/include/turbojpeg/turbojpeg.h +++ /dev/null @@ -1,1545 +0,0 @@ -/* - * Copyright (C)2009-2015, 2017 D. R. Commander. All Rights Reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * - Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - Neither the name of the libjpeg-turbo Project nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __TURBOJPEG_H__ -#define __TURBOJPEG_H__ - -#if defined(_WIN32) && defined(DLLDEFINE) -#define DLLEXPORT __declspec(dllexport) -#else -#define DLLEXPORT -#endif -#define DLLCALL - - -/** - * @addtogroup TurboJPEG - * TurboJPEG API. This API provides an interface for generating, decoding, and - * transforming planar YUV and JPEG images in memory. - * - * @anchor YUVnotes - * YUV Image Format Notes - * ---------------------- - * Technically, the JPEG format uses the YCbCr colorspace (which is technically - * not a colorspace but a color transform), but per the convention of the - * digital video community, the TurboJPEG API uses "YUV" to refer to an image - * format consisting of Y, Cb, and Cr image planes. - * - * Each plane is simply a 2D array of bytes, each byte representing the value - * of one of the components (Y, Cb, or Cr) at a particular location in the - * image. The width and height of each plane are determined by the image - * width, height, and level of chrominance subsampling. The luminance plane - * width is the image width padded to the nearest multiple of the horizontal - * subsampling factor (2 in the case of 4:2:0 and 4:2:2, 4 in the case of - * 4:1:1, 1 in the case of 4:4:4 or grayscale.) Similarly, the luminance plane - * height is the image height padded to the nearest multiple of the vertical - * subsampling factor (2 in the case of 4:2:0 or 4:4:0, 1 in the case of 4:4:4 - * or grayscale.) This is irrespective of any additional padding that may be - * specified as an argument to the various YUV functions. The chrominance - * plane width is equal to the luminance plane width divided by the horizontal - * subsampling factor, and the chrominance plane height is equal to the - * luminance plane height divided by the vertical subsampling factor. - * - * For example, if the source image is 35 x 35 pixels and 4:2:2 subsampling is - * used, then the luminance plane would be 36 x 35 bytes, and each of the - * chrominance planes would be 18 x 35 bytes. If you specify a line padding of - * 4 bytes on top of this, then the luminance plane would be 36 x 35 bytes, and - * each of the chrominance planes would be 20 x 35 bytes. - * - * @{ - */ - - -/** - * The number of chrominance subsampling options - */ -#define TJ_NUMSAMP 6 - -/** - * Chrominance subsampling options. - * When pixels are converted from RGB to YCbCr (see #TJCS_YCbCr) or from CMYK - * to YCCK (see #TJCS_YCCK) as part of the JPEG compression process, some of - * the Cb and Cr (chrominance) components can be discarded or averaged together - * to produce a smaller image with little perceptible loss of image clarity - * (the human eye is more sensitive to small changes in brightness than to - * small changes in color.) This is called "chrominance subsampling". - */ -enum TJSAMP -{ - /** - * 4:4:4 chrominance subsampling (no chrominance subsampling). The JPEG or - * YUV image will contain one chrominance component for every pixel in the - * source image. - */ - TJSAMP_444=0, - /** - * 4:2:2 chrominance subsampling. The JPEG or YUV image will contain one - * chrominance component for every 2x1 block of pixels in the source image. - */ - TJSAMP_422, - /** - * 4:2:0 chrominance subsampling. The JPEG or YUV image will contain one - * chrominance component for every 2x2 block of pixels in the source image. - */ - TJSAMP_420, - /** - * Grayscale. The JPEG or YUV image will contain no chrominance components. - */ - TJSAMP_GRAY, - /** - * 4:4:0 chrominance subsampling. The JPEG or YUV image will contain one - * chrominance component for every 1x2 block of pixels in the source image. - * - * @note 4:4:0 subsampling is not fully accelerated in libjpeg-turbo. - */ - TJSAMP_440, - /** - * 4:1:1 chrominance subsampling. The JPEG or YUV image will contain one - * chrominance component for every 4x1 block of pixels in the source image. - * JPEG images compressed with 4:1:1 subsampling will be almost exactly the - * same size as those compressed with 4:2:0 subsampling, and in the - * aggregate, both subsampling methods produce approximately the same - * perceptual quality. However, 4:1:1 is better able to reproduce sharp - * horizontal features. - * - * @note 4:1:1 subsampling is not fully accelerated in libjpeg-turbo. - */ - TJSAMP_411 -}; - -/** - * MCU block width (in pixels) for a given level of chrominance subsampling. - * MCU block sizes: - * - 8x8 for no subsampling or grayscale - * - 16x8 for 4:2:2 - * - 8x16 for 4:4:0 - * - 16x16 for 4:2:0 - * - 32x8 for 4:1:1 - */ -static const int tjMCUWidth[TJ_NUMSAMP] = {8, 16, 16, 8, 8, 32}; - -/** - * MCU block height (in pixels) for a given level of chrominance subsampling. - * MCU block sizes: - * - 8x8 for no subsampling or grayscale - * - 16x8 for 4:2:2 - * - 8x16 for 4:4:0 - * - 16x16 for 4:2:0 - * - 32x8 for 4:1:1 - */ -static const int tjMCUHeight[TJ_NUMSAMP] = {8, 8, 16, 8, 16, 8}; - - -/** - * The number of pixel formats - */ -#define TJ_NUMPF 12 - -/** - * Pixel formats - */ -enum TJPF -{ - /** - * RGB pixel format. The red, green, and blue components in the image are - * stored in 3-byte pixels in the order R, G, B from lowest to highest byte - * address within each pixel. - */ - TJPF_RGB=0, - /** - * BGR pixel format. The red, green, and blue components in the image are - * stored in 3-byte pixels in the order B, G, R from lowest to highest byte - * address within each pixel. - */ - TJPF_BGR, - /** - * RGBX pixel format. The red, green, and blue components in the image are - * stored in 4-byte pixels in the order R, G, B from lowest to highest byte - * address within each pixel. The X component is ignored when compressing - * and undefined when decompressing. - */ - TJPF_RGBX, - /** - * BGRX pixel format. The red, green, and blue components in the image are - * stored in 4-byte pixels in the order B, G, R from lowest to highest byte - * address within each pixel. The X component is ignored when compressing - * and undefined when decompressing. - */ - TJPF_BGRX, - /** - * XBGR pixel format. The red, green, and blue components in the image are - * stored in 4-byte pixels in the order R, G, B from highest to lowest byte - * address within each pixel. The X component is ignored when compressing - * and undefined when decompressing. - */ - TJPF_XBGR, - /** - * XRGB pixel format. The red, green, and blue components in the image are - * stored in 4-byte pixels in the order B, G, R from highest to lowest byte - * address within each pixel. The X component is ignored when compressing - * and undefined when decompressing. - */ - TJPF_XRGB, - /** - * Grayscale pixel format. Each 1-byte pixel represents a luminance - * (brightness) level from 0 to 255. - */ - TJPF_GRAY, - /** - * RGBA pixel format. This is the same as @ref TJPF_RGBX, except that when - * decompressing, the X component is guaranteed to be 0xFF, which can be - * interpreted as an opaque alpha channel. - */ - TJPF_RGBA, - /** - * BGRA pixel format. This is the same as @ref TJPF_BGRX, except that when - * decompressing, the X component is guaranteed to be 0xFF, which can be - * interpreted as an opaque alpha channel. - */ - TJPF_BGRA, - /** - * ABGR pixel format. This is the same as @ref TJPF_XBGR, except that when - * decompressing, the X component is guaranteed to be 0xFF, which can be - * interpreted as an opaque alpha channel. - */ - TJPF_ABGR, - /** - * ARGB pixel format. This is the same as @ref TJPF_XRGB, except that when - * decompressing, the X component is guaranteed to be 0xFF, which can be - * interpreted as an opaque alpha channel. - */ - TJPF_ARGB, - /** - * CMYK pixel format. Unlike RGB, which is an additive color model used - * primarily for display, CMYK (Cyan/Magenta/Yellow/Key) is a subtractive - * color model used primarily for printing. In the CMYK color model, the - * value of each color component typically corresponds to an amount of cyan, - * magenta, yellow, or black ink that is applied to a white background. In - * order to convert between CMYK and RGB, it is necessary to use a color - * management system (CMS.) A CMS will attempt to map colors within the - * printer's gamut to perceptually similar colors in the display's gamut and - * vice versa, but the mapping is typically not 1:1 or reversible, nor can it - * be defined with a simple formula. Thus, such a conversion is out of scope - * for a codec library. However, the TurboJPEG API allows for compressing - * CMYK pixels into a YCCK JPEG image (see #TJCS_YCCK) and decompressing YCCK - * JPEG images into CMYK pixels. - */ - TJPF_CMYK -}; - - -/** - * Red offset (in bytes) for a given pixel format. This specifies the number - * of bytes that the red component is offset from the start of the pixel. For - * instance, if a pixel of format TJ_BGRX is stored in char pixel[], - * then the red component will be pixel[tjRedOffset[TJ_BGRX]]. - */ -static const int tjRedOffset[TJ_NUMPF] = {0, 2, 0, 2, 3, 1, 0, 0, 2, 3, 1, -1}; -/** - * Green offset (in bytes) for a given pixel format. This specifies the number - * of bytes that the green component is offset from the start of the pixel. - * For instance, if a pixel of format TJ_BGRX is stored in - * char pixel[], then the green component will be - * pixel[tjGreenOffset[TJ_BGRX]]. - */ -static const int tjGreenOffset[TJ_NUMPF] = {1, 1, 1, 1, 2, 2, 0, 1, 1, 2, 2, -1}; -/** - * Blue offset (in bytes) for a given pixel format. This specifies the number - * of bytes that the Blue component is offset from the start of the pixel. For - * instance, if a pixel of format TJ_BGRX is stored in char pixel[], - * then the blue component will be pixel[tjBlueOffset[TJ_BGRX]]. - */ -static const int tjBlueOffset[TJ_NUMPF] = {2, 0, 2, 0, 1, 3, 0, 2, 0, 1, 3, -1}; -/** - * Pixel size (in bytes) for a given pixel format. - */ -static const int tjPixelSize[TJ_NUMPF] = {3, 3, 4, 4, 4, 4, 1, 4, 4, 4, 4, 4}; - - -/** - * The number of JPEG colorspaces - */ -#define TJ_NUMCS 5 - -/** - * JPEG colorspaces - */ -enum TJCS -{ - /** - * RGB colorspace. When compressing the JPEG image, the R, G, and B - * components in the source image are reordered into image planes, but no - * colorspace conversion or subsampling is performed. RGB JPEG images can be - * decompressed to any of the extended RGB pixel formats or grayscale, but - * they cannot be decompressed to YUV images. - */ - TJCS_RGB=0, - /** - * YCbCr colorspace. YCbCr is not an absolute colorspace but rather a - * mathematical transformation of RGB designed solely for storage and - * transmission. YCbCr images must be converted to RGB before they can - * actually be displayed. In the YCbCr colorspace, the Y (luminance) - * component represents the black & white portion of the original image, and - * the Cb and Cr (chrominance) components represent the color portion of the - * original image. Originally, the analog equivalent of this transformation - * allowed the same signal to drive both black & white and color televisions, - * but JPEG images use YCbCr primarily because it allows the color data to be - * optionally subsampled for the purposes of reducing bandwidth or disk - * space. YCbCr is the most common JPEG colorspace, and YCbCr JPEG images - * can be compressed from and decompressed to any of the extended RGB pixel - * formats or grayscale, or they can be decompressed to YUV planar images. - */ - TJCS_YCbCr, - /** - * Grayscale colorspace. The JPEG image retains only the luminance data (Y - * component), and any color data from the source image is discarded. - * Grayscale JPEG images can be compressed from and decompressed to any of - * the extended RGB pixel formats or grayscale, or they can be decompressed - * to YUV planar images. - */ - TJCS_GRAY, - /** - * CMYK colorspace. When compressing the JPEG image, the C, M, Y, and K - * components in the source image are reordered into image planes, but no - * colorspace conversion or subsampling is performed. CMYK JPEG images can - * only be decompressed to CMYK pixels. - */ - TJCS_CMYK, - /** - * YCCK colorspace. YCCK (AKA "YCbCrK") is not an absolute colorspace but - * rather a mathematical transformation of CMYK designed solely for storage - * and transmission. It is to CMYK as YCbCr is to RGB. CMYK pixels can be - * reversibly transformed into YCCK, and as with YCbCr, the chrominance - * components in the YCCK pixels can be subsampled without incurring major - * perceptual loss. YCCK JPEG images can only be compressed from and - * decompressed to CMYK pixels. - */ - TJCS_YCCK -}; - - -/** - * The uncompressed source/destination image is stored in bottom-up (Windows, - * OpenGL) order, not top-down (X11) order. - */ -#define TJFLAG_BOTTOMUP 2 -/** - * When decompressing an image that was compressed using chrominance - * subsampling, use the fastest chrominance upsampling algorithm available in - * the underlying codec. The default is to use smooth upsampling, which - * creates a smooth transition between neighboring chrominance components in - * order to reduce upsampling artifacts in the decompressed image. - */ -#define TJFLAG_FASTUPSAMPLE 256 -/** - * Disable buffer (re)allocation. If passed to one of the JPEG compression or - * transform functions, this flag will cause those functions to generate an - * error if the JPEG image buffer is invalid or too small rather than - * attempting to allocate or reallocate that buffer. This reproduces the - * behavior of earlier versions of TurboJPEG. - */ -#define TJFLAG_NOREALLOC 1024 -/** - * Use the fastest DCT/IDCT algorithm available in the underlying codec. The - * default if this flag is not specified is implementation-specific. For - * example, the implementation of TurboJPEG for libjpeg[-turbo] uses the fast - * algorithm by default when compressing, because this has been shown to have - * only a very slight effect on accuracy, but it uses the accurate algorithm - * when decompressing, because this has been shown to have a larger effect. - */ -#define TJFLAG_FASTDCT 2048 -/** - * Use the most accurate DCT/IDCT algorithm available in the underlying codec. - * The default if this flag is not specified is implementation-specific. For - * example, the implementation of TurboJPEG for libjpeg[-turbo] uses the fast - * algorithm by default when compressing, because this has been shown to have - * only a very slight effect on accuracy, but it uses the accurate algorithm - * when decompressing, because this has been shown to have a larger effect. - */ -#define TJFLAG_ACCURATEDCT 4096 - - -/** - * The number of transform operations - */ -#define TJ_NUMXOP 8 - -/** - * Transform operations for #tjTransform() - */ -enum TJXOP -{ - /** - * Do not transform the position of the image pixels - */ - TJXOP_NONE=0, - /** - * Flip (mirror) image horizontally. This transform is imperfect if there - * are any partial MCU blocks on the right edge (see #TJXOPT_PERFECT.) - */ - TJXOP_HFLIP, - /** - * Flip (mirror) image vertically. This transform is imperfect if there are - * any partial MCU blocks on the bottom edge (see #TJXOPT_PERFECT.) - */ - TJXOP_VFLIP, - /** - * Transpose image (flip/mirror along upper left to lower right axis.) This - * transform is always perfect. - */ - TJXOP_TRANSPOSE, - /** - * Transverse transpose image (flip/mirror along upper right to lower left - * axis.) This transform is imperfect if there are any partial MCU blocks in - * the image (see #TJXOPT_PERFECT.) - */ - TJXOP_TRANSVERSE, - /** - * Rotate image clockwise by 90 degrees. This transform is imperfect if - * there are any partial MCU blocks on the bottom edge (see - * #TJXOPT_PERFECT.) - */ - TJXOP_ROT90, - /** - * Rotate image 180 degrees. This transform is imperfect if there are any - * partial MCU blocks in the image (see #TJXOPT_PERFECT.) - */ - TJXOP_ROT180, - /** - * Rotate image counter-clockwise by 90 degrees. This transform is imperfect - * if there are any partial MCU blocks on the right edge (see - * #TJXOPT_PERFECT.) - */ - TJXOP_ROT270 -}; - - -/** - * This option will cause #tjTransform() to return an error if the transform is - * not perfect. Lossless transforms operate on MCU blocks, whose size depends - * on the level of chrominance subsampling used (see #tjMCUWidth - * and #tjMCUHeight.) If the image's width or height is not evenly divisible - * by the MCU block size, then there will be partial MCU blocks on the right - * and/or bottom edges. It is not possible to move these partial MCU blocks to - * the top or left of the image, so any transform that would require that is - * "imperfect." If this option is not specified, then any partial MCU blocks - * that cannot be transformed will be left in place, which will create - * odd-looking strips on the right or bottom edge of the image. - */ -#define TJXOPT_PERFECT 1 -/** - * This option will cause #tjTransform() to discard any partial MCU blocks that - * cannot be transformed. - */ -#define TJXOPT_TRIM 2 -/** - * This option will enable lossless cropping. See #tjTransform() for more - * information. - */ -#define TJXOPT_CROP 4 -/** - * This option will discard the color data in the input image and produce - * a grayscale output image. - */ -#define TJXOPT_GRAY 8 -/** - * This option will prevent #tjTransform() from outputting a JPEG image for - * this particular transform (this can be used in conjunction with a custom - * filter to capture the transformed DCT coefficients without transcoding - * them.) - */ -#define TJXOPT_NOOUTPUT 16 - - -/** - * Scaling factor - */ -typedef struct -{ - /** - * Numerator - */ - int num; - /** - * Denominator - */ - int denom; -} tjscalingfactor; - -/** - * Cropping region - */ -typedef struct -{ - /** - * The left boundary of the cropping region. This must be evenly divisible - * by the MCU block width (see #tjMCUWidth.) - */ - int x; - /** - * The upper boundary of the cropping region. This must be evenly divisible - * by the MCU block height (see #tjMCUHeight.) - */ - int y; - /** - * The width of the cropping region. Setting this to 0 is the equivalent of - * setting it to the width of the source JPEG image - x. - */ - int w; - /** - * The height of the cropping region. Setting this to 0 is the equivalent of - * setting it to the height of the source JPEG image - y. - */ - int h; -} tjregion; - -/** - * Lossless transform - */ -typedef struct tjtransform -{ - /** - * Cropping region - */ - tjregion r; - /** - * One of the @ref TJXOP "transform operations" - */ - int op; - /** - * The bitwise OR of one of more of the @ref TJXOPT_CROP "transform options" - */ - int options; - /** - * Arbitrary data that can be accessed within the body of the callback - * function - */ - void *data; - /** - * A callback function that can be used to modify the DCT coefficients - * after they are losslessly transformed but before they are transcoded to a - * new JPEG image. This allows for custom filters or other transformations - * to be applied in the frequency domain. - * - * @param coeffs pointer to an array of transformed DCT coefficients. (NOTE: - * this pointer is not guaranteed to be valid once the callback returns, so - * applications wishing to hand off the DCT coefficients to another function - * or library should make a copy of them within the body of the callback.) - * - * @param arrayRegion #tjregion structure containing the width and height of - * the array pointed to by coeffs as well as its offset relative to - * the component plane. TurboJPEG implementations may choose to split each - * component plane into multiple DCT coefficient arrays and call the callback - * function once for each array. - * - * @param planeRegion #tjregion structure containing the width and height of - * the component plane to which coeffs belongs - * - * @param componentID ID number of the component plane to which - * coeffs belongs (Y, Cb, and Cr have, respectively, ID's of 0, 1, - * and 2 in typical JPEG images.) - * - * @param transformID ID number of the transformed image to which - * coeffs belongs. This is the same as the index of the transform - * in the transforms array that was passed to #tjTransform(). - * - * @param transform a pointer to a #tjtransform structure that specifies the - * parameters and/or cropping region for this transform - * - * @return 0 if the callback was successful, or -1 if an error occurred. - */ - int (*customFilter)(short *coeffs, tjregion arrayRegion, - tjregion planeRegion, int componentIndex, int transformIndex, - struct tjtransform *transform); -} tjtransform; - -/** - * TurboJPEG instance handle - */ -typedef void* tjhandle; - - -/** - * Pad the given width to the nearest 32-bit boundary - */ -#define TJPAD(width) (((width)+3)&(~3)) - -/** - * Compute the scaled value of dimension using the given scaling - * factor. This macro performs the integer equivalent of ceil(dimension * - * scalingFactor). - */ -#define TJSCALED(dimension, scalingFactor) ((dimension * scalingFactor.num \ - + scalingFactor.denom - 1) / scalingFactor.denom) - - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * Create a TurboJPEG compressor instance. - * - * @return a handle to the newly-created instance, or NULL if an error - * occurred (see #tjGetErrorStr().) - */ -DLLEXPORT tjhandle DLLCALL tjInitCompress(void); - - -/** - * Compress an RGB, grayscale, or CMYK image into a JPEG image. - * - * @param handle a handle to a TurboJPEG compressor or transformer instance - * - * @param srcBuf pointer to an image buffer containing RGB, grayscale, or - * CMYK pixels to be compressed - * - * @param width width (in pixels) of the source image - * - * @param pitch bytes per line in the source image. Normally, this should be - * width * #tjPixelSize[pixelFormat] if the image is unpadded, or - * #TJPAD(width * #tjPixelSize[pixelFormat]) if each line of the image - * is padded to the nearest 32-bit boundary, as is the case for Windows - * bitmaps. You can also be clever and use this parameter to skip lines, etc. - * Setting this parameter to 0 is the equivalent of setting it to - * width * #tjPixelSize[pixelFormat]. - * - * @param height height (in pixels) of the source image - * - * @param pixelFormat pixel format of the source image (see @ref TJPF - * "Pixel formats".) - * - * @param jpegBuf address of a pointer to an image buffer that will receive the - * JPEG image. TurboJPEG has the ability to reallocate the JPEG buffer - * to accommodate the size of the JPEG image. Thus, you can choose to: - * -# pre-allocate the JPEG buffer with an arbitrary size using #tjAlloc() and - * let TurboJPEG grow the buffer as needed, - * -# set *jpegBuf to NULL to tell TurboJPEG to allocate the buffer - * for you, or - * -# pre-allocate the buffer to a "worst case" size determined by calling - * #tjBufSize(). This should ensure that the buffer never has to be - * re-allocated (setting #TJFLAG_NOREALLOC guarantees that it won't be.) - * . - * If you choose option 1, *jpegSize should be set to the size of your - * pre-allocated buffer. In any case, unless you have set #TJFLAG_NOREALLOC, - * you should always check *jpegBuf upon return from this function, as - * it may have changed. - * - * @param jpegSize pointer to an unsigned long variable that holds the size of - * the JPEG image buffer. If *jpegBuf points to a pre-allocated - * buffer, then *jpegSize should be set to the size of the buffer. - * Upon return, *jpegSize will contain the size of the JPEG image (in - * bytes.) If *jpegBuf points to a JPEG image buffer that is being - * reused from a previous call to one of the JPEG compression functions, then - * *jpegSize is ignored. - * - * @param jpegSubsamp the level of chrominance subsampling to be used when - * generating the JPEG image (see @ref TJSAMP - * "Chrominance subsampling options".) - * - * @param jpegQual the image quality of the generated JPEG image (1 = worst, - * 100 = best) - * - * @param flags the bitwise OR of one or more of the @ref TJFLAG_ACCURATEDCT - * "flags" - * - * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) -*/ -DLLEXPORT int DLLCALL tjCompress2(tjhandle handle, const unsigned char *srcBuf, - int width, int pitch, int height, int pixelFormat, unsigned char **jpegBuf, - unsigned long *jpegSize, int jpegSubsamp, int jpegQual, int flags); - - -/** - * Compress a YUV planar image into a JPEG image. - * - * @param handle a handle to a TurboJPEG compressor or transformer instance - * - * @param srcBuf pointer to an image buffer containing a YUV planar image to be - * compressed. The size of this buffer should match the value returned by - * #tjBufSizeYUV2() for the given image width, height, padding, and level of - * chrominance subsampling. The Y, U (Cb), and V (Cr) image planes should be - * stored sequentially in the source buffer (refer to @ref YUVnotes - * "YUV Image Format Notes".) - * - * @param width width (in pixels) of the source image. If the width is not an - * even multiple of the MCU block width (see #tjMCUWidth), then an intermediate - * buffer copy will be performed within TurboJPEG. - * - * @param pad the line padding used in the source image. For instance, if each - * line in each plane of the YUV image is padded to the nearest multiple of 4 - * bytes, then pad should be set to 4. - * - * @param height height (in pixels) of the source image. If the height is not - * an even multiple of the MCU block height (see #tjMCUHeight), then an - * intermediate buffer copy will be performed within TurboJPEG. - * - * @param subsamp the level of chrominance subsampling used in the source - * image (see @ref TJSAMP "Chrominance subsampling options".) - * - * @param jpegBuf address of a pointer to an image buffer that will receive the - * JPEG image. TurboJPEG has the ability to reallocate the JPEG buffer to - * accommodate the size of the JPEG image. Thus, you can choose to: - * -# pre-allocate the JPEG buffer with an arbitrary size using #tjAlloc() and - * let TurboJPEG grow the buffer as needed, - * -# set *jpegBuf to NULL to tell TurboJPEG to allocate the buffer - * for you, or - * -# pre-allocate the buffer to a "worst case" size determined by calling - * #tjBufSize(). This should ensure that the buffer never has to be - * re-allocated (setting #TJFLAG_NOREALLOC guarantees that it won't be.) - * . - * If you choose option 1, *jpegSize should be set to the size of your - * pre-allocated buffer. In any case, unless you have set #TJFLAG_NOREALLOC, - * you should always check *jpegBuf upon return from this function, as - * it may have changed. - * - * @param jpegSize pointer to an unsigned long variable that holds the size of - * the JPEG image buffer. If *jpegBuf points to a pre-allocated - * buffer, then *jpegSize should be set to the size of the buffer. - * Upon return, *jpegSize will contain the size of the JPEG image (in - * bytes.) If *jpegBuf points to a JPEG image buffer that is being - * reused from a previous call to one of the JPEG compression functions, then - * *jpegSize is ignored. - * - * @param jpegQual the image quality of the generated JPEG image (1 = worst, - * 100 = best) - * - * @param flags the bitwise OR of one or more of the @ref TJFLAG_ACCURATEDCT - * "flags" - * - * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) -*/ -DLLEXPORT int DLLCALL tjCompressFromYUV(tjhandle handle, - const unsigned char *srcBuf, int width, int pad, int height, int subsamp, - unsigned char **jpegBuf, unsigned long *jpegSize, int jpegQual, int flags); - - -/** - * Compress a set of Y, U (Cb), and V (Cr) image planes into a JPEG image. - * - * @param handle a handle to a TurboJPEG compressor or transformer instance - * - * @param srcPlanes an array of pointers to Y, U (Cb), and V (Cr) image planes - * (or just a Y plane, if compressing a grayscale image) that contain a YUV - * image to be compressed. These planes can be contiguous or non-contiguous in - * memory. The size of each plane should match the value returned by - * #tjPlaneSizeYUV() for the given image width, height, strides, and level of - * chrominance subsampling. Refer to @ref YUVnotes "YUV Image Format Notes" - * for more details. - * - * @param width width (in pixels) of the source image. If the width is not an - * even multiple of the MCU block width (see #tjMCUWidth), then an intermediate - * buffer copy will be performed within TurboJPEG. - * - * @param strides an array of integers, each specifying the number of bytes per - * line in the corresponding plane of the YUV source image. Setting the stride - * for any plane to 0 is the same as setting it to the plane width (see - * @ref YUVnotes "YUV Image Format Notes".) If strides is NULL, then - * the strides for all planes will be set to their respective plane widths. - * You can adjust the strides in order to specify an arbitrary amount of line - * padding in each plane or to create a JPEG image from a subregion of a larger - * YUV planar image. - * - * @param height height (in pixels) of the source image. If the height is not - * an even multiple of the MCU block height (see #tjMCUHeight), then an - * intermediate buffer copy will be performed within TurboJPEG. - * - * @param subsamp the level of chrominance subsampling used in the source - * image (see @ref TJSAMP "Chrominance subsampling options".) - * - * @param jpegBuf address of a pointer to an image buffer that will receive the - * JPEG image. TurboJPEG has the ability to reallocate the JPEG buffer to - * accommodate the size of the JPEG image. Thus, you can choose to: - * -# pre-allocate the JPEG buffer with an arbitrary size using #tjAlloc() and - * let TurboJPEG grow the buffer as needed, - * -# set *jpegBuf to NULL to tell TurboJPEG to allocate the buffer - * for you, or - * -# pre-allocate the buffer to a "worst case" size determined by calling - * #tjBufSize(). This should ensure that the buffer never has to be - * re-allocated (setting #TJFLAG_NOREALLOC guarantees that it won't be.) - * . - * If you choose option 1, *jpegSize should be set to the size of your - * pre-allocated buffer. In any case, unless you have set #TJFLAG_NOREALLOC, - * you should always check *jpegBuf upon return from this function, as - * it may have changed. - * - * @param jpegSize pointer to an unsigned long variable that holds the size of - * the JPEG image buffer. If *jpegBuf points to a pre-allocated - * buffer, then *jpegSize should be set to the size of the buffer. - * Upon return, *jpegSize will contain the size of the JPEG image (in - * bytes.) If *jpegBuf points to a JPEG image buffer that is being - * reused from a previous call to one of the JPEG compression functions, then - * *jpegSize is ignored. - * - * @param jpegQual the image quality of the generated JPEG image (1 = worst, - * 100 = best) - * - * @param flags the bitwise OR of one or more of the @ref TJFLAG_ACCURATEDCT - * "flags" - * - * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) -*/ -DLLEXPORT int DLLCALL tjCompressFromYUVPlanes(tjhandle handle, - const unsigned char **srcPlanes, int width, const int *strides, int height, - int subsamp, unsigned char **jpegBuf, unsigned long *jpegSize, int jpegQual, - int flags); - - -/** - * The maximum size of the buffer (in bytes) required to hold a JPEG image with - * the given parameters. The number of bytes returned by this function is - * larger than the size of the uncompressed source image. The reason for this - * is that the JPEG format uses 16-bit coefficients, and it is thus possible - * for a very high-quality JPEG image with very high-frequency content to - * expand rather than compress when converted to the JPEG format. Such images - * represent a very rare corner case, but since there is no way to predict the - * size of a JPEG image prior to compression, the corner case has to be - * handled. - * - * @param width width (in pixels) of the image - * - * @param height height (in pixels) of the image - * - * @param jpegSubsamp the level of chrominance subsampling to be used when - * generating the JPEG image (see @ref TJSAMP - * "Chrominance subsampling options".) - * - * @return the maximum size of the buffer (in bytes) required to hold the - * image, or -1 if the arguments are out of bounds. - */ -DLLEXPORT unsigned long DLLCALL tjBufSize(int width, int height, - int jpegSubsamp); - - -/** - * The size of the buffer (in bytes) required to hold a YUV planar image with - * the given parameters. - * - * @param width width (in pixels) of the image - * - * @param pad the width of each line in each plane of the image is padded to - * the nearest multiple of this number of bytes (must be a power of 2.) - * - * @param height height (in pixels) of the image - * - * @param subsamp level of chrominance subsampling in the image (see - * @ref TJSAMP "Chrominance subsampling options".) - * - * @return the size of the buffer (in bytes) required to hold the image, or - * -1 if the arguments are out of bounds. - */ -DLLEXPORT unsigned long DLLCALL tjBufSizeYUV2(int width, int pad, int height, - int subsamp); - - -/** - * The size of the buffer (in bytes) required to hold a YUV image plane with - * the given parameters. - * - * @param componentID ID number of the image plane (0 = Y, 1 = U/Cb, 2 = V/Cr) - * - * @param width width (in pixels) of the YUV image. NOTE: this is the width of - * the whole image, not the plane width. - * - * @param stride bytes per line in the image plane. Setting this to 0 is the - * equivalent of setting it to the plane width. - * - * @param height height (in pixels) of the YUV image. NOTE: this is the height - * of the whole image, not the plane height. - * - * @param subsamp level of chrominance subsampling in the image (see - * @ref TJSAMP "Chrominance subsampling options".) - * - * @return the size of the buffer (in bytes) required to hold the YUV image - * plane, or -1 if the arguments are out of bounds. - */ -DLLEXPORT unsigned long DLLCALL tjPlaneSizeYUV(int componentID, int width, - int stride, int height, int subsamp); - - -/** - * The plane width of a YUV image plane with the given parameters. Refer to - * @ref YUVnotes "YUV Image Format Notes" for a description of plane width. - * - * @param componentID ID number of the image plane (0 = Y, 1 = U/Cb, 2 = V/Cr) - * - * @param width width (in pixels) of the YUV image - * - * @param subsamp level of chrominance subsampling in the image (see - * @ref TJSAMP "Chrominance subsampling options".) - * - * @return the plane width of a YUV image plane with the given parameters, or - * -1 if the arguments are out of bounds. - */ -DLLEXPORT int tjPlaneWidth(int componentID, int width, int subsamp); - - -/** - * The plane height of a YUV image plane with the given parameters. Refer to - * @ref YUVnotes "YUV Image Format Notes" for a description of plane height. - * - * @param componentID ID number of the image plane (0 = Y, 1 = U/Cb, 2 = V/Cr) - * - * @param height height (in pixels) of the YUV image - * - * @param subsamp level of chrominance subsampling in the image (see - * @ref TJSAMP "Chrominance subsampling options".) - * - * @return the plane height of a YUV image plane with the given parameters, or - * -1 if the arguments are out of bounds. - */ -DLLEXPORT int tjPlaneHeight(int componentID, int height, int subsamp); - - -/** - * Encode an RGB or grayscale image into a YUV planar image. This function - * uses the accelerated color conversion routines in the underlying - * codec but does not execute any of the other steps in the JPEG compression - * process. - * - * @param handle a handle to a TurboJPEG compressor or transformer instance - * - * @param srcBuf pointer to an image buffer containing RGB or grayscale pixels - * to be encoded - * - * @param width width (in pixels) of the source image - * - * @param pitch bytes per line in the source image. Normally, this should be - * width * #tjPixelSize[pixelFormat] if the image is unpadded, or - * #TJPAD(width * #tjPixelSize[pixelFormat]) if each line of the image - * is padded to the nearest 32-bit boundary, as is the case for Windows - * bitmaps. You can also be clever and use this parameter to skip lines, etc. - * Setting this parameter to 0 is the equivalent of setting it to - * width * #tjPixelSize[pixelFormat]. - * - * @param height height (in pixels) of the source image - * - * @param pixelFormat pixel format of the source image (see @ref TJPF - * "Pixel formats".) - * - * @param dstBuf pointer to an image buffer that will receive the YUV image. - * Use #tjBufSizeYUV2() to determine the appropriate size for this buffer based - * on the image width, height, padding, and level of chrominance subsampling. - * The Y, U (Cb), and V (Cr) image planes will be stored sequentially in the - * buffer (refer to @ref YUVnotes "YUV Image Format Notes".) - * - * @param pad the width of each line in each plane of the YUV image will be - * padded to the nearest multiple of this number of bytes (must be a power of - * 2.) To generate images suitable for X Video, pad should be set to - * 4. - * - * @param subsamp the level of chrominance subsampling to be used when - * generating the YUV image (see @ref TJSAMP - * "Chrominance subsampling options".) To generate images suitable for X - * Video, subsamp should be set to @ref TJSAMP_420. This produces an - * image compatible with the I420 (AKA "YUV420P") format. - * - * @param flags the bitwise OR of one or more of the @ref TJFLAG_ACCURATEDCT - * "flags" - * - * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) -*/ -DLLEXPORT int DLLCALL tjEncodeYUV3(tjhandle handle, - const unsigned char *srcBuf, int width, int pitch, int height, - int pixelFormat, unsigned char *dstBuf, int pad, int subsamp, int flags); - - -/** - * Encode an RGB or grayscale image into separate Y, U (Cb), and V (Cr) image - * planes. This function uses the accelerated color conversion routines in the - * underlying codec but does not execute any of the other steps in the JPEG - * compression process. - * - * @param handle a handle to a TurboJPEG compressor or transformer instance - * - * @param srcBuf pointer to an image buffer containing RGB or grayscale pixels - * to be encoded - * - * @param width width (in pixels) of the source image - * - * @param pitch bytes per line in the source image. Normally, this should be - * width * #tjPixelSize[pixelFormat] if the image is unpadded, or - * #TJPAD(width * #tjPixelSize[pixelFormat]) if each line of the image - * is padded to the nearest 32-bit boundary, as is the case for Windows - * bitmaps. You can also be clever and use this parameter to skip lines, etc. - * Setting this parameter to 0 is the equivalent of setting it to - * width * #tjPixelSize[pixelFormat]. - * - * @param height height (in pixels) of the source image - * - * @param pixelFormat pixel format of the source image (see @ref TJPF - * "Pixel formats".) - * - * @param dstPlanes an array of pointers to Y, U (Cb), and V (Cr) image planes - * (or just a Y plane, if generating a grayscale image) that will receive the - * encoded image. These planes can be contiguous or non-contiguous in memory. - * Use #tjPlaneSizeYUV() to determine the appropriate size for each plane based - * on the image width, height, strides, and level of chrominance subsampling. - * Refer to @ref YUVnotes "YUV Image Format Notes" for more details. - * - * @param strides an array of integers, each specifying the number of bytes per - * line in the corresponding plane of the output image. Setting the stride for - * any plane to 0 is the same as setting it to the plane width (see - * @ref YUVnotes "YUV Image Format Notes".) If strides is NULL, then - * the strides for all planes will be set to their respective plane widths. - * You can adjust the strides in order to add an arbitrary amount of line - * padding to each plane or to encode an RGB or grayscale image into a - * subregion of a larger YUV planar image. - * - * @param subsamp the level of chrominance subsampling to be used when - * generating the YUV image (see @ref TJSAMP - * "Chrominance subsampling options".) To generate images suitable for X - * Video, subsamp should be set to @ref TJSAMP_420. This produces an - * image compatible with the I420 (AKA "YUV420P") format. - * - * @param flags the bitwise OR of one or more of the @ref TJFLAG_ACCURATEDCT - * "flags" - * - * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) -*/ -DLLEXPORT int DLLCALL tjEncodeYUVPlanes(tjhandle handle, - const unsigned char *srcBuf, int width, int pitch, int height, - int pixelFormat, unsigned char **dstPlanes, int *strides, int subsamp, - int flags); - - -/** - * Create a TurboJPEG decompressor instance. - * - * @return a handle to the newly-created instance, or NULL if an error - * occurred (see #tjGetErrorStr().) -*/ -DLLEXPORT tjhandle DLLCALL tjInitDecompress(void); - - -/** - * Retrieve information about a JPEG image without decompressing it. - * - * @param handle a handle to a TurboJPEG decompressor or transformer instance - * - * @param jpegBuf pointer to a buffer containing a JPEG image - * - * @param jpegSize size of the JPEG image (in bytes) - * - * @param width pointer to an integer variable that will receive the width (in - * pixels) of the JPEG image - * - * @param height pointer to an integer variable that will receive the height - * (in pixels) of the JPEG image - * - * @param jpegSubsamp pointer to an integer variable that will receive the - * level of chrominance subsampling used when the JPEG image was compressed - * (see @ref TJSAMP "Chrominance subsampling options".) - * - * @param jpegColorspace pointer to an integer variable that will receive one - * of the JPEG colorspace constants, indicating the colorspace of the JPEG - * image (see @ref TJCS "JPEG colorspaces".) - * - * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) -*/ -DLLEXPORT int DLLCALL tjDecompressHeader3(tjhandle handle, - const unsigned char *jpegBuf, unsigned long jpegSize, int *width, - int *height, int *jpegSubsamp, int *jpegColorspace); - - -/** - * Returns a list of fractional scaling factors that the JPEG decompressor in - * this implementation of TurboJPEG supports. - * - * @param numscalingfactors pointer to an integer variable that will receive - * the number of elements in the list - * - * @return a pointer to a list of fractional scaling factors, or NULL if an - * error is encountered (see #tjGetErrorStr().) -*/ -DLLEXPORT tjscalingfactor* DLLCALL tjGetScalingFactors(int *numscalingfactors); - - -/** - * Decompress a JPEG image to an RGB, grayscale, or CMYK image. - * - * @param handle a handle to a TurboJPEG decompressor or transformer instance - * - * @param jpegBuf pointer to a buffer containing the JPEG image to decompress - * - * @param jpegSize size of the JPEG image (in bytes) - * - * @param dstBuf pointer to an image buffer that will receive the decompressed - * image. This buffer should normally be pitch * scaledHeight bytes - * in size, where scaledHeight can be determined by calling - * #TJSCALED() with the JPEG image height and one of the scaling factors - * returned by #tjGetScalingFactors(). The dstBuf pointer may also be - * used to decompress into a specific region of a larger buffer. - * - * @param width desired width (in pixels) of the destination image. If this is - * different than the width of the JPEG image being decompressed, then - * TurboJPEG will use scaling in the JPEG decompressor to generate the largest - * possible image that will fit within the desired width. If width is - * set to 0, then only the height will be considered when determining the - * scaled image size. - * - * @param pitch bytes per line in the destination image. Normally, this is - * scaledWidth * #tjPixelSize[pixelFormat] if the decompressed image - * is unpadded, else #TJPAD(scaledWidth * #tjPixelSize[pixelFormat]) - * if each line of the decompressed image is padded to the nearest 32-bit - * boundary, as is the case for Windows bitmaps. (NOTE: scaledWidth - * can be determined by calling #TJSCALED() with the JPEG image width and one - * of the scaling factors returned by #tjGetScalingFactors().) You can also be - * clever and use the pitch parameter to skip lines, etc. Setting this - * parameter to 0 is the equivalent of setting it to - * scaledWidth * #tjPixelSize[pixelFormat]. - * - * @param height desired height (in pixels) of the destination image. If this - * is different than the height of the JPEG image being decompressed, then - * TurboJPEG will use scaling in the JPEG decompressor to generate the largest - * possible image that will fit within the desired height. If height - * is set to 0, then only the width will be considered when determining the - * scaled image size. - * - * @param pixelFormat pixel format of the destination image (see @ref - * TJPF "Pixel formats".) - * - * @param flags the bitwise OR of one or more of the @ref TJFLAG_ACCURATEDCT - * "flags" - * - * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) - */ -DLLEXPORT int DLLCALL tjDecompress2(tjhandle handle, - const unsigned char *jpegBuf, unsigned long jpegSize, unsigned char *dstBuf, - int width, int pitch, int height, int pixelFormat, int flags); - - -/** - * Decompress a JPEG image to a YUV planar image. This function performs JPEG - * decompression but leaves out the color conversion step, so a planar YUV - * image is generated instead of an RGB image. - * - * @param handle a handle to a TurboJPEG decompressor or transformer instance - * - * @param jpegBuf pointer to a buffer containing the JPEG image to decompress - * - * @param jpegSize size of the JPEG image (in bytes) - * - * @param dstBuf pointer to an image buffer that will receive the YUV image. - * Use #tjBufSizeYUV2() to determine the appropriate size for this buffer based - * on the image width, height, padding, and level of subsampling. The Y, - * U (Cb), and V (Cr) image planes will be stored sequentially in the buffer - * (refer to @ref YUVnotes "YUV Image Format Notes".) - * - * @param width desired width (in pixels) of the YUV image. If this is - * different than the width of the JPEG image being decompressed, then - * TurboJPEG will use scaling in the JPEG decompressor to generate the largest - * possible image that will fit within the desired width. If width is - * set to 0, then only the height will be considered when determining the - * scaled image size. If the scaled width is not an even multiple of the MCU - * block width (see #tjMCUWidth), then an intermediate buffer copy will be - * performed within TurboJPEG. - * - * @param pad the width of each line in each plane of the YUV image will be - * padded to the nearest multiple of this number of bytes (must be a power of - * 2.) To generate images suitable for X Video, pad should be set to - * 4. - * - * @param height desired height (in pixels) of the YUV image. If this is - * different than the height of the JPEG image being decompressed, then - * TurboJPEG will use scaling in the JPEG decompressor to generate the largest - * possible image that will fit within the desired height. If height - * is set to 0, then only the width will be considered when determining the - * scaled image size. If the scaled height is not an even multiple of the MCU - * block height (see #tjMCUHeight), then an intermediate buffer copy will be - * performed within TurboJPEG. - * - * @param flags the bitwise OR of one or more of the @ref TJFLAG_ACCURATEDCT - * "flags" - * - * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) - */ -DLLEXPORT int DLLCALL tjDecompressToYUV2(tjhandle handle, - const unsigned char *jpegBuf, unsigned long jpegSize, unsigned char *dstBuf, - int width, int pad, int height, int flags); - - -/** - * Decompress a JPEG image into separate Y, U (Cb), and V (Cr) image - * planes. This function performs JPEG decompression but leaves out the color - * conversion step, so a planar YUV image is generated instead of an RGB image. - * - * @param handle a handle to a TurboJPEG decompressor or transformer instance - * - * @param jpegBuf pointer to a buffer containing the JPEG image to decompress - * - * @param jpegSize size of the JPEG image (in bytes) - * - * @param dstPlanes an array of pointers to Y, U (Cb), and V (Cr) image planes - * (or just a Y plane, if decompressing a grayscale image) that will receive - * the YUV image. These planes can be contiguous or non-contiguous in memory. - * Use #tjPlaneSizeYUV() to determine the appropriate size for each plane based - * on the scaled image width, scaled image height, strides, and level of - * chrominance subsampling. Refer to @ref YUVnotes "YUV Image Format Notes" - * for more details. - * - * @param width desired width (in pixels) of the YUV image. If this is - * different than the width of the JPEG image being decompressed, then - * TurboJPEG will use scaling in the JPEG decompressor to generate the largest - * possible image that will fit within the desired width. If width is - * set to 0, then only the height will be considered when determining the - * scaled image size. If the scaled width is not an even multiple of the MCU - * block width (see #tjMCUWidth), then an intermediate buffer copy will be - * performed within TurboJPEG. - * - * @param strides an array of integers, each specifying the number of bytes per - * line in the corresponding plane of the output image. Setting the stride for - * any plane to 0 is the same as setting it to the scaled plane width (see - * @ref YUVnotes "YUV Image Format Notes".) If strides is NULL, then - * the strides for all planes will be set to their respective scaled plane - * widths. You can adjust the strides in order to add an arbitrary amount of - * line padding to each plane or to decompress the JPEG image into a subregion - * of a larger YUV planar image. - * - * @param height desired height (in pixels) of the YUV image. If this is - * different than the height of the JPEG image being decompressed, then - * TurboJPEG will use scaling in the JPEG decompressor to generate the largest - * possible image that will fit within the desired height. If height - * is set to 0, then only the width will be considered when determining the - * scaled image size. If the scaled height is not an even multiple of the MCU - * block height (see #tjMCUHeight), then an intermediate buffer copy will be - * performed within TurboJPEG. - * - * @param flags the bitwise OR of one or more of the @ref TJFLAG_ACCURATEDCT - * "flags" - * - * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) - */ -DLLEXPORT int DLLCALL tjDecompressToYUVPlanes(tjhandle handle, - const unsigned char *jpegBuf, unsigned long jpegSize, - unsigned char **dstPlanes, int width, int *strides, int height, int flags); - - -/** - * Decode a YUV planar image into an RGB or grayscale image. This function - * uses the accelerated color conversion routines in the underlying - * codec but does not execute any of the other steps in the JPEG decompression - * process. - * - * @param handle a handle to a TurboJPEG decompressor or transformer instance - * - * @param srcBuf pointer to an image buffer containing a YUV planar image to be - * decoded. The size of this buffer should match the value returned by - * #tjBufSizeYUV2() for the given image width, height, padding, and level of - * chrominance subsampling. The Y, U (Cb), and V (Cr) image planes should be - * stored sequentially in the source buffer (refer to @ref YUVnotes - * "YUV Image Format Notes".) - * - * @param pad Use this parameter to specify that the width of each line in each - * plane of the YUV source image is padded to the nearest multiple of this - * number of bytes (must be a power of 2.) - * - * @param subsamp the level of chrominance subsampling used in the YUV source - * image (see @ref TJSAMP "Chrominance subsampling options".) - * - * @param dstBuf pointer to an image buffer that will receive the decoded - * image. This buffer should normally be pitch * height bytes in - * size, but the dstBuf pointer can also be used to decode into a - * specific region of a larger buffer. - * - * @param width width (in pixels) of the source and destination images - * - * @param pitch bytes per line in the destination image. Normally, this should - * be width * #tjPixelSize[pixelFormat] if the destination image is - * unpadded, or #TJPAD(width * #tjPixelSize[pixelFormat]) if each line - * of the destination image should be padded to the nearest 32-bit boundary, as - * is the case for Windows bitmaps. You can also be clever and use the pitch - * parameter to skip lines, etc. Setting this parameter to 0 is the equivalent - * of setting it to width * #tjPixelSize[pixelFormat]. - * - * @param height height (in pixels) of the source and destination images - * - * @param pixelFormat pixel format of the destination image (see @ref TJPF - * "Pixel formats".) - * - * @param flags the bitwise OR of one or more of the @ref TJFLAG_ACCURATEDCT - * "flags" - * - * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) - */ -DLLEXPORT int DLLCALL tjDecodeYUV(tjhandle handle, const unsigned char *srcBuf, - int pad, int subsamp, unsigned char *dstBuf, int width, int pitch, - int height, int pixelFormat, int flags); - - -/** - * Decode a set of Y, U (Cb), and V (Cr) image planes into an RGB or grayscale - * image. This function uses the accelerated color conversion routines in the - * underlying codec but does not execute any of the other steps in the JPEG - * decompression process. - * - * @param handle a handle to a TurboJPEG decompressor or transformer instance - * - * @param srcPlanes an array of pointers to Y, U (Cb), and V (Cr) image planes - * (or just a Y plane, if decoding a grayscale image) that contain a YUV image - * to be decoded. These planes can be contiguous or non-contiguous in memory. - * The size of each plane should match the value returned by #tjPlaneSizeYUV() - * for the given image width, height, strides, and level of chrominance - * subsampling. Refer to @ref YUVnotes "YUV Image Format Notes" for more - * details. - * - * @param strides an array of integers, each specifying the number of bytes per - * line in the corresponding plane of the YUV source image. Setting the stride - * for any plane to 0 is the same as setting it to the plane width (see - * @ref YUVnotes "YUV Image Format Notes".) If strides is NULL, then - * the strides for all planes will be set to their respective plane widths. - * You can adjust the strides in order to specify an arbitrary amount of line - * padding in each plane or to decode a subregion of a larger YUV planar image. - * - * @param subsamp the level of chrominance subsampling used in the YUV source - * image (see @ref TJSAMP "Chrominance subsampling options".) - * - * @param dstBuf pointer to an image buffer that will receive the decoded - * image. This buffer should normally be pitch * height bytes in - * size, but the dstBuf pointer can also be used to decode into a - * specific region of a larger buffer. - * - * @param width width (in pixels) of the source and destination images - * - * @param pitch bytes per line in the destination image. Normally, this should - * be width * #tjPixelSize[pixelFormat] if the destination image is - * unpadded, or #TJPAD(width * #tjPixelSize[pixelFormat]) if each line - * of the destination image should be padded to the nearest 32-bit boundary, as - * is the case for Windows bitmaps. You can also be clever and use the pitch - * parameter to skip lines, etc. Setting this parameter to 0 is the equivalent - * of setting it to width * #tjPixelSize[pixelFormat]. - * - * @param height height (in pixels) of the source and destination images - * - * @param pixelFormat pixel format of the destination image (see @ref TJPF - * "Pixel formats".) - * - * @param flags the bitwise OR of one or more of the @ref TJFLAG_ACCURATEDCT - * "flags" - * - * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) - */ -DLLEXPORT int DLLCALL tjDecodeYUVPlanes(tjhandle handle, - const unsigned char **srcPlanes, const int *strides, int subsamp, - unsigned char *dstBuf, int width, int pitch, int height, int pixelFormat, - int flags); - - -/** - * Create a new TurboJPEG transformer instance. - * - * @return a handle to the newly-created instance, or NULL if an error - * occurred (see #tjGetErrorStr().) - */ -DLLEXPORT tjhandle DLLCALL tjInitTransform(void); - - -/** - * Losslessly transform a JPEG image into another JPEG image. Lossless - * transforms work by moving the raw DCT coefficients from one JPEG image - * structure to another without altering the values of the coefficients. While - * this is typically faster than decompressing the image, transforming it, and - * re-compressing it, lossless transforms are not free. Each lossless - * transform requires reading and performing Huffman decoding on all of the - * coefficients in the source image, regardless of the size of the destination - * image. Thus, this function provides a means of generating multiple - * transformed images from the same source or applying multiple - * transformations simultaneously, in order to eliminate the need to read the - * source coefficients multiple times. - * - * @param handle a handle to a TurboJPEG transformer instance - * - * @param jpegBuf pointer to a buffer containing the JPEG source image to - * transform - * - * @param jpegSize size of the JPEG source image (in bytes) - * - * @param n the number of transformed JPEG images to generate - * - * @param dstBufs pointer to an array of n image buffers. dstBufs[i] - * will receive a JPEG image that has been transformed using the parameters in - * transforms[i]. TurboJPEG has the ability to reallocate the JPEG - * buffer to accommodate the size of the JPEG image. Thus, you can choose to: - * -# pre-allocate the JPEG buffer with an arbitrary size using #tjAlloc() and - * let TurboJPEG grow the buffer as needed, - * -# set dstBufs[i] to NULL to tell TurboJPEG to allocate the buffer - * for you, or - * -# pre-allocate the buffer to a "worst case" size determined by calling - * #tjBufSize() with the transformed or cropped width and height. Under normal - * circumstances, this should ensure that the buffer never has to be - * re-allocated (setting #TJFLAG_NOREALLOC guarantees that it won't be.) Note, - * however, that there are some rare cases (such as transforming images with a - * large amount of embedded EXIF or ICC profile data) in which the output image - * will be larger than the worst-case size, and #TJFLAG_NOREALLOC cannot be - * used in those cases. - * . - * If you choose option 1, dstSizes[i] should be set to the size of - * your pre-allocated buffer. In any case, unless you have set - * #TJFLAG_NOREALLOC, you should always check dstBufs[i] upon return - * from this function, as it may have changed. - * - * @param dstSizes pointer to an array of n unsigned long variables that will - * receive the actual sizes (in bytes) of each transformed JPEG image. If - * dstBufs[i] points to a pre-allocated buffer, then - * dstSizes[i] should be set to the size of the buffer. Upon return, - * dstSizes[i] will contain the size of the JPEG image (in bytes.) - * - * @param transforms pointer to an array of n #tjtransform structures, each of - * which specifies the transform parameters and/or cropping region for the - * corresponding transformed output image. - * - * @param flags the bitwise OR of one or more of the @ref TJFLAG_ACCURATEDCT - * "flags" - * - * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) - */ -DLLEXPORT int DLLCALL tjTransform(tjhandle handle, - const unsigned char *jpegBuf, unsigned long jpegSize, int n, - unsigned char **dstBufs, unsigned long *dstSizes, tjtransform *transforms, - int flags); - - -/** - * Destroy a TurboJPEG compressor, decompressor, or transformer instance. - * - * @param handle a handle to a TurboJPEG compressor, decompressor or - * transformer instance - * - * @return 0 if successful, or -1 if an error occurred (see #tjGetErrorStr().) - */ -DLLEXPORT int DLLCALL tjDestroy(tjhandle handle); - - -/** - * Allocate an image buffer for use with TurboJPEG. You should always use - * this function to allocate the JPEG destination buffer(s) for the compression - * and transform functions unless you are disabling automatic buffer - * (re)allocation (by setting #TJFLAG_NOREALLOC.) - * - * @param bytes the number of bytes to allocate - * - * @return a pointer to a newly-allocated buffer with the specified number of - * bytes. - * - * @sa tjFree() - */ -DLLEXPORT unsigned char* DLLCALL tjAlloc(int bytes); - - -/** - * Free an image buffer previously allocated by TurboJPEG. You should always - * use this function to free JPEG destination buffer(s) that were automatically - * (re)allocated by the compression and transform functions or that were - * manually allocated using #tjAlloc(). - * - * @param buffer address of the buffer to free - * - * @sa tjAlloc() - */ -DLLEXPORT void DLLCALL tjFree(unsigned char *buffer); - - -/** - * Returns a descriptive error message explaining why the last command failed. - * - * @return a descriptive error message explaining why the last command failed. - */ -DLLEXPORT char* DLLCALL tjGetErrorStr(void); - - -/* Deprecated functions and macros */ -#define TJFLAG_FORCEMMX 8 -#define TJFLAG_FORCESSE 16 -#define TJFLAG_FORCESSE2 32 -#define TJFLAG_FORCESSE3 128 - - -/* Backward compatibility functions and macros (nothing to see here) */ -#define NUMSUBOPT TJ_NUMSAMP -#define TJ_444 TJSAMP_444 -#define TJ_422 TJSAMP_422 -#define TJ_420 TJSAMP_420 -#define TJ_411 TJSAMP_420 -#define TJ_GRAYSCALE TJSAMP_GRAY - -#define TJ_BGR 1 -#define TJ_BOTTOMUP TJFLAG_BOTTOMUP -#define TJ_FORCEMMX TJFLAG_FORCEMMX -#define TJ_FORCESSE TJFLAG_FORCESSE -#define TJ_FORCESSE2 TJFLAG_FORCESSE2 -#define TJ_ALPHAFIRST 64 -#define TJ_FORCESSE3 TJFLAG_FORCESSE3 -#define TJ_FASTUPSAMPLE TJFLAG_FASTUPSAMPLE -#define TJ_YUV 512 - -DLLEXPORT unsigned long DLLCALL TJBUFSIZE(int width, int height); - -DLLEXPORT unsigned long DLLCALL TJBUFSIZEYUV(int width, int height, - int jpegSubsamp); - -DLLEXPORT unsigned long DLLCALL tjBufSizeYUV(int width, int height, - int subsamp); - -DLLEXPORT int DLLCALL tjCompress(tjhandle handle, unsigned char *srcBuf, - int width, int pitch, int height, int pixelSize, unsigned char *dstBuf, - unsigned long *compressedSize, int jpegSubsamp, int jpegQual, int flags); - -DLLEXPORT int DLLCALL tjEncodeYUV(tjhandle handle, - unsigned char *srcBuf, int width, int pitch, int height, int pixelSize, - unsigned char *dstBuf, int subsamp, int flags); - -DLLEXPORT int DLLCALL tjEncodeYUV2(tjhandle handle, - unsigned char *srcBuf, int width, int pitch, int height, int pixelFormat, - unsigned char *dstBuf, int subsamp, int flags); - -DLLEXPORT int DLLCALL tjDecompressHeader(tjhandle handle, - unsigned char *jpegBuf, unsigned long jpegSize, int *width, int *height); - -DLLEXPORT int DLLCALL tjDecompressHeader2(tjhandle handle, - unsigned char *jpegBuf, unsigned long jpegSize, int *width, int *height, - int *jpegSubsamp); - -DLLEXPORT int DLLCALL tjDecompress(tjhandle handle, - unsigned char *jpegBuf, unsigned long jpegSize, unsigned char *dstBuf, - int width, int pitch, int height, int pixelSize, int flags); - -DLLEXPORT int DLLCALL tjDecompressToYUV(tjhandle handle, - unsigned char *jpegBuf, unsigned long jpegSize, unsigned char *dstBuf, - int flags); - - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libs/libnsgif/gif.c b/libs/libnsgif/gif.c new file mode 100755 index 0000000..73814bf --- /dev/null +++ b/libs/libnsgif/gif.c @@ -0,0 +1,2076 @@ +/* + * Copyright 2004 Richard Wilson + * Copyright 2008 Sean Fox + * Copyright 2013-2022 Michael Drake + * + * This file is part of NetSurf's libnsgif, http://www.netsurf-browser.org/ + * Licenced under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + */ + +#include +#include +#include +#include +#include + +#include "lzw.h" +#include "nsgif.h" + +/** Default minimum allowable frame delay in cs. */ +#define NSGIF_FRAME_DELAY_MIN 2 + +/** + * Default frame delay to apply. + * + * Used when a frame delay lower than the minimum is requested. + */ +#define NSGIF_FRAME_DELAY_DEFAULT 10 + +/** GIF frame data */ +typedef struct nsgif_frame { + struct nsgif_frame_info info; + + /** offset (in bytes) to the GIF frame data */ + size_t frame_offset; + /** whether the frame has previously been decoded. */ + bool decoded; + /** whether the frame is totally opaque */ + bool opaque; + /** whether a full image redraw is required */ + bool redraw_required; + + /** Amount of LZW data found in scan */ + uint32_t lzw_data_length; + + /** the index designating a transparent pixel */ + uint32_t transparency_index; + + /** offset to frame colour table */ + uint32_t colour_table_offset; + + /* Frame flags */ + uint32_t flags; +} nsgif_frame; + +/** Pixel format: colour component order. */ +struct nsgif_colour_layout { + uint8_t r; /**< Byte offset within pixel to red component. */ + uint8_t g; /**< Byte offset within pixel to green component. */ + uint8_t b; /**< Byte offset within pixel to blue component. */ + uint8_t a; /**< Byte offset within pixel to alpha component. */ +}; + +/** GIF animation data */ +struct nsgif { + struct nsgif_info info; + + /** LZW decode context */ + void *lzw_ctx; + /** callbacks for bitmap functions */ + nsgif_bitmap_cb_vt bitmap; + /** decoded frames */ + nsgif_frame *frames; + /** current frame */ + uint32_t frame; + /** current frame decoded to bitmap */ + uint32_t decoded_frame; + + /** currently decoded image; stored as bitmap from bitmap_create callback */ + nsgif_bitmap_t *frame_image; + /** Row span of frame_image in pixels. */ + uint32_t rowspan; + + /** Minimum allowable frame delay. */ + uint16_t delay_min; + + /** Frame delay to apply when delay is less than \ref delay_min. */ + uint16_t delay_default; + + /** number of animation loops so far */ + int loop_count; + + /** number of frames partially decoded */ + uint32_t frame_count_partial; + + /** + * Whether all the GIF data has been supplied, or if there may be + * more to come. + */ + bool data_complete; + + /** pointer to GIF data */ + const uint8_t *buf; + /** current index into GIF data */ + size_t buf_pos; + /** total number of bytes of GIF data available */ + size_t buf_len; + + /** current number of frame holders */ + uint32_t frame_holders; + /** background index */ + uint32_t bg_index; + /** image aspect ratio (ignored) */ + uint32_t aspect_ratio; + /** size of global colour table (in entries) */ + uint32_t colour_table_size; + + /** current colour table */ + uint32_t *colour_table; + /** Client's colour component order. */ + struct nsgif_colour_layout colour_layout; + /** global colour table */ + uint32_t global_colour_table[NSGIF_MAX_COLOURS]; + /** local colour table */ + uint32_t local_colour_table[NSGIF_MAX_COLOURS]; + + /** previous frame for NSGIF_FRAME_RESTORE */ + void *prev_frame; + /** previous frame index */ + uint32_t prev_index; +}; + +/** + * Helper macro to get number of elements in an array. + * + * \param[in] _a Array to count elements of. + * \return NUlber of elements in array. + */ +#define NSGIF_ARRAY_LEN(_a) ((sizeof(_a)) / (sizeof(*_a))) + +/** + * + * \file + * \brief GIF image decoder + * + * The GIF format is thoroughly documented; a full description can be found at + * http://www.w3.org/Graphics/GIF/spec-gif89a.txt + * + * \todo Plain text and comment extensions should be implemented. + */ + +/** Internal flag that the colour table needs to be processed */ +#define NSGIF_PROCESS_COLOURS 0xaa000000 + +/** Internal flag that a frame is invalid/unprocessed */ +#define NSGIF_FRAME_INVALID UINT32_MAX + +/** Transparent colour */ +#define NSGIF_TRANSPARENT_COLOUR 0x00 + +/** No transparency */ +#define NSGIF_NO_TRANSPARENCY (0xFFFFFFFFu) + +/* GIF Flags */ +#define NSGIF_COLOUR_TABLE_MASK 0x80 +#define NSGIF_COLOUR_TABLE_SIZE_MASK 0x07 +#define NSGIF_BLOCK_TERMINATOR 0x00 +#define NSGIF_TRAILER 0x3b + +/** + * Convert an LZW result code to equivalent GIF result code. + * + * \param[in] l_res LZW response code. + * \return GIF result code. + */ +static nsgif_error nsgif__error_from_lzw(lzw_result l_res) +{ + static const nsgif_error g_res[] = { + [LZW_OK] = NSGIF_OK, + [LZW_NO_MEM] = NSGIF_ERR_OOM, + [LZW_OK_EOD] = NSGIF_ERR_END_OF_DATA, + [LZW_NO_DATA] = NSGIF_ERR_END_OF_DATA, + [LZW_EOI_CODE] = NSGIF_ERR_DATA_FRAME, + [LZW_BAD_ICODE] = NSGIF_ERR_DATA_FRAME, + [LZW_BAD_CODE] = NSGIF_ERR_DATA_FRAME, + }; + assert(l_res != LZW_BAD_PARAM); + assert(l_res != LZW_NO_COLOUR); + return g_res[l_res]; +} + +/** + * Updates the sprite memory size + * + * \param gif The animation context + * \param width The width of the sprite + * \param height The height of the sprite + * \return NSGIF_ERR_OOM for a memory error NSGIF_OK for success + */ +static nsgif_error nsgif__initialise_sprite( + struct nsgif *gif, + uint32_t width, + uint32_t height) +{ + /* Already allocated? */ + if (gif->frame_image) { + return NSGIF_OK; + } + + assert(gif->bitmap.create); + gif->frame_image = gif->bitmap.create(width, height); + if (gif->frame_image == NULL) { + return NSGIF_ERR_OOM; + } + + return NSGIF_OK; +} + +/** + * Helper to get the rendering bitmap for a gif. + * + * \param[in] gif The gif object we're decoding. + * \return Client pixel buffer for rendering into. + */ +static inline uint32_t* nsgif__bitmap_get( + struct nsgif *gif) +{ + nsgif_error ret; + + /* Make sure we have a buffer to decode to. */ + ret = nsgif__initialise_sprite(gif, gif->info.width, gif->info.height); + if (ret != NSGIF_OK) { + return NULL; + } + + gif->rowspan = gif->info.width; + if (gif->bitmap.get_rowspan) { + gif->rowspan = gif->bitmap.get_rowspan(gif->frame_image); + } + + /* Get the frame data */ + assert(gif->bitmap.get_buffer); + return (void *)gif->bitmap.get_buffer(gif->frame_image); +} + +/** + * Helper to tell the client that their bitmap was modified. + * + * \param[in] gif The gif object we're decoding. + */ +static inline void nsgif__bitmap_modified( + const struct nsgif *gif) +{ + if (gif->bitmap.modified) { + gif->bitmap.modified(gif->frame_image); + } +} + +/** + * Helper to tell the client that whether the bitmap is opaque. + * + * \param[in] gif The gif object we're decoding. + * \param[in] frame The frame that has been decoded. + */ +static inline void nsgif__bitmap_set_opaque( + const struct nsgif *gif, + const struct nsgif_frame *frame) +{ + if (gif->bitmap.set_opaque) { + gif->bitmap.set_opaque( + gif->frame_image, frame->opaque); + } +} + +/** + * Helper to get the client to determine if the bitmap is opaque. + * + * \todo: We don't really need to get the client to do this for us. + * + * \param[in] gif The gif object we're decoding. + * \return true if the bitmap is opaque, false otherwise. + */ +static inline bool nsgif__bitmap_get_opaque( + const struct nsgif *gif) +{ + if (gif->bitmap.test_opaque) { + return gif->bitmap.test_opaque( + gif->frame_image); + } + + return false; +} + +static void nsgif__record_frame( + struct nsgif *gif, + const uint32_t *bitmap) +{ + size_t pixel_bytes = sizeof(*bitmap); + size_t height = gif->info.height; + size_t width = gif->info.width; + uint32_t *prev_frame; + + if (gif->decoded_frame == NSGIF_FRAME_INVALID || + gif->decoded_frame == gif->prev_index) { + /* No frame to copy, or already have this frame recorded. */ + return; + } + + bitmap = nsgif__bitmap_get(gif); + if (bitmap == NULL) { + return; + } + + if (gif->prev_frame == NULL) { + prev_frame = realloc(gif->prev_frame, + width * height * pixel_bytes); + if (prev_frame == NULL) { + return; + } + } else { + prev_frame = gif->prev_frame; + } + + memcpy(prev_frame, bitmap, width * height * pixel_bytes); + + gif->prev_frame = prev_frame; + gif->prev_index = gif->decoded_frame; +} + +static nsgif_error nsgif__recover_frame( + const struct nsgif *gif, + uint32_t *bitmap) +{ + const uint32_t *prev_frame = gif->prev_frame; + size_t pixel_bytes = sizeof(*bitmap); + size_t height = gif->info.height; + size_t width = gif->info.width; + + memcpy(bitmap, prev_frame, height * width * pixel_bytes); + + return NSGIF_OK; +} + +/** + * Get the next line for GIF decode. + * + * Note that the step size must be initialised to 24 at the start of the frame + * (when y == 0). This is because of the first two passes of the frame have + * the same step size of 8, and the step size is used to determine the current + * pass. + * + * \param[in] height Frame height in pixels. + * \param[in,out] y Current row, starting from 0, updated on exit. + * \param[in,out] step Current step starting with 24, updated on exit. + * \return true if there is a row to process, false at the end of the frame. + */ +static inline bool nsgif__deinterlace(uint32_t height, uint32_t *y, uint8_t *step) +{ + *y += *step & 0xf; + + if (*y < height) return true; + + switch (*step) { + case 24: *y = 4; *step = 8; if (*y < height) return true; + /* Fall through. */ + case 8: *y = 2; *step = 4; if (*y < height) return true; + /* Fall through. */ + case 4: *y = 1; *step = 2; if (*y < height) return true; + /* Fall through. */ + default: + break; + } + + return false; +} + +/** + * Get the next line for GIF decode. + * + * \param[in] interlace Non-zero if the frame is not interlaced. + * \param[in] height Frame height in pixels. + * \param[in,out] y Current row, starting from 0, updated on exit. + * \param[in,out] step Current step starting with 24, updated on exit. + * \return true if there is a row to process, false at the end of the frame. + */ +static inline bool nsgif__next_row(uint32_t interlace, + uint32_t height, uint32_t *y, uint8_t *step) +{ + if (!interlace) { + return (++*y != height); + } else { + return nsgif__deinterlace(height, y, step); + } +} + +/** + * Get any frame clip adjustment for the image extent. + * + * \param[in] frame_off Frame's X or Y offset. + * \param[in] frame_dim Frame width or height. + * \param[in] image_ext Image width or height constraint. + * \return the amount the frame needs to be clipped to fit the image in given + * dimension. + */ +static inline uint32_t gif__clip( + uint32_t frame_off, + uint32_t frame_dim, + uint32_t image_ext) +{ + uint32_t frame_ext = frame_off + frame_dim; + + if (frame_ext <= image_ext) { + return 0; + } + + return frame_ext - image_ext; +} + +/** + * Perform any jump over decoded data, to accommodate clipped portion of frame. + * + * \param[in,out] skip Number of pixels of data to jump. + * \param[in,out] available Number of pixels of data currently available. + * \param[in,out] pos Position in decoded pixel value data. + */ +static inline void gif__jump_data( + uint32_t *skip, + uint32_t *available, + const uint8_t **pos) +{ + uint32_t jump = (*skip < *available) ? *skip : *available; + + *skip -= jump; + *available -= jump; + *pos += jump; +} + +static nsgif_error nsgif__decode_complex( + struct nsgif *gif, + uint32_t width, + uint32_t height, + uint32_t offset_x, + uint32_t offset_y, + uint32_t interlace, + const uint8_t *data, + uint32_t transparency_index, + uint32_t *restrict frame_data, + uint32_t *restrict colour_table) +{ + lzw_result res; + nsgif_error ret = NSGIF_OK; + uint32_t clip_x = gif__clip(offset_x, width, gif->info.width); + uint32_t clip_y = gif__clip(offset_y, height, gif->info.height); + const uint8_t *uncompressed; + uint32_t available = 0; + uint8_t step = 24; + uint32_t skip = 0; + uint32_t y = 0; + + if (offset_x >= gif->info.width || + offset_y >= gif->info.height) { + return NSGIF_OK; + } + + width -= clip_x; + height -= clip_y; + + if (width == 0 || height == 0) { + return NSGIF_OK; + } + + /* Initialise the LZW decoding */ + res = lzw_decode_init(gif->lzw_ctx, data[0], + gif->buf, gif->buf_len, + data + 1 - gif->buf); + if (res != LZW_OK) { + return nsgif__error_from_lzw(res); + } + + do { + uint32_t x; + uint32_t *frame_scanline; + + frame_scanline = frame_data + offset_x + + (y + offset_y) * gif->rowspan; + + x = width; + while (x > 0) { + unsigned row_available; + while (available == 0) { + if (res != LZW_OK) { + /* Unexpected end of frame, try to recover */ + if (res == LZW_OK_EOD || + res == LZW_EOI_CODE) { + ret = NSGIF_OK; + } else { + ret = nsgif__error_from_lzw(res); + } + return ret; + } + res = lzw_decode(gif->lzw_ctx, + &uncompressed, &available); + + if (available == 0) { + return NSGIF_OK; + } + gif__jump_data(&skip, &available, &uncompressed); + } + + row_available = x < available ? x : available; + x -= row_available; + available -= row_available; + if (transparency_index > 0xFF) { + while (row_available-- > 0) { + *frame_scanline++ = + colour_table[*uncompressed++]; + } + } else { + while (row_available-- > 0) { + register uint32_t colour; + colour = *uncompressed++; + if (colour != transparency_index) { + *frame_scanline = + colour_table[colour]; + } + frame_scanline++; + } + } + } + + skip = clip_x; + gif__jump_data(&skip, &available, &uncompressed); + } while (nsgif__next_row(interlace, height, &y, &step)); + + return ret; +} + +static nsgif_error nsgif__decode_simple( + struct nsgif *gif, + uint32_t height, + uint32_t offset_y, + const uint8_t *data, + uint32_t transparency_index, + uint32_t *restrict frame_data, + uint32_t *restrict colour_table) +{ + uint32_t pixels; + uint32_t written = 0; + nsgif_error ret = NSGIF_OK; + lzw_result res; + + if (offset_y >= gif->info.height) { + return NSGIF_OK; + } + + height -= gif__clip(offset_y, height, gif->info.height); + + if (height == 0) { + return NSGIF_OK; + } + + /* Initialise the LZW decoding */ + res = lzw_decode_init_map(gif->lzw_ctx, data[0], + transparency_index, colour_table, + gif->buf, gif->buf_len, + data + 1 - gif->buf); + if (res != LZW_OK) { + return nsgif__error_from_lzw(res); + } + + frame_data += (offset_y * gif->info.width); + pixels = gif->info.width * height; + + while (pixels > 0) { + res = lzw_decode_map(gif->lzw_ctx, + frame_data, pixels, &written); + pixels -= written; + frame_data += written; + if (res != LZW_OK) { + /* Unexpected end of frame, try to recover */ + if (res == LZW_OK_EOD || res == LZW_EOI_CODE) { + ret = NSGIF_OK; + } else { + ret = nsgif__error_from_lzw(res); + } + break; + } + } + + if (pixels == 0) { + ret = NSGIF_OK; + } + + return ret; +} + +static inline nsgif_error nsgif__decode( + struct nsgif *gif, + struct nsgif_frame *frame, + const uint8_t *data, + uint32_t *restrict frame_data) +{ + nsgif_error ret; + uint32_t width = frame->info.rect.x1 - frame->info.rect.x0; + uint32_t height = frame->info.rect.y1 - frame->info.rect.y0; + uint32_t offset_x = frame->info.rect.x0; + uint32_t offset_y = frame->info.rect.y0; + uint32_t transparency_index = frame->transparency_index; + uint32_t *restrict colour_table = gif->colour_table; + + if (frame->info.interlaced == false && offset_x == 0 && + width == gif->info.width && + width == gif->rowspan) { + ret = nsgif__decode_simple(gif, height, offset_y, + data, transparency_index, + frame_data, colour_table); + } else { + ret = nsgif__decode_complex(gif, width, height, + offset_x, offset_y, frame->info.interlaced, + data, transparency_index, + frame_data, colour_table); + } + + if (gif->data_complete && ret == NSGIF_ERR_END_OF_DATA) { + /* This is all the data there is, so make do. */ + ret = NSGIF_OK; + } + + return ret; +} + +/** + * Restore a GIF to the background colour. + * + * \param[in] gif The gif object we're decoding. + * \param[in] frame The frame to clear, or NULL. + * \param[in] bitmap The bitmap to clear the frame in. + */ +static void nsgif__restore_bg( + struct nsgif *gif, + struct nsgif_frame *frame, + uint32_t *bitmap) +{ + size_t pixel_bytes = sizeof(*bitmap); + + if (frame == NULL) { + size_t width = gif->info.width; + size_t height = gif->info.height; + + memset(bitmap, NSGIF_TRANSPARENT_COLOUR, + width * height * pixel_bytes); + } else { + uint32_t width = frame->info.rect.x1 - frame->info.rect.x0; + uint32_t height = frame->info.rect.y1 - frame->info.rect.y0; + uint32_t offset_x = frame->info.rect.x0; + uint32_t offset_y = frame->info.rect.y0; + + if (frame->info.display == false || + frame->info.rect.x0 >= gif->info.width || + frame->info.rect.y0 >= gif->info.height) { + return; + } + + width -= gif__clip(offset_x, width, gif->info.width); + height -= gif__clip(offset_y, height, gif->info.height); + + if (frame->info.transparency) { + for (uint32_t y = 0; y < height; y++) { + uint32_t *scanline = bitmap + offset_x + + (offset_y + y) * gif->info.width; + memset(scanline, NSGIF_TRANSPARENT_COLOUR, + width * pixel_bytes); + } + } else { + for (uint32_t y = 0; y < height; y++) { + uint32_t *scanline = bitmap + offset_x + + (offset_y + y) * gif->info.width; + for (uint32_t x = 0; x < width; x++) { + scanline[x] = gif->info.background; + } + } + } + } +} + +static nsgif_error nsgif__update_bitmap( + struct nsgif *gif, + struct nsgif_frame *frame, + const uint8_t *data, + uint32_t frame_idx) +{ + nsgif_error ret; + uint32_t *bitmap; + + gif->decoded_frame = frame_idx; + + bitmap = nsgif__bitmap_get(gif); + if (bitmap == NULL) { + return NSGIF_ERR_OOM; + } + + /* Handle any bitmap clearing/restoration required before decoding this + * frame. */ + if (frame_idx == 0 || gif->decoded_frame == NSGIF_FRAME_INVALID) { + nsgif__restore_bg(gif, NULL, bitmap); + + } else { + struct nsgif_frame *prev = &gif->frames[frame_idx - 1]; + + if (prev->info.disposal == NSGIF_DISPOSAL_RESTORE_BG) { + nsgif__restore_bg(gif, prev, bitmap); + + } else if (prev->info.disposal == NSGIF_DISPOSAL_RESTORE_PREV) { + ret = nsgif__recover_frame(gif, bitmap); + if (ret != NSGIF_OK) { + nsgif__restore_bg(gif, prev, bitmap); + } + } + } + + if (frame->info.disposal == NSGIF_DISPOSAL_RESTORE_PREV) { + /* Store the previous frame for later restoration */ + nsgif__record_frame(gif, bitmap); + } + + ret = nsgif__decode(gif, frame, data, bitmap); + + nsgif__bitmap_modified(gif); + + if (!frame->decoded) { + frame->opaque = nsgif__bitmap_get_opaque(gif); + frame->decoded = true; + } + nsgif__bitmap_set_opaque(gif, frame); + + return ret; +} + +/** + * Parse the graphic control extension + * + * \param[in] frame The gif frame object we're decoding. + * \param[in] data The data to decode. + * \param[in] len Byte length of data. + * \return NSGIF_ERR_END_OF_DATA if more data is needed, + * NSGIF_OK for success. + */ +static nsgif_error nsgif__parse_extension_graphic_control( + struct nsgif_frame *frame, + const uint8_t *data, + size_t len) +{ + enum { + GIF_MASK_TRANSPARENCY = 0x01, + GIF_MASK_DISPOSAL = 0x1c, + }; + + /* 6-byte Graphic Control Extension is: + * + * +0 CHAR Graphic Control Label + * +1 CHAR Block Size + * +2 CHAR __Packed Fields__ + * 3BITS Reserved + * 3BITS Disposal Method + * 1BIT User Input Flag + * 1BIT Transparent Color Flag + * +3 SHORT Delay Time + * +5 CHAR Transparent Color Index + */ + if (len < 6) { + return NSGIF_ERR_END_OF_DATA; + } + + frame->info.delay = data[3] | (data[4] << 8); + + if (data[2] & GIF_MASK_TRANSPARENCY) { + frame->info.transparency = true; + frame->transparency_index = data[5]; + } + + frame->info.disposal = ((data[2] & GIF_MASK_DISPOSAL) >> 2); + /* I have encountered documentation and GIFs in the + * wild that use 0x04 to restore the previous frame, + * rather than the officially documented 0x03. I + * believe some (older?) software may even actually + * export this way. We handle this as a type of + * "quirks" mode. */ + if (frame->info.disposal == NSGIF_DISPOSAL_RESTORE_QUIRK) { + frame->info.disposal = NSGIF_DISPOSAL_RESTORE_PREV; + } + + /* if we are clearing the background then we need to + * redraw enough to cover the previous frame too. */ + frame->redraw_required = + frame->info.disposal == NSGIF_DISPOSAL_RESTORE_BG || + frame->info.disposal == NSGIF_DISPOSAL_RESTORE_PREV; + + return NSGIF_OK; +} + +/** + * Check an app ext identifier and authentication code for loop count extension. + * + * \param[in] data The data to decode. + * \param[in] len Byte length of data. + * \return true if extension is a loop count extension. + */ +static bool nsgif__app_ext_is_loop_count( + const uint8_t *data, + size_t len) +{ + enum { + EXT_LOOP_COUNT_BLOCK_SIZE = 0x0b, + }; + + assert(len > 13); + (void)(len); + + if (data[1] == EXT_LOOP_COUNT_BLOCK_SIZE) { + if (strncmp((const char *)data + 2, "NETSCAPE2.0", 11) == 0 || + strncmp((const char *)data + 2, "ANIMEXTS1.0", 11) == 0) { + return true; + } + } + + return false; +} + +/** + * Parse the application extension + * + * \param[in] gif The gif object we're decoding. + * \param[in] data The data to decode. + * \param[in] len Byte length of data. + * \return NSGIF_ERR_END_OF_DATA if more data is needed, + * NSGIF_OK for success. + */ +static nsgif_error nsgif__parse_extension_application( + struct nsgif *gif, + const uint8_t *data, + size_t len) +{ + /* 14-byte+ Application Extension is: + * + * +0 CHAR Application Extension Label + * +1 CHAR Block Size + * +2 8CHARS Application Identifier + * +10 3CHARS Appl. Authentication Code + * +13 1-256 Application Data (Data sub-blocks) + */ + if (len < 17) { + return NSGIF_ERR_END_OF_DATA; + } + + if (nsgif__app_ext_is_loop_count(data, len)) { + enum { + EXT_LOOP_COUNT_SUB_BLOCK_SIZE = 0x03, + EXT_LOOP_COUNT_SUB_BLOCK_ID = 0x01, + }; + if ((data[13] == EXT_LOOP_COUNT_SUB_BLOCK_SIZE) && + (data[14] == EXT_LOOP_COUNT_SUB_BLOCK_ID)) { + gif->info.loop_max = data[15] | (data[16] << 8); + + /* The value in the source data means repeat N times + * after the first implied play. A value of zero has + * the special meaning of loop forever. (The only way + * to play the animation once is not to have this + * extension at all. */ + if (gif->info.loop_max > 0) { + gif->info.loop_max++; + } + } + } + + return NSGIF_OK; +} + +/** + * Parse the frame's extensions + * + * \param[in] gif The gif object we're decoding. + * \param[in] frame The frame to parse extensions for. + * \param[in] pos Current position in data, updated on exit. + * \param[in] decode Whether to decode or skip over the extension. + * \return NSGIF_ERR_END_OF_DATA if more data is needed, + * NSGIF_OK for success. + */ +static nsgif_error nsgif__parse_frame_extensions( + struct nsgif *gif, + struct nsgif_frame *frame, + const uint8_t **pos, + bool decode) +{ + enum { + GIF_EXT_INTRODUCER = 0x21, + GIF_EXT_GRAPHIC_CONTROL = 0xf9, + GIF_EXT_COMMENT = 0xfe, + GIF_EXT_PLAIN_TEXT = 0x01, + GIF_EXT_APPLICATION = 0xff, + }; + const uint8_t *nsgif_data = *pos; + const uint8_t *nsgif_end = gif->buf + gif->buf_len; + int nsgif_bytes = nsgif_end - nsgif_data; + + /* Initialise the extensions */ + while (nsgif_bytes > 0 && nsgif_data[0] == GIF_EXT_INTRODUCER) { + bool block_step = true; + nsgif_error ret; + + nsgif_data++; + nsgif_bytes--; + + if (nsgif_bytes == 0) { + return NSGIF_ERR_END_OF_DATA; + } + + /* Switch on extension label */ + switch (nsgif_data[0]) { + case GIF_EXT_GRAPHIC_CONTROL: + if (decode) { + ret = nsgif__parse_extension_graphic_control( + frame, + nsgif_data, + nsgif_bytes); + if (ret != NSGIF_OK) { + return ret; + } + } + break; + + case GIF_EXT_APPLICATION: + if (decode) { + ret = nsgif__parse_extension_application( + gif, nsgif_data, nsgif_bytes); + if (ret != NSGIF_OK) { + return ret; + } + } + break; + + case GIF_EXT_COMMENT: + /* Move the pointer to the first data sub-block Skip 1 + * byte for the extension label. */ + ++nsgif_data; + block_step = false; + break; + + default: + break; + } + + if (block_step) { + /* Move the pointer to the first data sub-block Skip 2 + * bytes for the extension label and size fields Skip + * the extension size itself + */ + if (nsgif_bytes < 2) { + return NSGIF_ERR_END_OF_DATA; + } + nsgif_data += 2 + nsgif_data[1]; + } + + /* Repeatedly skip blocks until we get a zero block or run out + * of data. This data is ignored by this gif decoder. */ + while (nsgif_data < nsgif_end && nsgif_data[0] != NSGIF_BLOCK_TERMINATOR) { + nsgif_data += nsgif_data[0] + 1; + if (nsgif_data >= nsgif_end) { + return NSGIF_ERR_END_OF_DATA; + } + } + nsgif_data++; + nsgif_bytes = nsgif_end - nsgif_data; + } + + if (nsgif_data > nsgif_end) { + nsgif_data = nsgif_end; + } + + /* Set buffer position and return */ + *pos = nsgif_data; + return NSGIF_OK; +} + +/** + * Parse a GIF Image Descriptor. + * + * The format is: + * + * +0 CHAR Image Separator (0x2c) + * +1 SHORT Image Left Position + * +3 SHORT Image Top Position + * +5 SHORT Width + * +7 SHORT Height + * +9 CHAR __Packed Fields__ + * 1BIT Local Colour Table Flag + * 1BIT Interlace Flag + * 1BIT Sort Flag + * 2BITS Reserved + * 3BITS Size of Local Colour Table + * + * \param[in] gif The gif object we're decoding. + * \param[in] frame The frame to parse an image descriptor for. + * \param[in] pos Current position in data, updated on exit. + * \param[in] decode Whether to decode the image descriptor. + * \return NSGIF_OK on success, appropriate error otherwise. + */ +static nsgif_error nsgif__parse_image_descriptor( + struct nsgif *gif, + struct nsgif_frame *frame, + const uint8_t **pos, + bool decode) +{ + const uint8_t *data = *pos; + size_t len = gif->buf + gif->buf_len - data; + enum { + NSGIF_IMAGE_DESCRIPTOR_LEN = 10u, + NSGIF_IMAGE_SEPARATOR = 0x2Cu, + NSGIF_MASK_INTERLACE = 0x40u, + }; + + assert(gif != NULL); + assert(frame != NULL); + + if (len < NSGIF_IMAGE_DESCRIPTOR_LEN) { + return NSGIF_ERR_END_OF_DATA; + } + + if (decode) { + uint32_t x, y, w, h; + + if (data[0] != NSGIF_IMAGE_SEPARATOR) { + return NSGIF_ERR_DATA_FRAME; + } + + x = data[1] | (data[2] << 8); + y = data[3] | (data[4] << 8); + w = data[5] | (data[6] << 8); + h = data[7] | (data[8] << 8); + frame->flags = data[9]; + + frame->info.rect.x0 = x; + frame->info.rect.y0 = y; + frame->info.rect.x1 = x + w; + frame->info.rect.y1 = y + h; + + frame->info.interlaced = frame->flags & NSGIF_MASK_INTERLACE; + + /* Allow first frame to grow image dimensions. */ + if (gif->info.frame_count == 0) { + if (x + w > gif->info.width) { + gif->info.width = x + w; + } + if (y + h > gif->info.height) { + gif->info.height = y + h; + } + } + } + + *pos += NSGIF_IMAGE_DESCRIPTOR_LEN; + return NSGIF_OK; +} + +/** + * Extract a GIF colour table into a LibNSGIF colour table buffer. + * + * \param[in] colour_table The colour table to populate. + * \param[in] layout la. + * \param[in] colour_table_entries The number of colour table entries. + * \param[in] data Raw colour table data. + */ +static void nsgif__colour_table_decode( + uint32_t colour_table[NSGIF_MAX_COLOURS], + const struct nsgif_colour_layout *layout, + size_t colour_table_entries, + const uint8_t *data) +{ + uint8_t *entry = (uint8_t *)colour_table; + + while (colour_table_entries--) { + /* Gif colour map contents are r,g,b. + * + * We want to pack them bytewise into the colour table, + * according to the client colour layout. + */ + + entry[layout->r] = *data++; + entry[layout->g] = *data++; + entry[layout->b] = *data++; + entry[layout->a] = 0xff; + + entry += sizeof(uint32_t); + } +} + +/** + * Extract a GIF colour table into a LibNSGIF colour table buffer. + * + * \param[in] colour_table The colour table to populate. + * \param[in] layout The target pixel format to decode to. + * \param[in] colour_table_entries The number of colour table entries. + * \param[in] data Current position in data. + * \param[in] data_len The available length of `data`. + * \param[out] used Number of colour table bytes read. + * \param[in] decode Whether to decode the colour table. + * \return NSGIF_OK on success, appropriate error otherwise. + */ +static inline nsgif_error nsgif__colour_table_extract( + uint32_t colour_table[NSGIF_MAX_COLOURS], + const struct nsgif_colour_layout *layout, + size_t colour_table_entries, + const uint8_t *data, + size_t data_len, + size_t *used, + bool decode) +{ + if (data_len < colour_table_entries * 3) { + return NSGIF_ERR_END_OF_DATA; + } + + if (decode) { + nsgif__colour_table_decode(colour_table, layout, + colour_table_entries, data); + } + + *used = colour_table_entries * 3; + return NSGIF_OK; +} + +/** + * Get a frame's colour table. + * + * Sets up gif->colour_table for the frame. + * + * \param[in] gif The gif object we're decoding. + * \param[in] frame The frame to get the colour table for. + * \param[in] pos Current position in data, updated on exit. + * \param[in] decode Whether to decode the colour table. + * \return NSGIF_OK on success, appropriate error otherwise. + */ +static nsgif_error nsgif__parse_colour_table( + struct nsgif *gif, + struct nsgif_frame *frame, + const uint8_t **pos, + bool decode) +{ + nsgif_error ret; + const uint8_t *data = *pos; + size_t len = gif->buf + gif->buf_len - data; + size_t used_bytes; + + assert(gif != NULL); + assert(frame != NULL); + + if ((frame->flags & NSGIF_COLOUR_TABLE_MASK) == 0) { + gif->colour_table = gif->global_colour_table; + return NSGIF_OK; + } + + if (decode == false) { + frame->colour_table_offset = *pos - gif->buf; + } + + ret = nsgif__colour_table_extract( + gif->local_colour_table, &gif->colour_layout, + 2 << (frame->flags & NSGIF_COLOUR_TABLE_SIZE_MASK), + data, len, &used_bytes, decode); + if (ret != NSGIF_OK) { + return ret; + } + *pos += used_bytes; + + if (decode) { + gif->colour_table = gif->local_colour_table; + } else { + frame->info.local_palette = true; + } + + return NSGIF_OK; +} + +/** + * Parse the image data for a gif frame. + * + * Sets up gif->colour_table for the frame. + * + * \param[in] gif The gif object we're decoding. + * \param[in] frame The frame to parse image data for. + * \param[in] pos Current position in data, updated on exit. + * \param[in] decode Whether to decode the image data. + * \return NSGIF_OK on success, appropriate error otherwise. + */ +static nsgif_error nsgif__parse_image_data( + struct nsgif *gif, + struct nsgif_frame *frame, + const uint8_t **pos, + bool decode) +{ + const uint8_t *data = *pos; + size_t len = gif->buf + gif->buf_len - data; + uint32_t frame_idx = frame - gif->frames; + uint8_t minimum_code_size; + nsgif_error ret; + + assert(gif != NULL); + assert(frame != NULL); + + if (!decode) { + gif->frame_count_partial = frame_idx + 1; + } + + /* Ensure sufficient data remains. A gif trailer or a minimum lzw code + * followed by a gif trailer is treated as OK, although without any + * image data. */ + switch (len) { + default: if (data[0] == NSGIF_TRAILER) return NSGIF_OK; + break; + case 2: if (data[1] == NSGIF_TRAILER) return NSGIF_OK; + /* Fall through. */ + case 1: if (data[0] == NSGIF_TRAILER) return NSGIF_OK; + /* Fall through. */ + case 0: return NSGIF_ERR_END_OF_DATA; + } + + minimum_code_size = data[0]; + if (minimum_code_size >= LZW_CODE_MAX) { + return NSGIF_ERR_DATA_FRAME; + } + + if (decode) { + ret = nsgif__update_bitmap(gif, frame, data, frame_idx); + } else { + uint32_t block_size = 0; + + /* Skip the minimum code size. */ + data++; + len--; + + while (block_size != 1) { + if (len < 1) { + return NSGIF_ERR_END_OF_DATA; + } + block_size = data[0] + 1; + /* Check if the frame data runs off the end of the file */ + if (block_size > len) { + frame->lzw_data_length += len; + return NSGIF_ERR_END_OF_DATA; + } + + len -= block_size; + data += block_size; + frame->lzw_data_length += block_size; + } + + *pos = data; + + gif->info.frame_count = frame_idx + 1; + gif->frames[frame_idx].info.display = true; + + return NSGIF_OK; + } + + return ret; +} + +static struct nsgif_frame *nsgif__get_frame( + struct nsgif *gif, + uint32_t frame_idx) +{ + struct nsgif_frame *frame; + + if (gif->frame_holders > frame_idx) { + frame = &gif->frames[frame_idx]; + } else { + /* Allocate more memory */ + size_t count = frame_idx + 1; + struct nsgif_frame *temp; + + temp = realloc(gif->frames, count * sizeof(*frame)); + if (temp == NULL) { + return NULL; + } + gif->frames = temp; + gif->frame_holders = count; + + frame = &gif->frames[frame_idx]; + + frame->info.local_palette = false; + frame->info.transparency = false; + frame->info.display = false; + frame->info.disposal = 0; + frame->info.delay = 10; + + frame->transparency_index = NSGIF_NO_TRANSPARENCY; + frame->frame_offset = gif->buf_pos; + frame->redraw_required = false; + frame->lzw_data_length = 0; + frame->decoded = false; + } + + return frame; +} + +/** + * Attempts to initialise the next frame + * + * \param[in] gif The animation context + * \param[in] frame_idx The frame number to decode. + * \param[in] decode Whether to decode the graphical image data. + * \return NSGIF_OK on success, appropriate error otherwise. +*/ +static nsgif_error nsgif__process_frame( + struct nsgif *gif, + uint32_t frame_idx, + bool decode) +{ + nsgif_error ret; + const uint8_t *pos; + const uint8_t *end; + struct nsgif_frame *frame; + + frame = nsgif__get_frame(gif, frame_idx); + if (frame == NULL) { + return NSGIF_ERR_OOM; + } + + end = gif->buf + gif->buf_len; + + if (decode) { + pos = gif->buf + frame->frame_offset; + + /* Ensure this frame is supposed to be decoded */ + if (frame->info.display == false) { + return NSGIF_OK; + } + + /* Ensure the frame is in range to decode */ + if (frame_idx > gif->frame_count_partial) { + return NSGIF_ERR_END_OF_DATA; + } + + /* Done if frame is already decoded */ + if (frame_idx == gif->decoded_frame) { + return NSGIF_OK; + } + } else { + pos = gif->buf + gif->buf_pos; + + /* Check if we've finished */ + if (pos < end && pos[0] == NSGIF_TRAILER) { + return NSGIF_OK; + } + } + + ret = nsgif__parse_frame_extensions(gif, frame, &pos, !decode); + if (ret != NSGIF_OK) { + goto cleanup; + } + + ret = nsgif__parse_image_descriptor(gif, frame, &pos, !decode); + if (ret != NSGIF_OK) { + goto cleanup; + } + + ret = nsgif__parse_colour_table(gif, frame, &pos, decode); + if (ret != NSGIF_OK) { + goto cleanup; + } + + ret = nsgif__parse_image_data(gif, frame, &pos, decode); + if (ret != NSGIF_OK) { + goto cleanup; + } + +cleanup: + if (!decode) { + gif->buf_pos = pos - gif->buf; + } + + return ret; +} + +/* exported function documented in nsgif.h */ +void nsgif_destroy(nsgif_t *gif) +{ + if (gif == NULL) { + return; + } + + /* Release all our memory blocks */ + if (gif->frame_image) { + assert(gif->bitmap.destroy); + gif->bitmap.destroy(gif->frame_image); + gif->frame_image = NULL; + } + + free(gif->frames); + gif->frames = NULL; + + free(gif->prev_frame); + gif->prev_frame = NULL; + + lzw_context_destroy(gif->lzw_ctx); + gif->lzw_ctx = NULL; + + free(gif); +} + +/** + * Check whether the host is little endian. + * + * Checks whether least significant bit is in the first byte of a `uint16_t`. + * + * \return true if host is little endian. + */ +static inline bool nsgif__host_is_little_endian(void) +{ + const uint16_t test = 1; + + return ((const uint8_t *) &test)[0]; +} + +static struct nsgif_colour_layout nsgif__bitmap_fmt_to_colour_layout( + nsgif_bitmap_fmt_t bitmap_fmt) +{ + bool le = nsgif__host_is_little_endian(); + + /* Map endian-dependant formats to byte-wise format for the host. */ + switch (bitmap_fmt) { + case NSGIF_BITMAP_FMT_RGBA8888: + bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_A8B8G8R8 + : NSGIF_BITMAP_FMT_R8G8B8A8; + break; + case NSGIF_BITMAP_FMT_BGRA8888: + bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_A8R8G8B8 + : NSGIF_BITMAP_FMT_B8G8R8A8; + break; + case NSGIF_BITMAP_FMT_ARGB8888: + bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_B8G8R8A8 + : NSGIF_BITMAP_FMT_A8R8G8B8; + break; + case NSGIF_BITMAP_FMT_ABGR8888: + bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_R8G8B8A8 + : NSGIF_BITMAP_FMT_A8B8G8R8; + break; + default: + break; + } + + /* Set up colour component order for bitmap format. */ + switch (bitmap_fmt) { + default: + /* Fall through. */ + case NSGIF_BITMAP_FMT_R8G8B8A8: + return (struct nsgif_colour_layout) { + .r = 0, + .g = 1, + .b = 2, + .a = 3, + }; + + case NSGIF_BITMAP_FMT_B8G8R8A8: + return (struct nsgif_colour_layout) { + .b = 0, + .g = 1, + .r = 2, + .a = 3, + }; + + case NSGIF_BITMAP_FMT_A8R8G8B8: + return (struct nsgif_colour_layout) { + .a = 0, + .r = 1, + .g = 2, + .b = 3, + }; + + case NSGIF_BITMAP_FMT_A8B8G8R8: + return (struct nsgif_colour_layout) { + .a = 0, + .b = 1, + .g = 2, + .r = 3, + }; + } +} + +/* exported function documented in nsgif.h */ +nsgif_error nsgif_create( + const nsgif_bitmap_cb_vt *bitmap_vt, + nsgif_bitmap_fmt_t bitmap_fmt, + nsgif_t **gif_out) +{ + nsgif_t *gif; + + gif = calloc(1, sizeof(*gif)); + if (gif == NULL) { + return NSGIF_ERR_OOM; + } + + gif->bitmap = *bitmap_vt; + gif->decoded_frame = NSGIF_FRAME_INVALID; + gif->prev_index = NSGIF_FRAME_INVALID; + + gif->delay_min = NSGIF_FRAME_DELAY_MIN; + gif->delay_default = NSGIF_FRAME_DELAY_DEFAULT; + + gif->colour_layout = nsgif__bitmap_fmt_to_colour_layout(bitmap_fmt); + + *gif_out = gif; + return NSGIF_OK; +} + +/* exported function documented in nsgif.h */ +void nsgif_set_frame_delay_behaviour( + nsgif_t *gif, + uint16_t delay_min, + uint16_t delay_default) +{ + gif->delay_min = delay_min; + gif->delay_default = delay_default; +} + +/** + * Read GIF header. + * + * 6-byte GIF file header is: + * + * +0 3CHARS Signature ('GIF') + * +3 3CHARS Version ('87a' or '89a') + * + * \param[in] gif The GIF object we're decoding. + * \param[in,out] pos The current buffer position, updated on success. + * \param[in] strict Whether to require a known GIF version. + * \return NSGIF_OK on success, appropriate error otherwise. + */ +static nsgif_error nsgif__parse_header( + struct nsgif *gif, + const uint8_t **pos, + bool strict) +{ + const uint8_t *data = *pos; + size_t len = gif->buf + gif->buf_len - data; + + if (len < 6) { + return NSGIF_ERR_END_OF_DATA; + } + + if (strncmp((const char *) data, "GIF", 3) != 0) { + return NSGIF_ERR_DATA; + } + data += 3; + + if (strict == true) { + if ((strncmp((const char *) data, "87a", 3) != 0) && + (strncmp((const char *) data, "89a", 3) != 0)) { + return NSGIF_ERR_DATA; + } + } + data += 3; + + *pos = data; + return NSGIF_OK; +} + +/** + * Read Logical Screen Descriptor. + * + * 7-byte Logical Screen Descriptor is: + * + * +0 SHORT Logical Screen Width + * +2 SHORT Logical Screen Height + * +4 CHAR __Packed Fields__ + * 1BIT Global Colour Table Flag + * 3BITS Colour Resolution + * 1BIT Sort Flag + * 3BITS Size of Global Colour Table + * +5 CHAR Background Colour Index + * +6 CHAR Pixel Aspect Ratio + * + * \param[in] gif The GIF object we're decoding. + * \param[in,out] pos The current buffer position, updated on success. + * \return NSGIF_OK on success, appropriate error otherwise. + */ +static nsgif_error nsgif__parse_logical_screen_descriptor( + struct nsgif *gif, + const uint8_t **pos) +{ + const uint8_t *data = *pos; + size_t len = gif->buf + gif->buf_len - data; + + if (len < 7) { + return NSGIF_ERR_END_OF_DATA; + } + + gif->info.width = data[0] | (data[1] << 8); + gif->info.height = data[2] | (data[3] << 8); + gif->info.global_palette = data[4] & NSGIF_COLOUR_TABLE_MASK; + gif->colour_table_size = 2 << (data[4] & NSGIF_COLOUR_TABLE_SIZE_MASK); + gif->bg_index = data[5]; + gif->aspect_ratio = data[6]; + gif->info.loop_max = 1; + + *pos += 7; + return NSGIF_OK; +} + +/* exported function documented in nsgif.h */ +nsgif_error nsgif_data_scan( + nsgif_t *gif, + size_t size, + const uint8_t *data) +{ + const uint8_t *nsgif_data; + nsgif_error ret; + uint32_t frames; + + if (gif->data_complete) { + return NSGIF_ERR_DATA_COMPLETE; + } + + /* Initialize values */ + gif->buf_len = size; + gif->buf = data; + + /* Get our current processing position */ + nsgif_data = gif->buf + gif->buf_pos; + + /* See if we should initialise the GIF */ + if (gif->buf_pos == 0) { + /* We want everything to be NULL before we start so we've no + * chance of freeing bad pointers (paranoia) + */ + gif->frame_image = NULL; + gif->frames = NULL; + gif->frame_holders = 0; + + /* The caller may have been lazy and not reset any values */ + gif->info.frame_count = 0; + gif->frame_count_partial = 0; + gif->decoded_frame = NSGIF_FRAME_INVALID; + gif->frame = NSGIF_FRAME_INVALID; + + ret = nsgif__parse_header(gif, &nsgif_data, false); + if (ret != NSGIF_OK) { + return ret; + } + + ret = nsgif__parse_logical_screen_descriptor(gif, &nsgif_data); + if (ret != NSGIF_OK) { + return ret; + } + + /* Remember we've done this now */ + gif->buf_pos = nsgif_data - gif->buf; + + /* Some broken GIFs report the size as the screen size they + * were created in. As such, we detect for the common cases and + * set the sizes as 0 if they are found which results in the + * GIF being the maximum size of the frames. + */ + if (((gif->info.width == 640) && (gif->info.height == 480)) || + ((gif->info.width == 640) && (gif->info.height == 512)) || + ((gif->info.width == 800) && (gif->info.height == 600)) || + ((gif->info.width == 1024) && (gif->info.height == 768)) || + ((gif->info.width == 1280) && (gif->info.height == 1024)) || + ((gif->info.width == 1600) && (gif->info.height == 1200)) || + ((gif->info.width == 0) || (gif->info.height == 0)) || + ((gif->info.width > 2048) || (gif->info.height > 2048))) { + gif->info.width = 1; + gif->info.height = 1; + } + + /* Set the first colour to a value that will never occur in + * reality so we know if we've processed it + */ + gif->global_colour_table[0] = NSGIF_PROCESS_COLOURS; + + /* Check if the GIF has no frame data (13-byte header + 1-byte + * termination block) Although generally useless, the GIF + * specification does not expressly prohibit this + */ + if (gif->buf_len == gif->buf_pos + 1) { + if (nsgif_data[0] == NSGIF_TRAILER) { + return NSGIF_OK; + } + } + } + + /* Do the colour map if we haven't already. As the top byte is always + * 0xff or 0x00 depending on the transparency we know if it's been + * filled in. + */ + if (gif->global_colour_table[0] == NSGIF_PROCESS_COLOURS) { + /* Check for a global colour map signified by bit 7 */ + if (gif->info.global_palette) { + size_t remaining = gif->buf + gif->buf_len - nsgif_data; + size_t used; + + ret = nsgif__colour_table_extract( + gif->global_colour_table, + &gif->colour_layout, + gif->colour_table_size, + nsgif_data, remaining, &used, true); + if (ret != NSGIF_OK) { + return ret; + } + + nsgif_data += used; + gif->buf_pos = (nsgif_data - gif->buf); + } else { + /* Create a default colour table with the first two + * colours as black and white. */ + uint8_t *entry = (uint8_t *)gif->global_colour_table; + + /* Black */ + entry[gif->colour_layout.r] = 0x00; + entry[gif->colour_layout.g] = 0x00; + entry[gif->colour_layout.b] = 0x00; + entry[gif->colour_layout.a] = 0xFF; + + entry += sizeof(uint32_t); + + /* White */ + entry[gif->colour_layout.r] = 0xFF; + entry[gif->colour_layout.g] = 0xFF; + entry[gif->colour_layout.b] = 0xFF; + entry[gif->colour_layout.a] = 0xFF; + + gif->colour_table_size = 2; + } + + if (gif->info.global_palette && + gif->bg_index < gif->colour_table_size) { + size_t bg_idx = gif->bg_index; + gif->info.background = gif->global_colour_table[bg_idx]; + } else { + gif->info.background = gif->global_colour_table[0]; + } + } + + if (gif->lzw_ctx == NULL) { + lzw_result res = lzw_context_create( + (struct lzw_ctx **)&gif->lzw_ctx); + if (res != LZW_OK) { + return nsgif__error_from_lzw(res); + } + } + + /* Try to initialise all frames. */ + do { + frames = gif->info.frame_count; + ret = nsgif__process_frame(gif, frames, false); + } while (gif->info.frame_count > frames); + + if (ret == NSGIF_ERR_END_OF_DATA && gif->info.frame_count > 0) { + ret = NSGIF_OK; + } + + return ret; +} + +/* exported function documented in nsgif.h */ +void nsgif_data_complete( + nsgif_t *gif) +{ + if (gif->data_complete == false) { + uint32_t start = gif->info.frame_count; + uint32_t end = gif->frame_count_partial; + + for (uint32_t f = start; f < end; f++) { + nsgif_frame *frame = &gif->frames[f]; + + if (frame->lzw_data_length > 0) { + frame->info.display = true; + gif->info.frame_count = f + 1; + + if (f == 0) { + frame->info.transparency = true; + } + break; + } + } + } + + gif->data_complete = true; +} + +static void nsgif__redraw_rect_extend( + const nsgif_rect_t *frame, + nsgif_rect_t *redraw) +{ + if (redraw->x1 == 0 || redraw->y1 == 0) { + *redraw = *frame; + } else { + if (redraw->x0 > frame->x0) { + redraw->x0 = frame->x0; + } + if (redraw->x1 < frame->x1) { + redraw->x1 = frame->x1; + } + if (redraw->y0 > frame->y0) { + redraw->y0 = frame->y0; + } + if (redraw->y1 < frame->y1) { + redraw->y1 = frame->y1; + } + } +} + +static uint32_t nsgif__frame_next( + const nsgif_t *gif, + bool partial, + uint32_t frame) +{ + uint32_t frames = partial ? + gif->frame_count_partial : + gif->info.frame_count; + + if (frames == 0) { + return NSGIF_FRAME_INVALID; + } + + frame++; + return (frame >= frames) ? 0 : frame; +} + +static nsgif_error nsgif__next_displayable_frame( + const nsgif_t *gif, + uint32_t *frame, + uint32_t *delay) +{ + uint32_t next = *frame; + + do { + next = nsgif__frame_next(gif, false, next); + if (next <= *frame && *frame != NSGIF_FRAME_INVALID && + gif->data_complete == false) { + return NSGIF_ERR_END_OF_DATA; + + } else if (next == *frame || next == NSGIF_FRAME_INVALID) { + return NSGIF_ERR_FRAME_DISPLAY; + } + + if (delay != NULL) { + *delay += gif->frames[next].info.delay; + } + + } while (gif->frames[next].info.display == false); + + *frame = next; + return NSGIF_OK; +} + +static inline bool nsgif__animation_complete(int count, int max) +{ + if (max == 0) { + return false; + } + + return (count >= max); +} + +nsgif_error nsgif_reset( + nsgif_t *gif) +{ + gif->loop_count = 0; + gif->frame = NSGIF_FRAME_INVALID; + + return NSGIF_OK; +} + +/* exported function documented in nsgif.h */ +nsgif_error nsgif_frame_prepare( + nsgif_t *gif, + nsgif_rect_t *area, + uint32_t *delay_cs, + uint32_t *frame_new) +{ + nsgif_error ret; + nsgif_rect_t rect = { + .x1 = 0, + .y1 = 0, + }; + uint32_t delay = 0; + uint32_t frame = gif->frame; + + if (gif->frame != NSGIF_FRAME_INVALID && + gif->frame < gif->info.frame_count && + gif->frames[gif->frame].info.display) { + rect = gif->frames[gif->frame].info.rect; + } + + if (nsgif__animation_complete( + gif->loop_count, + gif->info.loop_max)) { + return NSGIF_ERR_ANIMATION_END; + } + + ret = nsgif__next_displayable_frame(gif, &frame, &delay); + if (ret != NSGIF_OK) { + return ret; + } + + if (gif->frame != NSGIF_FRAME_INVALID && frame < gif->frame) { + gif->loop_count++; + } + + if (gif->data_complete) { + /* Check for last frame, which has infinite delay. */ + + if (gif->info.frame_count == 1) { + delay = NSGIF_INFINITE; + } else if (gif->info.loop_max != 0) { + uint32_t frame_next = frame; + + ret = nsgif__next_displayable_frame(gif, + &frame_next, NULL); + if (ret != NSGIF_OK) { + return ret; + } + + if (gif->data_complete && frame_next < frame) { + if (nsgif__animation_complete( + gif->loop_count + 1, + gif->info.loop_max)) { + delay = NSGIF_INFINITE; + } + } + } + } + + gif->frame = frame; + nsgif__redraw_rect_extend(&gif->frames[frame].info.rect, &rect); + + if (delay < gif->delay_min) { + delay = gif->delay_default; + } + + *frame_new = gif->frame; + *delay_cs = delay; + *area = rect; + + return NSGIF_OK; +} + +/* exported function documented in nsgif.h */ +nsgif_error nsgif_frame_decode( + nsgif_t *gif, + uint32_t frame, + nsgif_bitmap_t **bitmap) +{ + uint32_t start_frame; + nsgif_error ret = NSGIF_OK; + + if (frame >= gif->info.frame_count) { + return NSGIF_ERR_BAD_FRAME; + } + + if (gif->decoded_frame == frame) { + *bitmap = gif->frame_image; + return NSGIF_OK; + + } else if (gif->decoded_frame >= frame || + gif->decoded_frame == NSGIF_FRAME_INVALID) { + /* Can skip to first frame or restart. */ + start_frame = 0; + } else { + start_frame = nsgif__frame_next( + gif, false, gif->decoded_frame); + } + + for (uint32_t f = start_frame; f <= frame; f++) { + ret = nsgif__process_frame(gif, f, true); + if (ret != NSGIF_OK) { + return ret; + } + } + + *bitmap = gif->frame_image; + return ret; +} + +/* exported function documented in nsgif.h */ +const nsgif_info_t *nsgif_get_info(const nsgif_t *gif) +{ + return &gif->info; +} + +/* exported function documented in nsgif.h */ +const nsgif_frame_info_t *nsgif_get_frame_info( + const nsgif_t *gif, + uint32_t frame) +{ + if (frame >= gif->info.frame_count) { + return NULL; + } + + return &gif->frames[frame].info; +} + +/* exported function documented in nsgif.h */ +void nsgif_global_palette( + const nsgif_t *gif, + uint32_t table[NSGIF_MAX_COLOURS], + size_t *entries) +{ + size_t len = sizeof(*table) * NSGIF_MAX_COLOURS; + + memcpy(table, gif->global_colour_table, len); + *entries = gif->colour_table_size; +} + +/* exported function documented in nsgif.h */ +bool nsgif_local_palette( + const nsgif_t *gif, + uint32_t frame, + uint32_t table[NSGIF_MAX_COLOURS], + size_t *entries) +{ + const nsgif_frame *f; + + if (frame >= gif->frame_count_partial) { + return false; + } + + f = &gif->frames[frame]; + if (f->info.local_palette == false) { + return false; + } + + *entries = 2 << (f->flags & NSGIF_COLOUR_TABLE_SIZE_MASK); + nsgif__colour_table_decode(table, &gif->colour_layout, + *entries, gif->buf + f->colour_table_offset); + + return true; +} + +/* exported function documented in nsgif.h */ +const char *nsgif_strerror(nsgif_error err) +{ + static const char *const str[] = { + [NSGIF_OK] = "Success", + [NSGIF_ERR_OOM] = "Out of memory", + [NSGIF_ERR_DATA] = "Invalid source data", + [NSGIF_ERR_BAD_FRAME] = "Requested frame does not exist", + [NSGIF_ERR_DATA_FRAME] = "Invalid frame data", + [NSGIF_ERR_END_OF_DATA] = "Unexpected end of GIF source data", + [NSGIF_ERR_DATA_COMPLETE] = "Can't add data to completed GIF", + [NSGIF_ERR_FRAME_DISPLAY] = "Frame can't be displayed", + [NSGIF_ERR_ANIMATION_END] = "Animation complete", + }; + + if (err >= NSGIF_ARRAY_LEN(str) || str[err] == NULL) { + return "Unknown error"; + } + + return str[err]; +} + +/* exported function documented in nsgif.h */ +const char *nsgif_str_disposal(enum nsgif_disposal disposal) +{ + static const char *const str[] = { + [NSGIF_DISPOSAL_UNSPECIFIED] = "Unspecified", + [NSGIF_DISPOSAL_NONE] = "None", + [NSGIF_DISPOSAL_RESTORE_BG] = "Restore background", + [NSGIF_DISPOSAL_RESTORE_PREV] = "Restore previous", + [NSGIF_DISPOSAL_RESTORE_QUIRK] = "Restore quirk", + }; + + if (disposal >= NSGIF_ARRAY_LEN(str) || str[disposal] == NULL) { + return "Unspecified"; + } + + return str[disposal]; +} diff --git a/libs/libnsgif/libnsgif.c b/libs/libnsgif/libnsgif.c deleted file mode 100644 index 6bf9956..0000000 --- a/libs/libnsgif/libnsgif.c +++ /dev/null @@ -1,1169 +0,0 @@ -/* - * Copyright 2004 Richard Wilson - * Copyright 2008 Sean Fox - * - * This file is part of NetSurf's libnsgif, http://www.netsurf-browser.org/ - * Licenced under the MIT License, - * http://www.opensource.org/licenses/mit-license.php - */ - -#include -#include -#include -#include -#include -#include -#include "libnsgif.h" -#include "utils/log.h" - -#include "lzw.h" - -/** - * - * \file - * \brief GIF image decoder - * - * The GIF format is thoroughly documented; a full description can be found at - * http://www.w3.org/Graphics/GIF/spec-gif89a.txt - * - * \todo Plain text and comment extensions should be implemented. - */ - - -/** Maximum colour table size */ -#define GIF_MAX_COLOURS 256 - -/** Internal flag that the colour table needs to be processed */ -#define GIF_PROCESS_COLOURS 0xaa000000 - -/** Internal flag that a frame is invalid/unprocessed */ -#define GIF_INVALID_FRAME -1 - -/** Transparent colour */ -#define GIF_TRANSPARENT_COLOUR 0x00 - -/* GIF Flags */ -#define GIF_FRAME_COMBINE 1 -#define GIF_FRAME_CLEAR 2 -#define GIF_FRAME_RESTORE 3 -#define GIF_FRAME_QUIRKS_RESTORE 4 - -#define GIF_IMAGE_SEPARATOR 0x2c -#define GIF_INTERLACE_MASK 0x40 -#define GIF_COLOUR_TABLE_MASK 0x80 -#define GIF_COLOUR_TABLE_SIZE_MASK 0x07 -#define GIF_EXTENSION_INTRODUCER 0x21 -#define GIF_EXTENSION_GRAPHIC_CONTROL 0xf9 -#define GIF_DISPOSAL_MASK 0x1c -#define GIF_TRANSPARENCY_MASK 0x01 -#define GIF_EXTENSION_COMMENT 0xfe -#define GIF_EXTENSION_PLAIN_TEXT 0x01 -#define GIF_EXTENSION_APPLICATION 0xff -#define GIF_BLOCK_TERMINATOR 0x00 -#define GIF_TRAILER 0x3b - -/** standard GIF header size */ -#define GIF_STANDARD_HEADER_SIZE 13 - - -/** - * Updates the sprite memory size - * - * \param gif The animation context - * \param width The width of the sprite - * \param height The height of the sprite - * \return GIF_INSUFFICIENT_MEMORY for a memory error GIF_OK for success - */ -static gif_result -gif_initialise_sprite(gif_animation *gif, - unsigned int width, - unsigned int height) -{ - unsigned int max_width; - unsigned int max_height; - struct bitmap *buffer; - - /* Check if we've changed */ - if ((width <= gif->width) && (height <= gif->height)) { - return GIF_OK; - } - - /* Get our maximum values */ - max_width = (width > gif->width) ? width : gif->width; - max_height = (height > gif->height) ? height : gif->height; - - /* Allocate some more memory */ - assert(gif->bitmap_callbacks.bitmap_create); - buffer = gif->bitmap_callbacks.bitmap_create(max_width, max_height); - if (buffer == NULL) { - return GIF_INSUFFICIENT_MEMORY; - } - - assert(gif->bitmap_callbacks.bitmap_destroy); - gif->bitmap_callbacks.bitmap_destroy(gif->frame_image); - gif->frame_image = buffer; - gif->width = max_width; - gif->height = max_height; - - /* Invalidate our currently decoded image */ - gif->decoded_frame = GIF_INVALID_FRAME; - return GIF_OK; -} - - -/** - * Attempts to initialise the frame's extensions - * - * \param gif The animation context - * \param frame The frame number - * @return GIF_INSUFFICIENT_FRAME_DATA for insufficient data to complete the - * frame GIF_OK for successful initialisation. - */ -static gif_result -gif_initialise_frame_extensions(gif_animation *gif, const int frame) -{ - unsigned char *gif_data, *gif_end; - int gif_bytes; - unsigned int block_size; - - /* Get our buffer position etc. */ - gif_data = (unsigned char *)(gif->gif_data + gif->buffer_position); - gif_end = (unsigned char *)(gif->gif_data + gif->buffer_size); - - /* Initialise the extensions */ - while (gif_data < gif_end && gif_data[0] == GIF_EXTENSION_INTRODUCER) { - ++gif_data; - if ((gif_bytes = (gif_end - gif_data)) < 1) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - - /* Switch on extension label */ - switch (gif_data[0]) { - case GIF_EXTENSION_GRAPHIC_CONTROL: - /* 6-byte Graphic Control Extension is: - * - * +0 CHAR Graphic Control Label - * +1 CHAR Block Size - * +2 CHAR __Packed Fields__ - * 3BITS Reserved - * 3BITS Disposal Method - * 1BIT User Input Flag - * 1BIT Transparent Color Flag - * +3 SHORT Delay Time - * +5 CHAR Transparent Color Index - */ - if (gif_bytes < 6) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - - gif->frames[frame].frame_delay = gif_data[3] | (gif_data[4] << 8); - if (gif_data[2] & GIF_TRANSPARENCY_MASK) { - gif->frames[frame].transparency = true; - gif->frames[frame].transparency_index = gif_data[5]; - } - gif->frames[frame].disposal_method = ((gif_data[2] & GIF_DISPOSAL_MASK) >> 2); - /* I have encountered documentation and GIFs in the - * wild that use 0x04 to restore the previous frame, - * rather than the officially documented 0x03. I - * believe some (older?) software may even actually - * export this way. We handle this as a type of - * "quirks" mode. - */ - if (gif->frames[frame].disposal_method == GIF_FRAME_QUIRKS_RESTORE) { - gif->frames[frame].disposal_method = GIF_FRAME_RESTORE; - } - gif_data += (2 + gif_data[1]); - break; - - case GIF_EXTENSION_APPLICATION: - /* 14-byte+ Application Extension is: - * - * +0 CHAR Application Extension Label - * +1 CHAR Block Size - * +2 8CHARS Application Identifier - * +10 3CHARS Appl. Authentication Code - * +13 1-256 Application Data (Data sub-blocks) - */ - if (gif_bytes < 17) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - if ((gif_data[1] == 0x0b) && - (strncmp((const char *) gif_data + 2, - "NETSCAPE2.0", 11) == 0) && - (gif_data[13] == 0x03) && - (gif_data[14] == 0x01)) { - gif->loop_count = gif_data[15] | (gif_data[16] << 8); - } - gif_data += (2 + gif_data[1]); - break; - - case GIF_EXTENSION_COMMENT: - /* Move the pointer to the first data sub-block Skip 1 - * byte for the extension label - */ - ++gif_data; - break; - - default: - /* Move the pointer to the first data sub-block Skip 2 - * bytes for the extension label and size fields Skip - * the extension size itself - */ - if (gif_bytes < 2) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - gif_data += (2 + gif_data[1]); - } - - /* Repeatedly skip blocks until we get a zero block or run out - * of data This data is ignored by this gif decoder - */ - gif_bytes = (gif_end - gif_data); - block_size = 0; - while (gif_data < gif_end && gif_data[0] != GIF_BLOCK_TERMINATOR) { - block_size = gif_data[0] + 1; - if ((gif_bytes -= block_size) < 0) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - gif_data += block_size; - } - ++gif_data; - } - - /* Set buffer position and return */ - gif->buffer_position = (gif_data - gif->gif_data); - return GIF_OK; -} - - -/** - * Attempts to initialise the next frame - * - * \param gif The animation context - * \return error code - * - GIF_INSUFFICIENT_DATA for insufficient data to do anything - * - GIF_FRAME_DATA_ERROR for GIF frame data error - * - GIF_INSUFFICIENT_MEMORY for insufficient memory to process - * - GIF_INSUFFICIENT_FRAME_DATA for insufficient data to complete the frame - * - GIF_DATA_ERROR for GIF error (invalid frame header) - * - GIF_OK for successful decoding - * - GIF_WORKING for successful decoding if more frames are expected -*/ -static gif_result gif_initialise_frame(gif_animation *gif) -{ - int frame; - gif_frame *temp_buf; - - unsigned char *gif_data, *gif_end; - int gif_bytes; - unsigned int flags = 0; - unsigned int width, height, offset_x, offset_y; - unsigned int block_size, colour_table_size; - bool first_image = true; - gif_result return_value; - - /* Get the frame to decode and our data position */ - frame = gif->frame_count; - - /* Get our buffer position etc. */ - gif_data = (unsigned char *)(gif->gif_data + gif->buffer_position); - gif_end = (unsigned char *)(gif->gif_data + gif->buffer_size); - gif_bytes = (gif_end - gif_data); - - /* Check if we've finished */ - if ((gif_bytes > 0) && (gif_data[0] == GIF_TRAILER)) { - return GIF_OK; - } - - /* Check if there is enough data remaining. The shortest block of data - * is a 4-byte comment extension + 1-byte block terminator + 1-byte gif - * trailer - */ - if (gif_bytes < 6) { - return GIF_INSUFFICIENT_DATA; - } - - /* We could theoretically get some junk data that gives us millions of - * frames, so we ensure that we don't have a silly number - */ - if (frame > 4096) { - return GIF_FRAME_DATA_ERROR; - } - - /* Get some memory to store our pointers in etc. */ - if ((int)gif->frame_holders <= frame) { - /* Allocate more memory */ - temp_buf = (gif_frame *)realloc(gif->frames, (frame + 1) * sizeof(gif_frame)); - if (temp_buf == NULL) { - return GIF_INSUFFICIENT_MEMORY; - } - gif->frames = temp_buf; - gif->frame_holders = frame + 1; - } - - /* Store our frame pointer. We would do it when allocating except we - * start off with one frame allocated so we can always use realloc. - */ - gif->frames[frame].frame_pointer = gif->buffer_position; - gif->frames[frame].display = false; - gif->frames[frame].virgin = true; - gif->frames[frame].disposal_method = 0; - gif->frames[frame].transparency = false; - gif->frames[frame].frame_delay = 100; - gif->frames[frame].redraw_required = false; - - /* Invalidate any previous decoding we have of this frame */ - if (gif->decoded_frame == frame) { - gif->decoded_frame = GIF_INVALID_FRAME; - } - - /* We pretend to initialise the frames, but really we just skip over - * all the data contained within. This is all basically a cut down - * version of gif_decode_frame that doesn't have any of the LZW bits in - * it. - */ - - /* Initialise any extensions */ - gif->buffer_position = gif_data - gif->gif_data; - return_value = gif_initialise_frame_extensions(gif, frame); - if (return_value != GIF_OK) { - return return_value; - } - gif_data = (gif->gif_data + gif->buffer_position); - gif_bytes = (gif_end - gif_data); - - /* Check if we've finished */ - if ((gif_bytes = (gif_end - gif_data)) < 1) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - - if (gif_data[0] == GIF_TRAILER) { - gif->buffer_position = (gif_data - gif->gif_data); - gif->frame_count = frame + 1; - return GIF_OK; - } - - /* If we're not done, there should be an image descriptor */ - if (gif_data[0] != GIF_IMAGE_SEPARATOR) { - return GIF_FRAME_DATA_ERROR; - } - - /* Do some simple boundary checking */ - if (gif_bytes < 10) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - offset_x = gif_data[1] | (gif_data[2] << 8); - offset_y = gif_data[3] | (gif_data[4] << 8); - width = gif_data[5] | (gif_data[6] << 8); - height = gif_data[7] | (gif_data[8] << 8); - - /* Set up the redraw characteristics. We have to check for extending - * the area due to multi-image frames. - */ - if (!first_image) { - if (gif->frames[frame].redraw_x > offset_x) { - gif->frames[frame].redraw_width += (gif->frames[frame].redraw_x - offset_x); - gif->frames[frame].redraw_x = offset_x; - } - - if (gif->frames[frame].redraw_y > offset_y) { - gif->frames[frame].redraw_height += (gif->frames[frame].redraw_y - offset_y); - gif->frames[frame].redraw_y = offset_y; - } - - if ((offset_x + width) > (gif->frames[frame].redraw_x + gif->frames[frame].redraw_width)) { - gif->frames[frame].redraw_width = (offset_x + width) - gif->frames[frame].redraw_x; - } - - if ((offset_y + height) > (gif->frames[frame].redraw_y + gif->frames[frame].redraw_height)) { - gif->frames[frame].redraw_height = (offset_y + height) - gif->frames[frame].redraw_y; - } - } else { - first_image = false; - gif->frames[frame].redraw_x = offset_x; - gif->frames[frame].redraw_y = offset_y; - gif->frames[frame].redraw_width = width; - gif->frames[frame].redraw_height = height; - } - - /* if we are clearing the background then we need to redraw enough to - * cover the previous frame too - */ - gif->frames[frame].redraw_required = ((gif->frames[frame].disposal_method == GIF_FRAME_CLEAR) || - (gif->frames[frame].disposal_method == GIF_FRAME_RESTORE)); - - /* Boundary checking - shouldn't ever happen except with junk data */ - if (gif_initialise_sprite(gif, (offset_x + width), (offset_y + height))) { - return GIF_INSUFFICIENT_MEMORY; - } - - /* Decode the flags */ - flags = gif_data[9]; - colour_table_size = 2 << (flags & GIF_COLOUR_TABLE_SIZE_MASK); - - /* Move our data onwards and remember we've got a bit of this frame */ - gif_data += 10; - gif_bytes = (gif_end - gif_data); - gif->frame_count_partial = frame + 1; - - /* Skip the local colour table */ - if (flags & GIF_COLOUR_TABLE_MASK) { - gif_data += 3 * colour_table_size; - if ((gif_bytes = (gif_end - gif_data)) < 0) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - } - - /* Ensure we have a correct code size */ - if (gif_bytes < 1) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - if (gif_data[0] > LZW_CODE_MAX) { - return GIF_DATA_ERROR; - } - - /* Move our pointer to the actual image data */ - gif_data++; - --gif_bytes; - - /* Repeatedly skip blocks until we get a zero block or run out of data - * These blocks of image data are processed later by gif_decode_frame() - */ - block_size = 0; - while (block_size != 1) { - if (gif_bytes < 1) return GIF_INSUFFICIENT_FRAME_DATA; - block_size = gif_data[0] + 1; - /* Check if the frame data runs off the end of the file */ - if ((int)(gif_bytes - block_size) < 0) { - /* Try to recover by signaling the end of the gif. - * Once we get garbage data, there is no logical way to - * determine where the next frame is. It's probably - * better to partially load the gif than not at all. - */ - if (gif_bytes >= 2) { - gif_data[0] = 0; - gif_data[1] = GIF_TRAILER; - gif_bytes = 1; - ++gif_data; - break; - } else { - return GIF_INSUFFICIENT_FRAME_DATA; - } - } else { - gif_bytes -= block_size; - gif_data += block_size; - } - } - - /* Add the frame and set the display flag */ - gif->buffer_position = gif_data - gif->gif_data; - gif->frame_count = frame + 1; - gif->frames[frame].display = true; - - /* Check if we've finished */ - if (gif_bytes < 1) { - return GIF_INSUFFICIENT_FRAME_DATA; - } else { - if (gif_data[0] == GIF_TRAILER) { - return GIF_OK; - } - } - return GIF_WORKING; -} - - - - -/** - * Skips the frame's extensions (which have been previously initialised) - * - * \param gif The animation context - * \return GIF_INSUFFICIENT_FRAME_DATA for insufficient data to complete the - * frame GIF_OK for successful decoding - */ -static gif_result gif_skip_frame_extensions(gif_animation *gif) -{ - unsigned char *gif_data, *gif_end; - int gif_bytes; - unsigned int block_size; - - /* Get our buffer position etc. */ - gif_data = (unsigned char *)(gif->gif_data + gif->buffer_position); - gif_end = (unsigned char *)(gif->gif_data + gif->buffer_size); - gif_bytes = (gif_end - gif_data); - - /* Skip the extensions */ - while (gif_data < gif_end && gif_data[0] == GIF_EXTENSION_INTRODUCER) { - ++gif_data; - if (gif_data >= gif_end) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - - /* Switch on extension label */ - switch(gif_data[0]) { - case GIF_EXTENSION_COMMENT: - /* Move the pointer to the first data sub-block - * 1 byte for the extension label - */ - ++gif_data; - break; - - default: - /* Move the pointer to the first data sub-block 2 bytes - * for the extension label and size fields Skip the - * extension size itself - */ - if (gif_data + 1 >= gif_end) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - gif_data += (2 + gif_data[1]); - } - - /* Repeatedly skip blocks until we get a zero block or run out - * of data This data is ignored by this gif decoder - */ - gif_bytes = (gif_end - gif_data); - block_size = 0; - while (gif_data < gif_end && gif_data[0] != GIF_BLOCK_TERMINATOR) { - block_size = gif_data[0] + 1; - if ((gif_bytes -= block_size) < 0) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - gif_data += block_size; - } - ++gif_data; - } - - /* Set buffer position and return */ - gif->buffer_position = (gif_data - gif->gif_data); - return GIF_OK; -} - -static unsigned int gif_interlaced_line(int height, int y) { - if ((y << 3) < height) { - return (y << 3); - } - y -= ((height + 7) >> 3); - if ((y << 3) < (height - 4)) { - return (y << 3) + 4; - } - y -= ((height + 3) >> 3); - if ((y << 2) < (height - 2)) { - return (y << 2) + 2; - } - y -= ((height + 1) >> 2); - return (y << 1) + 1; -} - - -static gif_result gif_error_from_lzw(lzw_result l_res) -{ - static const gif_result g_res[] = { - [LZW_OK] = GIF_OK, - [LZW_OK_EOD] = GIF_END_OF_FRAME, - [LZW_NO_MEM] = GIF_INSUFFICIENT_MEMORY, - [LZW_NO_DATA] = GIF_INSUFFICIENT_FRAME_DATA, - [LZW_EOI_CODE] = GIF_FRAME_DATA_ERROR, - [LZW_BAD_ICODE] = GIF_FRAME_DATA_ERROR, - [LZW_BAD_CODE] = GIF_FRAME_DATA_ERROR, - }; - return g_res[l_res]; -} - - -/** - * decode a gif frame - * - * \param gif gif animation context. - * \param frame The frame number to decode. - * \param clear_image flag for image data being cleared instead of plotted. - */ -static gif_result -gif_internal_decode_frame(gif_animation *gif, - unsigned int frame, - bool clear_image) -{ - unsigned int index = 0; - unsigned char *gif_data, *gif_end; - int gif_bytes; - unsigned int width, height, offset_x, offset_y; - unsigned int flags, colour_table_size, interlace; - unsigned int *colour_table; - unsigned int *frame_data = 0; // Set to 0 for no warnings - unsigned int *frame_scanline; - unsigned int save_buffer_position; - unsigned int return_value = 0; - unsigned int x, y, decode_y, burst_bytes; - register unsigned char colour; - - /* Ensure this frame is supposed to be decoded */ - if (gif->frames[frame].display == false) { - return GIF_OK; - } - - /* Ensure the frame is in range to decode */ - if (frame > gif->frame_count_partial) { - return GIF_INSUFFICIENT_DATA; - } - - /* done if frame is already decoded */ - if ((!clear_image) && - ((int)frame == gif->decoded_frame)) { - return GIF_OK; - } - - /* Get the start of our frame data and the end of the GIF data */ - gif_data = gif->gif_data + gif->frames[frame].frame_pointer; - gif_end = gif->gif_data + gif->buffer_size; - gif_bytes = (gif_end - gif_data); - - /* - * Ensure there is a minimal amount of data to proceed. The shortest - * block of data is a 10-byte image descriptor + 1-byte gif trailer - */ - if (gif_bytes < 12) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - - /* Save the buffer position */ - save_buffer_position = gif->buffer_position; - gif->buffer_position = gif_data - gif->gif_data; - - /* Skip any extensions because they have allready been processed */ - if ((return_value = gif_skip_frame_extensions(gif)) != GIF_OK) { - goto gif_decode_frame_exit; - } - gif_data = (gif->gif_data + gif->buffer_position); - gif_bytes = (gif_end - gif_data); - - /* Ensure we have enough data for the 10-byte image descriptor + 1-byte - * gif trailer - */ - if (gif_bytes < 12) { - return_value = GIF_INSUFFICIENT_FRAME_DATA; - goto gif_decode_frame_exit; - } - - /* 10-byte Image Descriptor is: - * - * +0 CHAR Image Separator (0x2c) - * +1 SHORT Image Left Position - * +3 SHORT Image Top Position - * +5 SHORT Width - * +7 SHORT Height - * +9 CHAR __Packed Fields__ - * 1BIT Local Colour Table Flag - * 1BIT Interlace Flag - * 1BIT Sort Flag - * 2BITS Reserved - * 3BITS Size of Local Colour Table - */ - if (gif_data[0] != GIF_IMAGE_SEPARATOR) { - return_value = GIF_DATA_ERROR; - goto gif_decode_frame_exit; - } - offset_x = gif_data[1] | (gif_data[2] << 8); - offset_y = gif_data[3] | (gif_data[4] << 8); - width = gif_data[5] | (gif_data[6] << 8); - height = gif_data[7] | (gif_data[8] << 8); - - /* Boundary checking - shouldn't ever happen except unless the data has - * been modified since initialisation. - */ - if ((offset_x + width > gif->width) || - (offset_y + height > gif->height)) { - return_value = GIF_DATA_ERROR; - goto gif_decode_frame_exit; - } - - /* Decode the flags */ - flags = gif_data[9]; - colour_table_size = 2 << (flags & GIF_COLOUR_TABLE_SIZE_MASK); - interlace = flags & GIF_INTERLACE_MASK; - - /* Advance data pointer to next block either colour table or image - * data. - */ - gif_data += 10; - gif_bytes = (gif_end - gif_data); - - /* Set up the colour table */ - if (flags & GIF_COLOUR_TABLE_MASK) { - if (gif_bytes < (int)(3 * colour_table_size)) { - return_value = GIF_INSUFFICIENT_FRAME_DATA; - goto gif_decode_frame_exit; - } - colour_table = gif->local_colour_table; - if (!clear_image) { - for (index = 0; index < colour_table_size; index++) { - /* Gif colour map contents are r,g,b. - * - * We want to pack them bytewise into the - * colour table, such that the red component - * is in byte 0 and the alpha component is in - * byte 3. - */ - unsigned char *entry = - (unsigned char *) &colour_table[index]; - - entry[0] = gif_data[0]; /* r */ - entry[1] = gif_data[1]; /* g */ - entry[2] = gif_data[2]; /* b */ - entry[3] = 0xff; /* a */ - - gif_data += 3; - } - } else { - gif_data += 3 * colour_table_size; - } - gif_bytes = (gif_end - gif_data); - } else { - colour_table = gif->global_colour_table; - } - - /* Ensure sufficient data remains */ - if (gif_bytes < 1) { - return_value = GIF_INSUFFICIENT_FRAME_DATA; - goto gif_decode_frame_exit; - } - - /* check for an end marker */ - if (gif_data[0] == GIF_TRAILER) { - return_value = GIF_OK; - goto gif_decode_frame_exit; - } - - /* Get the frame data */ - assert(gif->bitmap_callbacks.bitmap_get_buffer); - frame_data = (void *)gif->bitmap_callbacks.bitmap_get_buffer(gif->frame_image); - if (!frame_data) { - return GIF_INSUFFICIENT_MEMORY; - } - - /* If we are clearing the image we just clear, if not decode */ - if (!clear_image) { - lzw_result res; - const uint8_t *stack_base; - const uint8_t *stack_pos; - - /* Ensure we have enough data for a 1-byte LZW code size + - * 1-byte gif trailer - */ - if (gif_bytes < 2) { - return_value = GIF_INSUFFICIENT_FRAME_DATA; - goto gif_decode_frame_exit; - } - - /* If we only have a 1-byte LZW code size + 1-byte gif trailer, - * we're finished - */ - if ((gif_bytes == 2) && (gif_data[1] == GIF_TRAILER)) { - return_value = GIF_OK; - goto gif_decode_frame_exit; - } - - /* If the previous frame's disposal method requires we restore - * the background colour or this is the first frame, clear - * the frame data - */ - if ((frame == 0) || (gif->decoded_frame == GIF_INVALID_FRAME)) { - memset((char*)frame_data, - GIF_TRANSPARENT_COLOUR, - gif->width * gif->height * sizeof(int)); - gif->decoded_frame = frame; - /* The line below would fill the image with its - * background color, but because GIFs support - * transparency we likely wouldn't want to do that. */ - /* memset((char*)frame_data, colour_table[gif->background_index], gif->width * gif->height * sizeof(int)); */ - } else if ((frame != 0) && - (gif->frames[frame - 1].disposal_method == GIF_FRAME_CLEAR)) { - return_value = gif_internal_decode_frame(gif, - (frame - 1), - true); - if (return_value != GIF_OK) { - goto gif_decode_frame_exit; - } - - } else if ((frame != 0) && - (gif->frames[frame - 1].disposal_method == GIF_FRAME_RESTORE)) { - /* - * If the previous frame's disposal method requires we - * restore the previous image, find the last image set - * to "do not dispose" and get that frame data - */ - int last_undisposed_frame = frame - 2; - while ((last_undisposed_frame >= 0) && - (gif->frames[last_undisposed_frame].disposal_method == GIF_FRAME_RESTORE)) { - last_undisposed_frame--; - } - - /* If we don't find one, clear the frame data */ - if (last_undisposed_frame == -1) { - /* see notes above on transparency - * vs. background color - */ - memset((char*)frame_data, - GIF_TRANSPARENT_COLOUR, - gif->width * gif->height * sizeof(int)); - } else { - return_value = gif_internal_decode_frame(gif, last_undisposed_frame, false); - if (return_value != GIF_OK) { - goto gif_decode_frame_exit; - } - /* Get this frame's data */ - assert(gif->bitmap_callbacks.bitmap_get_buffer); - frame_data = (void *)gif->bitmap_callbacks.bitmap_get_buffer(gif->frame_image); - if (!frame_data) { - return GIF_INSUFFICIENT_MEMORY; - } - } - } - gif->decoded_frame = frame; - gif->buffer_position = (gif_data - gif->gif_data) + 1; - - /* Initialise the LZW decoding */ - res = lzw_decode_init(gif->lzw_ctx, gif->gif_data, - gif->buffer_size, gif->buffer_position, - gif_data[0], &stack_base, &stack_pos); - if (res != LZW_OK) { - return gif_error_from_lzw(res); - } - - /* Decompress the data */ - for (y = 0; y < height; y++) { - if (interlace) { - decode_y = gif_interlaced_line(height, y) + offset_y; - } else { - decode_y = y + offset_y; - } - frame_scanline = frame_data + offset_x + (decode_y * gif->width); - - /* Rather than decoding pixel by pixel, we try to burst - * out streams of data to remove the need for end-of - * data checks every pixel. - */ - x = width; - while (x > 0) { - burst_bytes = (stack_pos - stack_base); - if (burst_bytes > 0) { - if (burst_bytes > x) { - burst_bytes = x; - } - x -= burst_bytes; - while (burst_bytes-- > 0) { - colour = *--stack_pos; - if (((gif->frames[frame].transparency) && - (colour != gif->frames[frame].transparency_index)) || - (!gif->frames[frame].transparency)) { - *frame_scanline = colour_table[colour]; - } - frame_scanline++; - } - } else { - res = lzw_decode(gif->lzw_ctx, &stack_pos); - if (res != LZW_OK) { - /* Unexpected end of frame, try to recover */ - if (res == LZW_OK_EOD) { - return_value = GIF_OK; - } else { - return_value = gif_error_from_lzw(res); - } - goto gif_decode_frame_exit; - } - } - } - } - } else { - /* Clear our frame */ - if (gif->frames[frame].disposal_method == GIF_FRAME_CLEAR) { - for (y = 0; y < height; y++) { - frame_scanline = frame_data + offset_x + ((offset_y + y) * gif->width); - if (gif->frames[frame].transparency) { - memset(frame_scanline, - GIF_TRANSPARENT_COLOUR, - width * 4); - } else { - memset(frame_scanline, - colour_table[gif->background_index], - width * 4); - } - } - } - } -gif_decode_frame_exit: - - /* Check if we should test for optimisation */ - if (gif->frames[frame].virgin) { - if (gif->bitmap_callbacks.bitmap_test_opaque) { - gif->frames[frame].opaque = gif->bitmap_callbacks.bitmap_test_opaque(gif->frame_image); - } else { - gif->frames[frame].opaque = false; - } - gif->frames[frame].virgin = false; - } - - if (gif->bitmap_callbacks.bitmap_set_opaque) { - gif->bitmap_callbacks.bitmap_set_opaque(gif->frame_image, gif->frames[frame].opaque); - } - - if (gif->bitmap_callbacks.bitmap_modified) { - gif->bitmap_callbacks.bitmap_modified(gif->frame_image); - } - - /* Restore the buffer position */ - gif->buffer_position = save_buffer_position; - - return return_value; -} - - -/* exported function documented in libnsgif.h */ -void gif_create(gif_animation *gif, gif_bitmap_callback_vt *bitmap_callbacks) -{ - memset(gif, 0, sizeof(gif_animation)); - gif->bitmap_callbacks = *bitmap_callbacks; - gif->decoded_frame = GIF_INVALID_FRAME; -} - - -/* exported function documented in libnsgif.h */ -gif_result gif_initialise(gif_animation *gif, size_t size, unsigned char *data) -{ - unsigned char *gif_data; - unsigned int index; - gif_result return_value; - - /* Initialize values */ - gif->buffer_size = size; - gif->gif_data = data; - - if (gif->lzw_ctx == NULL) { - lzw_result res = lzw_context_create( - (struct lzw_ctx **)&gif->lzw_ctx); - if (res != LZW_OK) { - return gif_error_from_lzw(res); - } - } - - /* Check for sufficient data to be a GIF (6-byte header + 7-byte - * logical screen descriptor) - */ - if (gif->buffer_size < GIF_STANDARD_HEADER_SIZE) { - return GIF_INSUFFICIENT_DATA; - } - - /* Get our current processing position */ - gif_data = gif->gif_data + gif->buffer_position; - - /* See if we should initialise the GIF */ - if (gif->buffer_position == 0) { - /* We want everything to be NULL before we start so we've no - * chance of freeing bad pointers (paranoia) - */ - gif->frame_image = NULL; - gif->frames = NULL; - gif->local_colour_table = NULL; - gif->global_colour_table = NULL; - - /* The caller may have been lazy and not reset any values */ - gif->frame_count = 0; - gif->frame_count_partial = 0; - gif->decoded_frame = GIF_INVALID_FRAME; - - /* 6-byte GIF file header is: - * - * +0 3CHARS Signature ('GIF') - * +3 3CHARS Version ('87a' or '89a') - */ - if (strncmp((const char *) gif_data, "GIF", 3) != 0) { - return GIF_DATA_ERROR; - } - gif_data += 3; - - /* Ensure GIF reports version 87a or 89a */ - /* - if ((strncmp(gif_data, "87a", 3) != 0) && - (strncmp(gif_data, "89a", 3) != 0)) - LOG(("Unknown GIF format - proceeding anyway")); - */ - gif_data += 3; - - /* 7-byte Logical Screen Descriptor is: - * - * +0 SHORT Logical Screen Width - * +2 SHORT Logical Screen Height - * +4 CHAR __Packed Fields__ - * 1BIT Global Colour Table Flag - * 3BITS Colour Resolution - * 1BIT Sort Flag - * 3BITS Size of Global Colour Table - * +5 CHAR Background Colour Index - * +6 CHAR Pixel Aspect Ratio - */ - gif->width = gif_data[0] | (gif_data[1] << 8); - gif->height = gif_data[2] | (gif_data[3] << 8); - gif->global_colours = (gif_data[4] & GIF_COLOUR_TABLE_MASK); - gif->colour_table_size = (2 << (gif_data[4] & GIF_COLOUR_TABLE_SIZE_MASK)); - gif->background_index = gif_data[5]; - gif->aspect_ratio = gif_data[6]; - gif->loop_count = 1; - gif_data += 7; - - /* Some broken GIFs report the size as the screen size they - * were created in. As such, we detect for the common cases and - * set the sizes as 0 if they are found which results in the - * GIF being the maximum size of the frames. - */ - if (((gif->width == 640) && (gif->height == 480)) || - ((gif->width == 640) && (gif->height == 512)) || - ((gif->width == 800) && (gif->height == 600)) || - ((gif->width == 1024) && (gif->height == 768)) || - ((gif->width == 1280) && (gif->height == 1024)) || - ((gif->width == 1600) && (gif->height == 1200)) || - ((gif->width == 0) || (gif->height == 0)) || - ((gif->width > 2048) || (gif->height > 2048))) { - gif->width = 1; - gif->height = 1; - } - - /* Allocate some data irrespective of whether we've got any - * colour tables. We always get the maximum size in case a GIF - * is lying to us. It's far better to give the wrong colours - * than to trample over some memory somewhere. - */ - gif->global_colour_table = calloc(GIF_MAX_COLOURS, sizeof(unsigned int)); - gif->local_colour_table = calloc(GIF_MAX_COLOURS, sizeof(unsigned int)); - if ((gif->global_colour_table == NULL) || - (gif->local_colour_table == NULL)) { - gif_finalise(gif); - return GIF_INSUFFICIENT_MEMORY; - } - - /* Set the first colour to a value that will never occur in - * reality so we know if we've processed it - */ - gif->global_colour_table[0] = GIF_PROCESS_COLOURS; - - /* Check if the GIF has no frame data (13-byte header + 1-byte - * termination block) Although generally useless, the GIF - * specification does not expressly prohibit this - */ - if (gif->buffer_size == (GIF_STANDARD_HEADER_SIZE + 1)) { - if (gif_data[0] == GIF_TRAILER) { - return GIF_OK; - } else { - return GIF_INSUFFICIENT_DATA; - } - } - - /* Initialise enough workspace for a frame */ - if ((gif->frames = (gif_frame *)malloc(sizeof(gif_frame))) == NULL) { - gif_finalise(gif); - return GIF_INSUFFICIENT_MEMORY; - } - gif->frame_holders = 1; - - /* Initialise the bitmap header */ - assert(gif->bitmap_callbacks.bitmap_create); - gif->frame_image = gif->bitmap_callbacks.bitmap_create(gif->width, gif->height); - if (gif->frame_image == NULL) { - gif_finalise(gif); - return GIF_INSUFFICIENT_MEMORY; - } - - /* Remember we've done this now */ - gif->buffer_position = gif_data - gif->gif_data; - } - - /* Do the colour map if we haven't already. As the top byte is always - * 0xff or 0x00 depending on the transparency we know if it's been - * filled in. - */ - if (gif->global_colour_table[0] == GIF_PROCESS_COLOURS) { - /* Check for a global colour map signified by bit 7 */ - if (gif->global_colours) { - if (gif->buffer_size < (gif->colour_table_size * 3 + GIF_STANDARD_HEADER_SIZE)) { - return GIF_INSUFFICIENT_DATA; - } - for (index = 0; index < gif->colour_table_size; index++) { - /* Gif colour map contents are r,g,b. - * - * We want to pack them bytewise into the - * colour table, such that the red component - * is in byte 0 and the alpha component is in - * byte 3. - */ - unsigned char *entry = (unsigned char *) &gif-> - global_colour_table[index]; - - entry[0] = gif_data[0]; /* r */ - entry[1] = gif_data[1]; /* g */ - entry[2] = gif_data[2]; /* b */ - entry[3] = 0xff; /* a */ - - gif_data += 3; - } - gif->buffer_position = (gif_data - gif->gif_data); - } else { - /* Create a default colour table with the first two - * colours as black and white - */ - unsigned int *entry = gif->global_colour_table; - - entry[0] = 0x00000000; - /* Force Alpha channel to opaque */ - ((unsigned char *) entry)[3] = 0xff; - - entry[1] = 0xffffffff; - } - } - - /* Repeatedly try to initialise frames */ - while ((return_value = gif_initialise_frame(gif)) == GIF_WORKING); - - /* If there was a memory error tell the caller */ - if ((return_value == GIF_INSUFFICIENT_MEMORY) || - (return_value == GIF_DATA_ERROR)) { - return return_value; - } - - /* If we didn't have some frames then a GIF_INSUFFICIENT_DATA becomes a - * GIF_INSUFFICIENT_FRAME_DATA - */ - if ((return_value == GIF_INSUFFICIENT_DATA) && - (gif->frame_count_partial > 0)) { - return GIF_INSUFFICIENT_FRAME_DATA; - } - - /* Return how many we got */ - return return_value; -} - - -/* exported function documented in libnsgif.h */ -gif_result gif_decode_frame(gif_animation *gif, unsigned int frame) -{ - return gif_internal_decode_frame(gif, frame, false); -} - - -/* exported function documented in libnsgif.h */ -void gif_finalise(gif_animation *gif) -{ - /* Release all our memory blocks */ - if (gif->frame_image) { - assert(gif->bitmap_callbacks.bitmap_destroy); - gif->bitmap_callbacks.bitmap_destroy(gif->frame_image); - } - - gif->frame_image = NULL; - free(gif->frames); - gif->frames = NULL; - free(gif->local_colour_table); - gif->local_colour_table = NULL; - free(gif->global_colour_table); - gif->global_colour_table = NULL; - - lzw_context_destroy(gif->lzw_ctx); - gif->lzw_ctx = NULL; -} diff --git a/libs/libnsgif/libnsgif.h b/libs/libnsgif/libnsgif.h deleted file mode 100644 index 94221bd..0000000 --- a/libs/libnsgif/libnsgif.h +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright 2004 Richard Wilson - * Copyright 2008 Sean Fox - * - * This file is part of NetSurf's libnsgif, http://www.netsurf-browser.org/ - * Licenced under the MIT License, - * http://www.opensource.org/licenses/mit-license.php - */ - -/** - * \file - * Interface to progressive animated GIF file decoding. - */ - -#ifndef _LIBNSGIF_H_ -#define _LIBNSGIF_H_ - -#if defined (__cplusplus) -extern "C" { -#endif - -#include -#include - -/* Error return values */ -typedef enum { - GIF_WORKING = 1, - GIF_OK = 0, - GIF_INSUFFICIENT_FRAME_DATA = -1, - GIF_FRAME_DATA_ERROR = -2, - GIF_INSUFFICIENT_DATA = -3, - GIF_DATA_ERROR = -4, - GIF_INSUFFICIENT_MEMORY = -5, - GIF_FRAME_NO_DISPLAY = -6, - GIF_END_OF_FRAME = -7 -} gif_result; - -/** GIF frame data */ -typedef struct gif_frame { - /** whether the frame should be displayed/animated */ - bool display; - /** delay (in cs) before animating the frame */ - unsigned int frame_delay; - - /* Internal members are listed below */ - - /** offset (in bytes) to the GIF frame data */ - unsigned int frame_pointer; - /** whether the frame has previously been used */ - bool virgin; - /** whether the frame is totally opaque */ - bool opaque; - /** whether a forcable screen redraw is required */ - bool redraw_required; - /** how the previous frame should be disposed; affects plotting */ - unsigned char disposal_method; - /** whether we acknoledge transparency */ - bool transparency; - /** the index designating a transparent pixel */ - unsigned char transparency_index; - /** x co-ordinate of redraw rectangle */ - unsigned int redraw_x; - /** y co-ordinate of redraw rectangle */ - unsigned int redraw_y; - /** width of redraw rectangle */ - unsigned int redraw_width; - /** height of redraw rectangle */ - unsigned int redraw_height; -} gif_frame; - -/* API for Bitmap callbacks */ -typedef void* (*gif_bitmap_cb_create)(int width, int height); -typedef void (*gif_bitmap_cb_destroy)(void *bitmap); -typedef unsigned char* (*gif_bitmap_cb_get_buffer)(void *bitmap); -typedef void (*gif_bitmap_cb_set_opaque)(void *bitmap, bool opaque); -typedef bool (*gif_bitmap_cb_test_opaque)(void *bitmap); -typedef void (*gif_bitmap_cb_modified)(void *bitmap); - -/** Bitmap callbacks function table */ -typedef struct gif_bitmap_callback_vt { - /** Create a bitmap. */ - gif_bitmap_cb_create bitmap_create; - /** Free a bitmap. */ - gif_bitmap_cb_destroy bitmap_destroy; - /** Return a pointer to the pixel data in a bitmap. */ - gif_bitmap_cb_get_buffer bitmap_get_buffer; - - /* Members below are optional */ - - /** Sets whether a bitmap should be plotted opaque. */ - gif_bitmap_cb_set_opaque bitmap_set_opaque; - /** Tests whether a bitmap has an opaque alpha channel. */ - gif_bitmap_cb_test_opaque bitmap_test_opaque; - /** The bitmap image has changed, so flush any persistant cache. */ - gif_bitmap_cb_modified bitmap_modified; -} gif_bitmap_callback_vt; - -/** GIF animation data */ -typedef struct gif_animation { - /** LZW decode context */ - void *lzw_ctx; - /** callbacks for bitmap functions */ - gif_bitmap_callback_vt bitmap_callbacks; - /** pointer to GIF data */ - unsigned char *gif_data; - /** width of GIF (may increase during decoding) */ - unsigned int width; - /** heigth of GIF (may increase during decoding) */ - unsigned int height; - /** number of frames decoded */ - unsigned int frame_count; - /** number of frames partially decoded */ - unsigned int frame_count_partial; - /** decoded frames */ - gif_frame *frames; - /** current frame decoded to bitmap */ - int decoded_frame; - /** currently decoded image; stored as bitmap from bitmap_create callback */ - void *frame_image; - /** number of times to loop animation */ - int loop_count; - - /* Internal members are listed below */ - - /** current index into GIF data */ - unsigned int buffer_position; - /** total number of bytes of GIF data available */ - unsigned int buffer_size; - /** current number of frame holders */ - unsigned int frame_holders; - /** index in the colour table for the background colour */ - unsigned int background_index; - /** image aspect ratio (ignored) */ - unsigned int aspect_ratio; - /** size of colour table (in entries) */ - unsigned int colour_table_size; - /** whether the GIF has a global colour table */ - bool global_colours; - /** global colour table */ - unsigned int *global_colour_table; - /** local colour table */ - unsigned int *local_colour_table; -} gif_animation; - -/** - * Initialises necessary gif_animation members. - */ -void gif_create(gif_animation *gif, gif_bitmap_callback_vt *bitmap_callbacks); - -/** - * Initialises any workspace held by the animation and attempts to decode - * any information that hasn't already been decoded. - * If an error occurs, all previously decoded frames are retained. - * - * @return Error return value. - * - GIF_FRAME_DATA_ERROR for GIF frame data error - * - GIF_INSUFFICIENT_FRAME_DATA for insufficient data to process - * any more frames - * - GIF_INSUFFICIENT_MEMORY for memory error - * - GIF_DATA_ERROR for GIF error - * - GIF_INSUFFICIENT_DATA for insufficient data to do anything - * - GIF_OK for successful decoding - * - GIF_WORKING for successful decoding if more frames are expected - */ -gif_result gif_initialise(gif_animation *gif, size_t size, unsigned char *data); - -/** - * Decodes a GIF frame. - * - * @return Error return value. If a frame does not contain any image data, - * GIF_OK is returned and gif->current_error is set to - * GIF_FRAME_NO_DISPLAY - * - GIF_FRAME_DATA_ERROR for GIF frame data error - * - GIF_INSUFFICIENT_FRAME_DATA for insufficient data to complete the frame - * - GIF_DATA_ERROR for GIF error (invalid frame header) - * - GIF_INSUFFICIENT_DATA for insufficient data to do anything - * - GIF_INSUFFICIENT_MEMORY for insufficient memory to process - * - GIF_OK for successful decoding - */ -gif_result gif_decode_frame(gif_animation *gif, unsigned int frame); - -/** - * Releases any workspace held by a gif - */ -void gif_finalise(gif_animation *gif); - -#if defined (__cplusplus) -} -#endif - -#endif diff --git a/libs/libnsgif/lzw.c b/libs/libnsgif/lzw.c old mode 100644 new mode 100755 index 31cf7d4..3098ef5 --- a/libs/libnsgif/lzw.c +++ b/libs/libnsgif/lzw.c @@ -4,6 +4,7 @@ * http://www.opensource.org/licenses/mit-license.php * * Copyright 2017 Michael Drake + * Copyright 2021 Michael Drake */ #include @@ -20,6 +21,8 @@ * Decoder for GIF LZW data. */ +/** Maximum number of lzw table entries. */ +#define LZW_TABLE_ENTRY_MAX (1u << LZW_CODE_MAX) /** * Context for reading LZW data. @@ -33,57 +36,65 @@ * Note that an individual LZW code can be split over up to three sub-blocks. */ struct lzw_read_ctx { - const uint8_t *data; /**< Pointer to start of input data */ - uint32_t data_len; /**< Input data length */ - uint32_t data_sb_next; /**< Offset to sub-block size */ + const uint8_t *restrict data; /**< Pointer to start of input data */ + size_t data_len; /**< Input data length */ + size_t data_sb_next; /**< Offset to sub-block size */ const uint8_t *sb_data; /**< Pointer to current sub-block in data */ - uint32_t sb_bit; /**< Current bit offset in sub-block */ + size_t sb_bit; /**< Current bit offset in sub-block */ uint32_t sb_bit_count; /**< Bit count in sub-block */ }; /** - * LZW dictionary entry. + * LZW table entry. * - * Records in the dictionary are composed of 1 or more entries. - * Entries point to previous entries which can be followed to compose + * Records in the table are composed of 1 or more entries. + * Entries refer to the entry they extend which can be followed to compose * the complete record. To compose the record in reverse order, take - * the `last_value` from each entry, and move to the previous entry. - * If the previous_entry's index is < the current clear_code, then it + * the `value` from each entry, and move to the entry it extends. + * If the extended entries index is < the current clear_code, then it * is the last entry in the record. */ -struct lzw_dictionary_entry { - uint8_t last_value; /**< Last value for record ending at entry. */ - uint8_t first_value; /**< First value for entry's record. */ - uint16_t previous_entry; /**< Offset in dictionary to previous entry. */ +struct lzw_table_entry { + uint8_t value; /**< Last value for record ending at entry. */ + uint8_t first; /**< First value in entry's entire record. */ + uint16_t count; /**< Count of values in this entry's record. */ + uint16_t extends; /**< Offset in table to previous entry. */ }; /** * LZW decompression context. */ struct lzw_ctx { - /** Input reading context */ - struct lzw_read_ctx input; + struct lzw_read_ctx input; /**< Input reading context */ - uint32_t previous_code; /**< Code read from input previously. */ - uint32_t previous_code_first; /**< First value of previous code. */ + uint16_t prev_code; /**< Code read from input previously. */ + uint16_t prev_code_first; /**< First value of previous code. */ + uint16_t prev_code_count; /**< Total values for previous code. */ - uint32_t initial_code_size; /**< Starting LZW code size. */ - uint32_t current_code_size; /**< Current LZW code size. */ - uint32_t current_code_size_max; /**< Max code value for current size. */ + uint8_t initial_code_size; /**< Starting LZW code size. */ - uint32_t clear_code; /**< Special Clear code value */ - uint32_t eoi_code; /**< Special End of Information code value */ + uint8_t code_size; /**< Current LZW code size. */ + uint16_t code_max; /**< Max code value for current code size. */ - uint32_t current_entry; /**< Next position in table to fill. */ + uint16_t clear_code; /**< Special Clear code value */ + uint16_t eoi_code; /**< Special End of Information code value */ - /** Output value stack. */ - uint8_t stack_base[1 << LZW_CODE_MAX]; + uint16_t table_size; /**< Next position in table to fill. */ - /** LZW decode dictionary. Generated during decode. */ - struct lzw_dictionary_entry table[1 << LZW_CODE_MAX]; -}; + uint16_t output_code; /**< Code that has been partially output. */ + uint16_t output_left; /**< Number of values left for output_code. */ + + bool has_transparency; /**< Whether the image is opaque. */ + uint8_t transparency_idx; /**< Index representing transparency. */ + const uint32_t *restrict colour_map; /**< Index to colour mapping. */ + /** LZW code table. Generated during decode. */ + struct lzw_table_entry table[LZW_TABLE_ENTRY_MAX]; + + /** Output value stack. */ + uint8_t stack_base[LZW_TABLE_ENTRY_MAX]; +}; /* Exported function, documented in lzw.h */ lzw_result lzw_context_create(struct lzw_ctx **ctx) @@ -97,24 +108,22 @@ lzw_result lzw_context_create(struct lzw_ctx **ctx) return LZW_OK; } - /* Exported function, documented in lzw.h */ void lzw_context_destroy(struct lzw_ctx *ctx) { free(ctx); } - /** * Advance the context to the next sub-block in the input data. * * \param[in] ctx LZW reading context, updated on success. * \return LZW_OK or LZW_OK_EOD on success, appropriate error otherwise. */ -static lzw_result lzw__block_advance(struct lzw_read_ctx *ctx) +static lzw_result lzw__block_advance(struct lzw_read_ctx *restrict ctx) { - uint32_t block_size; - uint32_t next_block_pos = ctx->data_sb_next; + size_t block_size; + size_t next_block_pos = ctx->data_sb_next; const uint8_t *data_next = ctx->data + next_block_pos; if (next_block_pos >= ctx->data_len) { @@ -141,7 +150,6 @@ static lzw_result lzw__block_advance(struct lzw_read_ctx *ctx) return LZW_OK; } - /** * Get the next LZW code of given size from the raw input data. * @@ -152,31 +160,27 @@ static lzw_result lzw__block_advance(struct lzw_read_ctx *ctx) * \param[out] code_out Returns an LZW code on success. * \return LZW_OK or LZW_OK_EOD on success, appropriate error otherwise. */ -static inline lzw_result lzw__next_code( - struct lzw_read_ctx *ctx, - uint8_t code_size, - uint32_t *code_out) +static inline lzw_result lzw__read_code( + struct lzw_read_ctx *restrict ctx, + uint16_t code_size, + uint16_t *restrict code_out) { uint32_t code = 0; - uint8_t current_bit = ctx->sb_bit & 0x7; - uint8_t byte_advance = (current_bit + code_size) >> 3; + uint32_t current_bit = ctx->sb_bit & 0x7; - assert(byte_advance <= 2); - - if (ctx->sb_bit + code_size <= ctx->sb_bit_count) { - /* Fast path: code fully inside this sub-block */ + if (ctx->sb_bit + 24 <= ctx->sb_bit_count) { + /* Fast path: read three bytes from this sub-block */ const uint8_t *data = ctx->sb_data + (ctx->sb_bit >> 3); - switch (byte_advance) { - case 2: code |= data[2] << 16; /* Fall through */ - case 1: code |= data[1] << 8; /* Fall through */ - case 0: code |= data[0] << 0; - } + code |= *data++ << 0; + code |= *data++ << 8; + code |= *data << 16; ctx->sb_bit += code_size; } else { /* Slow path: code spans sub-blocks */ + uint8_t byte_advance = (current_bit + code_size) >> 3; uint8_t byte = 0; - uint8_t bits_remaining_0 = (code_size < (8 - current_bit)) ? - code_size : (8 - current_bit); + uint8_t bits_remaining_0 = (code_size < (8u - current_bit)) ? + code_size : (8u - current_bit); uint8_t bits_remaining_1 = code_size - bits_remaining_0; uint8_t bits_used[3] = { [0] = bits_remaining_0, @@ -184,6 +188,8 @@ static inline lzw_result lzw__next_code( [2] = bits_remaining_1 - 8, }; + assert(byte_advance <= 2); + while (true) { const uint8_t *data = ctx->sb_data; lzw_result res; @@ -213,165 +219,395 @@ static inline lzw_result lzw__next_code( return LZW_OK; } - /** - * Clear LZW code dictionary. + * Handle clear code. * - * \param[in] ctx LZW reading context, updated. - * \param[out] stack_pos_out Returns current stack position. + * \param[in] ctx LZW reading context, updated. + * \param[out] code_out Returns next code after a clear code. * \return LZW_OK or error code. */ -static lzw_result lzw__clear_codes( +static inline lzw_result lzw__handle_clear( struct lzw_ctx *ctx, - const uint8_t ** const stack_pos_out) + uint16_t *code_out) { - uint32_t code; - uint8_t *stack_pos; + uint16_t code; - /* Reset dictionary building context */ - ctx->current_code_size = ctx->initial_code_size + 1; - ctx->current_code_size_max = (1 << ctx->current_code_size) - 1;; - ctx->current_entry = (1 << ctx->initial_code_size) + 2; + /* Reset table building context */ + ctx->code_size = ctx->initial_code_size; + ctx->code_max = (1 << ctx->initial_code_size) - 1; + ctx->table_size = ctx->eoi_code + 1; /* There might be a sequence of clear codes, so process them all */ do { - lzw_result res = lzw__next_code(&ctx->input, - ctx->current_code_size, &code); + lzw_result res = lzw__read_code(&ctx->input, + ctx->code_size, &code); if (res != LZW_OK) { return res; } } while (code == ctx->clear_code); - /* The initial code must be from the initial dictionary. */ + /* The initial code must be from the initial table. */ if (code > ctx->clear_code) { return LZW_BAD_ICODE; } - /* Record this initial code as "previous" code, needed during decode. */ - ctx->previous_code = code; - ctx->previous_code_first = code; - - /* Reset the stack, and add first non-clear code added as first item. */ - stack_pos = ctx->stack_base; - *stack_pos++ = code; - - *stack_pos_out = stack_pos; + *code_out = code; return LZW_OK; } - /* Exported function, documented in lzw.h */ lzw_result lzw_decode_init( struct lzw_ctx *ctx, - const uint8_t *compressed_data, - uint32_t compressed_data_len, - uint32_t compressed_data_pos, - uint8_t code_size, - const uint8_t ** const stack_base_out, - const uint8_t ** const stack_pos_out) + uint8_t minimum_code_size, + const uint8_t *input_data, + size_t input_length, + size_t input_pos) { - struct lzw_dictionary_entry *table = ctx->table; + struct lzw_table_entry *table = ctx->table; + lzw_result res; + uint16_t code; + + if (minimum_code_size >= LZW_CODE_MAX) { + return LZW_BAD_ICODE; + } /* Initialise the input reading context */ - ctx->input.data = compressed_data; - ctx->input.data_len = compressed_data_len; - ctx->input.data_sb_next = compressed_data_pos; + ctx->input.data = input_data; + ctx->input.data_len = input_length; + ctx->input.data_sb_next = input_pos; ctx->input.sb_bit = 0; ctx->input.sb_bit_count = 0; - /* Initialise the dictionary building context */ - ctx->initial_code_size = code_size; + /* Initialise the table building context */ + ctx->initial_code_size = minimum_code_size + 1; - ctx->clear_code = (1 << code_size) + 0; - ctx->eoi_code = (1 << code_size) + 1; + ctx->clear_code = (1 << minimum_code_size) + 0; + ctx->eoi_code = (1 << minimum_code_size) + 1; - /* Initialise the standard dictionary entries */ - for (uint32_t i = 0; i < ctx->clear_code; ++i) { - table[i].first_value = i; - table[i].last_value = i; + ctx->output_left = 0; + + /* Initialise the standard table entries */ + for (uint16_t i = 0; i < ctx->clear_code; i++) { + table[i].first = i; + table[i].value = i; + table[i].count = 1; } - *stack_base_out = ctx->stack_base; - return lzw__clear_codes(ctx, stack_pos_out); -} + res = lzw__handle_clear(ctx, &code); + if (res != LZW_OK) { + return res; + } + + /* Store details of this code as "previous code" to the context. */ + ctx->prev_code_first = ctx->table[code].first; + ctx->prev_code_count = ctx->table[code].count; + ctx->prev_code = code; + + /* Add code to context for immediate output. */ + ctx->output_code = code; + ctx->output_left = 1; + ctx->has_transparency = false; + ctx->transparency_idx = 0; + ctx->colour_map = NULL; + + return LZW_OK; +} /* Exported function, documented in lzw.h */ -lzw_result lzw_decode(struct lzw_ctx *ctx, - const uint8_t ** const stack_pos_out) +lzw_result lzw_decode_init_map( + struct lzw_ctx *ctx, + uint8_t minimum_code_size, + uint32_t transparency_idx, + const uint32_t *colour_table, + const uint8_t *input_data, + size_t input_length, + size_t input_pos) +{ + lzw_result res; + + if (colour_table == NULL) { + return LZW_BAD_PARAM; + } + + res = lzw_decode_init(ctx, minimum_code_size, + input_data, input_length, input_pos); + if (res != LZW_OK) { + return res; + } + + ctx->has_transparency = (transparency_idx <= 0xFF); + ctx->transparency_idx = transparency_idx; + ctx->colour_map = colour_table; + + return LZW_OK; +} + +/** + * Create new table entry. + * + * \param[in] ctx LZW reading context, updated. + * \param[in] code Last value code for new table entry. + */ +static inline void lzw__table_add_entry( + struct lzw_ctx *ctx, + uint16_t code) +{ + struct lzw_table_entry *entry = &ctx->table[ctx->table_size]; + + entry->value = code; + entry->first = ctx->prev_code_first; + entry->count = ctx->prev_code_count + 1; + entry->extends = ctx->prev_code; + + ctx->table_size++; +} + +typedef uint32_t (*lzw_writer_fn)( + struct lzw_ctx *ctx, + void *restrict output_data, + uint32_t output_length, + uint32_t output_pos, + uint16_t code, + uint16_t left); + +/** + * Get the next LZW code and write its value(s) to output buffer. + * + * \param[in] ctx LZW reading context, updated. + * \param[in] write_fn Function for writing pixels to output. + * \param[in] output_data Array to write output values into. + * \param[in] output_length Size of output array. + * \param[in,out] output_written Number of values written. Updated on exit. + * \return LZW_OK on success, or appropriate error code otherwise. + */ +static inline lzw_result lzw__decode( + struct lzw_ctx *ctx, + lzw_writer_fn write_fn, + void *restrict output_data, + uint32_t output_length, + uint32_t *restrict output_written) { lzw_result res; - uint32_t code_new; - uint32_t code_out; - uint8_t last_value; - uint8_t *stack_pos = ctx->stack_base; - uint32_t clear_code = ctx->clear_code; - uint32_t current_entry = ctx->current_entry; - struct lzw_dictionary_entry * const table = ctx->table; + uint16_t code; /* Get a new code from the input */ - res = lzw__next_code(&ctx->input, ctx->current_code_size, &code_new); + res = lzw__read_code(&ctx->input, ctx->code_size, &code); if (res != LZW_OK) { return res; } /* Handle the new code */ - if (code_new == clear_code) { - /* Got Clear code */ - return lzw__clear_codes(ctx, stack_pos_out); - - } else if (code_new == ctx->eoi_code) { + if (code == ctx->eoi_code) { /* Got End of Information code */ return LZW_EOI_CODE; - } else if (code_new > current_entry) { + } else if (code > ctx->table_size) { /* Code is invalid */ return LZW_BAD_CODE; - } else if (code_new < current_entry) { - /* Code is in table */ - code_out = code_new; - last_value = table[code_new].first_value; + } else if (code == ctx->clear_code) { + res = lzw__handle_clear(ctx, &code); + if (res != LZW_OK) { + return res; + } + + } else if (ctx->table_size < LZW_TABLE_ENTRY_MAX) { + uint16_t size = ctx->table_size; + lzw__table_add_entry(ctx, (code < size) ? + ctx->table[code].first : + ctx->prev_code_first); + + /* Ensure code size is increased, if needed. */ + if (size == ctx->code_max && ctx->code_size < LZW_CODE_MAX) { + ctx->code_size++; + ctx->code_max = (1 << ctx->code_size) - 1; + } + } + + *output_written += write_fn(ctx, + output_data, output_length, *output_written, + code, ctx->table[code].count); + + /* Store details of this code as "previous code" to the context. */ + ctx->prev_code_first = ctx->table[code].first; + ctx->prev_code_count = ctx->table[code].count; + ctx->prev_code = code; + + return LZW_OK; +} + +/** + * Write values for this code to the output stack. + * + * If there isn't enough space in the output stack, this function will write + * the as many as it can into the output. If `ctx->output_left > 0` after + * this call, then there is more data for this code left to output. The code + * is stored to the context as `ctx->output_code`. + * + * \param[in] ctx LZW reading context, updated. + * \param[in] output_data Array to write output values into. + * \param[in] output_length length Size of output array. + * \param[in] output_used Current position in output array. + * \param[in] code LZW code to output values for. + * \param[in] left Number of values remaining to output for this code. + * \return Number of pixel values written. + */ +static inline uint32_t lzw__write_fn(struct lzw_ctx *ctx, + void *restrict output_data, + uint32_t output_length, + uint32_t output_used, + uint16_t code, + uint16_t left) +{ + uint8_t *restrict output_pos = (uint8_t *)output_data + output_used; + const struct lzw_table_entry * const table = ctx->table; + uint32_t space = output_length - output_used; + uint16_t count = left; + + if (count > space) { + left = count - space; + count = space; } else { - /* Code not in table */ - *stack_pos++ = ctx->previous_code_first; - code_out = ctx->previous_code; - last_value = ctx->previous_code_first; + left = 0; } - /* Add to the dictionary, only if there's space */ - if (current_entry < (1 << LZW_CODE_MAX)) { - struct lzw_dictionary_entry *entry = table + current_entry; - entry->last_value = last_value; - entry->first_value = ctx->previous_code_first; - entry->previous_entry = ctx->previous_code; - ctx->current_entry++; + ctx->output_code = code; + ctx->output_left = left; + + /* Skip over any values we don't have space for. */ + for (unsigned i = left; i != 0; i--) { + const struct lzw_table_entry *entry = table + code; + code = entry->extends; + } + + output_pos += count; + for (unsigned i = count; i != 0; i--) { + const struct lzw_table_entry *entry = table + code; + *--output_pos = entry->value; + code = entry->extends; + } + + return count; +} + +/* Exported function, documented in lzw.h */ +lzw_result lzw_decode(struct lzw_ctx *ctx, + const uint8_t *restrict *const restrict output_data, + uint32_t *restrict output_written) +{ + const uint32_t output_length = sizeof(ctx->stack_base); + + *output_written = 0; + *output_data = ctx->stack_base; + + if (ctx->output_left != 0) { + *output_written += lzw__write_fn(ctx, + ctx->stack_base, output_length, *output_written, + ctx->output_code, ctx->output_left); } - /* Ensure code size is increased, if needed. */ - if (current_entry == ctx->current_code_size_max) { - if (ctx->current_code_size < LZW_CODE_MAX) { - ctx->current_code_size++; - ctx->current_code_size_max = - (1 << ctx->current_code_size) - 1; + while (*output_written != output_length) { + lzw_result res = lzw__decode(ctx, lzw__write_fn, + ctx->stack_base, output_length, output_written); + if (res != LZW_OK) { + return res; } } - /* Store details of this code as "previous code" to the context. */ - ctx->previous_code_first = table[code_new].first_value; - ctx->previous_code = code_new; - - /* Put rest of data for this code on output stack. - * Note, in the case of "code not in table", the last entry of the - * current code has already been placed on the stack above. */ - while (code_out > clear_code) { - struct lzw_dictionary_entry *entry = table + code_out; - *stack_pos++ = entry->last_value; - code_out = entry->previous_entry; + return LZW_OK; +} + +/** + * Write colour mapped values for this code to the output. + * + * If there isn't enough space in the output stack, this function will write + * the as many as it can into the output. If `ctx->output_left > 0` after + * this call, then there is more data for this code left to output. The code + * is stored to the context as `ctx->output_code`. + * + * \param[in] ctx LZW reading context, updated. + * \param[in] output_data Array to write output values into. + * \param[in] output_length Size of output array. + * \param[in] output_used Current position in output array. + * \param[in] code LZW code to output values for. + * \param[in] left Number of values remaining to output for code. + * \return Number of pixel values written. + */ +static inline uint32_t lzw__map_write_fn(struct lzw_ctx *ctx, + void *restrict output_data, + uint32_t output_length, + uint32_t output_used, + uint16_t code, + uint16_t left) +{ + uint32_t *restrict output_pos = (uint32_t *)output_data + output_used; + const struct lzw_table_entry * const table = ctx->table; + uint32_t space = output_length - output_used; + uint16_t count = left; + + if (count > space) { + left = count - space; + count = space; + } else { + left = 0; + } + + ctx->output_code = code; + ctx->output_left = left; + + for (unsigned i = left; i != 0; i--) { + const struct lzw_table_entry *entry = table + code; + code = entry->extends; + } + + output_pos += count; + if (ctx->has_transparency) { + for (unsigned i = count; i != 0; i--) { + const struct lzw_table_entry *entry = table + code; + --output_pos; + if (entry->value != ctx->transparency_idx) { + *output_pos = ctx->colour_map[entry->value]; + } + code = entry->extends; + } + } else { + for (unsigned i = count; i != 0; i--) { + const struct lzw_table_entry *entry = table + code; + *--output_pos = ctx->colour_map[entry->value]; + code = entry->extends; + } + } + + return count; +} + +/* Exported function, documented in lzw.h */ +lzw_result lzw_decode_map(struct lzw_ctx *ctx, + uint32_t *restrict output_data, + uint32_t output_length, + uint32_t *restrict output_written) +{ + *output_written = 0; + + if (ctx->colour_map == NULL) { + return LZW_NO_COLOUR; + } + + if (ctx->output_left != 0) { + *output_written += lzw__map_write_fn(ctx, + output_data, output_length, *output_written, + ctx->output_code, ctx->output_left); + } + + while (*output_written != output_length) { + lzw_result res = lzw__decode(ctx, lzw__map_write_fn, + output_data, output_length, output_written); + if (res != LZW_OK) { + return res; + } } - *stack_pos++ = table[code_out].last_value; - *stack_pos_out = stack_pos; return LZW_OK; } diff --git a/libs/libnsgif/lzw.h b/libs/libnsgif/lzw.h old mode 100644 new mode 100755 index 385b425..f19432f --- a/libs/libnsgif/lzw.h +++ b/libs/libnsgif/lzw.h @@ -4,6 +4,7 @@ * http://www.opensource.org/licenses/mit-license.php * * Copyright 2017 Michael Drake + * Copyright 2021 Michael Drake */ #ifndef LZW_H_ @@ -16,15 +17,12 @@ * Decoder for GIF LZW data. */ - /** Maximum LZW code size in bits */ #define LZW_CODE_MAX 12 - /* Declare lzw internal context structure */ struct lzw_ctx; - /** LZW decoding response codes */ typedef enum lzw_result { LZW_OK, /**< Success */ @@ -32,11 +30,12 @@ typedef enum lzw_result { LZW_NO_MEM, /**< Error: Out of memory */ LZW_NO_DATA, /**< Error: Out of data */ LZW_EOI_CODE, /**< Error: End of Information code */ + LZW_NO_COLOUR, /**< Error: No colour map provided. */ LZW_BAD_ICODE, /**< Error: Bad initial LZW code */ + LZW_BAD_PARAM, /**< Error: Bad function parameter. */ LZW_BAD_CODE, /**< Error: Bad LZW code */ } lzw_result; - /** * Create an LZW decompression context. * @@ -58,48 +57,81 @@ void lzw_context_destroy( /** * Initialise an LZW decompression context for decoding. * - * Caller owns neither `stack_base_out` or `stack_pos_out`. - * - * \param[in] ctx The LZW decompression context to initialise. - * \param[in] compressed_data The compressed data. - * \param[in] compressed_data_len Byte length of compressed data. - * \param[in] compressed_data_pos Start position in data. Must be position - * of a size byte at sub-block start. - * \param[in] code_size The initial LZW code size to use. - * \param[out] stack_base_out Returns base of decompressed data stack. - * \param[out] stack_pos_out Returns current stack position. - * There are `stack_pos_out - stack_base_out` - * current stack entries. + * \param[in] ctx The LZW decompression context to initialise. + * \param[in] minimum_code_size The LZW Minimum Code Size. + * \param[in] input_data The compressed data. + * \param[in] input_length Byte length of compressed data. + * \param[in] input_pos Start position in data. Must be position + * of a size byte at sub-block start. * \return LZW_OK on success, or appropriate error code otherwise. */ lzw_result lzw_decode_init( struct lzw_ctx *ctx, - const uint8_t *compressed_data, - uint32_t compressed_data_len, - uint32_t compressed_data_pos, - uint8_t code_size, - const uint8_t ** const stack_base_out, - const uint8_t ** const stack_pos_out); + uint8_t minimum_code_size, + const uint8_t *input_data, + size_t input_length, + size_t input_pos); /** - * Fill the LZW stack with decompressed data + * Read input codes until end of LZW context owned output buffer. + * + * Ensure anything in output is used before calling this, as anything + * there before this call will be trampled. * - * Ensure anything on the stack is used before calling this, as anything - * on the stack before this call will be trampled. + * \param[in] ctx LZW reading context, updated. + * \param[out] output_data Returns pointer to array of output values. + * \param[out] output_written Returns the number of values written to data. + * \return LZW_OK on success, or appropriate error code otherwise. + */ +lzw_result lzw_decode(struct lzw_ctx *ctx, + const uint8_t *restrict *const restrict output_data, + uint32_t *restrict output_written); + +/** + * Initialise an LZW decompression context for decoding to colour map values. * - * Caller does not own `stack_pos_out`. + * For transparency to work correctly, the given client buffer must have + * the values from the previous frame. The transparency_idx should be a value + * of 256 or above, if the frame does not have transparency. * - * \param[in] ctx LZW reading context, updated. - * \param[out] stack_pos_out Returns current stack position. - * Use with `stack_base_out` value from previous - * lzw_decode_init() call. - * There are `stack_pos_out - stack_base_out` - * current stack entries. + * \param[in] ctx The LZW decompression context to initialise. + * \param[in] minimum_code_size The LZW Minimum Code Size. + * \param[in] transparency_idx Index representing transparency. + * \param[in] colour_table Index to pixel colour mapping. + * \param[in] input_data The compressed data. + * \param[in] input_length Byte length of compressed data. + * \param[in] input_pos Start position in data. Must be position + * of a size byte at sub-block start. * \return LZW_OK on success, or appropriate error code otherwise. */ -lzw_result lzw_decode( +lzw_result lzw_decode_init_map( struct lzw_ctx *ctx, - const uint8_t ** const stack_pos_out); + uint8_t minimum_code_size, + uint32_t transparency_idx, + const uint32_t *colour_table, + const uint8_t *input_data, + size_t input_length, + size_t input_pos); +/** + * Read LZW codes into client buffer, mapping output to colours. + * + * The context must have been initialised using \ref lzw_decode_init_map + * before calling this function, in order to provide the colour mapping table + * and any transparency index. + * + * Ensure anything in output is used before calling this, as anything + * there before this call will be trampled. + * + * \param[in] ctx LZW reading context, updated. + * \param[in] output_data Client buffer to fill with colour mapped values. + * \param[in] output_length Size of output array. + * \param[out] output_written Returns the number of values written to data. + * \return LZW_OK on success, or appropriate error code otherwise. + */ +lzw_result lzw_decode_map(struct lzw_ctx *ctx, + uint32_t *restrict output_data, + uint32_t output_length, + uint32_t *restrict output_written); #endif diff --git a/libs/libnsgif/nsgif.h b/libs/libnsgif/nsgif.h new file mode 100755 index 0000000..57c09d3 --- /dev/null +++ b/libs/libnsgif/nsgif.h @@ -0,0 +1,535 @@ +/* + * Copyright 2004 Richard Wilson + * Copyright 2008 Sean Fox + * Copyright 2013-2022 Michael Drake + * + * This file is part of NetSurf's libnsgif, http://www.netsurf-browser.org/ + * Licenced under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + */ + +/** + * \file + * Interface to progressive animated GIF file decoding. + */ + +#ifndef NSNSGIF_H +#define NSNSGIF_H + +#if defined (__cplusplus) +extern "C" { +#endif + +#include +#include +#include + +/** Representation of infinity. */ +#define NSGIF_INFINITE (UINT32_MAX) + +/** Maximum colour table size */ +#define NSGIF_MAX_COLOURS 256 + +/** + * Opaque type used by LibNSGIF to represent a GIF object in memory. + */ +typedef struct nsgif nsgif_t; + +/** + * LibNSGIF rectangle structure. + * + * * Top left coordinate is `(x0, y0)`. + * * Width is `x1 - x0`. + * * Height is `y1 - y0`. + * * Units are pixels. + */ +typedef struct nsgif_rect { + /** x co-ordinate of redraw rectangle, left */ + uint32_t x0; + /** y co-ordinate of redraw rectangle, top */ + uint32_t y0; + /** x co-ordinate of redraw rectangle, right */ + uint32_t x1; + /** y co-ordinate of redraw rectangle, bottom */ + uint32_t y1; +} nsgif_rect_t; + +/** + * LibNSGIF return codes. + */ +typedef enum { + /** + * Success. + */ + NSGIF_OK, + + /** + * Out of memory error. + */ + NSGIF_ERR_OOM, + + /** + * GIF source data is invalid, and no frames are recoverable. + */ + NSGIF_ERR_DATA, + + /** + * Frame number is not valid. + */ + NSGIF_ERR_BAD_FRAME, + + /** + * GIF source data contained an error in a frame. + */ + NSGIF_ERR_DATA_FRAME, + + /** + * Unexpected end of GIF source data. + */ + NSGIF_ERR_END_OF_DATA, + + /** + * Can't supply more data after calling \ref nsgif_data_complete. + */ + NSGIF_ERR_DATA_COMPLETE, + + /** + * The current frame cannot be displayed. + */ + NSGIF_ERR_FRAME_DISPLAY, + + /** + * Indicates an animation is complete, and \ref nsgif_reset must be + * called to restart the animation from the beginning. + */ + NSGIF_ERR_ANIMATION_END, +} nsgif_error; + +/** + * NSGIF \ref nsgif_bitmap_t pixel format. + * + * All pixel formats are 32 bits per pixel (bpp). The different formats + * allow control over the ordering of the colour channels. All colour + * channels are 8 bits wide. + * + * Note that the GIF file format only supports an on/off mask, so the + * alpha (A) component (opacity) will always have a value of `0` (fully + * transparent) or `255` (fully opaque). + */ +typedef enum nsgif_bitmap_fmt { + /** Bite-wise RGBA: Byte order: 0xRR, 0xGG, 0xBB, 0xAA. */ + NSGIF_BITMAP_FMT_R8G8B8A8, + + /** Bite-wise BGRA: Byte order: 0xBB, 0xGG, 0xRR, 0xAA. */ + NSGIF_BITMAP_FMT_B8G8R8A8, + + /** Bite-wise ARGB: Byte order: 0xAA, 0xRR, 0xGG, 0xBB. */ + NSGIF_BITMAP_FMT_A8R8G8B8, + + /** Bite-wise ABGR: Byte order: 0xAA, 0xBB, 0xGG, 0xRR. */ + NSGIF_BITMAP_FMT_A8B8G8R8, + + /** + * 32-bit RGBA (0xRRGGBBAA). + * + * * On little endian host, same as \ref NSGIF_BITMAP_FMT_A8B8G8R8. + * * On big endian host, same as \ref NSGIF_BITMAP_FMT_R8G8B8A8. + */ + NSGIF_BITMAP_FMT_RGBA8888, + + /** + * 32-bit BGRA (0xBBGGRRAA). + * + * * On little endian host, same as \ref NSGIF_BITMAP_FMT_A8R8G8B8. + * * On big endian host, same as \ref NSGIF_BITMAP_FMT_B8G8R8A8. + */ + NSGIF_BITMAP_FMT_BGRA8888, + + /** + * 32-bit ARGB (0xAARRGGBB). + * + * * On little endian host, same as \ref NSGIF_BITMAP_FMT_B8G8R8A8. + * * On big endian host, same as \ref NSGIF_BITMAP_FMT_A8R8G8B8. + */ + NSGIF_BITMAP_FMT_ARGB8888, + + /** + * 32-bit BGRA (0xAABBGGRR). + * + * * On little endian host, same as \ref NSGIF_BITMAP_FMT_R8G8B8A8. + * * On big endian host, same as \ref NSGIF_BITMAP_FMT_A8B8G8R8. + */ + NSGIF_BITMAP_FMT_ABGR8888, +} nsgif_bitmap_fmt_t; + +/** + * Client bitmap type. + * + * These are client-created and destroyed, via the \ref nsgif_bitmap_cb_vt + * callbacks, but they are owned by a \ref nsgif_t. + * + * See \ref nsgif_bitmap_fmt for pixel format information. + * + * The bitmap may have a row_span greater than the bitmap width, but the + * difference between row span and width must be a whole number of pixels + * (a multiple of four bytes). + */ +typedef void nsgif_bitmap_t; + +/** Bitmap callbacks function table */ +typedef struct nsgif_bitmap_cb_vt { + /** + * Callback to create a bitmap with the given dimensions. + * + * \param[in] width Required bitmap width in pixels. + * \param[in] height Required bitmap height in pixels. + * \return pointer to client's bitmap structure or NULL on error. + */ + nsgif_bitmap_t* (*create)(int width, int height); + + /** + * Callback to free a bitmap. + * + * \param[in] bitmap The bitmap to destroy. + */ + void (*destroy)(nsgif_bitmap_t *bitmap); + + /** + * Get pointer to pixel buffer in a bitmap. + * + * The pixel buffer must be `(width + N) * height * sizeof(uint32_t)`. + * Where `N` is any number greater than or equal to 0. + * Note that the returned pointer to uint8_t must be 4-byte aligned. + * + * \param[in] bitmap The bitmap. + * \return pointer to bitmap's pixel buffer. + */ + uint8_t* (*get_buffer)(nsgif_bitmap_t *bitmap); + + /* The following functions are optional. */ + + /** + * Set whether a bitmap can be plotted opaque. + * + * \param[in] bitmap The bitmap. + * \param[in] opaque Whether the current frame is opaque. + */ + void (*set_opaque)(nsgif_bitmap_t *bitmap, bool opaque); + + /** + * Tests whether a bitmap has an opaque alpha channel. + * + * \param[in] bitmap The bitmap. + * \return true if the bitmap is opaque, false otherwise. + */ + bool (*test_opaque)(nsgif_bitmap_t *bitmap); + + /** + * Bitmap modified notification. + * + * \param[in] bitmap The bitmap. + */ + void (*modified)(nsgif_bitmap_t *bitmap); + + /** + * Get row span in pixels. + * + * If this callback is not provided, LibNSGIF will use the width. + * + * If row span is greater than width, this callback must be provided. + * + * \param[in] bitmap The bitmap. + */ + uint32_t (*get_rowspan)(nsgif_bitmap_t *bitmap); +} nsgif_bitmap_cb_vt; + +/** + * Convert an error code to a string. + * + * \param[in] err The error code to convert. + * \return String representation of given error code. + */ +const char *nsgif_strerror(nsgif_error err); + +/** + * Create the NSGIF object. + * + * \param[in] bitmap_vt Bitmap operation functions v-table. + * \param[in] bitmap_fmt Bitmap pixel format specification. + * \param[out] gif_out Return \ref nsgif_t object on success. + * + * \return NSGIF_OK on success, or appropriate error otherwise. + */ +nsgif_error nsgif_create( + const nsgif_bitmap_cb_vt *bitmap_vt, + nsgif_bitmap_fmt_t bitmap_fmt, + nsgif_t **gif_out); + +/** + * Free a NSGIF object. + * + * \param[in] gif The NSGIF to free. + */ +void nsgif_destroy(nsgif_t *gif); + +/** + * Scan the source image data. + * + * This is used to feed the source data into LibNSGIF. This must be called + * before calling \ref nsgif_frame_decode. + * + * It can be called multiple times with, with increasing sizes. If it is called + * several times, as more data is available (e.g. slow network fetch) the data + * already given to \ref nsgif_data_scan must be provided each time. + * + * Once all the data has been provided, call \ref nsgif_data_complete. + * + * For example, if you call \ref nsgif_data_scan with 25 bytes of data, and then + * fetch another 10 bytes, you would need to call \ref nsgif_data_scan with a + * size of 35 bytes, and the whole 35 bytes must be contiguous memory. It is + * safe to `realloc` the source buffer between calls to \ref nsgif_data_scan. + * (The actual data pointer is allowed to be different.) + * + * If an error occurs, all previously scanned frames are retained. + * + * Note that an error returned from this function is purely informational. + * So long as at least one frame is available, you can display frames. + * + * \param[in] gif The \ref nsgif_t object. + * \param[in] size Number of bytes in data. + * \param[in] data Raw source GIF data. + * + * \return NSGIF_OK on success, or appropriate error otherwise. + */ +nsgif_error nsgif_data_scan( + nsgif_t *gif, + size_t size, + const uint8_t *data); + +/** + * Tell libnsgif that all the gif data has been provided. + * + * Call this after calling \ref nsgif_data_scan with the the entire GIF + * source data. You can call \ref nsgif_data_scan multiple times up until + * this is called, and after this is called, \ref nsgif_data_scan will + * return an error. + * + * You can decode a GIF before this is called, however, it will fail to + * decode any truncated final frame data and will not perform loops when + * driven via \ref nsgif_frame_prepare (because it doesn't know if there + * will be more frames supplied in future data). + * + * \param[in] gif The \ref nsgif_t object. + */ +void nsgif_data_complete( + nsgif_t *gif); + +/** + * Prepare to show a frame. + * + * If this is the last frame of an animation with a finite loop count, the + * returned `delay_cs` will be \ref NSGIF_INFINITE, indicating that the frame + * should be shown forever. + * + * Note that if \ref nsgif_data_complete has not been called on this gif, + * animated GIFs will not loop back to the start. Instead it will return + * \ref NSGIF_ERR_END_OF_DATA. + * + * \param[in] gif The \ref nsgif_t object. + * \param[out] area The area in pixels that must be redrawn. + * \param[out] delay_cs Time to wait after frame_new before next frame in cs. + * \param[out] frame_new The frame to decode. + * + * \return NSGIF_OK on success, or appropriate error otherwise. + */ +nsgif_error nsgif_frame_prepare( + nsgif_t *gif, + nsgif_rect_t *area, + uint32_t *delay_cs, + uint32_t *frame_new); + +/** + * Decodes a GIF frame. + * + * \param[in] gif The \ref nsgif_t object. + * \param[in] frame The frame number to decode. + * \param[out] bitmap On success, returns pointer to the client-allocated, + * nsgif-owned client bitmap structure. + * + * \return NSGIF_OK on success, or appropriate error otherwise. + */ +nsgif_error nsgif_frame_decode( + nsgif_t *gif, + uint32_t frame, + nsgif_bitmap_t **bitmap); + +/** + * Reset a GIF animation. + * + * Some animations are only meant to loop N times, and then show the + * final frame forever. This function resets the loop and frame counters, + * so that the animation can be replayed without the overhead of recreating + * the \ref nsgif_t object and rescanning the raw data. + * + * \param[in] gif A \ref nsgif_t object. + * + * \return NSGIF_OK on success, or appropriate error otherwise. + */ +nsgif_error nsgif_reset( + nsgif_t *gif); + +/** + * Information about a GIF. + */ +typedef struct nsgif_info { + /** width of GIF (may increase during decoding) */ + uint32_t width; + /** height of GIF (may increase during decoding) */ + uint32_t height; + /** number of frames decoded */ + uint32_t frame_count; + /** number of times to play animation (zero means loop forever) */ + int loop_max; + /** background colour in same pixel format as \ref nsgif_bitmap_t. */ + uint32_t background; + /** whether the GIF has a global colour table */ + bool global_palette; +} nsgif_info_t; + +/** + * Frame disposal method. + * + * Clients do not need to know about this, it is provided purely for dumping + * raw information about GIF frames. + */ +enum nsgif_disposal { + NSGIF_DISPOSAL_UNSPECIFIED, /**< No disposal method specified. */ + NSGIF_DISPOSAL_NONE, /**< Frame remains. */ + NSGIF_DISPOSAL_RESTORE_BG, /**< Clear frame to background colour. */ + NSGIF_DISPOSAL_RESTORE_PREV, /**< Restore previous frame. */ + NSGIF_DISPOSAL_RESTORE_QUIRK, /**< Alias for NSGIF_DISPOSAL_RESTORE_PREV. */ +}; + +/** + * Convert a disposal method to a string. + * + * \param[in] disposal The disposal method to convert. + * \return String representation of given disposal method. + */ +const char *nsgif_str_disposal(enum nsgif_disposal disposal); + +/** + * Information about a GIF frame. + */ +typedef struct nsgif_frame_info { + /** whether the frame should be displayed/animated */ + bool display; + /** whether the frame may have transparency */ + bool transparency; + /** whether the frame has a local colour table */ + bool local_palette; + /** whether the frame is interlaced */ + bool interlaced; + /** Disposal method for previous frame; affects plotting */ + uint8_t disposal; + /** delay (in cs) before animating the frame */ + uint32_t delay; + + /** Frame's redraw rectangle. */ + nsgif_rect_t rect; +} nsgif_frame_info_t; + +/** + * Get information about a GIF from an \ref nsgif_t object. + * + * \param[in] gif The \ref nsgif_t object to get info for. + * + * \return The gif info, or NULL on error. + */ +const nsgif_info_t *nsgif_get_info(const nsgif_t *gif); + +/** + * Get information about a GIF from an \ref nsgif_t object. + * + * \param[in] gif The \ref nsgif_t object to get frame info for. + * \param[in] frame The frame number to get info for. + * + * \return The gif frame info, or NULL on error. + */ +const nsgif_frame_info_t *nsgif_get_frame_info( + const nsgif_t *gif, + uint32_t frame); + +/** + * Get the global colour palette. + * + * If the GIF has no global colour table, this will return the default + * colour palette. + * + * Colours in same pixel format as \ref nsgif_bitmap_t. + * + * \param[in] gif The \ref nsgif_t object. + * \param[out] table Client buffer to hold the colour table. + * \param[out] entries The number of used entries in the colour table. + */ +void nsgif_global_palette( + const nsgif_t *gif, + uint32_t table[NSGIF_MAX_COLOURS], + size_t *entries); + +/** + * Get the local colour palette for a frame. + * + * Frames may have no local palette. In this case they use the global palette. + * This function returns false if the frame has no local palette. + * + * Colours in same pixel format as \ref nsgif_bitmap_t. + * + * \param[in] gif The \ref nsgif_t object. + * \param[in] frame The frame to get the palette for. + * \param[out] table Client buffer to hold the colour table. + * \param[out] entries The number of used entries in the colour table. + * \return true if a palette is returned, false otherwise. + */ +bool nsgif_local_palette( + const nsgif_t *gif, + uint32_t frame, + uint32_t table[NSGIF_MAX_COLOURS], + size_t *entries); + +/** + * Configure handling of small frame delays. + * + * Historically people created GIFs with a tiny frame delay, however the slow + * hardware of the time meant they actually played much slower. As computers + * sped up, to prevent animations playing faster than intended, decoders came + * to ignore overly small frame delays. + * + * By default a \ref nsgif_frame_prepare() managed animation will override + * frame delays of less than 2 centiseconds with a default frame delay of + * 10 centiseconds. This matches the behaviour of web browsers and other + * renderers. + * + * Both the minimum and the default values can be overridden for a given GIF + * by the client. To get frame delays exactly as specified by the GIF file, set + * `delay_min` to zero. + * + * Note that this does not affect the frame delay in the frame info + * (\ref nsgif_frame_info_t) structure, which will always contain values + * specified by the GIF. + * + * \param[in] gif The \ref nsgif_t object to configure. + * \param[in] delay_min The minimum frame delay in centiseconds. + * \param[in] delay_default The delay to use if a frame delay is less than + * `delay_min`. + */ +void nsgif_set_frame_delay_behaviour( + nsgif_t *gif, + uint16_t delay_min, + uint16_t delay_default); + +#if defined (__cplusplus) +} +#endif + +#endif From a82dbe0774a9b6a782041ce08ed5cb1f7a824670 Mon Sep 17 00:00:00 2001 From: Joel16 Date: Thu, 10 Apr 2025 20:53:33 +0100 Subject: [PATCH 20/24] libs: Update libopus to 1.5.2 --- libs/include/opus/opus.h | 126 ++++++++++++++++++++++++++- libs/include/opus/opus_defines.h | 37 +++++++- libs/include/opus/opus_multistream.h | 2 +- libs/lib/libopus.a | Bin 563120 -> 588918 bytes 4 files changed, 157 insertions(+), 8 deletions(-) diff --git a/libs/include/opus/opus.h b/libs/include/opus/opus.h index d282f21..eadeda7 100644 --- a/libs/include/opus/opus.h +++ b/libs/include/opus/opus.h @@ -103,7 +103,7 @@ extern "C" { * @endcode * * where opus_encoder_get_size() returns the required size for the encoder state. Note that - * future versions of this code may change the size, so no assuptions should be made about it. + * future versions of this code may change the size, so no assumptions should be made about it. * * The encoder state is always continuous in memory and only a shallow copy is sufficient * to copy it (e.g. memcpy()) @@ -198,7 +198,7 @@ OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_encoder_get_size(int channels); * This must be one of 8000, 12000, 16000, * 24000, or 48000. * @param [in] channels int: Number of channels (1 or 2) in input signal - * @param [in] application int: Coding mode (@ref OPUS_APPLICATION_VOIP/@ref OPUS_APPLICATION_AUDIO/@ref OPUS_APPLICATION_RESTRICTED_LOWDELAY) + * @param [in] application int: Coding mode (one of @ref OPUS_APPLICATION_VOIP, @ref OPUS_APPLICATION_AUDIO, or @ref OPUS_APPLICATION_RESTRICTED_LOWDELAY) * @param [out] error int*: @ref opus_errorcodes * @note Regardless of the sampling rate and number channels selected, the Opus encoder * can switch to a lower audio bandwidth or number of channels if the bitrate @@ -222,7 +222,7 @@ OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusEncoder *opus_encoder_create( * This must be one of 8000, 12000, 16000, * 24000, or 48000. * @param [in] channels int: Number of channels (1 or 2) in input signal - * @param [in] application int: Coding mode (OPUS_APPLICATION_VOIP/OPUS_APPLICATION_AUDIO/OPUS_APPLICATION_RESTRICTED_LOWDELAY) + * @param [in] application int: Coding mode (one of OPUS_APPLICATION_VOIP, OPUS_APPLICATION_AUDIO, or OPUS_APPLICATION_RESTRICTED_LOWDELAY) * @retval #OPUS_OK Success or @ref opus_errorcodes */ OPUS_EXPORT int opus_encoder_init( @@ -357,7 +357,7 @@ OPUS_EXPORT int opus_encoder_ctl(OpusEncoder *st, int request, ...) OPUS_ARG_NON * error = opus_decoder_init(dec, Fs, channels); * @endcode * where opus_decoder_get_size() returns the required size for the decoder state. Note that - * future versions of this code may change the size, so no assuptions should be made about it. + * future versions of this code may change the size, so no assumptions should be made about it. * * The decoder state is always continuous in memory and only a shallow copy is sufficient * to copy it (e.g. memcpy()) @@ -398,6 +398,21 @@ OPUS_EXPORT int opus_encoder_ctl(OpusEncoder *st, int request, ...) OPUS_ARG_NON */ typedef struct OpusDecoder OpusDecoder; +/** Opus DRED decoder. + * This contains the complete state of an Opus DRED decoder. + * It is position independent and can be freely copied. + * @see opus_dred_decoder_create,opus_dred_decoder_init + */ +typedef struct OpusDREDDecoder OpusDREDDecoder; + + +/** Opus DRED state. + * This contains the complete state of an Opus DRED packet. + * It is position independent and can be freely copied. + * @see opus_dred_create,opus_dred_init + */ +typedef struct OpusDRED OpusDRED; + /** Gets the size of an OpusDecoder structure. * @param [in] channels int: Number of channels. * This must be 1 or 2. @@ -511,6 +526,101 @@ OPUS_EXPORT int opus_decoder_ctl(OpusDecoder *st, int request, ...) OPUS_ARG_NON */ OPUS_EXPORT void opus_decoder_destroy(OpusDecoder *st); +/** Gets the size of an OpusDREDDecoder structure. + * @returns The size in bytes. + */ +OPUS_EXPORT int opus_dred_decoder_get_size(void); + +/** Allocates and initializes an OpusDREDDecoder state. + * @param [out] error int*: #OPUS_OK Success or @ref opus_errorcodes + */ +OPUS_EXPORT OpusDREDDecoder *opus_dred_decoder_create(int *error); + +/** Initializes an OpusDREDDecoder state. + * @param[in] dec OpusDREDDecoder*: State to be initialized. + */ +OPUS_EXPORT int opus_dred_decoder_init(OpusDREDDecoder *dec); + +/** Frees an OpusDREDDecoder allocated by opus_dred_decoder_create(). + * @param[in] dec OpusDREDDecoder*: State to be freed. + */ +OPUS_EXPORT void opus_dred_decoder_destroy(OpusDREDDecoder *dec); + +/** Perform a CTL function on an Opus DRED decoder. + * + * Generally the request and subsequent arguments are generated + * by a convenience macro. + * @param dred_dec OpusDREDDecoder*: DRED Decoder state. + * @param request This and all remaining parameters should be replaced by one + * of the convenience macros in @ref opus_genericctls or + * @ref opus_decoderctls. + * @see opus_genericctls + * @see opus_decoderctls + */ +OPUS_EXPORT int opus_dred_decoder_ctl(OpusDREDDecoder *dred_dec, int request, ...); + +/** Gets the size of an OpusDRED structure. + * @returns The size in bytes. + */ +OPUS_EXPORT int opus_dred_get_size(void); + +/** Allocates and initializes a DRED state. + * @param [out] error int*: #OPUS_OK Success or @ref opus_errorcodes + */ +OPUS_EXPORT OpusDRED *opus_dred_alloc(int *error); + +/** Frees an OpusDRED allocated by opus_dred_create(). + * @param[in] dec OpusDRED*: State to be freed. + */ +OPUS_EXPORT void opus_dred_free(OpusDRED *dec); + +/** Decode an Opus DRED packet. + * @param [in] dred_dec OpusDRED*: DRED Decoder state + * @param [in] dred OpusDRED*: DRED state + * @param [in] data char*: Input payload + * @param [in] len opus_int32: Number of bytes in payload + * @param [in] max_dred_samples opus_int32: Maximum number of DRED samples that may be needed (if available in the packet). + * @param [in] sampling_rate opus_int32: Sampling rate used for max_dred_samples argument. Needs not match the actual sampling rate of the decoder. + * @param [out] dred_end opus_int32*: Number of non-encoded (silence) samples between the DRED timestamp and the last DRED sample. + * @param [in] defer_processing int: Flag (0 or 1). If set to one, the CPU-intensive part of the DRED decoding is deferred until opus_dred_process() is called. + * @returns Offset (positive) of the first decoded DRED samples, zero if no DRED is present, or @ref opus_errorcodes + */ +OPUS_EXPORT int opus_dred_parse(OpusDREDDecoder *dred_dec, OpusDRED *dred, const unsigned char *data, opus_int32 len, opus_int32 max_dred_samples, opus_int32 sampling_rate, int *dred_end, int defer_processing) OPUS_ARG_NONNULL(1); + +/** Finish decoding an Opus DRED packet. The function only needs to be called if opus_dred_parse() was called with defer_processing=1. + * The source and destination will often be the same DRED state. + * @param [in] dred_dec OpusDRED*: DRED Decoder state + * @param [in] src OpusDRED*: Source DRED state to start the processing from. + * @param [out] dst OpusDRED*: Destination DRED state to store the updated state after processing. + * @returns @ref opus_errorcodes + */ +OPUS_EXPORT int opus_dred_process(OpusDREDDecoder *dred_dec, const OpusDRED *src, OpusDRED *dst); + +/** Decode audio from an Opus DRED packet with floating point output. + * @param [in] st OpusDecoder*: Decoder state + * @param [in] dred OpusDRED*: DRED state + * @param [in] dred_offset opus_int32: position of the redundancy to decode (in samples before the beginning of the real audio data in the packet). + * @param [out] pcm opus_int16*: Output signal (interleaved if 2 channels). length + * is frame_size*channels*sizeof(opus_int16) + * @param [in] frame_size Number of samples per channel to decode in \a pcm. + * frame_size must be a multiple of 2.5 ms. + * @returns Number of decoded samples or @ref opus_errorcodes + */ +OPUS_EXPORT int opus_decoder_dred_decode(OpusDecoder *st, const OpusDRED *dred, opus_int32 dred_offset, opus_int16 *pcm, opus_int32 frame_size); + +/** Decode audio from an Opus DRED packet with floating point output. + * @param [in] st OpusDecoder*: Decoder state + * @param [in] dred OpusDRED*: DRED state + * @param [in] dred_offset opus_int32: position of the redundancy to decode (in samples before the beginning of the real audio data in the packet). + * @param [out] pcm float*: Output signal (interleaved if 2 channels). length + * is frame_size*channels*sizeof(float) + * @param [in] frame_size Number of samples per channel to decode in \a pcm. + * frame_size must be a multiple of 2.5 ms. + * @returns Number of decoded samples or @ref opus_errorcodes + */ +OPUS_EXPORT int opus_decoder_dred_decode_float(OpusDecoder *st, const OpusDRED *dred, opus_int32 dred_offset, float *pcm, opus_int32 frame_size); + + /** Parse an opus packet into one or more frames. * Opus_decode will perform this operation internally so most applications do * not need to use this function. @@ -583,6 +693,14 @@ OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_packet_get_nb_frames(const unsigned */ OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_packet_get_nb_samples(const unsigned char packet[], opus_int32 len, opus_int32 Fs) OPUS_ARG_NONNULL(1); +/** Checks whether an Opus packet has LBRR. + * @param [in] packet char*: Opus packet + * @param [in] len opus_int32: Length of packet + * @returns 1 is LBRR is present, 0 otherwise + * @retval OPUS_INVALID_PACKET The compressed data passed is corrupted or of an unsupported type + */ +OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_packet_has_lbrr(const unsigned char packet[], opus_int32 len); + /** Gets the number of samples of an Opus packet. * @param [in] dec OpusDecoder*: Decoder state * @param [in] packet char*: Opus packet diff --git a/libs/include/opus/opus_defines.h b/libs/include/opus/opus_defines.h index d141418..cd8f4dd 100644 --- a/libs/include/opus/opus_defines.h +++ b/libs/include/opus/opus_defines.h @@ -64,7 +64,7 @@ extern "C" { /**Export control for opus functions */ #ifndef OPUS_EXPORT -# if defined(WIN32) +# if defined(_WIN32) # if defined(OPUS_BUILD) && defined(DLL_EXPORT) # define OPUS_EXPORT __declspec(dllexport) # else @@ -169,15 +169,32 @@ extern "C" { #define OPUS_SET_PHASE_INVERSION_DISABLED_REQUEST 4046 #define OPUS_GET_PHASE_INVERSION_DISABLED_REQUEST 4047 #define OPUS_GET_IN_DTX_REQUEST 4049 +#define OPUS_SET_DRED_DURATION_REQUEST 4050 +#define OPUS_GET_DRED_DURATION_REQUEST 4051 +#define OPUS_SET_DNN_BLOB_REQUEST 4052 +/*#define OPUS_GET_DNN_BLOB_REQUEST 4053 */ /** Defines for the presence of extended APIs. */ #define OPUS_HAVE_OPUS_PROJECTION_H /* Macros to trigger compilation errors when the wrong types are provided to a CTL */ #define __opus_check_int(x) (((void)((x) == (opus_int32)0)), (opus_int32)(x)) + +#ifdef DISABLE_PTR_CHECK +/* Disable checks to prevent ubsan from complaining about NULL checks + in test_opus_api. */ +#define __opus_check_int_ptr(ptr) (ptr) +#define __opus_check_uint_ptr(ptr) (ptr) +#define __opus_check_uint8_ptr(ptr) (ptr) +#define __opus_check_val16_ptr(ptr) (ptr) +#define __opus_check_void_ptr(ptr) (ptr) +#else #define __opus_check_int_ptr(ptr) ((ptr) + ((ptr) - (opus_int32*)(ptr))) #define __opus_check_uint_ptr(ptr) ((ptr) + ((ptr) - (opus_uint32*)(ptr))) +#define __opus_check_uint8_ptr(ptr) ((ptr) + ((ptr) - (opus_uint8*)(ptr))) #define __opus_check_val16_ptr(ptr) ((ptr) + ((ptr) - (opus_val16*)(ptr))) +#define __opus_check_void_ptr(x) ((void)((void *)0 == (x)), (x)) +#endif /** @endcond */ /** @defgroup opus_ctlvalues Pre-defined values for CTL interface @@ -482,7 +499,8 @@ extern "C" { * @param[in] x opus_int32: Allowed values: *
*
0
Disable inband FEC (default).
- *
1
Enable inband FEC.
+ *
1
Inband FEC enabled. If the packet loss rate is sufficiently high, Opus will automatically switch to SILK even at high rates to enable use of that FEC.
+ *
2
Inband FEC enabled, but does not necessarily switch to SILK if we have music.
*
* @hideinitializer */ #define OPUS_SET_INBAND_FEC(x) OPUS_SET_INBAND_FEC_REQUEST, __opus_check_int(x) @@ -491,7 +509,8 @@ extern "C" { * @param[out] x opus_int32 *: Returns one of the following values: *
*
0
Inband FEC disabled (default).
- *
1
Inband FEC enabled.
+ *
1
Inband FEC enabled. If the packet loss rate is sufficiently high, Opus will automatically switch to SILK even at high rates to enable use of that FEC.
+ *
2
Inband FEC enabled, but does not necessarily switch to SILK if we have music.
*
* @hideinitializer */ #define OPUS_GET_INBAND_FEC(x) OPUS_GET_INBAND_FEC_REQUEST, __opus_check_int_ptr(x) @@ -618,6 +637,18 @@ extern "C" { * @hideinitializer */ #define OPUS_GET_PREDICTION_DISABLED(x) OPUS_GET_PREDICTION_DISABLED_REQUEST, __opus_check_int_ptr(x) +/** If non-zero, enables Deep Redundancy (DRED) and use the specified maximum number of 10-ms redundant frames + * @hideinitializer */ +#define OPUS_SET_DRED_DURATION(x) OPUS_SET_DRED_DURATION_REQUEST, __opus_check_int(x) +/** Gets the encoder's configured Deep Redundancy (DRED) maximum number of frames. + * @hideinitializer */ +#define OPUS_GET_DRED_DURATION(x) OPUS_GET_DRED_DURATION_REQUEST, __opus_check_int_ptr(x) + +/** Provide external DNN weights from binary object (only when explicitly built without the weights) + * @hideinitializer */ +#define OPUS_SET_DNN_BLOB(data, len) OPUS_SET_DNN_BLOB_REQUEST, __opus_check_void_ptr(data), __opus_check_int(len) + + /**@}*/ /** @defgroup opus_genericctls Generic CTLs diff --git a/libs/include/opus/opus_multistream.h b/libs/include/opus/opus_multistream.h index babcee6..824cc55 100644 --- a/libs/include/opus/opus_multistream.h +++ b/libs/include/opus/opus_multistream.h @@ -143,7 +143,7 @@ extern "C" { *
Vorbis * channel ordering. A decoder may wish to apply an additional permutation * to the mapping the encoder used to achieve a different output channel - * order (e.g. for outputing in WAV order). + * order (e.g. for outputting in WAV order). * * Each multistream packet contains an Opus packet for each stream, and all of * the Opus packets in a single multistream packet must have the same diff --git a/libs/lib/libopus.a b/libs/lib/libopus.a index 840b674e29d4a6cd9031d6f6477b7312be118593..e44d159f17211c81b619b2770af4e49e697e1322 100644 GIT binary patch literal 588918 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

pD?;`Mdteq)_n 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%0DA*7i9C2W{HES$brN;tx|z`bQnn%51>tW0&pQ4w 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“tc7{S25W|afa?H8XI?o= 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�OxO-X1RkxVeFTDmLJh1Jp;q|2+N|BGaJ|IYEL)hNRtGn*P1 zIz2G>W6_yG1ox@T&2VmskI%HgX<>okkez)bIjercNtJYN;^a!H+~mn7VP2(d4>kFR zL>Yv3AItInRt|?79U1-;P#hm1W=`@F#1@EM5S!IDoc&=AxdP2S7Kq;hPb@L;p1=n) zFvcHH3?iz)vYGOqAtqTK;S{9<5SxQv9)j2cF^-QD>J6g&rjXB4KH|5Csl1t$;rRfH zG1i2Ol&^qHj_Oe(rg~fu3+C2nCeke z8k24}N+Z@Frh2_7ANR*mKH}k&h72))(umU$lZ$3j$iFTh0$0w$vv zWi%Ay%jZjRea3i->GS`;L00$QB%@Q2;KUd(T?ql86yz=%LlP%z0@i>Nz=_!gu)_~S z|0fyUxN3FbwosPhR`^kQprH`{uACZoftn%4VvNes_uLfdz4ZRi@pD2spt%rm%-l!i z=w0;OK>Vn@Dd0#uVQx01P5t#m2FaN;#v2!bGb&tDe}VFq{T+hq>h&4agpp|srhC3f zo382B-<6wXELSO`1C7#LZwjXVCLx3BBlu9L58B1Q%0Tz%mw{h(*_#T5fa;aO)Fz5e zu%nxFBOiW{jO9qxUd?C`6A($=!){n})1^m{S3L!R?Yum1~T1}!f zWB4c8TW43}F*N@H+1pJZZFSijokNp_{aFZG4;{(=N++*=oEmb3B-mPw!=B6=domY6 zu8@FzUSUBv)}}nxqrup>1z}GYfIXcr_HVo8QG1JJ}~x6 zc;|YwaXsvMO2yXT!H8ICt2CrNSdOq4*^Rx3bs;rP7;cR9`hxpdx7(oIO4K7m+KT07 z+Dq$!4%X`wbT*|l4*N9h*HmP0wjT9tOyY~7s|?#k+OM&jB1OquOXx|KqEg(?GIt@_ zhAoeFfuAP^gMsXmy0P_+^5Ri+jXHkLv`=dxvQKM|X;{=vE^Q&gnCRS-z*mJXEz3HM zy}zbD@yqo3<7#+G#%Cxwlk7g7)DKZdi5I2qvF}NA!XA(}7mbAqk}LW_&j@8P4zQin zHBe=v&g0BZD33GwV3P?r>Ey2KF{bOmyD6=QeXI)mDha`g>=GsHv8o?*^INMeM6MWf z$|sp^9hRp8jC5k`MUk&-jkeN#%GY3DCPM6t`*zr$wpJY%liol0PoRU1S>Rh`5kByr z<4x@_+hGh`S+1iM%gc0S8+G;|THvWpfpY`ps>4hJJ5jzp-ikWP=7Nvr1zXZI2ay4O zLvrn-Cn3J-BvOpTs-@UNPW@e&IZ0O9gBO80D9Z0(GcJ*FCR51eqW9kd6+-FErA~5j;F|70#auTMd0V` z0zYRb_&Ga>&Y`bdA_84wyeq^Z*mp`WM?3+&6W`X1E7Mhg=5JztxD2{K3z{zn9zDaH z@Bs6{HOv_oF&B_5K_l?plYqmpSLCkhl$)~IOLkHBihZqn4?gKY@ESeATO0>Iqc?ai z9^f?|15Xk9-v5WZw}Fr9s`LNP+?hO-rtKsInkuVz$V?JazyZ=W?qZ!Lp-o%bra&vM zxCBUeSSdsZiYsf!5NNDv2DNor*M}?xij@*tsj~l{4|xSzt5&yaSNr?_-T$%_TUNWf zs9m?avYp@ibMC#9$v^4LNzkRrF`!q?m;az?;WVZ zHmzjAtsJvkjQsId#w5L{{@@7n{JjII)=4J8>`Ap>ZsnyDNjC%y&8c^92t5KVy_LKn ztnd zGu)^XK;w|S{}s>$rAwwd$VNcD`AH4?5%a=fz3v)%g}x8$1!y0o%nZ6u4&QM!Unzt6 z@D1k1*O?nnF(OtB~dy~V|B}EaYO#P#BJCKQ2Sl;5R42@Z^Uo`&Ppz*(yNBg>&^%^ph;~~!F zn7a~NF-qIp8(X}RPrPf}5jVoY`DFaaVr-zhA7;-&rXGN_91|8e28J?N-YB8R`rnwV8% z?HzE|xL>(^OJY#x#*b?_%Lc05V&qpoM;&|UuZP%o9v<>|61Q{Wsy{~@jfZj2F^l%F zKfcXOh_-Nc?9NP2-$;F#3&2~YX7>R3nHwwFQ+u7X3bA=cFuvR*`whSmpJV^JzlLw1 z9|#S_Wlp#sF;b#!*}yocZY)zMu%_w25Ze%SdQaue#8r|mqRRU_R{ z;6L^|-L(yzcsNa4%j0R6bH6nn5{y&tI%Yy&g!w6c!Q=1+KF^tBLW!O2A?cGQId|$9 z2bc4u%8mu&P&I7#dfBXSBzJMp4ZW4EFR^3Lxla636GXY97 z2Gh65>h25*_c{Unx;QQvRee%P-$v=%*Bb-$<&T zpSYiXh7VuF*gmn__H*4q-f!Do@Af#~;T%)DV>{;nA1+|LzF$-CHao+-m;RR8|NkH( z!MPWw4>R_&OmYql1V6(MUebKqK~z*V-VPJ zFMaqBFoDbb_2z7)-Mh7aukdu8IUm4~IK!aPv#$V9fl2KeO0mC1Ob_tX&BWgU+#ftI z>W!GLfnoYyuxWj?$w7bC@;w3@4R=`Cf>D`^ITI(vf5v=F3>xE_H^j{kFQ;A02P)xL zczl$RuxwYrql473ylxKVVQ;=pcYasW_8EM`TW8A|&+B)9=>ey{e7YK)sf$7}blvk|Q}TImY09CG)gL3yQ>;PC+W$qn1{c(*f0z$( z=1#4{T<2q)4eiX4=43Nigm{zUjntqw|E+9CrS2CM|0qZ&UWRzAzY6dFIe(vZ?YjR0 zLeghlA`;gHvYr)_DV@=bZjxW(sqd z@)(=5+bXJKp9eOZlGte&uUR$!MExVI5wAVk2Onge&KuD9Fb@%2(!R+a#vUkGUuTwV zAb9$1M_7Ly_s5V{L0*nM?!C@G+Wtja!uIbhyT@sdN>MMJE!v|(CK}g%Rh^#fcM zxX;J#aoWqY$3@uF6FXCOkJJ9Bz0dBEr&vFOgVvr2dxp2a?Mpc`w7>PGoj2L>Y+`@g z#s1b*m*5mgV~fY*+cx!2MSooFP8=3}W;gpyQM{6U%-h%Y4yhkXS&ztdau)3N_p9eQ z54^c5*(~*i&XN#vC!}Sc+Dm_b*1`{?ee*m;<@e1moagBqZ(o|o{F=qS^f+=tHO_Z= zUmtxB@0t=%XK!XcPWYAgrBlo)sy;W-#%Jkctk;8UFmrJeVlqU@u5^Slnysc-T_ax>buyUT9J&Jjnk)@_B*Sqs>45p|5+lKDdnB9 z+7GJCZQzm>;q*rE~a{~_@}a6^}n?~sGn_Ll=iVFd;1;3 zWp3Gh$fjF?O_J=-)$?b%bMYX@@(8=g44K>NM0n+ljX%Xp$k^k?HxhTQ{HgQA1JV@c zAHxG>(=Uu4!vj6D{L4%}kCg7qcBjtZtc5uR@7gv2gdGFQtT-|%s_Qq}3^j_2Z zmJQdp-?aGV#c#Xm?M?4!?)ZbXvp3iMNn+WRx6WR8>!RBi-+bpyZ@b|SZ+z!X@4V@* zx()G7Q#Vb`lz*h+qZ4ZO>e*99XGz?*00J@yCdZn*R2I~FZ`N7LdP-`2Y1=H;zxe*axp zZ*16bO;_Uw=k(TnJl6kv%d2mxuYX^A)7mT7*KL~qes^>Hy|KGv+oyhb(#I~}S^4QJ zKJmJ}lOBm4zU1(Pk6-fP%O*ee)(tl;ShR4-f>qbHx3)KT-uSN8cVF|KhCgk1Ps65b z?wR$W+E2M3`MqVaTk2MIEV<+MTUxKb_2wIIxb>!at=Hc)|Ax78{{?xkZ((i(PQ284 zK>%O+l(&uvpN|)NNdYhR(ldCmAM(qKM*#EL$#>-iu5OE6vQLUVP2tf zUHHoX`vvj)31d#d9P;C(k2!?~v^ZY+B?alF(GfV+?@tQCvZ&a8DLg^q^u13P#6L`U z{$+dHZwibzRNdmG&Aq&=v=;O)y&Ri%h$}A zZDy`ov0|xIC)aT0;?lM2*R9gajlL=1Uq?^#-J6!J!&ENTeYx!3c%c>Rmu=YCxwLa# z=Z019Te=1v%(JLqcCH}73K`j@KC8OS^3LvMRIziV>DoXY?b8|jUNRv8v3A)CmA(RN z!)D`M7!}TaYDLFN;}^U}&pz`Pb4*-pNEE*hUpko2$tQn1YeVI&Eh1b+ zIlliCzH~01#+T0Jbn-?hvqe69ZJ9|@`cL})e&0VWpLF79E55<^+kAhm@Au;CyE_!7 zp2y@PCn^Q;OjfB zm*B&Xei>isPAlwEU)EhD#(VkIyeE(R!}L*64fVq>#+TDM>&l0>mXZ&@t6e^TLRvlm z#i0DD#th46(2mJZ@b^36Ul%Ot-xB}20iJ2#m{!)&HDma>TiBemU(vk=&nO*3dZbyH7qqvP zFjLje3q_q~PN(qIUZ!WRy@mYioy^UA7Zlyj%ivk@^Af8E6krDX}) ze$lh~jyB}nKGxWGgF<*4JQnh~=Q7bgmCH4nZUdI%1N~C5y3fbwzN(?ILFq0;$MloT zfkHmF^zHhfQ;CPw1+JLbk%o_P6n?hsR6Pnm``{4zIq<%}h@Gm(;VmD6-~IU^*Bl+% zNxB`-z7uKoDZ-y5JU!jU`e=fOd30!yF!*faZunYtg!dC3hE5`Rd1&rKoC=xhwBtZv zh|5MLdNt&|0shaE@XVhYS_JPa1@8;q(9jMub+YIc^!(iF=o9$pWLTO*>yG+psZ$KD znn;1QrAwh-IQ9DO@J{f#^h9vcQJn|zjuP#@&ck8PZ-Ymp_i5yH;gJl*lDoqDXxA^Z z(-Mirq-mYX&5|RT;nn5HI}bbA?5%Od%Qke_+!j|{J@k<^)S=3>Q2!Cyd)vV9U^#fE zaN2)Nq-nS44AKXSwLM~FkE@E?1Ch7(Y~u|BBe}Y#;V68+qwqcl;`PvxH^Ik)zBNz} z9~nIwz@>TUZruW}Zcpf+vgxSG%4QG5u}c(cfiG2GHv|pk`$LH~ctx8jb2Z;<{73jC zM>F-%cQdxU>jxYYr;oNa%C6Qv=p4n+N>k>t_%O6C_#5Px9saMwY>3pX0R>M#u#osMt$Cu_-VHN4&}G`8p*RydA{x(h4!pG zsjA7ypdEqFDVuyv^x+ROu{PP;?Wvi<7$A25Z*GJ+;_>e)d2Xa%v)P|Wugd(j-`C8g zjO?S;M}Oe_K}dAHB50+NxgR=<9Q>bxr)!R+ph4|J2Sa*|SW;u_XzES36~Qm+VN5<^ z+EixSO{7CVk~tQMP7Q0`hM^BkNAHgGk3`(K#1cq9HN~AtL_W|Mu$ltr8g1$q4 z)7i&+&5;QCwz?7apmbGipLWB?2V(mkz?RluVfSqfc?grgP37$SER}eCpq_YWehcQC z=Q5xG3+vtcIU}CS#D*_o`>M*!7~W}O*d*1QKFz#es=jiE(eq2U#gfk&)m!gV?gX#z z+@ti}cCYTqqtx#^Ms<%R@1vY=P=_aXR1B-$=!7JxbFwDv!VlgG4{$znQF@!StsfmM z9aknctaemUpXcEBUluMl>BYPoeedq1eHn%M?l7k^X{j%bdwqP6mL?5O9Z%Vw?_W!hmbZ%qrz54c!DzlTeJm>dmB>Y3ts9#mDSl4#S`SyKP<^=r+ zZ{0-_KPG+I0c@kKB+a+)tM3}1PlwCr6F=Ig;-y!`gETWp6RSJGns_8J+xFp;^e=r{ zcgXgs-rMih>3e(n**`*KzqgJ2`re-Y`nqkv2!reaCGjF;OZ46Py8BH68HbDABKq|R z>w`A>>9w|IxIzBi`(wL1g$iA%eD$L+BFD*eXk zJlDJNP?G)QbhhcfgS@*IzH){6QGE$>1pYwg5Wo7m73eDsMzKf$cpi!CeSO_~Ie!PE z^b=#pxUdFAn+w(_bV@MER8&0O!>nWN6&JBrh=-+j@&np^8)wW*fl0eDKDOWUAfwguJ%)?Wk{U z2*vib0w1`Oq#qL7cL+U^G&Vn*9!VT-4}FtwpU&O{NmcbKil6V>f1lNk^o`6DBe#Hj;77#5gy)VUx6( z^Hnk)lQ_5M$Jv|vUDF%^+uHUedtP{F2Wu_9fj(wkl7`Eu8JiU4e#7qvt&dl;5BKWa zs%9^dzW?cLi)Z_Rwe*}_V=en%&92_Awj%dOI;GjyKf~QYe?**EDiZSaX7=rO%s*|@ zT(0gq8j5tSqd$<c>j}+Qhn=>1bW2-O2tM+SZ?NSSr`P=z{Wp&)j_jXc=1f+f zU1Yvu``QD^q^!&GWK|j|XINV~)2eAR4j*2;1k?JB2o}|i3FD|uXE#Bnx=-X+JVIOJr zWGLv>5zbO{p&yZKh;;vtkXLpr>KA{LwbWidBYKA&C)sB|f|QoRl2cS3jaiIyTI;@^ zxg$6aJ`eAwvRA7-Y;d^XvFziTTk4xAd#2ulHQ!f~+7_zjo{sA1Zf6E-S9w$(aaNyQ z`$#=!KW7H0*29lfOD9rg+IcedKAq!XrK2U| z8_5?L<394YcK+;oL~uX^JN6N5;Fg%{A`Z3%0=OkY*_waf{SR;ci6?qT_7{_-^XM{n z)2t`0X%FTcK}INr{MHC^YZ~94%p2kD_UFmV0N-U|b?S#*{o=74p?zxebiGe@sBP>I z`})sDSRZ zF1L7X=%(1Sq!SVB9e?~z_u99($+N|Gj!AH)4peh}kYeuKrW+S6n77b<%UfJO69k4! zq7x@wUiG@yPx-w!ywP=IQ>RwP$p#B5K^Y5r|D z%wBr^g6o=>F1oI1{=9s{g3yb{P{&7U$R4%akKeRrU3WlVw$J$=u^Lk2DmjThRB{>g zQ+&}?595ojI>&k@`NWq&08+V?_$n7*)#_PIQ5Y=6#aI5mi@kLB<11ai!qD12sWAT2_-e;< z_@Z}n<$x_Wj<58hA4^|py22t-;+#wQ`<>8d$C+-wB|5Fvdf+1dgSvpOH7P$V8;h^- zOc&ZcPw5yUU_&n)#+N&sSC+yoKkKgKU+K@6E=d}uNSDpTpUPwU8m7(@BHElYD3+c3_m+&&r1?_F;UGS{v@zQPb z)6G^QoYD>3C+{z4Z!bZW$1<|+Dbf}8iz52@DV_RJ?ilG<9yzBt{T|?#PpADk=@{ai zQyMw>!8a9-uqK9iskCIV{i0{}T`;yhnxk}FGAM*_@K{KveVG?~l)-mFy7#<0pGtdv zI_)*H=FGNa+6&M}Dr4U$q|>&d{}advOHM{|!f*dh6Yp9qEF8T13G_x!erD|Z?A>R7 zFBnYeg`XxEu=>W8^wY7*RAZR=bjWxy-2r4AiebhihYO4s)W z-!$gdZJrH|e`IX>6Ap4Xo^1A|-d#9V>skD&$3Gd#0a4x_FMft+6RYYj8?U&(qmHj; zn;FJ?eLLwd*zdkdUwL^Zcz5b>|CCqek8PP)V%zP-d$tekePn!7Wqyw`9kZ3= zGU9^qp_hQi?zMPMB1M1FKk8T6;!D?o6G3ZHA4_hSTNe9umsNsq)-SFP{W9A=NqFLw z&|f1}&(r1?xu>uh-1}>lvDAc6&@ZwHIXQZa{0E2Lhzy-@>M_UK@*Bo*MG}8H7UXR?hTY9{8slAE#jMzc*Ko3%`W$yP*33m!MxHO@ombp+@9=B zVYvkvXK0oqWse}(P{5fd*`*uN#pT-vN(TLNs4+pK@!v((p-R2N-l};!z zm7;@Xgua6?{*2P>~k(7-z;jqYK&koWdkLY-7waJLa zt8aVX9CTz8s~Q@v4eR?)rNGZB=od$_^py$HZ*?VA5soMJwc9aZ4Ox5s+~Z*DBHDF* zw2eE};Ej+5I?LqOn+lK4GMsj*PnDbM!7EH6ZP3lB+~WS?4O`Uq)ZxkGt8k#BReCa| zUqPnyi^!CI0U5`~#~n+_l~$N##felJ9?W0`#NseNC(($nyD{LM)Y(2YdLQOJtZC`S zjK0@gJjOhT4PSoN_*b%n3zR028diMx6lqmgV_(YHPiJ1l8Fv?cSH#G^&Zw?YKHn&@&*K$oE?GT?^f80Y99_DG>*-Bv zJv4SYBR6RLPwqeR2ac)HzQ|AOgEYHibqV+sUBnMUKa(72FL#S_BL-tQA-UZ0RfuHH z4LZ%dua7P;oveXGRmw>)F4{}{dwBTBieB*Uxb*hwtJ=)Jqid(Q`skew_v2KWlmp*M z5&%7WRX#kn`V_SHi}Sw2_iLCE)Xkgc-W*+!o9oh*(mZ$HP=S1<=I+1FwslET7Y0)E zSb1WHk2_W;L-k7)nV8#0{XW#2#@<@2v6emJ9~fu$`P4qA!exzANBHE4{n_k2$a22O z8tE`8cuYVtd$d=I?&aPY;hQ&x>fM9h{e-Rbs&vzmU*~*^Aj`kibeJ@>aLFz2{y26p zlQDNUYizftlM(Hqy!e3Dm+l9IVs;?m8aO7<@T*o(zfM4r8gv_au{~8}YPc&+c7K$v zzG?@sM?3Z{C7&x=>ekFH=)F$QqpN5vM9)bisc+p4j@1#xj%m!@&c3?a-jyibBWNoh z*Ep#kW6-m**@u(v^`%=>myo$6F1pu|cU)}TKe~8Js_qgKYu|(J$TsS?hs^yC#5gax zvos{V)hZy7So?gVJ5~Z)p5FVSknHVp51Kt2>$$rHzRK;oV~MpGf``eN4u%x2uR9oe z0UJH~R;rG^NaQt47c26~Zoee9D#&Ycazb%dp1SM;>P%ImABldG?XVpsPO$ z9mvx^O0s`w{RXzNv~~kMqe6RFfj&}T7fbi0!NXuydNkYxXW{=rD?{IOkoI|L78cmS zl5F}!#>(D%w!?%huefj6u-BNxVVC}6uWCJJ68rdJ2TFDn69-eAH>{tXY10UQfc9e_ z%4M$`6zs%WZfE~H=D#D(_1FcN{jwdnLk&<%+-8*Q5u6^MdwOm5bU8E18L&N`vvChY9jSj(ER@`8?KRF zMTxtdW(Kg?0`i695%h1g?=};!y*D2=t9KuT+NHJFvE75W&VEO=bXipXN!DkCZ)h!x zcVcl1m%WUAwZx4$KOz3rY{y=;4W1S7{Gi}C#$0Eor=zj}c-P*&OuKCRlE*j~7$Y|Y zU0rp*F+K@YEM#uSe&jsCi;Ue0_O(5nUA^(t<`r8~oA+#qB|H6ln4jb<;2C*-s|VCt zLph$kw^&~_=iEKqpUXMNzNNlNxXcOHb=;3TA_J8r(kbH(fXnPmaSqOQX8Q1>mzJ?7 zz8P4J`Z;wSlc@z7jlQQ6A#X^n7hNw zaC<1yl5i#G2O#1xhwBu{1xgTH8DSis?#UJGNiXT3N zueH|YhrfZZwROS||1Eyt*uu;|@_UK+x%`BY{<|MphA$q>guD(_`iTYM7~whwYZ!=0 z`DYcxHy4C&DhR)W@X1o3P<-X@EQs$a2!DX^S|&)+Pk(PgyxK0h{12(C%KIGQ%{1l} zKmA`7q(71u77yqt!rE6ncd?}hbp%1;B_FywFZ=_->RZq8;n$`IF%D7wHSvJ#PO?Jx zoh<8Kwk|o#W9qC~hc1Ma5KwF|otwLsZdl*FtebT|i%>U;2;vy6Mb7}WiMy66r3o@CA40l|{5o zEB{JbAGqg8*Pizx zXm2YCSXw6KCoCiLVxHArmUyncxAUBr-8AYT&T~OrJMV&LMUR(mlbw6`5fK1(U*f_C)#>C}&MYe~oQ%Q+RT-vj*e`GR+oF25;3732rsT-MkRgF*-gk7OT{u7iHwqYSXMr5KWBD)0of`Z8d%5td zS*3e67d~ynf0GM0TRgfcF8sT?y$9PEJD`Jdzti2&xYIq;;D1zNkTmXop$vLK8FHa3 z;=0=>o9*GAojXmqql`K8&xwGpU1dJ*-GRk@I+Fc-HG6!|>FnJPQn7K|x$xqJ!sBP&oG*sWWam~i1E7zv$0}pdV=&s z=zxH4-hteOWHhw5zm7E0AyB*no!#B;Z0Qd*ZGZMs>5jCSwG~qbq~nDvlg-=uoeRxh zR?OL@G+(MXOPaJHzWSr$q08orTj^~1%ZjPH;0M-9e!{cIB|BP8P?BX6=g|!HN9MWd z0PV8!&7$*eF_#?-`g^Q@uJdAiI^b{qy!dtRO(-fjFNzCnb(CP*Wz^|>7<*onopD}# z&`a~$9Wj`On9XI{x$|bBa&KJP zy=*y!+&+uV8Gyt@SmcAg|0VnqA168A8Kk4-zv?*zYHIhk{BuZS8n|HpF2vhf*fVr) zXy4Nw73|-TB5asw>)c=i^TR=~5N{hVU6OqH=atf(?Yt_)+Zqef1?Sa#$_whCDzy=C z_29dpy*k(O&#NUgNM)$K=fd0a&u|qPe5*b0S?|Y77vODbx17?Q?Y#N`arx)fR?@Mp z=3MYy`5ZktcRw#q5z^E>*LejZVZNHnHQJ8C^Qwb>88}Ni&a2>ZQ1WN_vUZXoi|yzEmlB^>azxni+&O3xgTp3~K8C!23AxkgqQDs8Qep*;$mph$J`Fy z_4Y~@)04wIVJcka4EmHY^l` z_PJ%cg#W=`x3>Hw>m<1V$xW$UvBteda#ND4l1!E4tt3}vdEmNB47--uEOLy=G%{2C z4i3V{a5!eQ!-{ANpI#%juJn1FvRx*Q8EOCLMAosbTKhn;m*1_gly6K5f%WCNF~QShs1f z3Yp3{dV(SBI3a_zA#@$^gT6_<(A~dqc@@dYXgt)vlK1h(qQl;aRgFBP$LpS!cs1Kg z{2qHhUJ3RrtLuKmy155@_C5*95+gO3lfmrM1lD9+7j`_y;NoTma{bp>*zC>R<884wv zb!X|T*oT#kyRYy~^^N%cj1lt;)Es@_n5*xreJ}Fu-Jzg;%vs={y~N$p8!aT2ouZ@hG#ynze$nMM7`ntocc8Bzr+cqQ` zHCI%3?l4@u$fpJHy`fl}+NSqv+fCa9KZ@tAI6Vulierxs^bv}zb7aVu@ z7=Euy?i}84OB&0MW~fHv|I6_%fAetOpV~g)>|?|Q=Y7Nv%VR2;&+=2;X+}!%Usi(eF91`kFew8wYBV<9{!yIm~J z^TLCTK>>bwbfa~J@ZfmqwEptpL8a4o1E=CuW+6P-R*+7xobnaIgR4oG;(g#$o?I)x ze0cB>mC*b?A3V4(C_shag7&uOJ?s5==?dXNrMnP#@PCocu0Iuy3%)C#rJ8e3tA4yZ zA3XSUkw@nUG6v-p!h=WYmvP|1H#b^H(EB?d{o<-?W?!(~q(gK_K0H`X%THN2=us=* z=gEVo0bssr;g}y!+!jAn?hJHK4i8)brQ#Cwqa)a$IC{A=0EJm`2lV`@3Jy%*hKo%L zH=Cp@d3WHAq%HDckqM;LyWz{t0l_9Q3JdHa_raeA%Y}%orA5Q!H z(6iG#JM`Q~0h~9?JwaasrZXYz3k^LzZG<~bhKEk^dzs%W{EDz|QN*1LVKW)@%$YXf zpcC49a56-e;{zwlUl@o^c^(*}h4`lAu8QNkqEn97q>z6-RepTn#}j{AQ&w@}KtN9s zY!EdkYM2KQ=|_f+kw#_cecA<{b$h^-M=~jw9!)YCNEZVZY2{n9L#ahx`V#{$lkZgd zivzlUL$HW+l&sDR{T>c$&v*$MZUqcmG2 zpKIlM+cmwB%{%67M&9@A@1Nw}kkNEcUw#~0+RxXlpa$4s7&=7VZe^U?nG+|@({bn7%O#86vj2Ybqnc+X9<7b_{nXZ@8(SrD z;G=ZKk8GbMT-P~K{x8_9Egya{QyQ!9FKFSZTggetcJK@MXT;`_X4;gZfc4u(wjz89YCGdCxB8kqqva%3lBo zyaBZM#pxO=uaDXteY4MbGSeISS|*)h{8CP+lCer(SBe~JDF9egT`YCd=?gtk%ZNr7 zQ_mFfFA%%h8L8C|JN84H@pX4rl)HMkrvaQncMyD@^|otBW3V&y&DtfQZ`4i+eI0zo zb)K2{L~SrmCzwA+LnZNNoF{72{+vl5m#w}}S9o(Ru~RyUo_uw$e@{!IFJmvziMn?=ydEreelxgu6SYqAu|LOw^mfP9-Ou2i814_yW*rjCyzPB>_gc0nyfWbg5B@# z$uHRY1K-=Za)>@xoZbWXOTQ$y&Q6w}9Qbs_3q7Bz_)*X9isQP2S$L$4Z={c=mxPu!idEt~Y;-O`=%can}10`b)O|moH-8*nU099Ln!oMl{UGdQ1NA0=S6yIHu z9{i;LoQU>F9vmC{cRCMcQ*G+!PUZybX-H>eyZIYz9e!s>;aPw--OQ^l)|$$6nM2C= z=h^lJ%BOi0W-V$i-JczuOPWK$I6lpKI2{?8&Mvoz9s^|YbWY07q8Fh&&%~do9kYJf zzhsB*{nVd5dDmk0M)n5oDe>y;n4bFYaOU?pN3pLmJk$*KuKl^s8QoJ(l>gJfY4f$( z6XsjBFPSH6SyO;wmqG71U{+GEm&$)UpnXs6=t0La-9Cx0Oro4S%*ZO{9X#~rc7{B{ z9UnZq2gxDU^eMw_f3*2{|I^OM#~PU9i?lD% z1~cUayC0OX*K6;!?`ga4d(mEd6q`$wZ~HwM58dz7PP?n??sTwW_-7uTz6%+bBblwt z)#|$U*!uw-*68cdmJ|O+d34ucMLRH4d%sb=>+2pzD{?T(+QG7f7S?xrl!8_-Q@X_FIbcUUZ%5%&)si;~sFfR6`@FcXv4l(En2S5#Fmm z$rnZ6jJ^5hZ3jc!`m@ch)So+N?(?<0L&Lyue$%8koT(h~e<4wN!DTci7 z>huW$ zfOe8fRG)_Je(mGfK_ zZ?BxU-}K@-I<4xD*P2@w-i|5%wbq=!-#{(vBdW!pC5^VW6GyJFUu!ha`q~(3SZ?Rcxj4&NHE_E z)=0nME1i|Q$CtyfgmL9x#^3LRzFe@}e|>VZ)jMR$h^A{@1OErvjsnLpTUSVL?q%+! z$;gy6%CB^EIdVx}m}z6(iM+D(LTTl$Sz3$xk<1iEv8yXWpaz58B&HNad-2pPw+ zN!P{;O?5R%-&H>KNib$Snhp}YAunT49@Aq?x=JedDP{0oknT;h8fW{4pDbbee01sA zZ=UUwvCl6L{uF~=NS8L?>&IT@F1CvbzW+#d}glMsSd7J6*xH2nEj;NQPg{*nGE zp|1{AhQ2sd7J8h!lMg}99f6+h#6MHfGk9WRPydPXd;4R3?+zu>Xz?JKwcL1$tp&Nl3s>ZMNbgH@XKS=_%P5YXa;i@r3a1X1vrZ4yhOr5JfBEG# zZbd2dr$K91AyIeCeiuBo_Qb>z>RJrW>f!he_8l}Qn|_$P=Y?Ol+w=+SGPo5b15-#_ zNjlk{i6yt&xN7X7D6We4F7dJCPc1D+@6|@7n?n6v+EMK`n;E8u<4*S|AE8aM&wFI3 z8o7=t(&#;XpAkM=9qlx=rYZ9G*`_+-QYGMOvY`Yop)H$zyoPZZg03_4nTkof6c*j_ ziR`XBRe$92a zt2sRZyS7t8qco`h7o1u3)tvf8b~#J8Xs*gqJ%t}K|1-?(40Auj{LV1HGpvCOYk)h} zAI-1^tbC>$0yn%Ydx|!l#hnW;9E!hnJcE2-acDqV;kHpTiiM~NV{ocr6cI&!JJC!iN_zR@P#L^qV~u;Cv0@0)w+&M@klV3y+e?c+U4>1egc| zB3xd$N{4)4>9l;{fltZ@R}n5Q{}pz4*@|7{`#LRT+qDBFIZ zp6@)1uX^ZIk}j#7;GO@;u)5Y<-~^+|6~gMmrFQb3u3>f3H~a(-7sBeR^U5OHrj=g^ ztB;p1N!ol^UFjH}oYQyp{X$qhU65`(SY5gqZmu-19SRo0>MjMS47Hc0=h|Bcs~;Yx zz3t>tJp(shxHapzgdeoGmuHoy{*ilthzo($C2PX8&bgpY@|of}cbIfLc*)W` zC#>Ge;9MINLfYW55LU+&=XkJs!&zbVYq0N{Orjo>`@gyY>5=P-Tq&`@H~greMKoj8~ZCH8S;clKYeuB1$OZMvh%0Zy(gGY_hUJ)7W5~Q?ZBgZYO8nr%t>K~C~kIJI6t;ygX5ad*6NRV9vlgtLEZ$i(Dn|iluNlKaa$(vwbC6Z31d&M1-=6JQdBzjKALbtF>4W?4--oK z(KzYEJD9#>#2mT2g1NeDh#3q1@sRGMa*kXcF(X$-=nXg)a2UMuci}k)Bv1M;*=OFS z^pz%A1GVG=@=Yb*Eb=8$T#XMfju~WU!XfU883Znk?Og7BBioK_ZOVz$_to5EQc_hN z;(3VsBci$oj4{nH7cz`{hH=j@?it1%p5J2`#y-Q?TbOk*@;;|aetnpAF|GYQev--i zzd@(y{c0yJuv2rN7qtJ{hdxsfK3EVwQV{+@LHH*H;nxaxy%r+32WX+_ny1*B|L!b+ z))_F5h0ex;NcPp)q*e>0UY9QISo5BaHFInalmL^Yd6M6cFS_nw`D}U5$)~fYvpEZ9 z>X#49bkz5WHj;Dw-M}=zKEY9IN#_nnk#(XsYQ6=|?lc4nVVF|RhZOJWGMiuNbjBCL zFrx%OB60ebTp#H@4DV zm7(^Y3x*k{ynGjYtDTp@v*O1~7r-!Tx17?Q4L11zartz_?~#sansdRoC*t=)QT-=yruu`zBGN zFVu3!AwrSBJ9W_K++l1Z4%0uLyjv7G$d}7Y2981xlCD;D)pG1uW0M&h;W2jvc;c9& ze0;R55_wjBnV9=F#?s3ltNWr;2Q4hhJ#R-TCxp#g>8gl^r#!TxmS3h0+E_NbH5r}` z>`+em(7aMtAd`jNO4-5~nTXsB?<9*O+1^3&yX5uC7#UI-vgJ9QG!dXJ7p_b-(!tZ~ zwi($Fo}5ad_w*p}O=%(me1xoODEr3n+;D@#`xX2TBj>Wx%DJc>vb*kHTY_!iRVF+o zk_QW|@?ajNa@^g&%k z(Lf3xc^)e>WYQNk)K@)$PJa6$*%x{De-vxGEK`~j6E7Ojct}nYc|RxR)0YKbBIDe{ z4Vuv{CSD`@MiPgE4w2v!vQs5{g&W?wE3_cZ*nC@%Y|Rmc*pt|;1W^?~Sc=Yd1FE zwQi=DSyZC;u34u9tGZXeCJ1ut5faATsC(XaWDXg#JqDrY}k^JyYE{;le*j^XCvV$kxb=8HhyRN$Ng$uCe?44Gd z^&WtDzuq&*&&dZcddUx$F^0ks+T;Vg&1aJnJ$18u=%)9}haTD<#)qD|1z+FoQ<(GZ zhw_o(ko%ubFV#8@T<}e)+gYDFKzC_LlHdI)!iN7qp4T zadqU{FECwzYs^+*IMFvh;62)ZeOKS>^?mh^Tnz{K*>IBkh|9-G-b^}{N6rOxm(LQ& zIms#w^O7ZYPI_q>o$;=q5Yh&ZEIrP$Q5U8E#*uAke6yv0dVe|DhH>bnbFRMnf@K@_ zgG?3TBoPZQJHV#E%fOhEqk@&2;}%Xvw%Y}^sZJJgfB0TAIXO%mvcq*x7z;l`QT5>G zW5Ca=a`5vMV4~{i^`;_ajPB*AVpph0Z!Hq{?!YOcnfsp&Crln=hKPz4NJF%vWw$$fwL1k zkD0`v2`vF%qv$e~e*(BP8=3%|f74ZhH|wizgr3@7DSHxA%+s~g(I?>2YLhsa4t1bU z5HgbcUlVeHWz$jaG6CK_Ssp>gq1xI55H1wx-hHYf(i7<4ImU^9+VpUx;$yX2%vALC zBH&$&N7Ytj7n-4wq$(?s3kmSVMHY756Zh)b%bfz%O#2m(kecG(2Zo)|)*RBEO2*9V zPq-;fXO50{C8kGjV|~az)QFX5r|%xo-MbO)6%#!F40%sycRiA3qQ|&DTskv392ETX z3hIe2Kj&g_fAo4Y7(_2x*d(qRuc|{Y?>DC$KNG={YQLZ{& zG@!fOB`f3IH8SW_*L7-3AYaO%4>Q7(I_U$XF6Q=!rViY3M*$7pWxg|yb2N0fhwN0n zv^U-x(mgqmxzSqiikZb*bbp)hUCnXbg(f>B9?rB19Jm#ChfPupo8hj3I*+*Zk}Qdz$<8^Pbgc-1hKJ;b77S(R!%`r|QkS!^hgL+_}O@>`OU`LCt$-puVcd!N%C4G!iR; z?v-?{v}SN+ZQz{!Xu^DsIg_j~2Q=4X=#9Jt&4Bys`XvJtW3NzJjoC}!d@g-29T)Lb zv<~!L(IuXzj2PelGX8`gyx1W8i#3f-=@+pf_Js`VI>Wj~ukQ01)^LWkondWT{Hsqq zfb4iY0Db;kvMY)o>vDVm`+BTwOCRrE6OJ}UWO+OsEgvyk+ugMkIMPSS+!|y_f0Ox@vpA&pv@z2{~cvk zKH^tiwlkOs<`KerE(Hh?p7&(XIDEkr&lQCKt|0v5g7E2raCu&bsk~_g;p+>+3k$-X z1>wyF;g1xAcNT;{TM!<}3kwhY8sSu~&Hxv`W0{z)!nI*Bx|SR7oHJW01h>yz!EGAd z2>5r+OnTUwhdz$Ub`~7b$HEFx#WAcP`zb4jZ*8Ai*?;dFS~h31UpJnKR9n&*<96PM zJfSwP%s@%O3Zi+hg3AE79J+JEs`ptv2r7==!k89~Dirv2Lhos*XLx_s)p;iNg&&q& zW=uQ2@W)s1i`dX2oF2varTD@pr8`i>MpmZx_({Fzot3Wvzm$BA@XJ!5Ea8`2U1{;l zF8Sb>N9B`VP?+${m*s<)xU4DRmr42Hw{!7TpH_uIzS8ok*M9j^yh-R#j?1GXq~w3F zti2`kdrh`@mmUl8(fJdQ$>+Vgf^MP$&5;rJUPAx>LMlNt_cOP1CVY z2ZfL}cr3(6b*IDG@zFO2M*b{9dOm#g>W0P(mfv}n^`DQAN`B}3_$W5l8o@`oJ9%>B zG4RC~!AF1O;iF7G4<9v?UIz{-y=CE(9zJ@5sbJFRF6An-##nqb1$>SYkiwQHkqU>Z z%)YbWqof~$kA5hJk5;?a!*3NoXSJzDMn-lfJYLR-sYlkF_T=HBBbJxr;i4mEJY3Z4 zgD^N7I5~LRmi)Qb_Fdq&E$~p<7e!>3J}o}hF01RTaDa19u1ZsOQM}kZ$o*&! z(pSxq>nZ>S(EadP`{A?p!DsD7Utc`!u zA`PjEUi2!`RnmLt4LJjEnNUQ(To1kI39sL%mv@)+Jdf{+ZOT|*+&N8uyPq!K(r>~w z!WHxB5Y^FgbZuncp^0)9vR@xT7o?o^9!B2#Z;=li9vbb}k9qrqmE#+MAK5d|V2&UI zxZFI3UdJ)Q^wppJqOK?|-Hj?U&z3WqpSF~u_s>D6F;Tn3|COBvJ=YQE-dVooMESOX zBOflOFJ{%igPfbtU7YM)x@VF7uA$ydgcdpJMaDeU&zu}MRQ@6CUiI~uH1@d}=P=`D zqD|0OZsg1;j;mhk`*bW~);qxQ)KNTczf4&zrWdQ$e+#jl71WgLVC(lnuD?4 zf#GWE$=>J5EBa&4Ui_{3PsT-O2)7ioZKS7Y4y%8lVN%YBrK5Oj!Lc;8RtMSvYjWjE zhjm;8t*yt-=fq(nd$Z8ySgw?z?^d&)np7li%Al=LcimBmZB@$M?ajryV4by?W97XA zsh#ZVDQ}Hx%`wK?gSDkQa%FdPJZtDS=5+a=4M0Q6q;`1qX{5aB!#{JH4_^+A=@^qsG(gch zWi#w@bge45kEDh5GLlhTjD1^i$bvZ94}v)5&B=z4<|XFkT-M3y@_Udk(fn9$_t_M4 z`Y)j9OsVJ_XvF3Vb3dduN>{EF8!7rmf_rFr&g?Vatu^o4wk3R31lbX2$n;}sS}`_E z_S$inQn4Lc(mdu&5%MAP_(lt5JW<=~_g5+Vz0xG0>9zWD74#i_ID$+`3zYA4w3_|9 zmY@2xnR+Uo{={BQx=M5E{nUp#8J(4q>B!!F5%YOF^L5%)C9NMaGg_yH8ps>rc}m5- z18I~I)W+E2i=8^!Y0Mhvq!ZxFVow-5L)se}vQ7QfZaK2X^Aeg{+CTru{AI*jGt1d1 zBXjF$Q!pQ^%t|NNSFZENz`fepqB~1P%S9k}+8@#u)jyk!b2rO&_U?=F_T;_ZT4OI3 zT~_64y<)TIkxGpLchK5?r=L{!=^>5J1IX>{s)^Dc)6LiJk(@L4j62Y0k@3-N_ z@WE+pAQ^Lnv67sQGgsprxABshS!mb22^G!7225UiK1Q0OnV?PjHh0|`#)*4?p)Il> zLQ7AEmpH7It3o$e8!aRKZ>9W`zidL)dt_)h>&(3Zn`{xD+2ik-6Xu>8_H)+$P@+wD zKRfX|*eO+388S+mYm!mYT+{b7*H*D6G|z(bGT4{W%#2v_de*{|*ki$_jK8NpK>8TG zk7h1^3z=!NbWe}YO55M?OGeMY7xMahmv>&#-`TfDfFFC=<6F$2Y))&ufGK6iMzEFW z@Z!OEWdg$qCUDtnXr*{5r?d0=ZC&h{y4!q)e3AvHE(zJHajz8|a6>4V7n%>c_uShD zS9yCja9kC$+?xZt%tN+}k^M*BRBUQkS0mRzkH)W0&NGe~UgVmu56PCB_l=tpiRd75 zOjm_|jtyn#xA%o_6ikMlu;|p#b=uRS7{oyrwZ86-P&2lqBhYv?XIHdb7D_OBAhX7NtYx0U8+bAUoMz{#=4db%J((_VeyU!hYwg@~GgtTM9icb-^KvEo z>zhiP`10(?otk?|zN`H$!Ps?Y=f!Uo+K22`2%9{TDavM_plzSGXWHoae2?+H-Wy-W zCJdg_`@;onL@TIeM6mN zj=?-Aj%!crH+y%hZ4R(v#QZCEs{4?u6MS+Ucuf0tQyd??juGVho8k}r2Ydw^h6j`y z_KK&`^1xZWuLTm(LEk4JXP&k z?(-fj15A@3&-{>cpe%M zvHT^`@&o?TYhcyT*Q4$?&#U>(+dRL=ude!1yU3pr*7Hexg+GU{er)%{NAM-{wCGay zb>jb?aNwdm{5%NYD;y$k;1s^JARH?Q&nyVfD+tdo2(K#$zrP?Xn>~Tk_y3|GT*#~W zLP7j%<;}bny_xYWFTt%W;K+F48*jaH-hzemd@hamZsF|<7A?K5t!=?=i)VH%+t3|w zY{n~l43i^I>3QRtRd;b4&{bZkW7sNZ(aPaIq1mMI5}#WX@V(16bfHEaNCb9b7=TNg z#dcZhH*=%J1FvrI3PV7UYFzCFMuh~I&YA6hY>Z@~qy|^6=^oQ4%ek?0R<@6xX6}mr zQW^2)`AhP}Z}EM^Y%JeJ_pXTVvRnQnjs*G8T~GMocqw7{E^Fm;9;D^NcR3`VIn)A? zUB1187(R?_A1T}?AEv`A(2W&d1O_C3wS3YY^22LcU*gX|?7=n#bbEdgHnt`5NiPR5 zXk6b<`F^{65x0LQe4O8o&e9-l4jjW|9bGtvkFkg`dWLtG@Kg6F9Yb*j-{#r8vWT{6 zB9=(#!HtZ4i-X}P2{Iz_;XI*)%OeeHmCS*emZ?i;rV`gJnKrCn`!@9UeMlF zp7Z%Oapt1SJGGZ7nQQOuJnQ>`gY-4V1##`X4W5-?ymXuVbZWPp(oOUp?Z3*(jDU^)BT(}OZ|LQeDlBsk7`~pW{PW}Uj~9i_(8fi&3bc# zFYtFk{FvESH70Gs3(%*&p8+W3$NaWw^q$TC$A)yj6C6uqwZ1y^Defe6pm`L0~%8pc`o#e?k+`T zupL;u+0r``?a&Zbi-u5om2gq%u~@yITT8Ya`GXSr`^9)Ow(IModqc~?;dX?!-j{~H zBYc6<%MONGYRnYpqfmx^U-sFDLruF*Ajf8=6xRf4(iM@KPgR6_)E3~Vn z>JPOHgu!)0i~1n8!XE%fkiN>N(Hl{kZ$p3hLZjxdhPEuB^{zc-H1WK-ZL@YSR%^;3%@ zZrz{FE+_4c;2GgOeB9^9(Vtc3c@M9lo`Z~8(zI7qyXf?oKduxHtr>Ys@Q7p#{t@`X zeb7`v2KY{02YctPNP;;N=U0S{DDf{6?jZD+J$1E`h0W(@bTbX;56v}?_VPqXc(!;T zG4R79uh(}18NTHnEyaaq?b8hTI42~Ic|biL(Ou3R7EkF6RivuNJeN&JvUhv*A_}qP&A{%k?wgV^$F=yM=I)Bqcb6R0r_OZLk%@Qa z`?J3Z@DVSzBn>W<4N_{4%*FreqG7am)ctqBH`0D}+wnEhJMs10!SWG4A?9D;)Hh!W z0{99aDF{DX5dK*~_&*bV52TB7CQt*weLSH2j0_%38$jE>7?Oqky)yF*r{2D4*}CpE zf8s&Uw_$&|vwI_uvM->O1K$tRAJTbeqqKT1jq>Tpm+?zDJR6wBf`1p&|AH&``M$a_ z2VV-v_#XsM9;JQHUNgr75HARxoHggF zt1lFue3=I2!;_Z*9f!>G@pM%fS|fbr)D4`o<_@6oe&o*k#W(R}Lv}$+<$jG+F)i!c z|1X?lI#ZD~Ow+`(xYu}&{l?EJ$IiQ;f?-a3wxpa3)4EtLBzXTKbM=^T#JqJ(_)MGa z3&+GyFiXaSFV3?M&OQj#bgv&j7hmVnf95%|p>x%ywV3Yy6E1Z|Y0@W=Sfkp(iE@r4 zUd0_jHRsr~|Eu27tbJI^lI_U42L3e$fn#}Fr}?0C!S>tbz0UnBPOg@p_Qvz2n@*bi zeOTq4Z6Cgh_x0fa!JgAskS^GVwZ8^+;L!~7bNK}>Xh#b#^7r9(3RW2!KJ|gpDSQjR z{PKng=er-y_TxlygCO@`FB6(8#lSt4gE4ZEinTb1({LEJFG}{`TpJzYLlf$^V7x}CE#bZD6j=Vc& z;2ny8I=!ta6kAPKm`ApGe0cbet8X#iChm0hu18|XXrk%gAA={(IQ3?;Q)h+et8bx~ zFmj$;12S8*QFMve;^m!xh8iS-d&)zm?~yE5qW4tACl(mOjyD zb-F^Ir?9iQbHNRvG59UhDTm))pe^D8jf`1W2S$mPZQR(oLEHjYH2uzw-*;Q2c$HKI z&laZ(X#^*n8Moqg_uBFD5jWT7dks*|=)R;n{pRuUi;;{Rbzz{uTStR@uh_hEO!!y7 zo91JF{+HNq1@|1vE01Y*hOX9k3gR{UM%~5cMFOeZi;Jxt1)WizyV(4chs{Bdlj0XV z-=7zLt#H@+j%D4;W^U}>Fl%OmnF+YGX5Gs5X67w7wk@2wZ26j%y7R=$?CRKH&~Ccx zuFiGcX6CAOn`SQS=1%41o4UDbWW0H3@$oYwSFA@@%Bm0L8?*CRYI!P9`H=C7ZiI)nlL61f-aX~QmVNUjWx8U>r z{-_|<-nh!sN31mjg*#IuL_bdCpviU2& z4e8`6$D=dsdPJcB4J^fvar~~Pm1mmT!+kL?bry5}XJ9*%8omC>Cf)y7ERAEn?2vJ+ zec;59$>tB4?DmwC-R3!2FYh1+#dt8em=jfrv#{V=Tf2+H?Gu|xeUk^F>vvAmBLLNPYEW01M{T24j zUKo_Uz8dpQ^ji<&zjdFMpsQ2n#ldWbKXzGcs zkV+FQxZ-ot!J3-LBln?;%ekSX>A)`E5HR|C*cI`0zvr7FJ;zS4Z2l$~*yuDH#lxl8 zqr;_I^thLp-Q+!W4+$IMS5db6d{Fod)GXQVPs7R(iw{0g2ER}S zzfuNA2}9}QA;YtHlg$~x-bfl&0e*Ss+{?tZfS$&ah<$YlGCGso$*@{D6XKl>T*l!j2f zlJu9LSyEtGa;}4D)>?y(`R{N&4_m{~+XtuKm2UkVWUg;BUOdjzRPf!{hwYz-b$+X6 zYNCM6v%E>MuJw1Nn==2mgzedFO)fs%GnW$o1h_W2*3_b>Ln}YJ4ryhj*^Tc8ozeTe zyH;{szj`44xwzqMY|c~HR;T;#AntusXE?QgRfSvw*J}i?ac-Ghr!!Nm?RCfT{Xn_u zyz|hRVZb+});k<};C#>Mr&{cVXMAIHxp!tIlQXymPM9w3WgjWS(WF zS~frrZ%ya7I%!rmYwP>WJEbM)^7QiV4;g#Lgn{C(6$bCMXZ3EN90wd*H}W1P&#=B( z&IKPWE#0Db+kAm%r244u7Va+_@a4p%1L_m?&v^Z!K2ab31pnmfzd6psMV%ptNfzf^ zfclXiWApJM^jL(Bi_mcq8ZJVcMd;YBF}B%r0e9~f?(yM7^5xxQ))?Cu(EpJP-p}t8 z<;#h+klA57e!Z|hb-Ok5G~LRV$dQbYcfUMHF-O9$qWri$D1Ep#_~#?F@%gpnmoPw< z=35~^Ecoxr;KOC`TV-%8+F+~=%4Ssa2+l86o;)G_Sb1<_4D{Ti(xksa7}!c`Z(qD_ z^ zwenN@DEtk00eM_JFT9`%q!5Xxz_x()feOdd8$Kirs|{I{6NC zr`ue|+pwIy)PuoZ>Lti(J2F+Qp^e(OSdHAaFgK-*z0ch9$UFD;{j9XBTW8^uX22Q6 zyUmgPj&$w?^D}VJ<93Ei1Kp#~JN$iF^6>cBQ(iiAD*5tK?>Y8W$ChO@o!(zPD}4Vj zc^|Xymo267-+#=$e|5x8$E|knSMT)N(2LT$Ip^Att8>0y8mhT8@nOcvH>`YB#U5@` zLb~S*Ol+3gZGrg;ed3s^#^K*IJ#@l2;Y4zm86$UzC%j9!>$tOF;mY3eGMC&Ttp8N! zGWmU-CAYHC8?#mL5?4VN#RJ|p$S ze`rsB{roSU_xI<1JaOqc)6Ty9toG{u$??f+&-~FDcb;*^89S@4tNKahmns)mUQ~Ig zVrRu^2!zxj^ZS{!sE(Pr$f6TuO;0ipAj0UVlnU9Zx;GbpIje*ZL8zZpv z=KgyCSHn=X#`u-UbMfA<2k=$I4%{^=GfGqFFS+jpID)^!_4)|>w_Nu{;P+@v(QX%? z=05R6G;PJe;~qu@yX9+_eWHE+;w7t>*)xu#YlB<`JHd!)c271%tUX)J|JwV_2qvy4 zelPZZ?^3?7@PhIcD<}M`u?M*}=$?so>iy!L(!ahDHRhO-ZJ5KqXf+J+;G%pj@i24! z2A)YKP5h4+Xc$d$fHT&J{1<#r@`;^ZsR#S(l zY$*GYk_)qmA#4{V+a(N=zVyxbn=r@!tPG@Ef+fgrn@8{L`-VVd>2d$*>s(JI%0j$W<RGofUAE+o6_+hT zYl}nwm#ygNKr8;XPALGkufBcF3f=t0Cx-Fn1@%Q3LjF=dFRX?kiB{DFqB-FSE}s_) z+>3^gKFjBYLKKPX5Krw4tLO|L7q~c;d0~4Qp2{}fys(@5DSlxH>)XPO=)AB#Qr{EJ z3onHk1#wu9JaBleM-$F2i!j!+~)2ctT%n=H0>DFH~Kx!KHRbQ4{E&wUH8FoJ)?PKZA8mK-Rz+;FQ)iy z=EvR~-CdpCmUlECR&!P!zZ=#c5IQ-T+JfsIDY*?X&cYulB{Ga9slxEhp3t~T#E&%F zeY8w~TS?ztN*bG|?3W(F+vFp%8@ex+rySb9Yi94x+g@Y+XjXInAf5PK=xtu+K(Nuy%`jGGSeb^cF5_{b*p~vJ=?jASmdG1nYCu>7Hrt94a z>d&vZ)M1}7Ss;HGyL0p0X3leiN*Q|VqBo^6rFXq* zQnY8Y`C6UI-;BQ+<=;mgjOSwB1RwLXPa`qz*rD52`m>il@UQXzIjFY6cl%%+advOs z)<+FJcRhW{KB(Uh^rtbe;g9tZY@|Il-9H2W+M_xz zE<0-J`gu;R*Kh0GklTa2JXGUh=g^pCw25@HIx^|{M~w9IhuLFGx9oJ&Ii1masvGYV zoIBW&Nt)?){YmFN(sSP+?R?U9py%}lW!ov3J-P18!}gunyTtBgI&q`9iSeFJet>t= z&v~_ZU$G(8?dX1rYwQSir_7FGv-xseeC55^#a!B5yYejK&8aZ)&OTGydA9XA-^U(m z+!?IP4&_-}^UP%D@SlIl z)z#*!>B}zT5wk8jP@AZR$8|aQCpK>}P8*Wd>}^(Lc!#Xh z9`3D&A3j_ZT1IvpvAMQXl7cH3Ti^!)o(d+y@7AvMEJ^BE+em}Cse$K3T z(9fS>OS~6b;!CklhlNSXI@XpresK#GbG~gRL9?5TZ&Q4^nUWG8-e_a(gUcp{%lkvS zA^sVaChXC<+`ng%>@3K}#WyHk6@G>2FMf|er@QLnxlKNuLVKmsGr9QO*G(-pMP#RV z4*b1TdL!pGOfufZP`ep`ZvSUpwg-A_^Z4%TADj!0Z1r7gW_Gn<2%+6x1^^=A^ zCbl2rsRPjRBxq3d+z&nP>yCfcKwD&(H58ZM`DrtV` zuMe->3XN88)jm3Bg*I``{{B`oiuXbU@8A|6@8E!RU%y|PdHykM@H-|6ZTWP#SYyBC z3MWT-(R60};z8*6Mb(*cwJUq9B-@BvvM&0fadUOu6p!*WYwh?&yFRRQzv<3r9O}=Q zd34vY(&w;+@=Y^}_oGp~{(g73R1e;RyJB;ysCN}>@Q3XfiVd7ko^Lo)HZV3f48nf~ zfuC_k^LfhhD!orOFw?2ckk+Rt@0FByD?IjA%Br@zgt8{<;^xO$e@tg%$4VF6r*WM$ zm&N>hJ19qX*Kp~3TlZrJJLD74mOG_KYw-7CcQR{n|JO0Ss}CAIUdE|}j-@AiDQn#E zRI^3p)t(r)H1XU5^dRnanj^Tv8F@w>MIXus zTG%p7pN)BrjTQg-v-Ulzb2|4T?R8)zk7FvgczA*Nj`orb9?`tca?8GQQ|e4pV63I* zKJTVepGAiFY>nO%cOJ%`%$;Uq+BFw4?;5joK=a)c<~#8cJ!cJsam%aC;Vta1P_J8I zJ+7nj%Z9i7pGoIsxU_s%0-j|3ePJ8s4a&isHela@z6(zV4s%a@s@{E=`I9=Q?xfE5 zk?(%$-A%n;RU2gFchF-z$#u8wXP4@eie?i8}hw+aBB+*v&EH8%A$dpz^vE|NIv|}=%*kTT0W>2%cfF#QMGhj%IEvqBl}Q4 zcx?LXqVLUDSYLNheB@6z#L@G(m34aEf26#7-A9UlOFESc?##HThW~#*6T46=5!kkA zi<#7#$?SV|Gv>CU$5Tyv$j26vZzlq7Gr%irRQzVLe?GO_S~Tn7K743-Xh7=#al z8wrBbW$@JzSSte`1ZIOd2o(DG6|7TPpz?PxezEh2+9JTJIb6xO$e>*yNi255pRpH$zejr^h^ ztZ$y1;kBMmgm*`PH(N*q;cf6Q?SEL`ZXo5S_EC5Vyz~4^`>$vEZRHo;(|Qd&)gugH znG`c*M#4Mb^>C9R$=vU^i_)o0!an2DJODydml~b(a)L_n(WMi^x59XQzYdo=c9lx6ODm_xh= z|I53E?>2?e8kS$3rfl@?)t1M!^YJpszdqYdcLq&0L@XKObm#2T**hDdaepcX^b2#c zy|G^Lf);-k0VYl#ApXSYPIxx|W& z{zpRyeu7)N&IONzHy)4wJ)TE-{C@#YygCeFeu~33(X-Xuc!?NRf5QE)MiSkv1VIS% zE9dbC!23*yL>%I=-}QmnsnKw99)Id*r8Z2&<6Ct$e1YZhS{I4(c%7xznnqLGnP&fQ zaB`__GG+aKCf)W~Y!1QeR~GOq61z(_i!02R;rZXp8otwOlcMB}yM8dj^Pk_fd@c}Pl*jA6%Cmef$d%zuG#7~1rXnQ_>(R`; z=v?snDb58eRhUQ!!ScCaBE0gsKzOGz7s&SstYsvG?^PU~3t)(+G#A`LqWea28|Crk zbHSSv&jnY{8l4JGD(}x7ahZH_d4Fb#^5lB)Kc!G_PEGfLy)O1;XJR{JYEE`Ep27$6 zlcx0kSYxbFel2tKlWCsIdiu4fxLpR6>RgT@MDMmgRlG0h3#_rL1r^gfxUxD_6TR% zy@NxsIM*q&sorH@K>G-liH#%kUSjy`b%$fVO_yh4y9bZNUMgz+`}Nq@29K6v)8CAJ zWAISy@xkxL9vgfmwrB9=*jEQ%ihX79VC>HZ55)Ejo?({EJR1A!VzYU2u+cole%jO6 zetBkaA^z$-^W0zsdy+}>{NTBco2g*$fOY$v&XdUBEh{%Hm&F_Z!0uP>$Vgv;(o1~8 zM?JnZ%{B3uJrnHX@ukJ{9hsll`A&8ay_&*iEyDQE?+Kp&D0rUU`~l7w&%&o?4!bOT z-)$>k%k{~+Hhj_*wx4T;`1q7R0z&m7%H4(?mKeGOTo>gJT6-_Ia8I^ZyksSN^&Qx* ziQQFu_~Fct-w&1@u+>6jX?d3M4Rfyc@&k!|8}uyl_)%2Z=+{SEx$o^h&(t1%JZAUr$HB>$_DwI9)=tm% z^u+jPMS!W8v&wkC`$wj^+xu_tGwJQ0besC$XND5znZm5|$*VV(&T(ct)f3bHkMu?4 z!_9Axze88#Ay3{h0cKt9Kjf_(F9TJ7-=3zoK7gCQTt{7wEvj zcDcpz1{(diZ>}Hrs80^W4v>Ch@yoG|i8o_^&$Um3UP@oE(#JqQAk_@#>h7*&zwkaw zUwwU>iCfHHVHe2FoJIe&kf-{um3|NVPkmR#ubN+ipYpCD-a=aS>8EYHZ}5w>k^IkU ztT)szHM5wE^yo#LI4ZeoqEC7X~;U`Gt86$DXB~{JfqD@U&m4_jZ=L zGS`@@Og%mT_c%{sd%)wtfkD+hMR~X`?s4}OhhtAe>jgNnudjeDq(R*ioUI>XpKXXX zmwu7b$R5&u>?IvwJhot$w24RR|CEFO)SY{r7wWS4ynC#)@7|A?1NR;)eTQ*B4|#eQ z`^sCaue_w`W+Ld@D!S9yPUACnG>@(wl&yHA^f7c<_T8J|J&w6)`U2|IW!6m>9jnc? zmwBo*{8m82H;{+u82;mC`z4Pw8)&p>ZF5o<{|s9*j zEckEi=))?rsrwAmlf>6+vCTYPSD@`WV>_&V)0Ut24(Pu2 zDv2!*eY>=PG2fjzdTeP%{!7nvnjWZf=09M0M{*fwy5~QTCawtLpO(66s-31jmE&yQ zne8#=^JY?}0-q`sSRC_GHN3Ao(`KHk(>~~tV_kg?`VivR%$vD?EY0VA9hn^CP&`I$ zM5y+d7h35b>CLIXJm+Jy$&HpbrW0#jjj4vj*W8=oeZpJFkNxFj7XBq(a6i02ZJ_(u zC%5fduHV8lJ02G5z37s}!QX6NWvAiuh`Q%CRskF4u1VxI*_@XV{U~;M=VaOz`<5ry`5^{!u6|?}e9}8))}^#oJ8p zRMCX|^nT^oyeaavj$AYKLi5*-5$M90n=GHb#s$qR>ba%V^D)t6$T!Znw7DbWvez%ZF@t?_@t_>(L!6cX z=l|hPQaG*VFQ?C-FN7yv5#n7N;Qctj3wen8GYcQ_{zQ6w(00#*c21MtQ+B(jzC>T< z=0)g3+^aDqew;-YGUP*EJ>U2BPg-7tUtHT~HPEYkU9J;X8SV38vq)=Ss}c!u_D-hw@4N3vZyf3YjOCZgqr+8+6cF#Y7eY+a-G&b*^!sgw6 z>i*nd1{-)YX$LZ>&Y1&)sRhypnCkGH@$f7@VGk5}UIecQKKfcu!M~p_l2>txXUzU< zs`ySxT~O<-gcpCvp6wOCocz^L& z>Eh`#(JK_+aLvWjWkXwYsXvy*vlqeN)#qQp7fBu++WpYAoB5#SDQ@FCvHi4bSKYvazskfqage2#G;TaYi(52kt=-#J_}uAhh2zX`2BXKguxU+mL2NBudhJ^sk~IJ`^tzGqUu z0{UF()Mt#<=|Z;jW!V*ltjAbxxgPu}&T`r!ov4TQ<#+jk>6)`-JG>$B1vkC&F=sb( ze!BH0N8f`jyi?zV;?3{`+qROc_|EE5ds>+*mv_^tF5{)*rWRY}lELuJ&b+;!`aEar zf=(K7Wf$jeySS!4&rzTK)Q7god1jbAYxDOx!{&v$W9WN1W-@cYXC3B5$={5B)s1nJ z+Bl|e;!WxNwbW~^bBnFlXCw7WOiyED-PWt+O6RXsFYH2To^#<47h*M5<6YlXwjS`) zDFw+>Z@Z>&9(0Hg@*MM3>lD*wUM{LljJcrEF>RSb>zURciu}=K^I)PAxsdv#H>@_| zyA8?P@k^MmDRfrzT|GH-CsUi+5B*o_iu|B61!f*{7dGdiwXM*TWG>{wLZ8{kSpwg4LLtA^~9&aZ{ubsd|!H? zyRzHKPyM9w(s$#O_gTs-x(>^GFrb5{Reth%ma?kz zt{Yhgmu%dS=x`@PXRIOcEpQ3do>ypvM$?HKc-BSR+x3NFc6(muE?BqMe1}?NWjId=wp^eZ|_%SGia@?(@GhukT?luyPUdb9cw^;<)DO zkhfhD@SmZ73V7Q{-p$}#+$Ehs%^Ne3%cZm0XJwqOfh@kYS-a6%O_4R4B5O27)@X{X z(G*#uDY8aWWKD;DI}|$-JCXj}Y3>cE3TCYC+!1=?UD|K;b%hqMS-kpF>sGCk8=GaJ z2Hki%bPLwC-`etfvcE7_mL5jIS+mRFt0>*^b{}*gaP_hctJZ%?wjXZ3cHwpHt@GQj zzxE^TO*dTMx^RBmiPNB}H(}Z%%hxWxZCU#qN}1%2g{?UaE`Lw|{cREOpDxO*dV$sHr7T*c>li1NhgjS-NaP;CtfTD^xInjfCU% zDP(11G{oS12sR@@zOT|FkoH*49CHp{dtvj(Jb&+fL_8SeUqwaWGUm^Kb^YeK{$AU2 zk@t%wezy$%ei{6;GWeWG11bH~GWa*j;Du#yM;Ux)8T`32xZEfFV`a~uErVYxgO8QL zs0@t+m7m4Fks!Fa48AS`Yj?gCShIv5CYz4}cZVR)e;asj1a1d@GXgIKmTh1^Og5{4 zNB5d0n>D}>M4qn$emw$j0IuQ}rvC%3=S1L*TuYxieEw;!yCX0kI_5|OK3)Br_rQn8 z#Pd*@<}63Z*Q{HQ25jeLfeX!Xl8&*zcbsPro8wq(&-NC!rx$B_THC(#_D`;vEzMb+ zb^7{2tJVZAZQ9q}zIJ{4(q$cMm%-=PtY}}gWs&Qbucl#cOL`ul+X=IZZi{mt?%Zd>$O zv+SKKM7y$sSa}Y#OFZdfY?KgJ5N{S->yMEN;_blFOCAXD_6B&n1!s&I5=?wBc>YT8 z{3XFzbPxm+%g&7Sjr$eD)DH$RM>(uM^8v-I>>LhYlnrh9*lx7?%^MU?B^|NK`wFqj z`;uT*<_-xaJ{mlaPx7A+3+BtXS}^f6Vx{M^#->jRu4kV}FmZG6yft{XM*Q12hR@*p2>V9nD{WU%0Kr^Ki&|; zTNG1|7U_di-e;;wM|lnst6c98S8|vn&O|*4!MKXJg1AL62d@_jChiwZx%UVr9uRz~ zF;564epC5QgZBz1W`WUErpT9A=~zy%>8b=@Mmq{7M&;DD|1@Y<<$pPd4->0A`r=S| zHW0_toRfy;6hEMtdUZp4${$nAHvi3nFQ;Dw6Dzpjr4;k7UuXUIcc^n17$!E*#UerD zS;&~B^o`WP)D$!e5*dBYFB`x-vY{SYj|Sl?lY&%ClVm z-7CXW*_3W!fKOyY8+cxDtthN-3)j*5-UaPKI<~%*0iN=_kzZIRF3t7{>YG1BygLHC z*~ALU@7%C4fy4TCbFKHPeH6X~4~)KA&-B~MFRB~)1bC`P7{anEcEg**2f@=q3&Y25 z66?K6r#6Wc#~g$gJQztB=EtxagSUnD8&CiJ^4WycXgH~EId>Vg_M_5mx#dc)p zO3(5Q<-^`e*Oo9J=~HU`47&|xiU;NtEQE`wE;@ttxh3ei`0Hv~A5nQ4<}N3XLp9#q zXj$&#{Ocnm`aa!VwaG6}r6c`;w@II7KY^rv`owZ*gSwDjYiBA43MrH|%%g=oUS(SE z$hhaQN>d>DIN=vrCpkX5@QmT{Py9Ql{QTX2R*o5)$A4G;>(kT!gP@UGiKV0Y z5V5Yk0NzWyEdsy9wSJBK{-t#~?_Acg{`R%)w|9QlGo?zfG8@wT>vqV4y$FsFLJ*PG&c`Rin+aZYepPqzLPvx=oRi4-Li{^JE3PhgW61nEmOoaD|052yb zg7C(hH(9dppEr{< z*k?i{;t-E{bI!Z+zjDRZ!8ChvJ<{EDKy=>p{o-{MQ`kfNF7~kxn%=<+%)Xhg;QOwU zIp<~UA|frrg5r&r*{{AG8H!3*Y9FR|3ws!Ru6?PlfbN~{+dX+2<)F2{vaxtCK8ne= z=%-;m^9syqDZ9^KNU`6V>f=%O7U?xqF@Fu0mJZ;rgT07-=A{n^@+5GZ*^$qw}}!e|nOc zJ~Sz|??v{uhAxOT47oAb$@?6$BIECk$2d>Xll;Wb<8w--cw^C3{U}HB4fAFxpD3U^ znNG&&qWr+m$X7BzZIYdFblg(rg3L_x0;fLHLwT}w@#MprueopSVVRli>`W~fw^YJs zUA^nZYS4(GZ7(!S?B0K=v>_MU;?M1}4~{(xd$z*&V|=kYWixaA(7CZBt6;K4F~o-~ z`?;8vG?Xw*0V1=q;i_~ z#o2eOWS>}d(DlaiWS7LZO@Z9A%l6kZo)b5n$Uqmf7t@jPh7$0EN!Y)7T|BVsd@fQ z?YKqzH);3a(?R2JhDV07P1qmek^Lb+EI8WHg8#hi`STH2-1a5lxg+=BzP~)X1Y>C> z5PvNBj9I=sZoM>E2R&|ylNGx$F7m7ok`#3v&*w2r$@( z4J2Rcy-HUulO5*4x49pNFu!t{EJ6GIafn15;@LqTIn95vwT#(UA*(l3@Q}B>eri>< zHI%oSyejmrS0Zz*9BA?i-!jlz@dExkkbA5-Y#X{}_u z@6Yxsc2f5Zl8ydmYnAyPzi(!}p$m}BVpmw%>_C!oVh@fyd>wgTwv$XIy-ZJ= z66Q6|%T6H6)k~IJ#_vqf6wIcv=H3vL)rBx8;Bh4KnXPDjQHC9LCh8vb3r3VT5s5x*Y-#5&)5UjW|%^OJma zf8@FNU0)eISOyP8V98TY0!xPQ!!KW+3g}`~nmVy8by6Wpvd}atHwgyM5VF2RW)jPH zNJ{so_;Zqcioouy?6i^C#=ci$;o7=ZIQf`Q8;Io%T5#F zZg!OIVMpSm%O?{Qe$z-QP6Vx|P z+OY0inu+krWhdcvDnSs!`gQ{=KedlSE3(e1$W9&L1!Qc~g=JD4E&6)!a@;(b?4-Sx U=WI^?UzlIH?6jBm8&7un|I(1^L;wH) literal 563120 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%0Dh|p#ST5~2a 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 z z^WJ%#jI`&)71AY2FP|S0)VIg~M(v~LN+OtExkvfxSIFzW1~{f!?g`2#H@~Ye@?=gE z_;z&3LOLg39vq}sNSEk5@>FyQEDSCqxH)(4+S~EEZ}wIhh$Ss zc2Q14r-&XA?NJ6zLNksxb-p^X%NZR>^DE(wlpb7GA!vq3eQ*X*bd1W#&m{W$vEepq(CZ0d<06_! zyPVsMu(UN*w3dzzpSyB&xIK1Q_Sl#&*rD2~uT;Oo)rp-c!g~5d6I^1tD|VBYV5NgK z({#7Cmi`rb9#M^~#!?sK@v`$I923_)c zGc%5zX=syf@;~m}hOSYRcfqQRm6m4dhCb@)n?rsIznlD3o+8uT(h?gTPrCI%SAKJt6Q%5in&VEqt#n{m{Z)ZmM)}|59PZX~XdP_I>l|(| z?R=GKii&>ZuC3^9@?mOF-Xd&g-PGc>b@Qb3Bx8_HTiD!e!(}H=d4$a^6`$t&H}SWX zeqlHmmy)CWnx)rz&~@6@XKkBNFWom6+u7g@MxUwHIM8^|xX}3c1n?Rwd$3cacGuWR zB(KU5?Rs+OL9*rw8NRu9sqUi@(fJM*o*KOCt3OxC^2e&0OmY@lA=H{RSx zyH}V;ogh&n)IF}vhgV#X&y;*&N_YgF0k!frlbPi>V*)yzg(XdJf-bCEf-)bbArM*FZlC_-3 zevWS&;t3ZXPt7CdpR)Zn%|}Tmjj*#g*^Rty4gGl}xvBKAp&!~Z_0W#}QOc1~zc8mN z^nR)2Sd3StKjggNtz)byyl3WJ72h#~^<>a_F|!L8)z^p1C@f;e%M&S>fThhlSjX=~ z5){|@X6~><4%Y6d?)hm}a{u7hW(kxwG0fUz?uFqq+}9Z-Hgs5LcUNo-4ez zrpbIg+uypWbSZhgiR|m@L|Z9q6n53#nN3F%EpABTK|GsB?fU1HHDln`P+!f%HYaG) zF=r^s`Dez1*3JC7DL=u#Guz#wxu|&;F%O|L+1&?EfhPEazH-{V(%i}Y#$$cugY?1R zAFvlT#lxmw_V$=F*jZz?NCsIH;Ojr}EjmZN>W zj6?JqP1*_MJT^vkjPjT*LY+e=Y0WPUfOuX@Sp1u;ckw)_F{E8he^E+N*v$ zJO3_?5sjZN!nBreXD#>)?=jY#j@Ve=uB`TiS?r%q{P(j16^SLmr z*GehJ*n*hbL{n|+-OGH$4nioAa-E&@zwR>B92^2SP+JZu9yB-Su?(t z`7ZE-SsJ)P>0@Quc4IywhF>nehmka*W*3j)SI$tIZkczaq~lLQ>K#WC?wbN z{SipTeSF^#Kg)OLvdi|;pP9n^gbOG?rRgv>>>A9xsCAc`MXZT5GdrY*_sj;@s4(f_ z8T7v~TC;S{Z)_xti>=F%GWs>bT6LB+UFX*Pz6`_PM9;j*t`!x?`89Xu!LQZ2BOE4z zMKbYP9rOFqlG3pO?dhx`_Ks8V!VGv~2HY?M?wA2T%zz(ezz;Lvh8b`}aL$wiu4s9k zuR4FuSm~htJ=9z{xk9|AM%T@eiGmEPjL0#;``Yga*x8lob!2b&*5+9w+o#m zegBPu_}2>juNU~=Eby}kf)0n>^Ove@|E7pSVqDBa?T{ z{l03#3T(4wC7d$k#eF}M^&Gbo< z4`~v+UkHw-J&z~K#kZ3l<)x>PCpsNm5?IRCWk2FiaCC3(QNBvEkSCfdfK%D@-Etou z$3AVqwfpaKg8DY|&JeKut?TY#hMa!*huxlG;Mb2o6HiEqmj-9m#L3lib$;8jzE zshoRu5-=4{RM(JA$rHso##A=u>XO%8wB3wB=6xYg^l0PxJkb*Lfg_d=3U72L{Ka(I z+Dj0hG2oLPZIo_6N=;;STcuwc_z%K2eK&sbMD{m^hY#>GrfN9C@7U~c-}vkZJjEjL z>8jyZ@R#AfiW|j!4YvX}QXYmzui~QbaNj)K5?mKIiW|p0dPTUe2KQOqByJPoOK{zH z>Q03<)(&wq{)42q99KFBVY9VD{M&iP5zl2I^~@l_#D2wm%Jw8Uw&twI%Via2D~QzJ zX=$E)an)0N*Cu$pE%1#8jc1QtkF+PUX_Y-B%hN;lm&e|S4TlXBv{ zxT0;l8r^}9^Lv2bMt+<5{T9DZ@cV6kTN>TrQusw~9$%)? z6!k^QZ z<&F$v(|RP1pG@H=rz)|LPydPMUKFn{cd<9Pw4%8@K73{|eYhk(tn#Y-iGI=_)S58Y zPk+F9FZ8E)k*#KFbbNNaZ};N)eYZo6>YHE;&Y=BO$LFExf_lOquzjq$7MnZmJu6wP0!4Fk?Xd#)UDF z6m2*F?BDafWCC|H?sRsw4cFsCJ!a2W!^bg);iLQjI8P6#sNOMOoGbp~`0Sd#(Z=e& zgmmoT6?tPQ?OY#DsSYE|fxZOixi7WrN!oe#if+d6Gt~!UyQ*~`Mad7lhr7!A;pO(k zyXMY^pVn=D1P@ns{{JWOg8vuXgloqUchCGa=hjtDX!9EO4*z_E_*fm}*Fl|*&7N=9 zBh|&L$3ymB1E_n(Wm9fkPR0A8U(riCut0I0q{rxC-Drq!QC*0$b{ctKKljGIld~81 zktg{r=&RcO8_uHLcd&=vw*CYi&)p z`Iyt+I@&nDZe2n1LS67u_MzSVx_c5!R%Jr0V9K-5A^ZHDEQzVqD5$@BN@Z{^F_z?_Mc44%~d| z(a>}1@`vF;eXBYay~(cAvQvNR@^0EE5-+kkk41=+Bgjg+Thu;5+o$}t|FqxsvUlb6 zecB1yENHKwu4+ToRdsxkeAH%|1L%ylY?^z6ZKr5+=FQJk!+YQU~3mROL2d ztFi&Uag!O;er@+x7ahmT8Sh2D9CnRU?lKctAFndqc3n_?!rChd=exctx7+5e`-bx2 z6#qZXV-@b)$d(TF9Nil;1ia>t>Q+VFv`@}9?X8bo-chTy<6!&cm&X^f zHt1dB9ocE?rp6npH_-vmc&q#Av_g;Ux@eT0Bff22hiI#T8 z_6zXE2e3in^us#-?VS--JYx45O?3`Q8ZkdL`&@tqrwx-R57j zKO&fev4%MAh{m*F zB;Wjo`bBur-;?ISSW~==xa*mpS7+0$nqLd>Yp%&= z;K|Dw*L)*+jrIvoZqx6aDfRYW#c8~)=NpYF;UT|dIv6hwG}R$w4(%0*RLZ1isu*_( z6k6)-aVtE9IQI9u;DI1l16PW0_a2hj_+i!| z*?ZKzNy{}aun8V~t9@eA+~a-q<>SNa=Z+7n@9^V(tNK0E`C#nLYR!!><$o#LVe6`T zhpD&fr1O-j`}5h3R@F1*(hhDn$#1U-n}_1F+(GjdV78_r=Kk_opVZt))T{~BwlV9# zss1(FJ||>K5*y2#(vrVvyd-KK0%u!*3=nxYZQC{XmR`xbHRe5>KGiyU#eC{?gmwCP z6O3ocQx%R~$mnv$mc|_GO&lEv>)-s|`F-pK_T6yyR4_x}7}`IqjOyHs_$cdrjJ-y5 zFnE;3**qF-ncYvG1wU6`=)Ngi9%f*4K_tEim;GXRQ&}YL&Yc0B-DD0xvj|pq`&>f1 z3LmFzEwP%%7@tlYylePb@HDL_#guCauG;^Xer)tUGD@6ech5E^hJ~X=D5uusgZP(o z2ea1uF!FJgW1bN`+p|z-Hd>&=PKG@?Qu#LntGyt?+R#EC(7D@iNA%uGoZ1w6vgJ?9 z=Xba9UP;*9xW$aKIPWT}N4pI~o1x)6+RYsn{N2R=S$S2r=uqvIo*m3^z20R@)AKj< zv;zmdkzu@9xgPug?5=;Av$9{xz!Sjk`ZL&FKfqm=PjlDhQ`~j=BzIkUXNLFd{K93~ zaT1*3`M1dGihm+m-F|YPB&!P;Qmdzyr=5S^AojqTO;f>=&_&4gx;8G|uzJz^xHyPI zlgl=5{x$5w|N6BX8}Hk2?ZkgBl#l z)z0G^KV9H|uE75?e#r&yW{uMKuNB0fF7Ox1O3U&ZlqBr==in3hmlVXO3jA#a{`(62 z5O29h=@rUK4;I89EAanqf&X-Ye}3v{Ucdp^UxX!MiJb~nt#Ybu64EYB!K{EE+sRX(=!S28~3#&N~zt-+NY-FXU6 z_;zz~H8&-jeOWH)F68?Nln~5S>vlxEbPnTJI-^RT?{pqw2JSJz`GP2YcV>nMKS+55 z->-5(DeRXYSF&j3BO614Z!Y%W&nh1H)3`+oR5|>(Xic=* zr*k?xeYd^DOHTqsrFWL_BIueD`EfVl3jSH&?egKb;0k_|{8t;(BR?*LrOjthF5kVT zc;HSd9(P>+TFNayZk=S>@I4-ti|qWBnYhT#OIRkdQKKM~(8l*MnSFFP6QG>KuVXm}dB{5)Cw zXkJ=GTUfc*@Dn`4+dk95C5dIocKKjNaCCd_QNGH*P!|7c0i5#EcguZv9Q&LGuHAo^ z6V$hvcZRI(Z-t+x0rb7<%T&qL_cq>@fAF+uY~(#bTsvXGyP~Iqd(ekNwaz|*QPf#YgdD)mv!0ji1X_oF<_}YQu4;+JPF;@QiK? zC-{21f_gGGR^0dwn~vgVU@y3s?~h=EVV_M$JV^(7`eCz*)xW4aA12^e8Z)OpWH227 z59`G22FdX(k1`gma9Yb7`rct?beGs~8+#hjP4?_KA7Wl|CV}(=z4BOcnZmkT%a`@J zxjQ=g!%9OooL$`CM&|owb}o6%sV_AZ)k$oIRqcNn8@^ZA{9DT#`(o}Zl-b&LHV;y_ zB(}Lu%x;9AAidvJt?!^6-&If-wVBGIIO%ua$oUVwKV(+jzI|>3dJYYJSDElO)nB{= zxCijeR#_g4co;#u+4|HN<33gdPo>)tKSOC(^{+C^sh6!YcZdY}U4@Q&iyz)Qx8bpQ zlq+4}+bbWdj(#~H>kcA+Qk1krcD0l!Dz1?lR2l=e|vjC(x}!87BrZOi!ibpH6c zpKpuJz9c%_Y1=N?ZHx8U^j-QsO?nyw-dUiExa?6! z%o?V?cvE)*?(x`z@3sQ3a-R!j`w5%oxe$*jJBf$XP70tiR##4>!n-Hq<5kX>Bw z_TAiNeR)Ck?u}FMR{VrTqlklIZ-&nMh>QBP7fr*HX_B*(hdo4DEc z!w-n4`pGrJgZ+deu%B>RN-zEsCghU9g9~qY(jFM5r(=`iXBta9)3;Zhz{J&Y?XENpd!gc^=zfN=w!D!~B?h1J~zq0zBi<1@@l* zz06ooWwTn=sdL#)wn9Cf)#^g))Kgf;&ZX$J+hk)Kwne-ous z#3o$XU+$D2T5q%bxLa^V=j~EB@%;+N-7UZC*?XITdq92=+?~GrEUxTgAI238|Ej`4 zs>c~Jsn&U*nApWa16KHqvVxlA&tGi08VAocUr%LGVp4S0_W<*f0Uk{ zW`6lJ_N%kJ`l-GbqOnf~2`CYsAg}hkcZE*}_n;3ayhe}UUi4n=zmiv)J-(~<(eqT% z#nIS@fnz%5o}heknOeE$72q`2S#mB&W1pch@_7J3dQ2H`l!<4Y_M3{v_O~eCh-#j_ z>*;9hpTORA8+jJe*wR6an89Ao=yQikr>RYerZjWXENHP5hOWWwDftsW%pQj>*auzU z*$R;xf)?Bjjoyy#_j2iVW79)+H=3Z;Q_$))<~ej{kBlVJY2!kB2%k^5qv7x)mouK8 z8tH(RzZ+V<4O+exS{^&rBWm8n&T(#BpN-z&9kh2Un&y2od4bVE3W{^-(KCUqJbl9m z$k7{{O%wW^v*Y^Cp5t!m51XrJQ-;5=I_3#C71H_9s><83!@b6Q6#Xu=s-YKVGnOaL zwA*j{`@?dS!e#(3}k!VL>w^RLjZ=yE(WawV#rgYaO=q(<~Fmmd%zgtw_ zm<*fI6tmTo)N?Hu?kS0hJqFJe8+5`VHr^*3Skf`W86lA-F&B;gaZ_)ELe$ zH=}=9a1VQeyVmK`4C5g~zd{3l5gPazXy60Tz)wR1KLri^Bs8!`|8^qdk5Vt4S3Y!I z*qqBY?yRmnWU4CHnygu!Je}P-^y6$}T5-6O;?5BFmLG>ZDef$BSw9YUQd~E*-#Oxq zNk0+m>XVI)Fy}Nv8kbbIOl=u5Ykwa-F}1A?OEjlg3)cR=^lE~zSo8c)m@sP-0yw_c zR4-FFI%=UZ=+_jsz&X>+S#-^z?k5;?z%=%%zPjh=T=v5i)OqM{DU-?(GEXE@<{uOH z;*Xf#M6B&`R-Aix6q)ubV|5R6tn8+pvC4bQZ(92G2x-328>_nseHs(xowxzuSNE2p zr-S|`dZFERY#3`}!!BotPv5Lo8>mlJ*V(2B{*iIe@3C_a9c}c((M3ub?Dechk1dRT zQySf;v0Qq8&-aO>H}2#HX`qYDx1NrYm(Edm9fz=iE_%Bpq4F>fde>xAh+)5Fb^p>= z&t*;U%BH)nK5Aj5KdZXj)q8~*y~-u;Y<8^Lj$Ov7{NDI(NQX^oUfk+HImWGUwp?c1 zImI>eL)d#ss(wm)A#0HOMtRDP>OW@3<`R}sI%*GiY4K&`iys?9>i>O7eOHIxm2`6S zt7# zkNnpa_?H*>f3?8BzQF&xd4AF6J@|#sc@G=?&s452+B-KgIfc4v-G((QxPo*sCi8F&XDFiY zhZa4T?TIgpcITyeWREdpTR%Q8f;?|VTsq+)>=8xGb)1oSv%1`+FQIq>`(e^4uPtea z|L$dxxXQf9ZL+%a=dwEQboetmJ0!f;%lpXI67xJb`Elq}mH9+>73a)UZpl-1=FEdT z(Y?_91GC8eEdCQ5QSDA*OAag{&2T;PnX2UTzTWnjOPi!}q#(clI zBL4At?}VmYjH*tm0+~F0{uTQ6%k-^m+kcV1eTKe0K;J%1-#&#-|C1Tx_p$8SCn|4n z=0f8z%jl=Z?$g+wTF6-~{Pd60y%5@W5w^xEq3jhl(dJ97ZohX{!IagO^u*JZv!T7W zIcCXQl3Q7i$NlB_NE!r_K3Z+sEBHqCP(nqe|ckR*i*(F`@`#h;&L?)#ry zwK=ywDb;^}d0!E0!o(x_-iIc<Vr>(V!R1a~ob+V%oCm2E0Ktsl5{CG0;z zeVg&;<7v`Q)%U7zF~6X`xAD#pnRtQ({E#579e?m{qo#oi@HEvsfSU^c`W+(k@vm~y z(=ZI4ATPNL-Q2@=o5Qc6jBP#io$5+cRvQygmMPH+9Izzh+bOv+T(w=Ib-Ma_ z#ckJHjhZR=VY&GFUv`=G|Kaw$|Mfa9kN6#;wO)JJALn(D=ES}{zxYa@#}A_AKeG%2 z&Fb@e0Y6hd)8x@$wG#4z^0hk(bQ9RhtS*7pHt7(k-jc1)lONZ`)xKA!aN?U3j>`nI z{FvqPYf<3&dB6Wc<0N=kg6vbcFKU0%-XT;$Yp>umcN4xpSYuztpZ^F}PvO2e9b6LF z{C!by>cikszDl!@e{qtqd^nX&e)VHe241blwJ+XZP+!$8e_zx&5T&8|UT9x*CnY|S zS3BS3M@o59VK2)YB?VsXb zBA!ix;T;Qr%%7#i|{@^&c0d|U24+MZQ)kOB$`L5QMf*0mR*f}Exr>vaGv(u zB{QJ|m!U_Ps!Ztu>-3Bzv9^z4Ibs&H;42+hP-(ZIc*sR_vee zh*jQ48|)dWO1_A^?@&@Up9CkE@Vqeap4}_in2AMiF){ZcYx`~?t_c;z7vYwe6GLU@ zu?2}5>{>$>}zm{(nu^?|;w)eXRZk2kKQBWNRhDyKJzaAJ5UN0s6_aeHClDh4_XY zWrWG*5ImM0NnrHN691dJf^S^p#BpS$dw^H}1pI_^S+j@4rg$zMuX6c1z^ne_;XwcX zbpI#));hrYB%J4u@>);p-%|ztuNL_KchdRG&pS#QD6gI$;}Q3*53JmokCv0Ex>862Tzc%-25((KCB9*p*xG8+E3pV@(M(c zzfO4Y1nCvxI{mauUjT#~z*(Je&!+c9@(M0qR*y?98+`g!WHK$tWOR-W zc}&{!=(ndWzuq-_t^6d#xiM^aZo`(&Ht7duvyXFh@b4livxoSm?h;edCw_wNSt&Ev z(Mgvs5szJ`eq^_cyIi)_M%SVXmugL+0~Z$zsAIx)9q(+^Q|N^~iC);mIVkBhN&n5` zHF$O>!&h0E1}k<$TDVvgJPRQ6$ME~J*=67=hmGVp6SxgFEh(>f?7~-4mBrvWd+5;{%&#HF{wzRjydu^XG<(u%}|mp#MSXHlfHw#N&3EcEADHo3wQjvG zCa9sv;<=~g{+#ZU>bu}!NwQDjKB;pC>Obup0vDY2k%aFj+CD>hX(=G^7VeYN!6o@7 zpLZa*{QXb)D$T-u@@N5^%BJs@`|vpS83)ew-{l1LZRS0nckl`oQW|f!PfpsDfLGb{ zwDSwz<)03&aGw<1#q5(Tvlq2bvhbPHWdC;iWCiuzZwu=E1!XVXCtm|@%6;;V+j93| ziY<`i32+pBD*Nv@-uT{&)@j&+j#K_VDV}^F?tb>q z-RzyuvUfhpK04owrLE5U&a^ob9T++p9q4_hIg~yFz zb*H0|VV!x+*I_?JSjvr!A|4|=gkul+?Po+imUSlRot!F%lp%_ocbGj8kX$j z-JXv}*LgmA`^05lHrx$Jo+oE7wf25b&tBGdF5A%So%1hp60UJhMx9|Ax=ir*H}#vBifXuiBF)%P9J9&2N}jehH;Q#9ALZd0JiI%&M*$JUH2rm>pc8r z6#hoz_Bm)|%)t)9e3Uh?^ZW>U1>0|99T>yjXIp#}SNs#{f1it*;YQkhtIMDVe@UQA z@D6jh8*WoPX|{4^{!lk|A~TE;#?c}A1bfq!dz`DOui{S6zKN-FDC3ql_f=KCj=p@S zc?(@_&aK~lin>9O!5@m$>u$pqc&2XoW>5oIocE046x|tyhwUunN!j5u*%1sZ9B5>Dypxf z?5c;(JU}7#>i&a;@SWzS+QBI=Nkl65gu=_YNerFstIX#t&V|l-Qu(?c)!F}h^Y~EL zgk%dmR(FpX#r|y-zijrq;DFbJ!t=n*n&DS1FJ*1^zKJz+o?;&TihJl6idZvOTb+CC zi?e2h<5iva885x>;_rV)apmJ7o!R(7wj=>QTdy(~H)3;s+kxa2zU z%Nq2^&qXio`-B;VpT`-#=&Zg!HeapK`(fH^Uipf?(}cy6A44bf5bat*pFX@J*77lK zU~S}m=??gRJxSU(Nm?2U^_NAe8=Fhfd3a%@vH4vHk6#!`=a* z^y#rz3mr1XSks+_^TTc^)p{oC^vQ3iPm1w78eTeSepWI*Pci;#u$#(zM(daKdGMoW z=G~cR&rVcsg{N@{J*7jLnVj_(J)kvD^D)U3lr&kG3qA zJQ3keMi;%SDhxR-#4hXHntt*bj7QpLg(C2(UG7M%YMx;hHosuzHoNdeuTDgg)uHUW zO6tQX1!S`&H+Xhx!`9wyHhbT7zjU~ToVx2F+`>syhWB#9rYo4po-6h%Iol##^xz3n$ zF?03El490{;^bQHjD6nxDmId9YhL30`(|P1W1(4{-$sx5K65&H8S8#?UwDby^`2x^ z>SQS0Odm5xYHKbF-C_DGboXi{ZL7O0+O4$Dpy?OsOIvkoXeIzk&c#Bk4IaS+XU?+TFJxTlK7d)B&zZ-w{Za7+ z_TewCe94@PBslv-x$RnhPw3D!-rA^jabkRa)y|<<=NBmV96$bp3U( z=H^h0`$$O8}%zn>nujm5X2II6rl(x@ipQjAp_2f{j7i!~5^MYL) zVwK;4x3k8)MjMoy1;9QA?DKa0oZtgJ?v10$=V-H4$VG)u7R8&mhemkHtF%c4WtvN! zve}#Yo^q*ea^v|P&w$E!8gpS$qv4?bp z!(6ysj?ymkF0x$?(=PA4$aYa%=-%b`%APc12D}lxVh3Ztk2*|@FReWj{riO1wslKG zXR|YRIOe&Keo;IWT^cX&3pg#!dQ^1u2x@_Vqq4Q3KQ z5uL$Zy)*mX%HG_gahQ(I7!Jl_g#Ferm)bjNf-#xE(6*hM(eHqB>CELa&hP$hD7EM2Zh4sFltnaRxL$ki z5$abRDj(H)U&(x6?(iNPtqa9Qo$zV!rdHB_f2biYT1fY9!`JlZKI_z^x$n12OGAh| zV!)%0+p!;OxtTR_jB&u74E|h*bG|axT&r+9R$Ru4;)C{c{JTWnIOnzBmgs^VTcWj3 z81wmu9OT;(&a|TIZspjX{Q1M7bhLIyI=bMApssIaM;;Q-Hk)pa>+U(?Bb?Ko7{lK;DPV27 zbvH3?9oq9&@R5e39kX@cli!XV#c{?qq&qis&qplz9rWL3m^%6}oxGAgVJ3L`cWARC z>^+_yK0M)~s=8&s)0RC>d^_~fLds+|JMl%h#U?eUD*Dgp8@-sRr4KscC3o;He-$+1 zR+upN`@C-Pz4ycK27h(j4bsE=5+?XR9Cz=!Y>VbvrTK`RXH{Ltjr$vy692VORoy?r zk1pO)-bK50zC_=>;k9AQ_rQsvLppB_&5C{>nfbq%#$SX74PGyN9)-C7b|zYkow&b? znAz|d7)L4gYVq{Vm0|R&p`I-9}gXZ zf1b-HeaVvA&hH!URELM|#7+A9a69@TpdHR?6mO|eKh|BzAxZV+w`f4p85W%i9sWt# z$`iezItqXA?AAXwq<#K>FrGu^y$c><%r(;AwaDV+;0`m?I#GUMJgbIb4Xz1p*k z^j!1x%p*!K+K%0|?CW&UG!K0UVLo-_@@tEbYXgjfB*rWNZtHoNb0 zlT+wY*0>uxS9Y!2a8F<{%&m5>bFa2`$)-w=J93qh472Oldfs?`Pms?kstR}T%GNOjJI}@9z_nU zdy!?^Sl^w&)pw`lhYNI0eq0PN+V~~7ieD)ITx06x$JO)mu5+q+5Ihn8rBH5EPh0FJ zjxMtEUvMS-3gt$}^3ozYw^kI&ji!T3@=d#ZGszPu9bjM!xjk8?H}E4s|hSHnz{FJjns>_0dyf zBwwn0>(3Xw9O8^@`L5pakauV9YoRZVyc+uA$Sa{|MvjG^9yuC%YUFU}$&t~}{*e=* zuZ)bEBO?_>I!n3@ImSS*WJ-zcY3|;@mQM|1A@n>llcOU;A^5AiQ=!CQJ2>{-YT?ku zW-Kn5(I`J_&uC{qE0T0EQrzvzPlNKZVr&6zg4dj?kep%^p2sQfF?xqtntrEQovy(y zaU=JHiWZsruAh(epg9r$8#7R`sDGC^!JS&t8>y{aYW{+AnrA~tNOLT6dUjRcv)teH zF7!DDxxecbe(+!Gt|8rdA@6?5)8J;p&&0327#Y~BzDz3(2Pj|e<%T?2m*o$G3m&Dd z$b&nq!tpq9s*CRT+f2Ua2=AvXlF^yB8slfoA!J?12#DWJe9O7x)%8A{WL5`B>mY5U z@CjL0qoo&8z*U;pt*mPtxc%Yd)n{=%S(gV>2Mji)tB(coXi4+4KAQ%^~>YtIQ+xQ$Ot)Eo$tmC|}SQpV?HMU@??zrncrL^V>7} zTam%^RunmmnN`lxP-$F!ij5&g;Y{%DSxY>gR)bSk)Bw+7oipF8>K`P{Ga+OGb={8g z6E3ZOIG1he-THxuX@r`~@jY3f#P6+*zGBwQNL5I;W-0o>+%@f-;@g0K@5zt`=u0+0 z#vL|(oS+~cR6M6kF2RyoQ2tW2kh5|zO$4?_p^o2Q$pU4D&O?Jj^f;Gt9#b^AKM9c=%+9 zv&S{#Cc*t{^BKd@qVeGr<=31Db1t}~==g9MKg!#;moe0joWtO!ynPYe)0DZ8K37>y z)e50Ytl`D@Ch8KOjSsZ1Bg({Hlpt)W6kXEyz@7 zQI$tg?f%we77H<=&XZ z#&_#!?)de_Yr-3^j72+M>y{eVj5A)h_Yz-i*9~{6iE-YZzBL+?8ndyQZpN|3^O!N| zvL#yEYNNZbhorH$FRryjd8i%S@*3_8J z{8bd`{>E@bt3_z1>zR`rfL>v|iZ1p|Ho^lkqc+CH1Dxh{-F zcGkpR_oJfqXN3-3J^@#rg7;%(4S(;^)v01=Y@e4CbwZ7Ku(he>(AUQ5s6imtFtMPo zi{sK$D+wJ%ZpMxpS=}3>jgBJkfL>;|y$L$oq3v3k_uVEniI>zkBwcjPfAw+7W&MPg zp}XZzTz)n8@wPK&zvjz~2RJXnIJ3M1Pp%$AzO3;N4Dw9xemTjIHAW;Wmb`Vp@y3_N zR+O>Ex=6b>_Nr}S&3DrFapVb(wYM<0E(IUr@8gl^s!+H|dV7X`81!Yx@Nwu1_b$l+ zJYKH&UzKL2f1YBQ8D*WQ;+M@Hg_kiC{un&>T>JX`U+!LHU?5j>=m*IzJpPVsH(W|N zs@gv2@uZVS@wdODILa9UD?@&RHMYdosW^4g6xV#4u{wy%E)}h9c?@2{jL^d9b7od_ zW+=iq4PUK3mJGSNud!`HhHOGdJQ;Ewb@}M5E%-CF@R}0X7>Lk^=a7lqXxi`WM=o*} zKGdD&Q&1kzAoR~E+H5=foYsw=(4moeAt`8$oWN%!;I)Ps4aesU+zfOEH@#ree!y%hDw;zW)Bt!E2 zvG(P>_v%t-aJM2;1)ngRZGzAKu$48<1Fx$}HCs8OXHVoNkKgWoit{kN@X#ZP>&z!3 zu6YP~se`;UQm^&Uq&3%imK0-aub4Smn|#Q`$)Psc%lnX7*xnPG)&3Z?>vH6!Wp@7z zFI2nUnygB03&|!WGH0jOJ%-Lon%cb)kJ3L5xCuk}dWT_$<#VCYa)9$rEko-A(A&S!6Ib=!7|wKRpkK^o^G-y1rUl|Blx z$s3i%+G)~YtR=lM$vqU4(m0d-*ih<6y>a)(FyB9K4*h~SPo9oRIb+&er~U7-`)PTh zm86C41$@k2_PZhP+wc5@-)X4D#C~H^2OTY2Q9kruMC&NBQ<#_Sn!* z^X=bd*Uov=9AjU;C82#>YgcV$BXZ$(@Cvo{{2l+7l~+5%Tj6W>vaW&4px1SX-(h&z zj#)@pC1InC&noa2;XRKMc9=cLhMn9KR@hEI3|uF3Iy%?NXM|%Qmk8}5jy040ZBAd+ z{zHz^P5SUvgL|A;`9|y1AYt6i8vj7(Th$KtkDNB1ep`C~T$3K0W2EP{7rG|4f36c7 ze2_Dhqaz3T=79FYkZ6EL?rKl9MtM&UhQUXn<90K)YWA`Xnlj;}6-7<7gX~*wtp3;R z9Tkc@HM^=W0M1VZ09@%Nim6|Yft!J`!b|Na^D50)WU8%XA_-}&o$ z44P5!XS4f|Lv+L)3%|#QUz?{7#@J?UjMc1RJ=u$VaWCmFCGBqZ^QB;@=w`5HcxgZ6 z&0W^JSad7tAI_Z4?&+Ih9s<52>78@*V7#?-jjxB}!Kyt@0bk<7>)eCBDR)Vqe1rpe zdOKUKyjgAg8f{>4QRFyFLZc&ScJ-ajj!{Nzniux&5$hja8r z6Mpn8x9yGGRL!^vHRI>p;PJLCje%`OV(LradA-v zQFH*7G7g{Xr431Um~lusq@R&Xcfjkn&gYPG?_nK2)Y}?*4%iLAK8GG7V=4#hkE!NE zp;+hq(5dWLZ(B&Zlpg~2kSEX0!Fqg!SZWMCj!Qx(voH11Un+xFUi82w(j5rVhnezD z&7GG*vDD|#(RhKnEdqAHYd7LN-Ld&0`q^)X&)Ieux9w00?0j%J+5wcpYrmi!YHT~a zMmsPzD8nG-b-Z>+0c+`(0g%TcYfD6QhsFgsXr{@msgVBTt9)Bw?n6Ig19JV(@%(f9w?|JH_);V>Z{;U+~wOMCcfFhR%zto^NHJ z=<)i})A#YlfM3^|n$S*g{}^c=hPDhJ3!Bz}Tpp(Nkr^cA}#H}A~tH?gh_tfj20&6jE{iKe%D z*Zq8R2%JH&-uXOQvM zcJ2xNYN&tqZeZlEqJ6hs6*enF?Ue`dr+MEGpC?xNy5qhjyz2X??Qf2|U#r|wepWJt zMd5PVr>ZL)%E|vzl_Bxw)|-Fmwe!65E1|6)Q{R_(bxmCv+S-8LB1NUN))wR@-bwJ% zMl~TS88TW{R&Mbknk9;rYg%qEk(sU8T3c-w+sJOVS-G2)8ae;Z=X-%+1od_My}SS2 zJvyB8ob#Of`JVHf=RD^;4`MD|($Gh&rCqHTcLwq7KL+(WguWEFM4;{l%t@%fyAf?f z+$E6Ps%nVAc#0_r)kPy63t*F2*$@~%I%uyWnP=@x1K)kj;_+BpD;ip{R`6Z+<36v< zUjf|Min)L^Ow8g>buk%VK;G!ChGPi7?Q~jnbkOGxt}k&|HL>Rdosf(DRhq(wvC4cS z+}q%MsmBVP7fsxOph;lEzZr7;FM_r)ImqjbgTMd&tRCShqR`=#YGqywdF0k)-ecK| zJ@G!!ly_;oRpEi$1o7>zG2}%O-=WX~(>X@;9^I^JkM5P~5HTatqI(r%eQdQoV-UW( zv1m8N4I6c?1kJV=GK|I^$w-4~)`L!QPLb2BmcY+-;+urSuQ9G>^fhGE#eS3l^lx0KXp+n#Chl<&Bi${Uz}IP#jF4a1fO{d}e_}5QV?mk% z`FfGB7x{XTua{-R$w4$}gn00kt^nOi9ur}E^2>%MePMNslnvSwFyfOx){!?>Q7gnJ zSfA=#(v{q+jp-vfP8W4TP6V?eiX4&KK(5Bvoo(q-P5Fcwtj8uF{jBkRZ?OK$*QOWyA? zjC2oqXy9Kpu)YGkP14eE<9tJ3LpS+g9E&{XuuG%#7Q72_6k{wI`xww{4e$6;SK{pt znKy|s+;9*ud5-QMn;TkuqgOWkRMD^xe&l&)o?g~)2!0m$vHgw$K7OjGTH{$!F75cK zyoTAW6%DTAa90$`OUH{xV<Bd72-2k~G&b1rphxxXr$TyzAJ(d)V*%tAx*RA`|yBT55rWQST8Q@2RLxyLLRhy5q zFxPWFjyYiv(&_$fb8^f+n~+}XUH%Z_a&Bgt$+~xu=7-(~n4YagZ^Zm6VSdEvb;D!u z!`#`x`7qu!KxeiELoO>;_bL1_H#w8>eZ}Wq3qE0k?i1gZYV#EEXmTOXo>48#t_Iyt zG9Kp*#E*MXnAeU1@A@Ti`$@*25V0(znt-NmDt{=O*d*YO)mYsi=DwioZR`aZ_T)rA4g z1V(Y^fgR*4#zao zW*C034N~I29{?ZsgDD?%5^!{zpIMxSJIN0QB_|5};D4-ql;3D=lane?BpPz^HN6UQ z$l1iEC<^tzk)G;IY^oA%!n^EyVDsI)S78UkZpD{qL`O(iS!fr~j>PGKYRgAa3^yv_ z4=b}u^*Nrfy zn~5Ls(h1`Za5iDswKfIs9o1$R|EtSd@f*_&nqM}7vQ}2R@(rOG<++7;Xj+^@DKNTG zHsyY4(LxzpNGU&=qZl`7+HwS*x`Hcq|*^WvckFWU~!;lIo_V)i(p~ zQ2gBZ(X^nxOoR13o2=ErF6x_$cv{`z6kXvhQ1LWbE8^YD2&&QQTM3xyv3+Rrv0$B# ztknYGVc54BtxUB27so2#dEkjp^{ld1CJF7LB?4T{iBB0cRl7N2?_Aa@D>LnXcb7lO zl`P5T-0$Ni<2(14wTgnYl`XWQx(RfDrnLh5D}Blu*lY2N#(u9JHhI*P>!^jh82A3y zSu3g+N@5^n&k!JYqVya`Z+Hvv3&51<_H0hHklfD*h1;N0ZF zda$=KNYr7QsOZ09Ygmv!(rn1GJ{kL#zQuZ@_32nCw7$j`T33@z{yz2x+$Z?UEm1~m zjkT`Ejma7NeUfnNsFbJo@xVvf`su-CFWx78XX?8}^S za-TrfD_0*Kx}l~|=(ZZ?&RPS{Ms3*5daTwn@^-pv4eksp@_cn*oY*(eS=@xd(JhJl zMCHu%JJL&5?n|N53_O)j5~SD2!+ub7kX4W{CiWPG0jGitQ}&%kgH4QA>Bb6Sz&<5@ z@i@?kEuay(7aI>6u>~}uvKMn(&7cqKFwD~Nrp_!U&l=;cCAyFBhL2HvgR>^+NGpCE zvKp2i_PA|$&rv{+*-Ha)4|re(_PQvbB?bM0A7t}i0j~h{0gekePDviV7CY{bxUkP2 zg#8ZUdTXuQYC_O2ykG1*(xMNMaK{k)N6^yNdTV`+&u5Lb38UW0^#pLbbwf>*2WF@=V@0{Q=`+wblvfyx_?T@{xTiFc_aPBpQpq#ZO6#^|$)Y|Qlrzd}#2b^9 z4hQ;*d)AwO3Ql6*u^vK9u5^TMs*wbB(BcKejwZB`a+m7|`RoRb?04Tvc~8O)nTdCh){^H?Ey*Hy zH#jccNm!EcmI1#X*tmoBD(-x{trGapF&J%wzzb0B zKW~IANwe_vH>Ma;Scb|Zj79L2mbc54NCGl%X{qgt*bVBUZYySGiXof$wh# z<7CIIorLp?N{2D1F4luN$u3pu-SV8{7BH46$j2$UnIF#z19_L|v+#?Pr$3 zimVdi+$VoGhp}Fj#`X!_T$5$pxy-}w(2ciG*WRm#o>o2InT@yZ*YR9fh($Gnrrd)2 zUDxQGR($(77tO>Rs0UAg`EV}h-RP6hgLv9Es{TM&T?N;TOw46A5hBa3axUi_z%r5d z#(CR-OAPJho2RGTCglk2YYX+3&<)Edr$U~Y8}s^L$Qok)*s9GNH=_=mJ0@D|mKjkG zpYPK|o7gD~yL+MDyeEh|rYM(kE_^~CwG(N(p1~QxBFts4fX7SxIvKwm@334}^5^U> z-Z7m~lWpCAvz6iCSA43M&w`K+^JwRFeyYctZ;+2Es=40!3~*mT-G=MrH*Yh5E59M~ zCou(Kvg}7(tWH}$cn{7dJ_NryuSO1Y9l$#odmB?P55}ED@G|&Df_$GC=|!X2aVN0- z9Az@*g+ICEe6V)NdP2dEvWa7IU6nE(ROC%|ex|p_JtLo8@I8uFU(gn9ZvB-yw>}Qu z59e2WFJ8C!bED6<9d)kIlLr@7i+a>YqpZB6r=ImCuhb`F+}m>xgD&Q|-1Y?JjIToP zk1wAWxK`@z$**G1+W@}nN~HUYjW zUYQ$fmxI^840<>>R&)MU?sp#zxZnM%QupG|guS*-7bohFCg1pbOM+_Seh-17Igmv&<^+)3h9$j)qW#^;U|Zlo0i zKAF?y*2RNorkD9-c;h(%d|}A@jSx-7c#Q91c^h!|;9 z)(765|0~)o80l_opq!aB-dfgVf7q~OJd3eSomFqpb{z#RiuyrEF6#$M*UGa`+zCzjy&Qg6I5Bo#_T3p&jP|39pxp&| zI?P?9qh@0_pU!z1W8dk4#1ClHAW)x|iZ`t>kQ4UoL|a-9>q&#zt*LtFHsE2t$;BK@ z*-Orit-kfq_HBFh@z$RDDCqCy+7ctJ5mKzN+yjkYkfFg?-{7EJYZ%rG@=j&i3hRe` z=VTQ2a1Gwm)H7c&uCVW@+sZWhU>%MQ-H5rhLhtkKaVTkx0{(_-j@Nk1nQ!^Xoe*-m z?R2}OKQKriAA`9$8|xBjNz#~4V=p6;$lnz`FT#z|13K&nkq+rO$jC0!iv-Z9ioDvA z0Y>Ntz8UkpW1|CQaEnop`^ZI9ta+HTqOm8a5~+}F2}XKBvE&J_ves?X&Vtrh>*ex; zF5a4oey&HIUQ5x(e+3$x=?#rQS=?uq<&1K~w3mZ&eT-`ftzX7=WPO{!1R~ALwS(=( z^096IsN(WX_Gs+Q+}3+=UxE7No`hV=Hoh?~>lb%c)q;L*FvVIP2>t5#H7mxAUM zmMSYmQPFngIBx+y#^}?~G4>SRgm@Bnca`;-ZI9V!eys^|I~8B(wCQ;9DypkdL|p_Y>a2ccRhweA`5uEBQu- z4)nK(#$$QlCwn_S(KAwrBxp2x_$u~~h&dD9%F83j= z3)uq9d&)WJ63Bh7uaCEl5lTKO1kK z-PF;LMMHg0is{JvUkgv{W&Oep^UrnfdR_taDT^WVFGTH}GUDaa12}Ug7M2#4DG%HN>~OeHx?oOD z>CN+VN{eR{m5Gdz6R*t~nVpSW*~5e!bL6;mdW;%(-N0Ybn_M!E-ry?Xk5w8 z$x$w4LrwH7|2y2BBygQy3jDNY%w1SGzZ6=h=NA^_$jb86yW(fL`rTHo>9ZFU=E%Cz zO9StNFGg?hOv8x2;TZxZNBQhRQf&yxh#)YD!B`Q&u(zr3b`{ddnd z6Z+I2k7XmAi66_W83}l~8US0XZwB1{XCsR-h8dsL!LV$r?*zF0)AJxbf1`!v!c%iI zyeqr~DxP*WLOkZ78LhsR@L+oQykzqx@Y?6p_Igw!lz1)$4Z9o6$*P+c!}z-oKmYsc ze*+%=w;AHl(AM%K%x{JBJaO?U$?ZZn+YX;@n>mh5E44)6t2z0p`QxoZJ8x)<)s9zM zTsV7nPX0Vhm*;g~edw^^=dELKF_s*i-+gsiN0MCm$G~gfRL%RRyeB|@CFM)-=28RX z)$zX728X7f#)Q`$oz@oCCIu%|4!i3`xc9Cyfo~0miEr*`xW_=#Yr2CipyM%n;_SsE zx{DSY>3Os;(%{{S!*GvU1%5Z;a^FR{RqPKuEwEBIg7!sM4A_V?z-#NMFW3sY9;2-O zgiKe~)^C#Y48}ejd3ikGq1PI+k#`o(bTYB8$iN;W9eWEoeUyPZjU-hsf)RO3*aNs! zm~W?HKR6Kld*mT3I>5Ysi$AdgN#syCRZPF315B!n?{Ll~J&u_Agw<|!}w!Ha&9 z`KMFRkNePf7(yxBpE=M+68n&S#C~+uVqU5rcoF&oIL;*WsSABN2z`p9eM=nr6+D~e zO8ZyEI`P(V6mS`4MLeq<#y%*P!?3TB!#F;m8v^mz4;gA$P%PuI|MYU0;vbCtGyS1A zBQ{F*SJDbr(=s9-qaS{liVto|Y_OkyH`N~(!(%U!{j21Bd#dR~Bb{i!^uttt6Z}nn z=|rjNSdmVcpMOu)KN|i${nF{Crei@m7C-!pRD7I!#dh=a@2C3rfj`^CJV7w@OmyEt^)%CB%H`0ZmtOUrL z7bOWL>G{gOEHKrfoqH#C?w!!Nx69vKDbjqNHj*j1|kS`}WW!Vn6P<84#nCN+GI3csns@2Kz*!pQ%q3bztQz9a-$9u~vrE!xCuxh(iJC`=-Y7cEJ!2g)N z>EFKz?Q9R4fx2r(a|Z4~v#_ZvL0^Xh5zQm-Jv!TimTL*92@;nka1YuQo(s7Cdr;!p zR#yexr zh(`aVmI%T%XW*Xk2->9v;hNF#(#SIboZ!8Yectji#aUR6cQX{H1O-kd{;6k zg3i-lHC2x8h4(dD4?lc`83p;-=`p?hO=-2D?7V;flgDk>0%0343NP;f8^u)};2@k{ zw;S@zC$)o!A1Z#?0S*%d9bmIeM`>QPLn$hwNoQE5L;Qt*mU;YB;;pgFZKJ)NF;2pz{>xl(F=F512^KcU~*$98l zX!Q-8hl^05v&_Sp*;$Ghbek@-F6QCHVdp;&mvbTXn}^A}JG<$89yVDe;bv0!u?=o7 zzpebvTW;@FdB+`h+I3>$uFq)unj>4Lwz zde{%ghi4u){bac5;?|1>{=#rVFRnF*p6EH~R7hOtMTXFm(S;|Ch7<7@iND&@^}S9H zA96av;Ok+%#29P~!P1UVVCi#7caN*x!Gf`7#c72iZF>W$(Q!)VF?yb=U>p$*@FUFe zo`Ihh--N#8cMzwBUko>KvQ&5oV16I9Dm)S}_p)02sc>_QX!)1H&GEuKnO`;B96OQ< zGi)(_T6~Trjw>zx>u__7Y4JaUn>bqhAK^ZZpVl51N;~{L2hJ+(z&TPoz|DqA^qX@^ zp*6Ksp&JlLADMh8DVvX{zlXO6$i4`5$>C@ECv@ST7~qd2x=y>3WY6?cSu8BAT&UEs z*^_c643m=$z}A9PKFb+VRJP0+{()JLnCdKj**`FG*)uR@+0!rClEV2oTQ4YFoWl_1 z`_O~<;FzM#u|_*XwKG+lW1RjR&$P*#q0KQ&o8y#rxoUe<`~R2{ES&wbQG?3aFskt% zdJt_u!?vI~UwZIn;4%&tPT3UW?+;ocaBK7+=|<9KZv1GfFphFzlYXN=@i;zj!H>~h z_|fDb;m+vB3WWLZ-){yU=Sak0(2Wu#SEGj%=+aTwJ*XhpB{!1(1iy9o zah;39?-W*-VEp(Gx5MOrlwW;%MfI8o?tAco^<`-je=#+q;D)IJ@{+zK!K?8XLe@7$ zKv&(^0jYJc-?)A3r6ab$@ycyuT>n)8$Huv1M_gI_hR^rots{r07i{+V zPXF|EH!=)-r(55PQ5>fZ{=z8xeBV4KjE>f$&rCGQjxV?07)i&8md(@p85!&7mKD!9Z(+7;aEFEXOoA!V3 z-loSMswy5`|NZ8>?!N2c_ujwz&8ODfIXm~diQ})m;uj;5hbFiN$6pc`>ln}Eao6F0elwz`^NN*DJ-xTA1Q{*tEs;sOc@!J*IV`Pay0@_1{&Y z(-G%^@MGrj2v^c#K5v=cu#B=WmzU+3_aJ7f3DVmUTTCfoDPfGo5?o}OX=$)r6}rWA zGPFX@e-ZG*!fV4fhTVhw)}a(vg+6K;W=ae#3+*N6Tn1NJ=sLJx>^8VtMd*icG3Qp4 zK$vz|9<)3d*3aw(b}Rf2o5q{|$MT8gg|P3#yeQXOrkCL}%rwHh!8|sM0d)Q2r_Z!o*DABxbW4nD3@+2^;QOZ4Xdn~tH7oLcA%rIw| z9VpAorbTGK*zkVlLt(u_XCl{cP~vd(dn;1a~XX9 zY;Lf8k9?m%nyu)`#L!IOC}r3a`bF3m=)GvP+thA%c6-(|BxI@Sg|LlbH;28BUiuBAx3@ic^e=DrZrJl-j{!q7rY%^#dC#At`zEH{xM0<$mpe)l5#F!!VdYqz}m(ZvHs=FGnH;jM3c6n#-f{>@7s+P3fg z0heAe?xy(&3lva9pUAK13{&{y{OD>84o<>9S=_^9u&$t6_}J+b@X$F_b+*-P%<`0V~q zacd;Ic;UJyU-|5xkN^4qeh+sy))X49E!?v`0-I})8*2*pNWTTl^~i(um+*eT+S){z z>ysNl(glQDVbiZxg?k|`*RKo}b^+#EroowjnKzE9%$YPQb5vTk66zNv zEj3ZzN^}|^?}Ow_uu<}hls+mmdt}bFW5;QkL8|!7JqT$p?kS>Go4iiKeNG=nKbHi3JMLndXuIM-g|DAGEgy~b(aozGqaPi2W*bk@1{ z8YSQZ&(t~O1lAlLg)3qZ(a75%wI80lD?F9@({h*WE?9 zf;V7*&`AgHUim+3cRgI3ySaE{QBe_>It(zY$eJ^5)~>s!7an|b<=tBzymdO~Kp34% zv8D9ow=P;VeNN-}v(GTX)?x zV_Dwv;vEIgY+hC{I(>9%>VPHgjYa7Wly4dA0RvJi-~9fOyJyXsTvYJ>ZNI*2;q=P+ z%kP@8d1m5(`nOklcRg^+^rity{s-q={oJyXkKR=@_o0Q83l|j%TxWHprpM&g7Zo^! z-u~E%twjaddVRsH#fuy-*~CY$zOwU~#z!7{aQULro9E8S&&wH~o|Nbse5us`;;1mZ z7yILvpS}6Yo*j>ET>rp|^0~z~j>{Z9YQ*3HwjO34Ad9ix=9oMCcdz+g`1dofvV>dK zfet@rZkGSizuCMF6mviP+ZdJ=u{C0YdAVh|Wg&3-nG>-mVZ0R3vWLRvn0JTYW@$F} zx9mp@Eg#a`%D)%Fp6~vA_l4%~!be~q6mB6EJO%lY3O*Y80%+;X$YIv%uouGCAy=lm z!MxuuosD6RZu?OhmT!dl`>!S)(~9%LsD;%E}Z-1Hxd28mY<9|^h1p=j_%j}K}%4?&EeB56U^6z z-x|*S&CRF-Lth9Bw;t&BKH8LdvjkrtMES7<-=qG|cmLe{Zg_)*?e9TNCSc#he=J2x z*jv`Otb?$(T8@@;g&Qme*zD)Y$YmqaKZe?J&$AsZIsviA;omB>BFD?U!0QzmAHlqt z8_TWqJ8i{x1L7B;$2On`6A^Qq9CIDoX&o@Ohb^@Zvwm&q9?tg8knvb9mX80v2s?)M zW9uvZ!&Es+l&}o!<3gf7jGSh#(1E0ptJH z@WO71*c9!BX%CqQfo= z3+WYm`Kap(%9h+)_tXmqKl~=V_a(zeP0A~|qvki8pWA=vXaqKXSB#rF^Y*H>kL^0} z(Xp@|j>N0R=ghr*vu<5>fBnt_Eyuzlq@igOa!c;4d1TA) zUOjZw)WbP+AB+Ff!akN@TDg;fu2 ze)iQvUzz({`d?SyFk|uZ`!{Ug^T)$~4Yt~cq+By~)~$D~dwkc+Z+~R&-fz$dAl$Ni z?c>k>{=L6gy7wJ2V$76+#g%I|?0ET|FCu%z3`xFr>daf0p}epD`KxY`gNI#p%?-0k zD<9ar`?U{_g;Srzeg2aBQ2#?;MfQw||F3a3&AsjJho9K}TFWt0#DK)KN%^Hq?m>UN-ttYj^^(-F z*XPXh+;#u@XI}g0uaUi-NmpGnwP;c0s@lf?dGqt`{S!t`Dp;`e-v8eE+`hLy{##W4 zr1UA%7u>$$zV%PCeAd2~U6Fa?%tb)hhV+g_^oU8kV(j(P<}SK(W#iuWzWR6EBUdSF zeA^y*Enw14SZn1yYXf1p$-w3w_$4?=Q@LRiejhgJt9~kc3^r*k5|<3;IVb6^4B0DG z^aD&9OoN95COyU_pZNa-d*sPyY>+3X`t3KZfFMC;B%AB-*fJkVp0=<)zx0O973yZgr93K zT#vNQXD_@1c;~Yh-Uqx~RPtPV;W)^{PShF$<0{zV>JpFw@Y-kX*Y_0_uL!AD))%^$DYVEn4S zuRiRGN$-n2(YCWL)u$cv`^p8iiEC--iNpgmy6#Gv<1 z)rZk8h_i<99!^VBttZzliMKX;uDcY)Kk!h|P*|eL;})B*1Dt}RR*C!WW3URuw;wc- z{VG1g@5m!z0%&3}+<<-9s0ZyZhrp^j|N-? zw<+Ra{f~RAAws^;eQ}qqRcU>#8dYC zX>&_wl;PF*oXo78kvS6*RTh2604)7lfXvb#H6>dS(vh!*Etor_Xx{ue$!B_9ex}#3 zGrf||^cw2t1yQ6)`O{_>ma2ExCL|;&^i!9QjLW5x3p!(NS>gPWd9$a}k_WWlzdUDMj`R zP|haK@b<5HDGFaWFK6D|*|*5|@N?$ODDcZg4VK>_nK=(t?IP^v1=A2VAptWe$289= zcB=M&&L!H{>Vaqze(#(UXp$7G?JuSP*$l#8G+~Jf%6K*nfXz9ExI8!dXO@ZY>|BET zE6uPTG=b+5gHU%uo?n^tP z#V$)oQqLI_3hP|7Six3rXt4{u!*nw)`)pX0b;V^d7e{vsHHzKa9$v9% zTH2)-fe!ufm1iDXyP|wv-jwm9uS`xHG%%+B#kL+%)^3(CQ?Pom>5YT0?SJ`&XExOo zU!CMc5@Eqcxy61ub^MDrcig{Z@!Y)YGEx%aq~6^l!p(kHqW%rQ^S$+S zG5VPE52hN~1gJ?z5-$H=tv!juho1MD zcs7ZfpJDAeosf3z#GCT>nxky}9fN&CQpZjHRq?@YJ*4=dslHzo&nYQgcw*S7tSLD~ zteQS3v|IGWF@r82dF_qGi#V57h<*PhKCie)9N(E~5hvfSxHMR_9@#P(Zw37H*ZoV9 zyXnR0?>~6#S1}+)PM_Od?qwQ12KHT$Y$tXueFpi6HEdJf+uWzfmY52uvm)^9#& zeq=#re3ZN@-YNE9F8*?7FY(>Zv0>uWpYFUQh~>JT{!a0SL~-=a zXz|^yj4*NXtvlm`#i_%OPrleFe*B`j;!3<-aO&tEYV$9{o2tHJ@9tPK;Sw_o@Wm^S z&blI+DW3e|wI@8+C-y>deW$*D_t`bGM-Pl*fm^>lybn1i_X}sUwxWHu-!nJ!vfgHb zKb`pM{pR(ao33aQ(yn_(TOn;LE_Zs`!{)}4C{@a{`#F=Yi5s$i!zFzzWwNB#ha}2pkCNo`_OTF5%OPlD@*y~@z3A*?LBj^8PeOrmi_6(*B|Vu_e@QRiIU6p z)5*VmdXVLIUEGb#qa|0b9G|r!r+8UT{x5I4Df8CSTk-zp^G{VyzWS1G;=>nyQ$2IU zK+X;QN6e}{aDWmNni+Lj+PsY&d?sE!K4*?+b?ue|2M)COd@a6~+phk_sA(&AXi;Eq zDZOrN=G4;FTMo1Ug=XWjn~MsIW-YvJ#p;JQ;ws&N`&)J_E1Wd`x@n7vr69F5-M_eS z>J2v)EnHT+qp1aPTUvHJylml|;-Z=J7A`@aON6*>=tWTx9WJHsoiVs)N1wOq$|n8d zQppCyP+VO%=*2hBmHncR)&DB{sZVz=zkX=H?%^N-mCNlXzkF-gI?wb;sl(#!7xjn? z55u?i*r6Ah+(Xf0rlU8cwNi0`#%@Myq%1GG*JF96JURJi9SKHq$muwZh{ zB>a!0JLQLpa(Lq_Z}z(j4{1oWiN`5AY*b1M1T;j`A#1du{z{IA_{o_0=YYxpmeDW&U}eCy?JN#qjzM zor^Z0VO!8l!B2A&CjIJfw6MqMUVo_$b~Ij$M+*jM5md%c7D4XA59 z1n=iZNqpC0iEJCtL404-j(71-;JwHayva%Z0ys&4-eSHn%6CIOA`xj!75c5cVduiO z!Y+VKT}u|Yi{VZYhS*HJaae#fs1HgKdFWcc;omI3o!{!qYtTbqz(pvFri0;oUm>*Q z<~1NMZv@hrjdVnT-Vq0T5PmNFlIVxG5uNBnmeqv!5sySxRo9}tQ^fO)BX#;ql2P8N zC~r1&&SgR8TqbnTW#B!_bi8Nj##@#tc>j{R=}gpDfcoH+B?TiRr5I%e7Ye^h{N&*x zUaZ2atky`Ji|8YlY~qGP!JVn%Qr7|T?Q4hW?X^SoY1^P1KKVZA$@w0dC(hJQ2mN>k zi+H)w4c+H>9}~D^^bWKWZlYkNYeGB!QEq3GcoR6$!s%{;J{jmoNBAJ%v0P5ct#>DP z2cH)4+_i1tZDA-c^>m!}r9qE~GnRb~cl|}8w$Ewkd&j%4_fHkZ`;SDLYb5ddz!>O0 zfWDHHslu?4Z^EV^T^ID?IBk;ND0(>zA`E@FH^~THELe@J2TOm^hd`J463K`x^BSCP zA)FbwrwIsax7C@9_uzf$l|qbO16^5;G~fZQkCFBW>aV~plX~P+&9`aoR_Jg+JF&d* ztJLAW*B1fz5vkDa@d@^}?r0Zut{|W4P+eFgb+RaL+Fl#Sw@ky5uf;ewIr*OMhty@4 z;m}bx1NCq-p3nC~EcLBW2RFyxAABu6;orDQ=xdG`(s0b3Yh~FDWAUbkxWq|)%X%R} z_wx*ST=K16;BJiqPOgZG_1$4g@dI>O7Kl7+L3_jnl!S;PZ`VKen-CgG<^nI;>4!@rGhDu}Y*5T;KH1usReJ=Vq#+@fXH}-Z& z3z42Dn|ccc%BJerM*4YjJ6lEbK)ZD^_#OKiSzj1T*Xa$SHPz7_RHAgHz8qoRKH_uK z$&eCnGw3YnyC~#OT&E;-9_YNGZVj85E~rDQyIq3z})b|2ObKs&a&IsY)o%6>eL7N zMvNi><9K2$=Sa3sOQfmhNMvY@CmHjN^$6Yq=lC5kf#2F_;prpX6>-!V_F`mr;X_FV zLqEv&NX*f`{6wi|cj)0my`#I!?@@CuYOnt!q39+n71AT!%f-Xp(QgAI)9Skm1AdwK z2CSGfrb1UE-jzmqW1!PzBFdH!8-w-4=gUKzX3OJA(~)AsNjb}Gm(uZDDqt+FzVxl^ zTeS>Bf-Rgv%ILzZ-%U+|GdNbt^G;gBZlBxAHeneA`^RHQvZHNSS7q#!28ah)bONE#|#g5n7mh`bWKEh)Y3^YQod@1?0BrQPs$Jok{A z;oER_4S~AQQvE!l*8D$cr+NgQQEYx&~r>-*(3;uBN;tGO$0Z_;e3|A5{J@_p(H5P30eCDM<7MKfl>tuC0=!&0 zRHN0G-?)E$t1$^MKI_XWY4x1|w|{zWX5?qIuw3|QZU%RShb2PBOC%Bu@yKt~j8@-D zcrZP!zAeDx{G}PK9@X$59@~-T81Vep1cvc8yG<~8s23I$>1Qgn>N`E_;&jKZ1VZPd)S0R z`|}m}?jiMx7_mQYiCkT6!d{tsf9e-;dOWDV)RX$%C9xXxb7c7ug8}<_MHgN->=j;( zG}au7jI0@4wHmnG^Tg=oy?qte5=Fm=vUit2M?Wd+rl5|IcvppZGZH!gp_lWW$e@~d zS03aZo3aO26^MA(D70x)mQ5ItZh;t7<ee)gNN8zyV_&UzBqJZt{xu*09aBW=R*w~XFys*g{(#<3 zHzDas>OG_m&t%~3gpG1+?T$QH9_D9J-6o`^7Xv0*kPno4qI}|v@=+%s^MqbWh?(jg z++(vW>wP1Qtn=q;_#?2HPPquF)y7#z`)u^}Ml?FFp73>vCA8HqAP%vX2$&`XcGYZOzwKInH$s z+BAC1KmV9DzN=cw#X7G)oxT0ee$ou*W}3jY+=c*c{w6x{uuPn>mP2(@2csoTIey}6 z^LaC%ZqvX7pWRR3;ep_M;SHNm+=DEUY->`0e{VC zWe;3?T}S|oj5ed;U6z<|dHc$X_4e{4S3=T=VF_KVy@^RfRs3_m=U_w!1g^a$SbG

!@zy&12(0PX*^Ca<8}J0|(%sqA0S$fT-c`_f)dxD3@Pbe+ z5&*x?4Ziu)jS}ib90S(9H+>a7S!UwPWdjcLa$+C`iBJc5WJ-B5kmq`DjP)MyUDE_O z(9!9LqemKgkr%y0vWhhP9Kcb^$gOZ%gXcslc(eL)>T*LnBYqn8#Ou9iZ!g;0i}v=S zy}jr|FWTIT{_vvRy=ZsTGp~W?6{|q+u>3L7z2X3P@g`A+cCYigkxq)(>@@;T0-P+K zfPUrm=>IzCX|5Y+m#zbky~*Hox9Fj7YasN8$>~5}*g)`Y(XM*bH9d|xw8K2<;3d;< zfZ|sLzp8Y6BlReUungsSg>@2GU#W4RYqFhd`Th8X~*yE z_q7126LU7&qa*KY6=JvX#{Lax56+V`pP)BMd)%vl@?Xw-TLa+c0Qmg?_^SZ;cmS-^ zCP4Tz{cZv9h4Owbgw|26dT5XLmTELkfVaYn(XcdOg@D(5JA0M5%cqbLpuC!_Xw_9R z=)m~_3n&pDO33vSawcCptt@9$8aPVPXtN+JvRtc!VM~O&L8lR6*n9^J(g+YQQ zmT3jzk-l-Na2s8wIp9x&=9JAD^jjBrE?{?{-+;%y)eQ4xnt{9+R{$Q%#(0@3J}lW# zXOyJ6X=(M%fZLybBkz}Ku)ZK4+UV6lUQBTp^~gmWt?qD&uJF#F-;myU(Qm-xe4!aF zFWP?HDeGq@9~7U$S?RY!Xb4G51h|?rkbWyeyVPiz`r);IlmR*;x}x6_lA%q4=G^of zp8gks^xIC*Z`7G-6+>6LL4&1$1~ZB)R|+wFWin_n>eO^@s};`LCiJ6orA5T9^xdIP z$rM|c`+TWM;vt^t|F)6(HZ>ickS^Yu4w_Dg=B>_69^v!|owLfVYueRIH2t-oXo5^{ zQvwPjJhd@6?{lsKE#|Q#Ig9z$BI&49eYi|VT~>i~yeJpwjAuY!?C>Hl&`F)^oy-88 z0%?#My>L_*M0|w}vycTm7^AqPqK~lEM7hbs=%vF`u;6)A3Bq=F2F7=qj%SH>cQM9- z0bwx;Y%9h&KL=)91$IpEH>m!3>X~6iz?osOd?ra+!vUU%O{~S)?Q9X%gnak)Ge{_d z4P14?_NHV*vgi$XfPD6Ew@wjmkbdOXB*}P(RsRg+m4Wlg2%UUBj4~V2O~4zkocX#z z!{A(*>1HCXoL5tj!6ruNqV_SL-UjzR8+eM$d#zj+`r-V4DD->k40~*HJ1A)y4RYDs zHl5wgG?lXPOxL|w54w?cN>$4>9_30$xmGA=j}pp-vq_t{T0M)d5V^uwW4Ez=A>V*- zJLpI35fEprjN5+JdY9i>>k{yWD~v%no3&f#B55PG$#vJM1dgy-L>eXmp8?-Qy<^>Mu(+ys`dp^)itEuA_X?i_w zjBJcOmWMPUZavq;qg^py_29TfdZ2OFdpWLg0~x=k>V){Xfn}T|)0q=vTk&2T679mA zKb@F?6#kv)#9P!B<9b3m@ov8sM0Z^9ncaoZZGLmFdNaG-2PBewYNwG?2eCN(tMZ}P z7n;%5^*}miHs}}=kj_QNl>4Q{H1ToCCXkNl3eN>>tP~|`G(o)cp<~tt;IXWo(J|YA zCuxbp*6Pde(4UT>?mn%)XQN{dc2VD4q^H##PSF)!ARR-z^Pyu715f^5m^h4<7i|pH zHggJ-t9WrX20k869(3;?Q9-S)%?q7auBN#PIXJLzRR)1L>IG zMJ~bCLhq;mFNDQziL9tTqMi#mt32X}!RVlDT2thJnrP4_R?syT&^_9D5!WZm*68Ik z8b!VnJ{I~))CvjIk1|ajOzZ zPcXiHRhm9#E%+R!(pbvt7@~=j2L_puTPF+UmSQ{%x5k2=N@TjA0rV!}s4-jwnGkd; z*M0In$cG~T#wbP_5BLlYH+VYa4beRa{zI{!79b4xgZy7bkObexUuA+09b3|Jy|$+5>Y0R$nKW$WdBtY!Ao{e zGznJ?z7H$oGh9wXj;Gh7yAVF0MoSmra+>G|FZuy%^3zzGpThb|{ow<)YUgY=mG9J+ z7V`SW=k7_E`7s|kKQ$kmsa;R_3#`e^kGv~pl_I**MSiw*xuc$NcIUs-x_l=a4yF$# z53b7(DxmyVo@f3K&yF&n{%P9$8M4mo`~_uDo2{`_&J5|eN^?JM>JpguiCA^a9uW zdL+P!S2G%({Lqi0n7*UV;jZ`=BhH_1VMJm5*ZWA+AQ@}BL8K0D0?&f?BKBZS-wocy zPVg+YgCDUC>w5#%_f6nS)Z@IR7UxK-aEBoT>$?Z?+TdPd{WYds)pmb^`$ot-dzu8# zn)G6CCGI%XIM;%IfioFrmBgxAoSWRRP0KvnB7qaS%!8FC1ZQ2%Rz2=q=#fYW)}3I; zg}fabbEMADysan3QT@Os*v>dNyT(!}_B6&E*?|@hUIsVTyzK*>$&wuAjPvN_u*gWn z+cA)7;JjsECFK9ptUbWBXm0f2j(~G#lis-rr(4LA=R4K#_x0D~3@$Zk4c*|;(7hJ! zcTf;-!IdeWWJ3y*g14>%nOU<;St;*9h=vaQ;(=d~wDUyo|W^ zxKRS1SAEf&Jv6oE6ZOLdolCuFzUbhtyI zV>yaZ2b0(%*JGV{tr7I!GGXt5cH0L&P@UXP#p30GabhoU>Ttf;>qbP9bFBUNDd7#uOSJe;dF zd!>E`h(G=|mNM!{3p}SEVi}jbphrQEwE8~YYPVg6^QJoRYnEUPrB@1(zshdSKs%(a z0ZT@v?bw%;#m^8g4zz>+MEY+@cc6&8dYh;etB@Ds03K5*f!+-kEmqQ~FJ2rXVyz#` zX`tU-J*{rhGs}bb**ae4KHq09!=Mn*cd3q; ztgFSBzEt^s1?yxJFN!D^XvU;q%&+T3R2=H$dI|1j!U}hj6eMDjKLO4A325OZxa9!3 ze3VDw1$`{!yD!pmyt^{eXm>5co}$?slNE0WvE}GOtf{(qDGl=yxMNZz2DzGr z*#!zOYqTy-zF)z*UXAm(OPsf(9YH8N2f1DpKfrBvr3*=<#eD}kDQA`t-@-2>YqYSJ zj6-?$tiBI0#^>s;c{69D|2m%E?L#R#$gcZOc=?^lq4OH;wAtBs+>FxeE-5xv^7Bf$ zLQ1?4Ev%e`G{YMyAsPUinh&@>Yv%8lDL+$x`Au5lu&EE7qg^uw%zm>p05(f=s~=4L z<#(wtt_I0;Zo{F+U>4Ecqyr#g-}nH%Njb%sp199D`;*)wKCm8wD)%YN5SP=Fb8OAF`APx6({ zn~!Jf=H|~YoK`wx?sQ6B<(J&z7p0((H@y8k7R)V~mOsnS18)cA04qm6UA7#cfVau}Ru#F&2I0IA0Je&To%jh4W$SoVuF>ewEF(T9LuuIS{@_8cd?pT~K zMe>}Hvngf7%V|SKoCb#p{~$Rra!p*!0QlV_TN^!wrfJm$rC z94A^C;1sKXC()rArbm;3A8A@Qel$~&0MlT7IY$zY@C5w))7z#c0Dl@SEZ5IX|E};f z`W=(GY=}2jb<<+L;C0B;pM@yU>o zmGfmhwu#nfaEbI&uQYVn{;OQ*{8gMK5bE}r_l4f1D>GL^hWFnP<%88WQTIU5zdlY z++oF---lmQF6c;)?zC@~Gsae=YxTY63=z|et-flf#~KcvSOucq&;UBq@GD$Dr1d9+i5S~V^uday3Y|1l=B>qK<;gVIpsZA#J?jQE+byd>gDmBp*QQr` zBkTsG``}WA&bvXT?_&0)AuXJ1*eYZP;e#T1N-@e*nPOz`%91D?EI39oA9eaXr)w z%f~bW*U^jsJbwR-7r2h*0#Aa!X0-Zdz{7tX-HrM(jdQJ|9u~&WXkaeW6PV|Scl!ASTC#U^3-eaGrHN48Uz)4=-R@lgEpe;F;^1K4AZC=rA^^iO{Y^hRr+P zmv?}T0#6FJ83QE1$F)Jk4;GU;z+qx)2iPpX_pf6> zwq`MmW*~l?XU~Plb=iM^#q>H`7ly$<9{VtDZsVNhkH@?S<1_6rrYXlO!A~<TAkn&T#x*X26EhLZiaV-ce9G8&G*FXY`*6>_un_&2)y%| z?`H$=AmWlm0Paqg`=%7s_ilu1Mk{;Ze18ylD>Nk78s24z!-jVz57E_ppE&&dbpP_uIxby5BA@(>>jorQ6uZvy5!rV~taEn;NTixO1b!of{qQ+~{^R zF4k>tEYUsHI9rE1H@a<&nYs;)Q+1Cw=IS=%p3TOAZr$%1zxNqA&pV{+!^*>Oj^KtQ zgeS@fUTdoBA@G*D4|>R;+&8g_nW%du){VUmP3EB0_hJL(1KqmyUQMoncT9{T&vDeZ zJld_RYxMcH#n$3Hqy=|+Bwg)e_NrBwweTJn?(evSE_e#!@@%68XDU43;F{))L>*Y3R z@>N;6&-@+Mt|DWd<00JreGYDx)eYUOlJ0Tv_VbYUtjejVPYdqGIHeY0pE3(?FW`Ps zF5YO$l5kEyoW+&d^jpQbp|`_sD}i7Bs!Q?4mCqM36m5yV)$S~ft8_zgaE1hc z*A2!UnK1Dyhv!&7VL$e~Aq!^;Li`!OivPC96{6j4N1o5)oMD5DaqY*b31-v=oJu@q z5dAJ0E1G)!Is?7xTW}ZE9J3guT$hz zk2M>f_q`D<#PbaX(HxhAyUH%zGnjT`?h%o}*zecj4Y@3gnS4jBNUNnRkx?{9+pXIS zR^ZV8ApG5{f{~Bj5iU|E`h0v(Xh4MMT=*uAR9o@3SA6b1F-mwMjp7>kZE6r= z8GfHNSj7?8u}e)N?mmo1-1mw_zr}6fTUW|kTYQI%cfl`l9`#*~XO8n(HiuRB81mUP z5d0C0{pQR0UGY2Q7#AXJr4rZVjL%5bnXO|{r@vI2<7SBXjNc2hG(&FZ?|ipMn_Xjd zd`D~mz6_5G=Z|Pdm#(?mgNv?q+j;}uKudP%I7ieuJjsxEN`B1HB0jHng9pPtYrz|8 zl5PyfJ@5g;U9X*e3cFFr=a{BS9JMy~RhCiU)(Bwhbm>D`7+HwKFK=)cqZU5UM7B88Q>JhfG5$R z8m+z=fc@#=-G23jv#q`p;Py`s%W?;!h2@?np2jC(y=ju03g5TZ1iw6Dp?C0&1m%qq=)wa50hw{(eO&<&&w|?gPQh&H9$|=!T>qtt1St!X?*t-ej!5ol@t|>rs^n{L|Imz zUr;WHc}SppZBaes_gZ?3y6c^r1j-juVHAhs@Ty}LVJXT~<8*o2)O#u4066-a1Pn9w)o8}6}7~asf&#>Ey1lRV{zV-Ex(z=8)UrbwTTkXx< zd(^h|&y#sM<3N8ywuyPO3~rZ+N8{ylBS^OJ`9>Zjjh~o4YT|{Q9(9~E z&*ZcHz4S`p+lgoL*=}M7sOCcCTr^$*k}VxPJC|+2<*Y@@8;4MyHGkfW zX^PlMyS7PxffYqGwOwE(aim76wI7DTl_>CMDB6W|KoE9|Q(yGh(wljpahM13g)@n-o8CN-2H!fQah977PSKka08c}>Ut3Q3m-S;l zaocA5(Ck2ir=m-5MVymQ`xC&S+b4~x6K!YJp9WkEffzcH=ge}Mj%}j8Eu3N&=yj)z zpUTfomy&)>buM?ogo_}t-fISY#7Vh6Doj7E(Vr zd1mIwjFnFP>$a|Ri;o7K*SyP4G2*W9FcARn47%GPzuO{=aTyNz-3=DJceRvb9wiRq zordWmU{1xi{j$dttHXRhApn_O5zBzQdAu|${IJL}_d;HKHO5KQTU>_w++`cVM_eUx zy|<&!b{ih=ZumD+#>JcKy$RpBQ}Ro*0He+v)!PV^?dSUkjpC_}p2UVA^kYNLdvX!q zMhJBZEsBXSOXwlW-}9{m%HS7@hj-M8|HR$0hpB@b{A=qy1-_vG-P}9))&k|~Lp!?# z<@!zW_>R!77~13!=w+H#6x!Np^due)l7}W@Ii!C+ z|Bn+-K-UrP6NtPp^2rvzMVu+)KxeZH=LN-Mgy}#$>a-hpctfBsB@E;J;Tq7|k0D?1 zr@}jB8qm)g(-fjSl+giQQ4&YuC+i;WG^AbAX@nxw#s8GpfpgpAiJRkDBCBXO&UCx* z3mm>3@q~q42Uyf8R7Ute;7y`vp$;0_{B$mOu#2>M)U6&e@E!WFU<~E>n<_-KX@n?h zdJ1*fy`u^|+g$H>ErdqT6E79zLH0fjx%-IN54~8A?$N~^x*$Fp#!qxbp4`(=u6|rBNB6Hdq7BDB zD`X1&blK)FNFFikb|CA@V6l0n{2pJ#*aUxfyFYwPGe?fVc*+1S8-U|$B>{7U?h(Q5 zQPYF*(2k_zx0AnU;#*rh>w_BaE*L90WAPh9cFn}N1is^N-%><9xT{$Snfn)71K_Xo z1qYwF8F^2Rm{$&4SpZn-ou{q@byh-|G>pM5pA>bNT4NhR;V$e`x-k9m4UR6^2Se)x z@a8>+cnkNsZ;6(|t}yPaii6)6h46axC%#+3GP%$5oAr#_QjEH6zf13F|3Kn2Bn5-oA|N#1dYMj>keoAP$i zDD$5jq}yM&6;0Z*8M-^PfOiba(>Gs+JWxLJxEbl!#E&DN{&{5e=FzkddF)0WYm#|f zBJ+5OZ_!9R*TXNOdhi@^uyvF;)EdHg=?Z&sR!E(zyJeq&4meQT(L(68C}ICH>hqG{ z3->j&f;xQ1x@s}eXgl{p@ZW!0-V#Q+H*w7I`!Nl_uXV>`H}qE2Yy74hFRMOD4vfh2 zV2P27d>06NYzbK~xCq>@Z0Rc{Tuc@=#!Csk@7RV=i(Fl+s$tVb)zj0{%0Ncg)Y{m4w}fb$Y-xGe|j45_F$ZR6K#=g(HWblGv+K? zKTKR_UH15`Z@_m!ilb`f>wa0}ubL*l2t0Zc!OiKQK zCb(kL-IHzcXEw@M>kmG4A04dpKkSM>S$@gMT>M!MPG7^)+Ul!oo0rzkxJDg5RZjcp z#0k6^Z{O!}fhqomWT)71^T89WwHbCxms#8pJIc~d$T+bN?cy0BM7M3D!K5F=qO_0F z23Z4<32C>{2J9i*uJ*u>Ml-QdroGd)57>4#_FfF90c%W{w0ThUzP#7)&Sk+k#(;(Z zdeW5QZ()w@fraLf#?7@QmyT$hYT`se0?4k1!0Cq=}+k zI3Fpa%DrI1#kOugiytuUhD@Pni;orsv9}(D{dOVF(x_i2v{h)K&Tix( z@}j#=M?d2m1zl`P(1@mP?RU?#{Z?N7@I}gxsUf4hD|!ao9&g)imHZ9d1#Sh64;_D3 zw0cBqd%!G~bRYM$0=n81?;{X?0(EWyt(777QoVHD20^-laC^?nK!3tpf8h-5hYw?| z#62VE29AdL9%4x6KFlA^(0l2$)3wV%r|H=D;FcE%qpA3n6zO;_4PSo(gJCiM~G{yT^p?44Fr zVBePuI&2SU7|41zk8tP&vi3C8Db$aKX~N5x(4NG%21V>j&@f$~VGPK-;n+@W+`I#{ zizO$%0d?LOx9Un69%o&l_iq&LL4g)ids-jfEL8X8LCeQw9cNbnH@U(!}eevmYm zMTfC|SM;T^Oi5#5pUL`FlEx}j_0z@ko3MWfagW)KdUDT+5#8z!S3(x>cHGITByLDc z`fLkvLt4^j87qs!m!o5Owq$@uWyMcHe5V~x+=E*v8^(SRlX-io3$PoB(wKp0xV|(R zx@hu@@E?grQ@Q}Z=4e4VFZY*{8H%uXI*D;9EuL=mx2d8T*O2C_zFN^-u3$xDS?5HQ z_i03(X|J&DHMUJuz%={2qH%_zC$I^dHxp>1N#xq?ft`(C$o8vsaHVn}oJOsIZW<>Y z9M^g$jYBxnD$1~2=IN$!*1OPvbI6DDnB3v2fM^lBLlg3#Ke3=LF9f-zBr~j`G z=@jm8{!Qo!{8v`gHmdG!8fQJ)B_)kBvE;<$;!7enO*A--vkqlCX&lM{@qRF5wjsyL zyTO*M&AFgUpm_qnIDYbY3E!}#EjrqOoNtAAiTjB04$~ z`OimuCeqJGd?w1BFXM}S6`&#O3dw&2#Zm)Wr;X(*oQThUtVhJ@4anw?77gPvMdvK= zGt2SLHSwr1k%l@`rXZc>nH}A}G@Xvt1 z)b<~QercZe1)X}X~qlYR=h7f2FR zSdST*{tuZ~ex#aHMG82~NGE=6y3g4ETannX?}ykE^Vh4-u31{wH6oO!R>gzXstUJGo( z9fnP~L-b=3JxV_(Q<(RUNAlk2F=3xk#$!9&Jd;g`;F^mjlVgQ&TyI0RAIr2f)Ys@V z%Il^l(!oWL*hx&~Ej}y^XXrdqtfdS<_$ZLFv z6|jxMkwZoG0Y<%!isQU8X%w8A=&!l*>LJ~~o^S&1EF8+{Pj?*3Uxl?(4|eCbwn1xF zp(t3r?KH7F2rfi8$GbGs!!CBT^x$jo5*-M8CX=Q{O3>o=YKx^i(mfoSI<22 z?0^0De?Rv>|MS1U?(Y80!Gq5qdf|l^UpjpFw=ci^yCbi>^6G0xkN*A-fBfU?e|qDM zKOcMZ&A+_W^L7H5j5@FMpFTWw`js<3^07~Rs&;Pu{Dq6ITgsZRK*ev2wX9m*DyxlJ zqtdF*ovOxmeOX=B7L|Q~l|@}q)kjrDQO~FBTB4HA*;PahQNiD$dPi72)DD$H-B`8b zsM~2{OFvXO{i<2BudSVjC!v=vyWw+RSox(duUdW6&0lHnxb16S|Ceum>pR~?RW{$g z_4_}#bNkM_?z#8Ae@7i2{4px9_hA%|Rzle*`d809i*kS6{hQ|xp-dF{>T4+PPj8?! zw!=w~H+|-!cZ0sU)Y0pBf1cbMWq5!7qsjxDa=oAI%*c#}WJ79O=_buD6<|x{Xe@FC;7=Kc{4Ch>D-@|tVS*Jj=<}6##(0uir z=7!oUC)Z9W=@&X9W$4FbC~&L9F9QoE*RM?2JOiPBlkJb%{++fT*85J+i1F#TKdjx* z%xHjdO#!OX5O4MkWjwaSO~({sjo=zO7#(v|Wn|lG{c_VW>EKuf>ei&PA>2^t7|JO- z;Yfqf@8*k`fHM)UjKY`wz)8nc0$=7a7#$N;2-+DcZyo%~&8T#6ijDzUA`RglbtF{v z`yyf)%=V$l0@09)j%h`lla7I!)*+n{jUyZi7>tf7M}>YNYhe9RRdv%b)o8zOq<~wv zWMOlyCEUJ@giP{`s3eUZnG4nXpo8;I_!g;?f1=*n-sR5>X5$>l!?U3^ogx&AfmXA0 zt?>@(r^gFZ<7SOVz>VxpNNEw3VhkVsaAoZ@^muFkOg=lho7_Lorp>_y^Y_MQ zuaj6=f7JZtUQZstgva?AO(N$t!g0P0*?tUVX`KCl0ji(7*OPQ`oG+d03E`aU1j}Wf zZa(`?7aZ%BYCYM9a1%de6uwmmaIPm$17GGrdbKoNhiz1T?seihWZtfT zU@JI9@KKNNJm-DeH0#8LWo1LwH&#=Kav~eNrLx?xAfLS(``u3Hps9rJnb7)9yiSL= z1)*DJfBx#WYoU8)7WB^4K<`X7bktNq_e>PJXUd>=hVuR%vAmFP_8iEMw+$1k<=udh z;B~JZd129EBNKbq`IzCL$KIB&r+)JN`GNKW`GM_HeiHgzP+kYh=s+1AD5C>qbf7LB zD5nGU=s;PP%p`QU9KxGGhmA9#7r#@)*5ZtO?PNW=wg9__tD(<*nV?=0$`^zn*Ba{V zG`yoG6%|B5J81hLulqS-oyWa*C>BLM#2$~l{tEeqAOmaR?2jR9mI=H8(-A6*;;t`b z!6S93BRMjVHwO&m2=2!oK6E&y=3S`|AhL7j|k5koSG4qZ{t+TBnb4 z67;8&l>lzpCg=pFC!Qfw;GO81kVP?*{?Pg;+PI?KQ=qp8d560b8cBo)yqApj@uJ>q zj?7%6ehhd)&o9_ml2Rm2PhtGvz@HZ2MK@H~*Iiem~N3w!VBQv+>L=FkFh&u6G z#G(Am?UWZjobTD*g`xxA7GS80z4`if@^40p4Hy;V*H}E88qhkP0t1R{#P+wKV<(7r zuCu{gDZ=>>-Wdpn#F(oO<)49}Yn@5`9%Z}Fq^KK~xEz5k&~JzXS` z{r+Ir?->ajN89S{9~WcLy(!}(X!67;PZ4zMB>n3^>zR)Db@?9L_2`ZFBEBANp`l&y z7WeitwAV`5Iq-vSEYB7rgKh9H9x1jru7(<;kl4A$`JeVGw{8rlWFru`L?C= z`>@xH^dbuD;E9@CDg-uD8F<6E>bN!)70a zJbki#erLy7dIl!roUWlwm=l3Z)zwUfbdn}AxFem%No5Yj*GfT%6 zWNy#Iw+zG1gFOm%6n8-U=3a3OZK0u078ZE62l35(_@NfTQuw2ABMtNic-oKUXSI9r z&CiFdc+|`i%!_)R^2HhbvVvOIaWJ%dr%(_#-RuG@oXOf zdz38O*nSLo6rv2);nzruHxh!Ui3Nqw%@`aE57wQysPqSrz7%;47mbC#GKLLMZl+ys zmMr%tNXIeC`#zasVfZv*=5y>`|6n%iosIsUje2L}K2dfsh&J%yHwu2M?pd;(OA&S# z@`*}37lwxmbEXgQSMSO~9$EMXS;!-6dm-%JJhJROvbVp6v>bauz)ZZyO2aa|fX5rU zGObl!wk-dU#5D``Fxt-&^TJu8ZWh`h+2?MtzsJ*3?@>IMVZ%fnFki7@p0HscV^vxV zoomReaHe<(vxe2*+HAO=*l<~*d)Dv8=4AY>cKrRx_|93Tn3AkZyB&X*9l!rfPkVMj z#`bX-Bl)7vyZ=lBeIf=)KLhugHbv&oH}EZ1iN1FqH`;e4SEGI&yz{b3u+NS|eGec# z=csagd#+W3$@X!*>M;`CoD@@=f%dh1Wy0z(&!2-#$ak{LjeYjLCIZ#ISL&7MOZd%W zn*O>R<}a^ZRP_bwg(#y2iC%BX1ebqO%Jfnf#QB#lueff>_$6~|m)|gV{xaq!Q>TlR z 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%0AC2=*EZ=DS{nO(=G+5kz!cWvb81#JisD0NJ<~-+w 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 From e6427df701e9c7034a12466353f135efabaecec3 Mon Sep 17 00:00:00 2001 From: Joel16 Date: Fri, 11 Apr 2025 13:52:22 +0100 Subject: [PATCH 21/24] options: Reduce repeated width calcs and cleanup code --- app/source/gui/options.cpp | 153 ++++++++++++++++++++++--------------- 1 file changed, 93 insertions(+), 60 deletions(-) diff --git a/app/source/gui/options.cpp b/app/source/gui/options.cpp index 38ba57c..1a06e30 100644 --- a/app/source/gui/options.cpp +++ b/app/source/gui/options.cpp @@ -6,39 +6,44 @@ #include "g2d.h" #include "gui.h" #include "kernel_functions.h" +#include "log.h" #include "textures.h" #include "utils.h" static int row = 0, column = 0; -static bool copy = false, move = false, options_more = false; +static bool copy = false, move = false, moreOptions = false; namespace Options { static void ResetSelector(void) { row = 0; column = 0; } + + static void RefreshDirectory(MenuItem &item) { + FS::GetDirList(cfg.cwd, item.entries); + GUI::ResetCheckbox(item); + } static void HandleMultipleCopy(MenuItem &item, int (*func)()) { int ret = 0; std::vector entries; - if (R_FAILED(ret = FS::GetDirList(item.checked_cwd.data(), entries))) + if (R_FAILED(ret = FS::GetDirList(item.checked_cwd.data(), entries))) { return; + } for (u32 i = 0; i < item.checked_copy.size(); i++) { - if (item.checked_copy.at(i)) { + if (item.checked_copy[i]) { FS::Copy(entries[i], item.checked_cwd); + if (R_FAILED((*func)())) { - FS::GetDirList(cfg.cwd, item.entries); - GUI::ResetCheckbox(item); + Options::RefreshDirectory(item); break; } } } - FS::GetDirList(cfg.cwd, item.entries); - GUI::ResetCheckbox(item); - entries.clear(); + Options::RefreshDirectory(item); } static void CreateFolder(MenuItem &item) { @@ -46,8 +51,7 @@ namespace Options { std::string path = FS::BuildPath(cfg.cwd, name); if (R_SUCCEEDED(FS::MakeDir(path.c_str()))) { - FS::GetDirList(cfg.cwd, item.entries); - GUI::ResetCheckbox(item); + Options::RefreshDirectory(item); } } @@ -56,8 +60,7 @@ namespace Options { std::string path = FS::BuildPath(cfg.cwd, name); if (R_SUCCEEDED(FS::CreateFile(path.c_str()))) { - FS::GetDirList(cfg.cwd, item.entries); - GUI::ResetCheckbox(item); + Options::RefreshDirectory(item); } } @@ -73,28 +76,33 @@ namespace Options { #endif FS::GetDirList(cfg.cwd, item.entries); Options::ResetSelector(); - options_more = false; + moreOptions = false; item.state = MENU_STATE_FILEBROWSER; } } static void Copy(MenuItem &item) { if (!copy) { - if ((item.checked_count >= 1) && (item.checked_cwd.compare(cfg.cwd) != 0)) + if ((item.checked_count >= 1) && (item.checked_cwd.compare(cfg.cwd) != 0)) { GUI::ResetCheckbox(item); - if (item.checked_count <= 1) + } + if (item.checked_count <= 1) { FS::Copy(item.entries[item.selected], cfg.cwd); + } copy = !copy; item.state = MENU_STATE_FILEBROWSER; } else { - if ((item.checked_count > 1) && (item.checked_cwd.compare(cfg.cwd) != 0)) + Log::Error("In !copy\n"); + if ((item.checked_count > 1) && (item.checked_cwd.compare(cfg.cwd) != 0)) { + Log::Error("In !copy IF\n"); Options::HandleMultipleCopy(item, &FS::Paste); + } else { + Log::Error("In !copy ELSE\n"); if (R_SUCCEEDED(FS::Paste())) { - FS::GetDirList(cfg.cwd, item.entries); - GUI::ResetCheckbox(item); + Options::RefreshDirectory(item); } } @@ -106,18 +114,20 @@ namespace Options { static void Move(MenuItem &item) { if (!move) { - if ((item.checked_count >= 1) && (item.checked_cwd.compare(cfg.cwd) != 0)) + if ((item.checked_count >= 1) && (item.checked_cwd.compare(cfg.cwd) != 0)) { GUI::ResetCheckbox(item); + } - if (item.checked_count <= 1) + if (item.checked_count <= 1) { FS::Copy(item.entries[item.selected], cfg.cwd); + } } else { - if ((item.checked_count > 1) && (item.checked_cwd.compare(cfg.cwd) != 0)) + if ((item.checked_count > 1) && (item.checked_cwd.compare(cfg.cwd) != 0)) { Options::HandleMultipleCopy(item, &FS::Move); + } else if (R_SUCCEEDED(FS::Move())) { - FS::GetDirList(cfg.cwd, item.entries); - GUI::ResetCheckbox(item); + Options::RefreshDirectory(item); } } @@ -128,34 +138,44 @@ namespace Options { namespace GUI { void DisplayFileOptions(MenuItem &item) { + int cancelWidth = intraFontMeasureText(font, "CANCEL"); + G2D::DrawRect(0, 18, 480, 254, G2D_RGBA(0, 0, 0, cfg.dark_theme? 50 : 80)); G2D::DrawImage(options_dialog[cfg.dark_theme], (480 - options_dialog[0]->w) / 2, (272 - options_dialog[0]->h) / 2); G2D::FontSetStyle(1.f, TITLE_COLOUR, INTRAFONT_ALIGN_LEFT); G2D::DrawText(140, 52, "Actions"); - if (row == 0 && column == 0) + if (row == 0 && column == 0) { G2D::DrawRect(132, 71, 107, 38, SELECTOR_COLOUR); - else if (row == 1 && column == 0) + } + else if (row == 1 && column == 0) { G2D::DrawRect(241, 71, 107, 38, SELECTOR_COLOUR); - else if (row == 0 && column == 1) + } + else if (row == 0 && column == 1) { G2D::DrawRect(132, 110, 107, 38, SELECTOR_COLOUR); - else if (row == 1 && column == 1) + } + else if (row == 1 && column == 1) { G2D::DrawRect(241, 110, 107, 38, SELECTOR_COLOUR); - else if (row == 0 && column == 2 && !options_more) + } + else if (row == 0 && column == 2 && !moreOptions) { G2D::DrawRect(132, 148, 107, 38, SELECTOR_COLOUR); - else if (row == 1 && column == 2 && !options_more) + } + else if (row == 1 && column == 2 && !moreOptions) { G2D::DrawRect(241, 148, 107, 38, SELECTOR_COLOUR); - else if (column == 3 && !options_more) - G2D::DrawRect((340 - intraFontMeasureText(font, "CANCEL")) - 5, (230 - (font->texYSize - 6)) - 5, intraFontMeasureText(font, "CANCEL") + 10, + } + else if (column == 3 && !moreOptions) { + G2D::DrawRect((340 - cancelWidth) - 5, (230 - (font->texYSize - 6)) - 5, cancelWidth + 10, (font->texYSize - 6) + 10, SELECTOR_COLOUR); - else if (column == 2 && options_more) - G2D::DrawRect((340 - intraFontMeasureText(font, "CANCEL")) - 5, (230 - (font->texYSize - 6)) - 5, intraFontMeasureText(font, "CANCEL") + 10, + } + else if (column == 2 && moreOptions) { + G2D::DrawRect((340 - cancelWidth) - 5, (230 - (font->texYSize - 6)) - 5, cancelWidth + 10, (font->texYSize - 6) + 10, SELECTOR_COLOUR); + } - G2D::DrawText(340 - intraFontMeasureText(font, "CANCEL"), 230 - (font->texYSize - 15), "CANCEL"); + G2D::DrawText(340 - cancelWidth, 230 - (font->texYSize - 15), "CANCEL"); G2D::FontSetStyle(1.f, TEXT_COLOUR, INTRAFONT_ALIGN_LEFT); - if (!options_more) { + if (!moreOptions) { G2D::DrawText(143, 95, "Properties"); G2D::DrawText(143, 133, copy? "Paste" : "Copy"); G2D::DrawText(143, 171, "Delete"); @@ -171,84 +191,97 @@ namespace GUI { } void ControlFileOptions(MenuItem &item, int &ctrl) { - if (ctrl & PSP_CTRL_RIGHT) + if (ctrl & PSP_CTRL_RIGHT) { row++; - else if (ctrl & PSP_CTRL_LEFT) + } + else if (ctrl & PSP_CTRL_LEFT) { row--; + } - if (ctrl & PSP_CTRL_DOWN) + if (ctrl & PSP_CTRL_DOWN) { column++; - else if (ctrl & PSP_CTRL_UP) + } + else if (ctrl & PSP_CTRL_UP) { column--; + } - if (!options_more) { + if (!moreOptions) { Utils::SetBounds(row, 0, 1); Utils::SetBounds(column, 0, 3); } else { Utils::SetBounds(column, 0, 2); - if (column == 1) + if (column == 1) { Utils::SetBounds(row, 0, 0); - else + } + else { Utils::SetBounds(row, 0, 1); + } } if (Utils::IsButtonPressed(PSP_CTRL_ENTER)) { - const std::string filename = item.entries[item.selected].d_name; - if (row == 0) { - if (!options_more) { - if (column == 0) + if (!moreOptions) { + if (column == 0) { item.state = MENU_STATE_PROPERTIES; - else if (column == 1) + } + else if (column == 1) { Options::Copy(item); - else if (column == 2) + } + else if (column == 2) { item.state = MENU_STATE_DELETE; + } } else { - if (column == 0) + if (column == 0) { Options::CreateFolder(item); - else if (column == 1) - Options::Rename(item, filename); + } + else if (column == 1) { + Options::Rename(item, item.entries[item.selected].d_name); + } } } else if (row == 1) { - if (!options_more) { + if (!moreOptions) { if (column == 0) { FS::GetDirList(cfg.cwd, item.entries); Options::ResetSelector(); - options_more = false; + moreOptions = false; item.selected = 0; item.state = MENU_STATE_FILEBROWSER; } - else if (column == 1) + else if (column == 1) { Options::Move(item); + } else if (column == 2) { Options::ResetSelector(); - options_more = true; + moreOptions = true; } } else { - if (column == 0) + if (column == 0) { Options::CreateFile(item); + } } } if (column == 3) { copy = false; move = false; Options::ResetSelector(); - options_more = false; + moreOptions = false; item.state = MENU_STATE_FILEBROWSER; } } if (Utils::IsButtonPressed(PSP_CTRL_CANCEL)) { Options::ResetSelector(); - if (!options_more) + if (!moreOptions) { item.state = MENU_STATE_FILEBROWSER; - else - options_more = false; + } + else { + moreOptions = false; + } } } } From eb2e8853299ee8f74d1e28cf7ca06155bdfb3c3a Mon Sep 17 00:00:00 2001 From: Joel16 Date: Fri, 11 Apr 2025 15:26:16 +0100 Subject: [PATCH 22/24] lib: Use libzma from pspsdk --- libs/lib/liblzma.a | Bin 1409476 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 libs/lib/liblzma.a diff --git a/libs/lib/liblzma.a b/libs/lib/liblzma.a deleted file mode 100644 index 90459e4f94955ac7503d26f8acadc288217bd3a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1409476 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 z%0D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

X1dZCbD}y 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

<)jB*g#-OJz&f{4*AiJP#$#q{V&mGh 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 From eb9857ac084b69fdc89c95c5cd5eae6427a4603a Mon Sep 17 00:00:00 2001 From: Joel16 Date: Fri, 11 Apr 2025 17:54:01 +0100 Subject: [PATCH 23/24] libs: Update glib2d --- libs/lib/libglib2d.a | Bin 65714 -> 59842 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/libs/lib/libglib2d.a b/libs/lib/libglib2d.a index 7fb71b73c2a0c8114cbcab28c39f077a80b385bc..487cfc1ebbdf1c0cd4f7e6c3107f51fe8ab712ce 100644 GIT binary patch literal 59842 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 literal 65714 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 TUN`CK8otmqt|3x!;p6`R^WJ@W From c3dd313924f0d0ba1a179783a9bb955aff74da9a Mon Sep 17 00:00:00 2001 From: Joel16 Date: Fri, 11 Apr 2025 17:56:47 +0100 Subject: [PATCH 24/24] ci: Only build on next branch --- .github/workflows/c-cpp.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 1cae5de..ac0af12 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -2,9 +2,9 @@ name: C/C++ CI on: push: - branches: [ next, module ] + branches: [ next ] pull_request: - branches: [ next, module ] + branches: [ next ] jobs: build: