From 425c52add35c87a13e3cf7ba1e5c1c429f445baf Mon Sep 17 00:00:00 2001 From: Maschell Date: Fri, 11 Dec 2020 16:41:37 +0100 Subject: [PATCH] Port plugin to Aroma --- .clang-format | 67 ++ .github/workflows/ci.yml | 72 ++ .github/workflows/pr.yml | 32 + .gitignore | 7 +- .travis.yml | 31 - Dockerfile | 8 +- Makefile | 357 +++------ README.md | 55 +- ScreenshotPlugin.cbp | 47 -- libs/include/jconfig.h | 74 -- libs/include/jerror.h | 317 -------- libs/include/jmorecfg.h | 421 ----------- libs/include/jpeglib.h | 1122 --------------------------- libs/include/turbojpeg.h | 1545 -------------------------------------- libs/lib/libjpeg.a | Bin 528136 -> 0 bytes libs/lib/libturbojpeg.a | Bin 618848 -> 0 bytes makefile.mk | 64 -- src/JpegInformation.cpp | 17 - src/JpegInformation.h | 26 - src/common.h | 17 +- src/fs/FSUtils.cpp | 76 ++ src/fs/FSUtils.h | 11 + src/function_patcher.cpp | 120 ++- src/main.cpp | 359 +++++---- src/main.h | 5 + src/retain_vars.cpp | 11 +- src/retain_vars.hpp | 17 +- src/screenshot_utils.cpp | 365 +++++---- src/screenshot_utils.h | 17 +- src/utils/StringTools.h | 14 + src/utils/logger.c | 36 + src/utils/logger.h | 72 ++ src/utils/utils.h | 12 + src/version.h | 2 + 34 files changed, 1104 insertions(+), 4292 deletions(-) create mode 100644 .clang-format create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/pr.yml delete mode 100644 .travis.yml delete mode 100644 ScreenshotPlugin.cbp delete mode 100644 libs/include/jconfig.h delete mode 100644 libs/include/jerror.h delete mode 100644 libs/include/jmorecfg.h delete mode 100644 libs/include/jpeglib.h delete mode 100644 libs/include/turbojpeg.h delete mode 100644 libs/lib/libjpeg.a delete mode 100644 libs/lib/libturbojpeg.a delete mode 100644 makefile.mk delete mode 100644 src/JpegInformation.cpp delete mode 100644 src/JpegInformation.h create mode 100644 src/fs/FSUtils.cpp create mode 100644 src/fs/FSUtils.h create mode 100644 src/main.h create mode 100644 src/utils/StringTools.h create mode 100644 src/utils/logger.c create mode 100644 src/utils/logger.h create mode 100644 src/utils/utils.h create mode 100644 src/version.h diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..56cc685 --- /dev/null +++ b/.clang-format @@ -0,0 +1,67 @@ +# Generated from CLion C/C++ Code Style settings +BasedOnStyle: LLVM +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: Consecutive +AlignConsecutiveMacros: AcrossEmptyLinesAndComments +AlignOperands: Align +AllowAllArgumentsOnNextLine: false +AllowAllConstructorInitializersOnNextLine: false +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: Always +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Always +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: true +AlwaysBreakAfterReturnType: None +AlwaysBreakTemplateDeclarations: Yes +BreakBeforeBraces: Custom +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterUnion: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: true +BreakBeforeBinaryOperators: None +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: BeforeColon +BreakInheritanceList: BeforeColon +ColumnLimit: 0 +CompactNamespaces: false +ContinuationIndentWidth: 8 +IndentCaseLabels: true +IndentPPDirectives: None +IndentWidth: 4 +KeepEmptyLinesAtTheStartOfBlocks: true +MaxEmptyLinesToKeep: 2 +NamespaceIndentation: All +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PointerAlignment: Right +ReflowComments: false +SpaceAfterCStyleCast: true +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInCStyleCastParentheses: false +SpacesInContainerLiterals: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +TabWidth: 4 +UseTab: Never diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..e4f1d8d --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,72 @@ +name: CI-Release + +on: + push: + branches: + - master + +jobs: + clang-format: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v2 + - name: clang-format + run: | + docker run --rm -v ${PWD}:/src wiiuenv/clang-format:13.0.0-2 -r ./src + build-binary: + runs-on: ubuntu-22.04 + needs: clang-format + steps: + - uses: actions/checkout@v2 + - name: create version.h + run: | + git_hash=$(git rev-parse --short "$GITHUB_SHA") + cat < ./src/version.h + #pragma once + #define VERSION_EXTRA " (nightly-$git_hash)" + EOF + - name: build binary + run: | + docker build . -t builder + docker run --rm -v ${PWD}:/project builder make + - uses: actions/upload-artifact@master + with: + name: binary + path: "*.wps" + deploy-binary: + needs: build-binary + runs-on: ubuntu-22.04 + steps: + - name: Get environment variables + id: get_repository_name + run: | + echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//") >> $GITHUB_ENV + echo DATETIME=$(echo $(date '+%Y%m%d-%H%M%S')) >> $GITHUB_ENV + - uses: actions/download-artifact@master + with: + name: binary + - name: zip artifact + run: zip -r ${{ env.REPOSITORY_NAME }}_${{ env.DATETIME }}.zip *.wps + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ env.REPOSITORY_NAME }}-${{ env.DATETIME }} + release_name: Nightly-${{ env.REPOSITORY_NAME }}-${{ env.DATETIME }} + draft: false + prerelease: true + body: | + Not a stable release: + ${{ github.event.head_commit.message }} + - name: Upload Release Asset + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps + asset_path: ./${{ env.REPOSITORY_NAME }}_${{ env.DATETIME }}.zip + asset_name: ${{ env.REPOSITORY_NAME }}_${{ env.DATETIME }}.zip + asset_content_type: application/zip \ No newline at end of file diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000..1417aa3 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,32 @@ +name: CI-PR + +on: [pull_request] + +jobs: + clang-format: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v2 + - name: clang-format + run: | + docker run --rm -v ${PWD}:/src wiiuenv/clang-format:13.0.0-2 -r ./src + build-binary: + runs-on: ubuntu-22.04 + needs: clang-format + steps: + - uses: actions/checkout@v2 + - name: create version.h + run: | + git_hash=$(git rev-parse --short "${{ github.event.pull_request.head.sha }}") + cat < ./src/version.h + #pragma once + #define VERSION_EXTRA " (nightly-$git_hash)" + EOF + - name: build binary + run: | + docker build . -t builder + docker run --rm -v ${PWD}:/project builder make + - uses: actions/upload-artifact@master + with: + name: binary + path: "*.wps" \ No newline at end of file diff --git a/.gitignore b/.gitignore index fb82516..014c4a6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ build/* -*.mod \ No newline at end of file +*.mod +cmake-build-debug/ +.idea/ +*.wps +*.elf +CMakeLists.txt diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 6f17f52..0000000 --- a/.travis.yml +++ /dev/null @@ -1,31 +0,0 @@ -sudo: required -branches: - only: - - master -services: -- docker -addons: - apt: - packages: - - p7zip-full -before_script: -- docker build . -t screenshot-builder -script: -- docker run -it --rm -v ${PWD}:/project screenshot-builder make -before_deploy: -- cd $TRAVIS_BUILD_DIR/ -- mkdir -p "wiiu/plugins" -- commit="$(git rev-parse --short=7 HEAD)" -- find -type f -name "*.mod" | xargs -i cp {} wiiu/plugins -- zip -r screenshot_wups_nightly_$commit.zip wiiu -- git config --local user.name "Maschell" -- git config --local user.email "Maschell@gmx.de" -- git tag "ScreenshotWUPS-$(date +'%Y%m%d%H%M%S')-$(git log --format=%h -1)" -deploy: - provider: releases - skip_cleanup: true - api_key: - secure: HU3Ymp5pGjTj4z59sFAkDc02WhQol+CER9UTEpvLjLuklzbguuSc6rtnorA+krWBJvk1+Gl50JqlhhI9HuauU/oTvNQLah3DC29aDmxAHFQ7fk5FDap+BBYTkb7CKPI5l1k4GRqK3EwKQMJ2L+/BdwraLHazLbU22OPPYSZvrsGBej3Nvdg6C6QcwYN3E2nO5lbxnclag+6MduKKfyvd7zA/llexrZXYC71HskEcRHIX/ol5l3yiR9L/0LcGU1hn63+O6wdC58+RxuvfRE8Zj/O853yWmAs4ltUBsFstDMvzmw9aYlN0bK8nvYvv1oBOR4ql4aPwkaEjAUzEorIBIFn8gSSdHNM5QmW+Zf+nPdIQVpS4EsDZbvM7QoptdgOuZVk7MnTVKg/7vZVDI7IMm3T/GleuwsvKs6+/jPjEhvslyKLKRaQGREGPCtAkPbDn9S8eVyhgkqQk1g5+O0RA6t9FmiOS+QPyhjSyqGPaHXQvsiN2PmGnE1YbjqUBBoy2tly4TUb+M/gGYDipKyCuQiqCpp04GYmIIHjxpIZOTZGA/klUODKTBG6DOnVNBqsYBpSwO9PIYO+gPWWBXzRF4A2/fB2TuAWVSB3FZ/Ml7AVZWXcU8l84uhKmLNJ+oeXDDDcrt4iAvjfoiWWATD0WEoZgiFDQ98nM6EqgRMQ4f1Q= - file: screenshot_wups_nightly_$commit.zip - on: - repo: Maschell/ScreenshotWUPS diff --git a/Dockerfile b/Dockerfile index bb39974..b545c5f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -FROM wups/core-with-wut:0.1 +FROM wiiuenv/devkitppc:20220917 -# Get dependencies -COPY --from=wiiuwut/libutils:0.1 /artifacts $WUT_ROOT +COPY --from=wiiuenv/wiiupluginsystem:20220904 /artifacts $DEVKITPRO +COPY --from=wiiuenv/libmappedmemory:20220904 /artifacts $DEVKITPRO -WORKDIR project +WORKDIR project \ No newline at end of file diff --git a/Makefile b/Makefile index dd480be..68424b8 100644 --- a/Makefile +++ b/Makefile @@ -1,300 +1,147 @@ -# You probably never need to adjust this Makefile. -# All changes can be done in the makefile.mk - -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- .SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif +#------------------------------------------------------------------------------- + ifeq ($(strip $(DEVKITPRO)),) -$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPRO") +$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=/devkitpro") endif -export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH) -export PORTLIBS := $(DEVKITPRO)/portlibs/ppc -export WUPSDIR := $(DEVKITPRO)/wups -export GCC_VER := $(shell $(DEVKITPPC)/bin/powerpc-eabi-gcc -dumpversion) +TOPDIR ?= $(CURDIR) -PREFIX := powerpc-eabi- +include $(DEVKITPRO)/wups/share/wups_rules -export AS := $(PREFIX)as -export CC := $(PREFIX)gcc -export CXX := $(PREFIX)g++ -export LD := $(PREFIX)ld -export AR := $(PREFIX)ar -export OBJCOPY := $(PREFIX)objcopy +WUT_ROOT := $(DEVKITPRO)/wut +WUMS_ROOT := $(DEVKITPRO)/wums -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- # TARGET is the name of the output # BUILD is the directory where object files & intermediate files will be placed # SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := $(notdir $(CURDIR)) -BUILD := build +# DATA is a list of directories containing data files +# INCLUDES is a list of directories containing header files +#------------------------------------------------------------------------------- +TARGET := screenshot +BUILD := build +SOURCES := src src/utils src/fs +DATA := data +INCLUDES := src -ifeq ($(notdir $(CURDIR)),$(BUILD)) - include ../makefile.mk -else - include makefile.mk -endif - -include $(WUPSDIR)/plugin_makefile.mk - - -#MAP ?= $(TARGET:.mod=.map) - -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- # options for code generation -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- +CFLAGS := -Wall -O2 -ffunction-sections \ + $(MACHDEP) -# -Os: optimise size -# -Wall: generate lots of warnings -# -D__wiiu__: define the symbol __wiiu__ (used in some headers) -# -mcpu=750: enable processor specific compilation -# -meabi: enable eabi specific compilation -# -mhard-float: enable hardware floating point instructions -# -nostartfiles: Do not use the standard system startup files when linking -# -ffunction-sections: split up functions so linker can garbage collect -# -fdata-sections: split up data so linker can garbage collect -COMMON_CFLAGS := -Os -Wall -mcpu=750 -meabi -mhard-float -D__WIIU__ -nostartfiles -ffunction-sections -fdata-sections -Wl,-q $(COMMON_CFLAGS) +CFLAGS += $(INCLUDE) -D__WIIU__ -D__WUT__ -D__WUPS__ -# -x c: compile as c code -# -std=c11: use the c11 standard -CFLAGS := $(COMMON_CFLAGS) -x c -std=gnu11 $(CFLAGS) +CXXFLAGS := $(CFLAGS) -# -x c: compile as c++ code -# -std=gnu++11: use the c++11 standard -CXXFLAGS := $(COMMON_CFLAGS) -x c++ -std=gnu++11 $(CXXFLAGS) +ASFLAGS := -g $(ARCH) +LDFLAGS = -g $(ARCH) $(RPXSPECS) -Wl,-Map,$(notdir $*.map) -T$(WUMS_ROOT)/share/libmappedmemory.ld $(WUPSSPECS) -ifeq ($(DO_LOGGING), 1) - CFLAGS += -D__LOGGING__ - CXXFLAGS += -D__LOGGING__ +ifeq ($(DEBUG),1) +CXXFLAGS += -DDEBUG -g +CFLAGS += -DDEBUG -g endif -#--------------------------------------------------------------------------------- -# any extra ld flags -#-------------------------------------------------------------------------------- -# --gc-sections: remove unneeded symbols -# -Map: generate a map file -LDFLAGS += -Wl,-Map,$(notdir $@).map,--gc-sections - - -#--------------------------------------------------------------------------------- -Q := @ -MAKEFLAGS += --no-print-directory -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS += -# -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS += - -NEEDS_WUT := 0 - -ifeq ($(WUT_ENABLE_CPP), 1) - WUT_ENABLE_NEWLIB := 1 - - LDFLAGS += -Wl,-whole-archive,-lwutstdc++,-no-whole-archive - NEEDS_WUT := 1 +ifeq ($(DEBUG),VERBOSE) +CXXFLAGS += -DDEBUG -DVERBOSE_DEBUG -g +CFLAGS += -DDEBUG -DVERBOSE_DEBUG -g endif -ifeq ($(WUT_ENABLE_NEWLIB), 1) - LDFLAGS += -Wl,-whole-archive,-lwutnewlib,-no-whole-archive - NEEDS_WUT := 1 -endif +LIBS := -lwups -lwut -lgd -lpng -ljpeg -lz -lmappedmemory -ifeq ($(WUT_DEFAULT_MALLOC), 1) - LDFLAGS += -Wl,-whole-archive,-lwutmalloc,-no-whole-archive - NEEDS_WUT := 1 -endif +#------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level +# containing include and lib +#------------------------------------------------------------------------------- +LIBDIRS := $(PORTLIBS) $(WUPS_ROOT) $(WUT_ROOT) $(WUMS_ROOT) -ifeq ($(NEEDS_WUT), 1) - ifeq ($(strip $(WUT_ROOT)),) - $(error "Please set WUT_ROOT in your environment. export WUT_ROOT=wut) - endif - CFLAGS += -D__WUT__ - CXXFLAGS += -D__WUT__ -endif - -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- # no real need to edit anything past this point unless you need to add additional # rules for different file extensions -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- -export PROJECTDIR := $(CURDIR) -export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET) -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) -TTFFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.ttf))) -PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export REAL_LD := $(CC) -else - export REAL_LD := $(CXX) -endif - -export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE_FULL += $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - $(EXTERNAL_INCLUDE) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS_FULL += $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - $(EXTERNAL_LIBPATHS) - +#------------------------------------------------------------------------------- export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean install +export TOPDIR := $(CURDIR) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#------------------------------------------------------------------------------- + export LD := $(CC) +#------------------------------------------------------------------------------- +else +#------------------------------------------------------------------------------- + export LD := $(CXX) +#------------------------------------------------------------------------------- +endif +#------------------------------------------------------------------------------- + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) +export OFILES_SRC := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) +export OFILES := $(OFILES_BIN) $(OFILES_SRC) +export HFILES_BIN := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +.PHONY: $(BUILD) clean all + +#------------------------------------------------------------------------------- +all: $(BUILD) -#--------------------------------------------------------------------------------- $(BUILD): - @[ -d $@ ] || mkdir -p $@ + @$(shell [ ! -d $(BUILD) ] && mkdir -p $(BUILD)) @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- + +#------------------------------------------------------------------------------- clean: @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).mod $(OUTPUT) + @rm -fr $(BUILD) $(TARGET).wps $(TARGET).elf -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- else +.PHONY: all DEPENDS := $(OFILES:.o=.d) -THIS_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) +#------------------------------------------------------------------------------- +# main targets +#------------------------------------------------------------------------------- +all : $(OUTPUT).wps -############################################################################### -# Rule to make everything. -PHONY += all +$(OUTPUT).wps : $(OUTPUT).elf +$(OUTPUT).elf : $(OFILES) -all : $(OUTPUT) -############################################################################### -# Special build rules +$(OFILES_SRC) : $(HFILES_BIN) - -# Rule to make the module file. -$(OUTPUT) : $(OFILES) - @echo "linking ... " $@ - @$(REAL_LD) $(OFILES) $(LDFLAGS) $(LIBS) $(LIBPATHS_FULL) -o $@ - -############################################################################### -# Standard build rules -#--------------------------------------------------------------------------------- -%.a: -#--------------------------------------------------------------------------------- - @echo $(notdir $@) - @rm -f $@ - @$(AR) -rc $@ $^ - -#--------------------------------------------------------------------------------- -%.o: %.cpp +#------------------------------------------------------------------------------- +# you need a rule like this for each extension you use as binary data +#------------------------------------------------------------------------------- +%.bin.o %_bin.h : %.bin +#------------------------------------------------------------------------------- @echo $(notdir $<) - @$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) + @$(bin2o) -#--------------------------------------------------------------------------------- -%.o: %.c - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.o: %.S - @echo $(notdir $<) - @$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(INCLUDE_FULL) -c $< -o $@ $(ERROR_FILTER) - -#--------------------------------------------------------------------------------- -%.png.o : %.png - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.jpg.o : %.jpg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ttf.o : %.ttf - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.bin.o : %.bin - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.wav.o : %.wav - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.mp3.o : %.mp3 - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -#--------------------------------------------------------------------------------- -%.ogg.o : %.ogg - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -############################################################################### -# Assembly listing rules - -# Rule to make assembly listing. -PHONY += list -list : $(LIST) - -# Rule to make the listing file. -%.list : $(TARGET) - $(LOG) - -$Qmkdir -p $(dir $@) - $Q$(OBJDUMP) -d $< > $@ - -############################################################################### -# Clean rule - -# Rule to clean files. -PHONY += clean -clean : - $Qrm -rf $(wildcard $(BUILD) $(BIN)) - -############################################################################### -# Phony targets - -.PHONY : $(PHONY) - -include $(DEPENDS) -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- endif -#--------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- diff --git a/README.md b/README.md index 426b8fd..ac83beb 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,52 @@ -# Screenshot tool [![Build Status](https://api.travis-ci.org/Maschell/ScreenshotWUPS.svg?branch=master)](https://travis-ci.org/Maschell/ScreenshotWUPS) +# Screenshot Plugin -This is just a simple plugin that takes screenshot of the TV and DRC screen. The screenshot will saved on the sd card in the folder "sd:/wiiu/screenshots/" +This is just a simple plugin that takes screenshot of the TV and DRC screen. +The screenshot will be saved on the SD card in the folder `sd:/wiiu/screenshots` -## Wii U Plugin System -This is a plugin for the [Wii U Plugin System (WUPS)](https://github.com/Maschell/WiiUPluginSystem/). To be able to use this plugin you have to place the resulting `.mod` file into the following folder: +## Installation +(`[ENVIRONMENT]` is a placeholder for the actual environment name.) -``` -sd:/wiiu/plugins -``` -When the file is placed on the SDCard you can load it with [plugin loader](https://github.com/Maschell/WiiUPluginSystem/). +1. Copy the file `screenshot.wps` into `sd:/wiiu/environments/[ENVIRONMENT]/plugins`. +2. Requires the [WiiUPluginLoaderBackend](https://github.com/wiiu-env/WiiUPluginLoaderBackend) in `sd:/wiiu/environments/[ENVIRONMENT]/modules`. +3. Requires the [MemoryMappingModule](https://github.com/wiiu-env/MemoryMappingModule) in `sd:/wiiu/environments/[ENVIRONMENT]/modules`. + +## Usage +Press ZL + L + ZR + R on the gamepad to take a screenshot. + +Via the plugin config menu (press L, DPAD Down and Minus on the gamepad) you can configure the plugin. The available options are the following: +- **Settings**: + - Enabled: (Default is true) + - Enables or disables the screenshot plugin. + - Output format: (Default is JPEG) + - Determines which file is used. Currently saving screens as .jpg, .png and .bmp is supported. + - Screen: (Default is TV and Gamepad) + - Determines from which screen a screenshot should be taken. Possible options: TV & Gamepad, TV only, Gamepad only. + - JPEG quality: (Default is 90) + - Determines the quality when saving as JPEG. Lowest possible quality is 10, highest 100. ## Building For building you need: -- [wups](https://github.com/Maschell/WiiUPluginSystem) +- [wups](https://github.com/wiiu-env/WiiUPluginSystem) - [wut](https://github.com/decaf-emu/wut) -- [libutilswut](https://github.com/Maschell/libutils/tree/wut) (WUT version) for common functions. +- [libmappedmemory](https://github.com/wiiu-env/libmappedmemory) +- PPC versions of zlib, libgd, libpng, libjpeg (install via `pacman -Syu ppc-zlib ppc-libgd ppc-libpng ppc-libjpeg-turbo`) -Install them (in this order) according to their README's. Don't forget the dependencies of the libs itself. +## Building using the Dockerfile -Other external libraries are already located in the `libs` folder. - -- libjpeg -- libturbojpeg - -### Building using the Dockerfile It's possible to use a docker image for building. This way you don't need anything installed on your host system. ``` -# Build docker image (only needed once -docker build . -t screenshot-builder +# Build docker image (only needed once) +docker build . -t screenshot-plugin-builder # make -docker run -it --rm -v ${PWD}:/project screenshot-builder make +docker run -it --rm -v ${PWD}:/project screenshot-plugin-builder make # make clean -docker run -it --rm -v ${PWD}:/project screenshot-builder make clean +docker run -it --rm -v ${PWD}:/project screenshot-plugin-builder make clean ``` + +## Format the code via docker + +`docker run --rm -v ${PWD}:/src wiiuenv/clang-format:13.0.0-2 -r ./src -i` diff --git a/ScreenshotPlugin.cbp b/ScreenshotPlugin.cbp deleted file mode 100644 index f3b5c7f..0000000 --- a/ScreenshotPlugin.cbp +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - diff --git a/libs/include/jconfig.h b/libs/include/jconfig.h deleted file mode 100644 index 04ca8da..0000000 --- a/libs/include/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/jerror.h b/libs/include/jerror.h deleted file mode 100644 index 11a07cb..0000000 --- a/libs/include/jerror.h +++ /dev/null @@ -1,317 +0,0 @@ -/* - * jerror.h - * - * This file was part of the Independent JPEG Group's software: - * Copyright (C) 1994-1997, Thomas G. Lane. - * Modified 1997-2009 by Guido Vollbeding. - * libjpeg-turbo Modifications: - * Copyright (C) 2014, D. R. Commander. - * For conditions of distribution and use, see the accompanying README.ijg - * file. - * - * This file defines the error and message codes for the JPEG library. - * Edit this file to add new codes, or to translate the message strings to - * some other language. - * A set of error-reporting macros are defined too. Some applications using - * the JPEG library may wish to include this file to get the error codes - * and/or the macros. - */ - -/* - * To define the enum list of message codes, include this file without - * defining macro JMESSAGE. To create a message string table, include it - * again with a suitable JMESSAGE definition (see jerror.c for an example). - */ -#ifndef JMESSAGE -#ifndef JERROR_H -/* First time through, define the enum list */ -#define JMAKE_ENUM_LIST -#else -/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */ -#define JMESSAGE(code,string) -#endif /* JERROR_H */ -#endif /* JMESSAGE */ - -#ifdef JMAKE_ENUM_LIST - -typedef enum { - -#define JMESSAGE(code,string) code , - -#endif /* JMAKE_ENUM_LIST */ - -JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */ - -/* For maintenance convenience, list is alphabetical by message code name */ -#if JPEG_LIB_VERSION < 70 -JMESSAGE(JERR_ARITH_NOTIMPL, - "Sorry, arithmetic coding is not implemented") -#endif -JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix") -JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix") -JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode") -JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS") -#if JPEG_LIB_VERSION >= 70 -JMESSAGE(JERR_BAD_CROP_SPEC, "Invalid crop request") -#endif -JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range") -JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported") -#if JPEG_LIB_VERSION >= 70 -JMESSAGE(JERR_BAD_DROP_SAMPLING, - "Component index %d: mismatching sampling ratio %d:%d, %d:%d, %c") -#endif -JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition") -JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace") -JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace") -JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length") -JMESSAGE(JERR_BAD_LIB_VERSION, - "Wrong JPEG library version: library is %d, caller expects %d") -JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan") -JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d") -JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d") -JMESSAGE(JERR_BAD_PROGRESSION, - "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d") -JMESSAGE(JERR_BAD_PROG_SCRIPT, - "Invalid progressive parameters at scan script entry %d") -JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors") -JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d") -JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d") -JMESSAGE(JERR_BAD_STRUCT_SIZE, - "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u") -JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access") -JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small") -JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here") -JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet") -JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d") -JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request") -JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d") -JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x") -JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d") -JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d") -JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)") -JMESSAGE(JERR_EMS_READ, "Read from EMS failed") -JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed") -JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan") -JMESSAGE(JERR_FILE_READ, "Input file read error") -JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?") -JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet") -JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow") -JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry") -JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels") -JMESSAGE(JERR_INPUT_EMPTY, "Empty input file") -JMESSAGE(JERR_INPUT_EOF, "Premature end of input file") -JMESSAGE(JERR_MISMATCHED_QUANT_TABLE, - "Cannot transcode due to multiple use of quantization table %d") -JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data") -JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change") -JMESSAGE(JERR_NOTIMPL, "Not implemented yet") -JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time") -#if JPEG_LIB_VERSION >= 70 -JMESSAGE(JERR_NO_ARITH_TABLE, "Arithmetic table 0x%02x was not defined") -#endif -JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported") -JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined") -JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image") -JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined") -JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x") -JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)") -JMESSAGE(JERR_QUANT_COMPONENTS, - "Cannot quantize more than %d color components") -JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors") -JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors") -JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers") -JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker") -JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x") -JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers") -JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF") -JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s") -JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file") -JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file") -JMESSAGE(JERR_TFILE_WRITE, - "Write failed on temporary file --- out of disk space?") -JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines") -JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x") -JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up") -JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation") -JMESSAGE(JERR_XMS_READ, "Read from XMS failed") -JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed") -JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT_SHORT) -JMESSAGE(JMSG_VERSION, JVERSION) -JMESSAGE(JTRC_16BIT_TABLES, - "Caution: quantization tables are too coarse for baseline JPEG") -JMESSAGE(JTRC_ADOBE, - "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d") -JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u") -JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u") -JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x") -JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x") -JMESSAGE(JTRC_DQT, "Define Quantization Table %d precision %d") -JMESSAGE(JTRC_DRI, "Define Restart Interval %u") -JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u") -JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u") -JMESSAGE(JTRC_EOI, "End Of Image") -JMESSAGE(JTRC_HUFFBITS, " %3d %3d %3d %3d %3d %3d %3d %3d") -JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d %d") -JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE, - "Warning: thumbnail image size does not match data length %u") -JMESSAGE(JTRC_JFIF_EXTENSION, - "JFIF extension marker: type 0x%02x, length %u") -JMESSAGE(JTRC_JFIF_THUMBNAIL, " with %d x %d thumbnail image") -JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u") -JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x") -JMESSAGE(JTRC_QUANTVALS, " %4u %4u %4u %4u %4u %4u %4u %4u") -JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors") -JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors") -JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization") -JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d") -JMESSAGE(JTRC_RST, "RST%d") -JMESSAGE(JTRC_SMOOTH_NOTIMPL, - "Smoothing not supported with nonstandard sampling ratios") -JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d") -JMESSAGE(JTRC_SOF_COMPONENT, " Component %d: %dhx%dv q=%d") -JMESSAGE(JTRC_SOI, "Start of Image") -JMESSAGE(JTRC_SOS, "Start Of Scan: %d components") -JMESSAGE(JTRC_SOS_COMPONENT, " Component %d: dc=%d ac=%d") -JMESSAGE(JTRC_SOS_PARAMS, " Ss=%d, Se=%d, Ah=%d, Al=%d") -JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s") -JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s") -JMESSAGE(JTRC_THUMB_JPEG, - "JFIF extension marker: JPEG-compressed thumbnail image, length %u") -JMESSAGE(JTRC_THUMB_PALETTE, - "JFIF extension marker: palette thumbnail image, length %u") -JMESSAGE(JTRC_THUMB_RGB, - "JFIF extension marker: RGB thumbnail image, length %u") -JMESSAGE(JTRC_UNKNOWN_IDS, - "Unrecognized component IDs %d %d %d, assuming YCbCr") -JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u") -JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u") -JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d") -#if JPEG_LIB_VERSION >= 70 -JMESSAGE(JWRN_ARITH_BAD_CODE, "Corrupt JPEG data: bad arithmetic code") -#endif -JMESSAGE(JWRN_BOGUS_PROGRESSION, - "Inconsistent progression sequence for component %d coefficient %d") -JMESSAGE(JWRN_EXTRANEOUS_DATA, - "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x") -JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment") -JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code") -JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d") -JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file") -JMESSAGE(JWRN_MUST_RESYNC, - "Corrupt JPEG data: found marker 0x%02x instead of RST%d") -JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG") -JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines") -#if JPEG_LIB_VERSION < 70 -JMESSAGE(JERR_BAD_CROP_SPEC, "Invalid crop request") -#if defined(C_ARITH_CODING_SUPPORTED) || defined(D_ARITH_CODING_SUPPORTED) -JMESSAGE(JERR_NO_ARITH_TABLE, "Arithmetic table 0x%02x was not defined") -JMESSAGE(JWRN_ARITH_BAD_CODE, "Corrupt JPEG data: bad arithmetic code") -#endif -#endif - -#ifdef JMAKE_ENUM_LIST - - JMSG_LASTMSGCODE -} J_MESSAGE_CODE; - -#undef JMAKE_ENUM_LIST -#endif /* JMAKE_ENUM_LIST */ - -/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */ -#undef JMESSAGE - - -#ifndef JERROR_H -#define JERROR_H - -/* Macros to simplify using the error and trace message stuff */ -/* The first parameter is either type of cinfo pointer */ - -/* Fatal errors (print message and exit) */ -#define ERREXIT(cinfo,code) \ - ((cinfo)->err->msg_code = (code), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXIT1(cinfo,code,p1) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXIT2(cinfo,code,p1,p2) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXIT3(cinfo,code,p1,p2,p3) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (cinfo)->err->msg_parm.i[2] = (p3), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXIT4(cinfo,code,p1,p2,p3,p4) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (cinfo)->err->msg_parm.i[2] = (p3), \ - (cinfo)->err->msg_parm.i[3] = (p4), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXITS(cinfo,code,str) \ - ((cinfo)->err->msg_code = (code), \ - strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) - -#define MAKESTMT(stuff) do { stuff } while (0) - -/* Nonfatal errors (we can keep going, but the data is probably corrupt) */ -#define WARNMS(cinfo,code) \ - ((cinfo)->err->msg_code = (code), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) -#define WARNMS1(cinfo,code,p1) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) -#define WARNMS2(cinfo,code,p1,p2) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) - -/* Informational/debugging messages */ -#define TRACEMS(cinfo,lvl,code) \ - ((cinfo)->err->msg_code = (code), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) -#define TRACEMS1(cinfo,lvl,code,p1) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) -#define TRACEMS2(cinfo,lvl,code,p1,p2) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) -#define TRACEMS3(cinfo,lvl,code,p1,p2,p3) \ - MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ - _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \ - (cinfo)->err->msg_code = (code); \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) -#define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4) \ - MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ - _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ - (cinfo)->err->msg_code = (code); \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) -#define TRACEMS5(cinfo,lvl,code,p1,p2,p3,p4,p5) \ - MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ - _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ - _mp[4] = (p5); \ - (cinfo)->err->msg_code = (code); \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) -#define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8) \ - MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ - _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ - _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \ - (cinfo)->err->msg_code = (code); \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) -#define TRACEMSS(cinfo,lvl,code,str) \ - ((cinfo)->err->msg_code = (code), \ - strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) - -#endif /* JERROR_H */ diff --git a/libs/include/jmorecfg.h b/libs/include/jmorecfg.h deleted file mode 100644 index 1d96786..0000000 --- a/libs/include/jmorecfg.h +++ /dev/null @@ -1,421 +0,0 @@ -/* - * jmorecfg.h - * - * This file was part of the Independent JPEG Group's software: - * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 1997-2009 by Guido Vollbeding. - * libjpeg-turbo Modifications: - * Copyright (C) 2009, 2011, 2014-2015, D. R. Commander. - * For conditions of distribution and use, see the accompanying README.ijg - * file. - * - * This file contains additional configuration options that customize the - * JPEG software for special applications or support machine-dependent - * optimizations. Most users will not need to touch this file. - */ - - -/* - * Maximum number of components (color channels) allowed in JPEG image. - * To meet the letter of the JPEG spec, set this to 255. However, darn - * few applications need more than 4 channels (maybe 5 for CMYK + alpha - * mask). We recommend 10 as a reasonable compromise; use 4 if you are - * really short on memory. (Each allowed component costs a hundred or so - * bytes of storage, whether actually used in an image or not.) - */ - -#define MAX_COMPONENTS 10 /* maximum number of image components */ - - -/* - * Basic data types. - * You may need to change these if you have a machine with unusual data - * type sizes; for example, "char" not 8 bits, "short" not 16 bits, - * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, - * but it had better be at least 16. - */ - -/* Representation of a single sample (pixel element value). - * We frequently allocate large arrays of these, so it's important to keep - * them small. But if you have memory to burn and access to char or short - * arrays is very slow on your hardware, you might want to change these. - */ - -#if BITS_IN_JSAMPLE == 8 -/* JSAMPLE should be the smallest type that will hold the values 0..255. - * You can use a signed char by having GETJSAMPLE mask it with 0xFF. - */ - -#ifdef HAVE_UNSIGNED_CHAR - -typedef unsigned char JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#else /* not HAVE_UNSIGNED_CHAR */ - -typedef char JSAMPLE; -#ifdef __CHAR_UNSIGNED__ -#define GETJSAMPLE(value) ((int) (value)) -#else -#define GETJSAMPLE(value) ((int) (value) & 0xFF) -#endif /* __CHAR_UNSIGNED__ */ - -#endif /* HAVE_UNSIGNED_CHAR */ - -#define MAXJSAMPLE 255 -#define CENTERJSAMPLE 128 - -#endif /* BITS_IN_JSAMPLE == 8 */ - - -#if BITS_IN_JSAMPLE == 12 -/* JSAMPLE should be the smallest type that will hold the values 0..4095. - * On nearly all machines "short" will do nicely. - */ - -typedef short JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#define MAXJSAMPLE 4095 -#define CENTERJSAMPLE 2048 - -#endif /* BITS_IN_JSAMPLE == 12 */ - - -/* Representation of a DCT frequency coefficient. - * This should be a signed value of at least 16 bits; "short" is usually OK. - * Again, we allocate large arrays of these, but you can change to int - * if you have memory to burn and "short" is really slow. - */ - -typedef short JCOEF; - - -/* Compressed datastreams are represented as arrays of JOCTET. - * These must be EXACTLY 8 bits wide, at least once they are written to - * external storage. Note that when using the stdio data source/destination - * managers, this is also the data type passed to fread/fwrite. - */ - -#ifdef HAVE_UNSIGNED_CHAR - -typedef unsigned char JOCTET; -#define GETJOCTET(value) (value) - -#else /* not HAVE_UNSIGNED_CHAR */ - -typedef char JOCTET; -#ifdef __CHAR_UNSIGNED__ -#define GETJOCTET(value) (value) -#else -#define GETJOCTET(value) ((value) & 0xFF) -#endif /* __CHAR_UNSIGNED__ */ - -#endif /* HAVE_UNSIGNED_CHAR */ - - -/* These typedefs are used for various table entries and so forth. - * They must be at least as wide as specified; but making them too big - * won't cost a huge amount of memory, so we don't provide special - * extraction code like we did for JSAMPLE. (In other words, these - * typedefs live at a different point on the speed/space tradeoff curve.) - */ - -/* UINT8 must hold at least the values 0..255. */ - -#ifdef HAVE_UNSIGNED_CHAR -typedef unsigned char UINT8; -#else /* not HAVE_UNSIGNED_CHAR */ -#ifdef __CHAR_UNSIGNED__ -typedef char UINT8; -#else /* not __CHAR_UNSIGNED__ */ -typedef short UINT8; -#endif /* __CHAR_UNSIGNED__ */ -#endif /* HAVE_UNSIGNED_CHAR */ - -/* UINT16 must hold at least the values 0..65535. */ - -#ifdef HAVE_UNSIGNED_SHORT -typedef unsigned short UINT16; -#else /* not HAVE_UNSIGNED_SHORT */ -typedef unsigned int UINT16; -#endif /* HAVE_UNSIGNED_SHORT */ - -/* INT16 must hold at least the values -32768..32767. */ - -#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ -typedef short INT16; -#endif - -/* INT32 must hold at least signed 32-bit values. - * - * NOTE: The INT32 typedef dates back to libjpeg v5 (1994.) Integers were - * sometimes 16-bit back then (MS-DOS), which is why INT32 is typedef'd to - * long. It also wasn't common (or at least as common) in 1994 for INT32 to be - * defined by platform headers. Since then, however, INT32 is defined in - * several other common places: - * - * Xmd.h (X11 header) typedefs INT32 to int on 64-bit platforms and long on - * 32-bit platforms (i.e always a 32-bit signed type.) - * - * basetsd.h (Win32 header) typedefs INT32 to int (always a 32-bit signed type - * on modern platforms.) - * - * qglobal.h (Qt header) typedefs INT32 to int (always a 32-bit signed type on - * modern platforms.) - * - * This is a recipe for conflict, since "long" and "int" aren't always - * compatible types. Since the definition of INT32 has technically been part - * of the libjpeg API for more than 20 years, we can't remove it, but we do not - * use it internally any longer. We instead define a separate type (JLONG) - * for internal use, which ensures that internal behavior will always be the - * same regardless of any external headers that may be included. - */ - -#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ -#ifndef _BASETSD_H_ /* Microsoft defines it in basetsd.h */ -#ifndef _BASETSD_H /* MinGW is slightly different */ -#ifndef QGLOBAL_H /* Qt defines it in qglobal.h */ -typedef long INT32; -#endif -#endif -#endif -#endif - -/* Datatype used for image dimensions. The JPEG standard only supports - * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore - * "unsigned int" is sufficient on all machines. However, if you need to - * handle larger images and you don't mind deviating from the spec, you - * can change this datatype. (Note that changing this datatype will - * potentially require modifying the SIMD code. The x86-64 SIMD extensions, - * in particular, assume a 32-bit JDIMENSION.) - */ - -typedef unsigned int JDIMENSION; - -#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ - - -/* These macros are used in all function definitions and extern declarations. - * You could modify them if you need to change function linkage conventions; - * in particular, you'll need to do that to make the library a Windows DLL. - * Another application is to make all functions global for use with debuggers - * or code profilers that require it. - */ - -/* a function called through method pointers: */ -#define METHODDEF(type) static type -/* a function used only in its module: */ -#define LOCAL(type) static type -/* a function referenced thru EXTERNs: */ -#define GLOBAL(type) type -/* a reference to a GLOBAL function: */ -#define EXTERN(type) extern type - - -/* Originally, this macro was used as a way of defining function prototypes - * for both modern compilers as well as older compilers that did not support - * prototype parameters. libjpeg-turbo has never supported these older, - * non-ANSI compilers, but the macro is still included because there is some - * software out there that uses it. - */ - -#define JMETHOD(type,methodname,arglist) type (*methodname) arglist - - -/* libjpeg-turbo no longer supports platforms that have far symbols (MS-DOS), - * but again, some software relies on this macro. - */ - -#undef FAR -#define FAR - - -/* - * On a few systems, type boolean and/or its values FALSE, TRUE may appear - * in standard header files. Or you may have conflicts with application- - * specific header files that you want to include together with these files. - * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. - */ - -#ifndef HAVE_BOOLEAN -typedef int boolean; -#endif -#ifndef FALSE /* in case these macros already exist */ -#define FALSE 0 /* values of boolean */ -#endif -#ifndef TRUE -#define TRUE 1 -#endif - - -/* - * The remaining options affect code selection within the JPEG library, - * but they don't need to be visible to most applications using the library. - * To minimize application namespace pollution, the symbols won't be - * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. - */ - -#ifdef JPEG_INTERNALS -#define JPEG_INTERNAL_OPTIONS -#endif - -#ifdef JPEG_INTERNAL_OPTIONS - - -/* - * These defines indicate whether to include various optional functions. - * Undefining some of these symbols will produce a smaller but less capable - * library. Note that you can leave certain source files out of the - * compilation/linking process if you've #undef'd the corresponding symbols. - * (You may HAVE to do that if your compiler doesn't like null source files.) - */ - -/* Capability options common to encoder and decoder: */ - -#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ -#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ -#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ - -/* Encoder capability options: */ - -#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ -#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ -#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ -/* Note: if you selected 12-bit data precision, it is dangerous to turn off - * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit - * precision, so jchuff.c normally uses entropy optimization to compute - * usable tables for higher precision. If you don't want to do optimization, - * you'll have to supply different default Huffman tables. - * The exact same statements apply for progressive JPEG: the default tables - * don't work for progressive mode. (This may get fixed, however.) - */ -#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ - -/* Decoder capability options: */ - -#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ -#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ -#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ -#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ -#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ -#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ -#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ -#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ -#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ - -/* more capability options later, no doubt */ - - -/* - * The RGB_RED, RGB_GREEN, RGB_BLUE, and RGB_PIXELSIZE macros are a vestigial - * feature of libjpeg. The idea was that, if an application developer needed - * to compress from/decompress to a BGR/BGRX/RGBX/XBGR/XRGB buffer, they could - * change these macros, rebuild libjpeg, and link their application statically - * with it. In reality, few people ever did this, because there were some - * severe restrictions involved (cjpeg and djpeg no longer worked properly, - * compressing/decompressing RGB JPEGs no longer worked properly, and the color - * quantizer wouldn't work with pixel sizes other than 3.) Further, since all - * of the O/S-supplied versions of libjpeg were built with the default values - * of RGB_RED, RGB_GREEN, RGB_BLUE, and RGB_PIXELSIZE, many applications have - * come to regard these values as immutable. - * - * The libjpeg-turbo colorspace extensions provide a much cleaner way of - * compressing from/decompressing to buffers with arbitrary component orders - * and pixel sizes. Thus, we do not support changing the values of RGB_RED, - * RGB_GREEN, RGB_BLUE, or RGB_PIXELSIZE. In addition to the restrictions - * listed above, changing these values will also break the SIMD extensions and - * the regression tests. - */ - -#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ -#define RGB_GREEN 1 /* Offset of Green */ -#define RGB_BLUE 2 /* Offset of Blue */ -#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ - -#define JPEG_NUMCS 17 - -#define EXT_RGB_RED 0 -#define EXT_RGB_GREEN 1 -#define EXT_RGB_BLUE 2 -#define EXT_RGB_PIXELSIZE 3 - -#define EXT_RGBX_RED 0 -#define EXT_RGBX_GREEN 1 -#define EXT_RGBX_BLUE 2 -#define EXT_RGBX_PIXELSIZE 4 - -#define EXT_BGR_RED 2 -#define EXT_BGR_GREEN 1 -#define EXT_BGR_BLUE 0 -#define EXT_BGR_PIXELSIZE 3 - -#define EXT_BGRX_RED 2 -#define EXT_BGRX_GREEN 1 -#define EXT_BGRX_BLUE 0 -#define EXT_BGRX_PIXELSIZE 4 - -#define EXT_XBGR_RED 3 -#define EXT_XBGR_GREEN 2 -#define EXT_XBGR_BLUE 1 -#define EXT_XBGR_PIXELSIZE 4 - -#define EXT_XRGB_RED 1 -#define EXT_XRGB_GREEN 2 -#define EXT_XRGB_BLUE 3 -#define EXT_XRGB_PIXELSIZE 4 - -static const int rgb_red[JPEG_NUMCS] = { - -1, -1, RGB_RED, -1, -1, -1, EXT_RGB_RED, EXT_RGBX_RED, - EXT_BGR_RED, EXT_BGRX_RED, EXT_XBGR_RED, EXT_XRGB_RED, - EXT_RGBX_RED, EXT_BGRX_RED, EXT_XBGR_RED, EXT_XRGB_RED, - -1 -}; - -static const int rgb_green[JPEG_NUMCS] = { - -1, -1, RGB_GREEN, -1, -1, -1, EXT_RGB_GREEN, EXT_RGBX_GREEN, - EXT_BGR_GREEN, EXT_BGRX_GREEN, EXT_XBGR_GREEN, EXT_XRGB_GREEN, - EXT_RGBX_GREEN, EXT_BGRX_GREEN, EXT_XBGR_GREEN, EXT_XRGB_GREEN, - -1 -}; - -static const int rgb_blue[JPEG_NUMCS] = { - -1, -1, RGB_BLUE, -1, -1, -1, EXT_RGB_BLUE, EXT_RGBX_BLUE, - EXT_BGR_BLUE, EXT_BGRX_BLUE, EXT_XBGR_BLUE, EXT_XRGB_BLUE, - EXT_RGBX_BLUE, EXT_BGRX_BLUE, EXT_XBGR_BLUE, EXT_XRGB_BLUE, - -1 -}; - -static const int rgb_pixelsize[JPEG_NUMCS] = { - -1, -1, RGB_PIXELSIZE, -1, -1, -1, EXT_RGB_PIXELSIZE, EXT_RGBX_PIXELSIZE, - EXT_BGR_PIXELSIZE, EXT_BGRX_PIXELSIZE, EXT_XBGR_PIXELSIZE, EXT_XRGB_PIXELSIZE, - EXT_RGBX_PIXELSIZE, EXT_BGRX_PIXELSIZE, EXT_XBGR_PIXELSIZE, EXT_XRGB_PIXELSIZE, - -1 -}; - -/* Definitions for speed-related optimizations. */ - -/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying - * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER - * as short on such a machine. MULTIPLIER must be at least 16 bits wide. - */ - -#ifndef MULTIPLIER -#ifndef WITH_SIMD -#define MULTIPLIER int /* type for fastest integer multiply */ -#else -#define MULTIPLIER short /* prefer 16-bit with SIMD for parellelism */ -#endif -#endif - - -/* FAST_FLOAT should be either float or double, whichever is done faster - * by your compiler. (Note that this type is only used in the floating point - * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) - */ - -#ifndef FAST_FLOAT -#define FAST_FLOAT float -#endif - -#endif /* JPEG_INTERNAL_OPTIONS */ diff --git a/libs/include/jpeglib.h b/libs/include/jpeglib.h deleted file mode 100644 index 6c63f58..0000000 --- a/libs/include/jpeglib.h +++ /dev/null @@ -1,1122 +0,0 @@ -/* - * jpeglib.h - * - * This file was part of the Independent JPEG Group's software: - * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2002-2009 by Guido Vollbeding. - * libjpeg-turbo Modifications: - * Copyright (C) 2009-2011, 2013-2014, 2016, D. R. Commander. - * Copyright (C) 2015, Google, Inc. - * For conditions of distribution and use, see the accompanying README.ijg - * file. - * - * This file defines the application interface for the JPEG library. - * Most applications using the library need only include this file, - * and perhaps jerror.h if they want to know the exact error codes. - */ - -#ifndef JPEGLIB_H -#define JPEGLIB_H - -/* - * First we include the configuration files that record how this - * installation of the JPEG library is set up. jconfig.h can be - * generated automatically for many systems. jmorecfg.h contains - * manual configuration options that most people need not worry about. - */ - -#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ -#include "jconfig.h" /* widely used configuration options */ -#endif -#include "jmorecfg.h" /* seldom changed options */ - - -#ifdef __cplusplus -#ifndef DONT_USE_EXTERN_C -extern "C" { -#endif -#endif - - -/* Various constants determining the sizes of things. - * All of these are specified by the JPEG standard, so don't change them - * if you want to be compatible. - */ - -#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ -#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ -#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ -#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ -#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ -#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ -#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ -/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard; - * the PostScript DCT filter can emit files with many more than 10 blocks/MCU. - * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU - * to handle it. We even let you do this from the jconfig.h file. However, - * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe - * sometimes emits noncompliant files doesn't mean you should too. - */ -#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */ -#ifndef D_MAX_BLOCKS_IN_MCU -#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */ -#endif - - -/* Data structures for images (arrays of samples and of DCT coefficients). - */ - -typedef JSAMPLE *JSAMPROW; /* ptr to one image row of pixel samples. */ -typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ -typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ - -typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ -typedef JBLOCK *JBLOCKROW; /* pointer to one row of coefficient blocks */ -typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ -typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ - -typedef JCOEF *JCOEFPTR; /* useful in a couple of places */ - - -/* Types for JPEG compression parameters and working tables. */ - - -/* DCT coefficient quantization tables. */ - -typedef struct { - /* This array gives the coefficient quantizers in natural array order - * (not the zigzag order in which they are stored in a JPEG DQT marker). - * CAUTION: IJG versions prior to v6a kept this array in zigzag order. - */ - UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ - /* This field is used only during compression. It's initialized FALSE when - * the table is created, and set TRUE when it's been output to the file. - * You could suppress output of a table by setting this to TRUE. - * (See jpeg_suppress_tables for an example.) - */ - boolean sent_table; /* TRUE when table has been output */ -} JQUANT_TBL; - - -/* Huffman coding tables. */ - -typedef struct { - /* These two fields directly represent the contents of a JPEG DHT marker */ - UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ - /* length k bits; bits[0] is unused */ - UINT8 huffval[256]; /* The symbols, in order of incr code length */ - /* This field is used only during compression. It's initialized FALSE when - * the table is created, and set TRUE when it's been output to the file. - * You could suppress output of a table by setting this to TRUE. - * (See jpeg_suppress_tables for an example.) - */ - boolean sent_table; /* TRUE when table has been output */ -} JHUFF_TBL; - - -/* Basic info about one component (color channel). */ - -typedef struct { - /* These values are fixed over the whole image. */ - /* For compression, they must be supplied by parameter setup; */ - /* for decompression, they are read from the SOF marker. */ - int component_id; /* identifier for this component (0..255) */ - int component_index; /* its index in SOF or cinfo->comp_info[] */ - int h_samp_factor; /* horizontal sampling factor (1..4) */ - int v_samp_factor; /* vertical sampling factor (1..4) */ - int quant_tbl_no; /* quantization table selector (0..3) */ - /* These values may vary between scans. */ - /* For compression, they must be supplied by parameter setup; */ - /* for decompression, they are read from the SOS marker. */ - /* The decompressor output side may not use these variables. */ - int dc_tbl_no; /* DC entropy table selector (0..3) */ - int ac_tbl_no; /* AC entropy table selector (0..3) */ - - /* Remaining fields should be treated as private by applications. */ - - /* These values are computed during compression or decompression startup: */ - /* Component's size in DCT blocks. - * Any dummy blocks added to complete an MCU are not counted; therefore - * these values do not depend on whether a scan is interleaved or not. - */ - JDIMENSION width_in_blocks; - JDIMENSION height_in_blocks; - /* Size of a DCT block in samples. Always DCTSIZE for compression. - * For decompression this is the size of the output from one DCT block, - * reflecting any scaling we choose to apply during the IDCT step. - * Values from 1 to 16 are supported. - * Note that different components may receive different IDCT scalings. - */ -#if JPEG_LIB_VERSION >= 70 - int DCT_h_scaled_size; - int DCT_v_scaled_size; -#else - int DCT_scaled_size; -#endif - /* The downsampled dimensions are the component's actual, unpadded number - * of samples at the main buffer (preprocessing/compression interface), thus - * downsampled_width = ceil(image_width * Hi/Hmax) - * and similarly for height. For decompression, IDCT scaling is included, so - * downsampled_width = ceil(image_width * Hi/Hmax * DCT_[h_]scaled_size/DCTSIZE) - */ - JDIMENSION downsampled_width; /* actual width in samples */ - JDIMENSION downsampled_height; /* actual height in samples */ - /* This flag is used only for decompression. In cases where some of the - * components will be ignored (eg grayscale output from YCbCr image), - * we can skip most computations for the unused components. - */ - boolean component_needed; /* do we need the value of this component? */ - - /* These values are computed before starting a scan of the component. */ - /* The decompressor output side may not use these variables. */ - int MCU_width; /* number of blocks per MCU, horizontally */ - int MCU_height; /* number of blocks per MCU, vertically */ - int MCU_blocks; /* MCU_width * MCU_height */ - int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_[h_]scaled_size */ - int last_col_width; /* # of non-dummy blocks across in last MCU */ - int last_row_height; /* # of non-dummy blocks down in last MCU */ - - /* Saved quantization table for component; NULL if none yet saved. - * See jdinput.c comments about the need for this information. - * This field is currently used only for decompression. - */ - JQUANT_TBL *quant_table; - - /* Private per-component storage for DCT or IDCT subsystem. */ - void *dct_table; -} jpeg_component_info; - - -/* The script for encoding a multiple-scan file is an array of these: */ - -typedef struct { - int comps_in_scan; /* number of components encoded in this scan */ - int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */ - int Ss, Se; /* progressive JPEG spectral selection parms */ - int Ah, Al; /* progressive JPEG successive approx. parms */ -} jpeg_scan_info; - -/* The decompressor can save APPn and COM markers in a list of these: */ - -typedef struct jpeg_marker_struct *jpeg_saved_marker_ptr; - -struct jpeg_marker_struct { - jpeg_saved_marker_ptr next; /* next in list, or NULL */ - UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */ - unsigned int original_length; /* # bytes of data in the file */ - unsigned int data_length; /* # bytes of data saved at data[] */ - JOCTET *data; /* the data contained in the marker */ - /* the marker length word is not counted in data_length or original_length */ -}; - -/* Known color spaces. */ - -#define JCS_EXTENSIONS 1 -#define JCS_ALPHA_EXTENSIONS 1 - -typedef enum { - JCS_UNKNOWN, /* error/unspecified */ - JCS_GRAYSCALE, /* monochrome */ - JCS_RGB, /* red/green/blue as specified by the RGB_RED, - RGB_GREEN, RGB_BLUE, and RGB_PIXELSIZE macros */ - JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ - JCS_CMYK, /* C/M/Y/K */ - JCS_YCCK, /* Y/Cb/Cr/K */ - JCS_EXT_RGB, /* red/green/blue */ - JCS_EXT_RGBX, /* red/green/blue/x */ - JCS_EXT_BGR, /* blue/green/red */ - JCS_EXT_BGRX, /* blue/green/red/x */ - JCS_EXT_XBGR, /* x/blue/green/red */ - JCS_EXT_XRGB, /* x/red/green/blue */ - /* When out_color_space it set to JCS_EXT_RGBX, JCS_EXT_BGRX, JCS_EXT_XBGR, - or JCS_EXT_XRGB during decompression, the X byte is undefined, and in - order to ensure the best performance, libjpeg-turbo can set that byte to - whatever value it wishes. Use the following colorspace constants to - ensure that the X byte is set to 0xFF, so that it can be interpreted as an - opaque alpha channel. */ - JCS_EXT_RGBA, /* red/green/blue/alpha */ - JCS_EXT_BGRA, /* blue/green/red/alpha */ - JCS_EXT_ABGR, /* alpha/blue/green/red */ - JCS_EXT_ARGB, /* alpha/red/green/blue */ - JCS_RGB565 /* 5-bit red/6-bit green/5-bit blue */ -} J_COLOR_SPACE; - -/* DCT/IDCT algorithm options. */ - -typedef enum { - JDCT_ISLOW, /* slow but accurate integer algorithm */ - JDCT_IFAST, /* faster, less accurate integer method */ - JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ -} J_DCT_METHOD; - -#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ -#define JDCT_DEFAULT JDCT_ISLOW -#endif -#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ -#define JDCT_FASTEST JDCT_IFAST -#endif - -/* Dithering options for decompression. */ - -typedef enum { - JDITHER_NONE, /* no dithering */ - JDITHER_ORDERED, /* simple ordered dither */ - JDITHER_FS /* Floyd-Steinberg error diffusion dither */ -} J_DITHER_MODE; - - -/* Common fields between JPEG compression and decompression master structs. */ - -#define jpeg_common_fields \ - struct jpeg_error_mgr *err; /* Error handler module */\ - struct jpeg_memory_mgr *mem; /* Memory manager module */\ - struct jpeg_progress_mgr *progress; /* Progress monitor, or NULL if none */\ - void *client_data; /* Available for use by application */\ - boolean is_decompressor; /* So common code can tell which is which */\ - int global_state /* For checking call sequence validity */ - -/* Routines that are to be used by both halves of the library are declared - * to receive a pointer to this structure. There are no actual instances of - * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. - */ -struct jpeg_common_struct { - jpeg_common_fields; /* Fields common to both master struct types */ - /* Additional fields follow in an actual jpeg_compress_struct or - * jpeg_decompress_struct. All three structs must agree on these - * initial fields! (This would be a lot cleaner in C++.) - */ -}; - -typedef struct jpeg_common_struct *j_common_ptr; -typedef struct jpeg_compress_struct *j_compress_ptr; -typedef struct jpeg_decompress_struct *j_decompress_ptr; - - -/* Master record for a compression instance */ - -struct jpeg_compress_struct { - jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ - - /* Destination for compressed data */ - struct jpeg_destination_mgr *dest; - - /* Description of source image --- these fields must be filled in by - * outer application before starting compression. in_color_space must - * be correct before you can even call jpeg_set_defaults(). - */ - - JDIMENSION image_width; /* input image width */ - JDIMENSION image_height; /* input image height */ - int input_components; /* # of color components in input image */ - J_COLOR_SPACE in_color_space; /* colorspace of input image */ - - double input_gamma; /* image gamma of input image */ - - /* Compression parameters --- these fields must be set before calling - * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to - * initialize everything to reasonable defaults, then changing anything - * the application specifically wants to change. That way you won't get - * burnt when new parameters are added. Also note that there are several - * helper routines to simplify changing parameters. - */ - -#if JPEG_LIB_VERSION >= 70 - unsigned int scale_num, scale_denom; /* fraction by which to scale image */ - - JDIMENSION jpeg_width; /* scaled JPEG image width */ - JDIMENSION jpeg_height; /* scaled JPEG image height */ - /* Dimensions of actual JPEG image that will be written to file, - * derived from input dimensions by scaling factors above. - * These fields are computed by jpeg_start_compress(). - * You can also use jpeg_calc_jpeg_dimensions() to determine these values - * in advance of calling jpeg_start_compress(). - */ -#endif - - int data_precision; /* bits of precision in image data */ - - int num_components; /* # of color components in JPEG image */ - J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ - - jpeg_component_info *comp_info; - /* comp_info[i] describes component that appears i'th in SOF */ - - JQUANT_TBL *quant_tbl_ptrs[NUM_QUANT_TBLS]; -#if JPEG_LIB_VERSION >= 70 - int q_scale_factor[NUM_QUANT_TBLS]; -#endif - /* ptrs to coefficient quantization tables, or NULL if not defined, - * and corresponding scale factors (percentage, initialized 100). - */ - - JHUFF_TBL *dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; - JHUFF_TBL *ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; - /* ptrs to Huffman coding tables, or NULL if not defined */ - - UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ - UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ - UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ - - int num_scans; /* # of entries in scan_info array */ - const jpeg_scan_info *scan_info; /* script for multi-scan file, or NULL */ - /* The default value of scan_info is NULL, which causes a single-scan - * sequential JPEG file to be emitted. To create a multi-scan file, - * set num_scans and scan_info to point to an array of scan definitions. - */ - - boolean raw_data_in; /* TRUE=caller supplies downsampled data */ - boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ - boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ - boolean CCIR601_sampling; /* TRUE=first samples are cosited */ -#if JPEG_LIB_VERSION >= 70 - boolean do_fancy_downsampling; /* TRUE=apply fancy downsampling */ -#endif - int smoothing_factor; /* 1..100, or 0 for no input smoothing */ - J_DCT_METHOD dct_method; /* DCT algorithm selector */ - - /* The restart interval can be specified in absolute MCUs by setting - * restart_interval, or in MCU rows by setting restart_in_rows - * (in which case the correct restart_interval will be figured - * for each scan). - */ - unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ - int restart_in_rows; /* if > 0, MCU rows per restart interval */ - - /* Parameters controlling emission of special markers. */ - - boolean write_JFIF_header; /* should a JFIF marker be written? */ - UINT8 JFIF_major_version; /* What to write for the JFIF version number */ - UINT8 JFIF_minor_version; - /* These three values are not used by the JPEG code, merely copied */ - /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ - /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ - /* ratio is defined by X_density/Y_density even when density_unit=0. */ - UINT8 density_unit; /* JFIF code for pixel size units */ - UINT16 X_density; /* Horizontal pixel density */ - UINT16 Y_density; /* Vertical pixel density */ - boolean write_Adobe_marker; /* should an Adobe marker be written? */ - - /* State variable: index of next scanline to be written to - * jpeg_write_scanlines(). Application may use this to control its - * processing loop, e.g., "while (next_scanline < image_height)". - */ - - JDIMENSION next_scanline; /* 0 .. image_height-1 */ - - /* Remaining fields are known throughout compressor, but generally - * should not be touched by a surrounding application. - */ - - /* - * These fields are computed during compression startup - */ - boolean progressive_mode; /* TRUE if scan script uses progressive mode */ - int max_h_samp_factor; /* largest h_samp_factor */ - int max_v_samp_factor; /* largest v_samp_factor */ - -#if JPEG_LIB_VERSION >= 70 - int min_DCT_h_scaled_size; /* smallest DCT_h_scaled_size of any component */ - int min_DCT_v_scaled_size; /* smallest DCT_v_scaled_size of any component */ -#endif - - JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ - /* The coefficient controller receives data in units of MCU rows as defined - * for fully interleaved scans (whether the JPEG file is interleaved or not). - * There are v_samp_factor * DCTSIZE sample rows of each component in an - * "iMCU" (interleaved MCU) row. - */ - - /* - * These fields are valid during any one scan. - * They describe the components and MCUs actually appearing in the scan. - */ - int comps_in_scan; /* # of JPEG components in this scan */ - jpeg_component_info *cur_comp_info[MAX_COMPS_IN_SCAN]; - /* *cur_comp_info[i] describes component that appears i'th in SOS */ - - JDIMENSION MCUs_per_row; /* # of MCUs across the image */ - JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ - - int blocks_in_MCU; /* # of DCT blocks per MCU */ - int MCU_membership[C_MAX_BLOCKS_IN_MCU]; - /* MCU_membership[i] is index in cur_comp_info of component owning */ - /* i'th block in an MCU */ - - int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ - -#if JPEG_LIB_VERSION >= 80 - int block_size; /* the basic DCT block size: 1..16 */ - const int *natural_order; /* natural-order position array */ - int lim_Se; /* min( Se, DCTSIZE2-1 ) */ -#endif - - /* - * Links to compression subobjects (methods and private variables of modules) - */ - struct jpeg_comp_master *master; - struct jpeg_c_main_controller *main; - struct jpeg_c_prep_controller *prep; - struct jpeg_c_coef_controller *coef; - struct jpeg_marker_writer *marker; - struct jpeg_color_converter *cconvert; - struct jpeg_downsampler *downsample; - struct jpeg_forward_dct *fdct; - struct jpeg_entropy_encoder *entropy; - jpeg_scan_info *script_space; /* workspace for jpeg_simple_progression */ - int script_space_size; -}; - - -/* Master record for a decompression instance */ - -struct jpeg_decompress_struct { - jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ - - /* Source of compressed data */ - struct jpeg_source_mgr *src; - - /* Basic description of image --- filled in by jpeg_read_header(). */ - /* Application may inspect these values to decide how to process image. */ - - JDIMENSION image_width; /* nominal image width (from SOF marker) */ - JDIMENSION image_height; /* nominal image height */ - int num_components; /* # of color components in JPEG image */ - J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ - - /* Decompression processing parameters --- these fields must be set before - * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes - * them to default values. - */ - - J_COLOR_SPACE out_color_space; /* colorspace for output */ - - unsigned int scale_num, scale_denom; /* fraction by which to scale image */ - - double output_gamma; /* image gamma wanted in output */ - - boolean buffered_image; /* TRUE=multiple output passes */ - boolean raw_data_out; /* TRUE=downsampled data wanted */ - - J_DCT_METHOD dct_method; /* IDCT algorithm selector */ - boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ - boolean do_block_smoothing; /* TRUE=apply interblock smoothing */ - - boolean quantize_colors; /* TRUE=colormapped output wanted */ - /* the following are ignored if not quantize_colors: */ - J_DITHER_MODE dither_mode; /* type of color dithering to use */ - boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ - int desired_number_of_colors; /* max # colors to use in created colormap */ - /* these are significant only in buffered-image mode: */ - boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */ - boolean enable_external_quant;/* enable future use of external colormap */ - boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */ - - /* Description of actual output image that will be returned to application. - * These fields are computed by jpeg_start_decompress(). - * You can also use jpeg_calc_output_dimensions() to determine these values - * in advance of calling jpeg_start_decompress(). - */ - - JDIMENSION output_width; /* scaled image width */ - JDIMENSION output_height; /* scaled image height */ - int out_color_components; /* # of color components in out_color_space */ - int output_components; /* # of color components returned */ - /* output_components is 1 (a colormap index) when quantizing colors; - * otherwise it equals out_color_components. - */ - int rec_outbuf_height; /* min recommended height of scanline buffer */ - /* If the buffer passed to jpeg_read_scanlines() is less than this many rows - * high, space and time will be wasted due to unnecessary data copying. - * Usually rec_outbuf_height will be 1 or 2, at most 4. - */ - - /* When quantizing colors, the output colormap is described by these fields. - * The application can supply a colormap by setting colormap non-NULL before - * calling jpeg_start_decompress; otherwise a colormap is created during - * jpeg_start_decompress or jpeg_start_output. - * The map has out_color_components rows and actual_number_of_colors columns. - */ - int actual_number_of_colors; /* number of entries in use */ - JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ - - /* State variables: these variables indicate the progress of decompression. - * The application may examine these but must not modify them. - */ - - /* Row index of next scanline to be read from jpeg_read_scanlines(). - * Application may use this to control its processing loop, e.g., - * "while (output_scanline < output_height)". - */ - JDIMENSION output_scanline; /* 0 .. output_height-1 */ - - /* Current input scan number and number of iMCU rows completed in scan. - * These indicate the progress of the decompressor input side. - */ - int input_scan_number; /* Number of SOS markers seen so far */ - JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */ - - /* The "output scan number" is the notional scan being displayed by the - * output side. The decompressor will not allow output scan/row number - * to get ahead of input scan/row, but it can fall arbitrarily far behind. - */ - int output_scan_number; /* Nominal scan number being displayed */ - JDIMENSION output_iMCU_row; /* Number of iMCU rows read */ - - /* Current progression status. coef_bits[c][i] indicates the precision - * with which component c's DCT coefficient i (in zigzag order) is known. - * It is -1 when no data has yet been received, otherwise it is the point - * transform (shift) value for the most recent scan of the coefficient - * (thus, 0 at completion of the progression). - * This pointer is NULL when reading a non-progressive file. - */ - int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */ - - /* Internal JPEG parameters --- the application usually need not look at - * these fields. Note that the decompressor output side may not use - * any parameters that can change between scans. - */ - - /* Quantization and Huffman tables are carried forward across input - * datastreams when processing abbreviated JPEG datastreams. - */ - - JQUANT_TBL *quant_tbl_ptrs[NUM_QUANT_TBLS]; - /* ptrs to coefficient quantization tables, or NULL if not defined */ - - JHUFF_TBL *dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; - JHUFF_TBL *ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; - /* ptrs to Huffman coding tables, or NULL if not defined */ - - /* These parameters are never carried across datastreams, since they - * are given in SOF/SOS markers or defined to be reset by SOI. - */ - - int data_precision; /* bits of precision in image data */ - - jpeg_component_info *comp_info; - /* comp_info[i] describes component that appears i'th in SOF */ - -#if JPEG_LIB_VERSION >= 80 - boolean is_baseline; /* TRUE if Baseline SOF0 encountered */ -#endif - boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ - boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ - - UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ - UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ - UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ - - unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ - - /* These fields record data obtained from optional markers recognized by - * the JPEG library. - */ - boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ - /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */ - UINT8 JFIF_major_version; /* JFIF version number */ - UINT8 JFIF_minor_version; - UINT8 density_unit; /* JFIF code for pixel size units */ - UINT16 X_density; /* Horizontal pixel density */ - UINT16 Y_density; /* Vertical pixel density */ - boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ - UINT8 Adobe_transform; /* Color transform code from Adobe marker */ - - boolean CCIR601_sampling; /* TRUE=first samples are cosited */ - - /* Aside from the specific data retained from APPn markers known to the - * library, the uninterpreted contents of any or all APPn and COM markers - * can be saved in a list for examination by the application. - */ - jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */ - - /* Remaining fields are known throughout decompressor, but generally - * should not be touched by a surrounding application. - */ - - /* - * These fields are computed during decompression startup - */ - int max_h_samp_factor; /* largest h_samp_factor */ - int max_v_samp_factor; /* largest v_samp_factor */ - -#if JPEG_LIB_VERSION >= 70 - int min_DCT_h_scaled_size; /* smallest DCT_h_scaled_size of any component */ - int min_DCT_v_scaled_size; /* smallest DCT_v_scaled_size of any component */ -#else - int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ -#endif - - JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */ - /* The coefficient controller's input and output progress is measured in - * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows - * in fully interleaved JPEG scans, but are used whether the scan is - * interleaved or not. We define an iMCU row as v_samp_factor DCT block - * rows of each component. Therefore, the IDCT output contains - * v_samp_factor*DCT_[v_]scaled_size sample rows of a component per iMCU row. - */ - - JSAMPLE *sample_range_limit; /* table for fast range-limiting */ - - /* - * These fields are valid during any one scan. - * They describe the components and MCUs actually appearing in the scan. - * Note that the decompressor output side must not use these fields. - */ - int comps_in_scan; /* # of JPEG components in this scan */ - jpeg_component_info *cur_comp_info[MAX_COMPS_IN_SCAN]; - /* *cur_comp_info[i] describes component that appears i'th in SOS */ - - JDIMENSION MCUs_per_row; /* # of MCUs across the image */ - JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ - - int blocks_in_MCU; /* # of DCT blocks per MCU */ - int MCU_membership[D_MAX_BLOCKS_IN_MCU]; - /* MCU_membership[i] is index in cur_comp_info of component owning */ - /* i'th block in an MCU */ - - int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ - -#if JPEG_LIB_VERSION >= 80 - /* These fields are derived from Se of first SOS marker. - */ - int block_size; /* the basic DCT block size: 1..16 */ - const int *natural_order; /* natural-order position array for entropy decode */ - int lim_Se; /* min( Se, DCTSIZE2-1 ) for entropy decode */ -#endif - - /* This field is shared between entropy decoder and marker parser. - * It is either zero or the code of a JPEG marker that has been - * read from the data source, but has not yet been processed. - */ - int unread_marker; - - /* - * Links to decompression subobjects (methods, private variables of modules) - */ - struct jpeg_decomp_master *master; - struct jpeg_d_main_controller *main; - struct jpeg_d_coef_controller *coef; - struct jpeg_d_post_controller *post; - struct jpeg_input_controller *inputctl; - struct jpeg_marker_reader *marker; - struct jpeg_entropy_decoder *entropy; - struct jpeg_inverse_dct *idct; - struct jpeg_upsampler *upsample; - struct jpeg_color_deconverter *cconvert; - struct jpeg_color_quantizer *cquantize; -}; - - -/* "Object" declarations for JPEG modules that may be supplied or called - * directly by the surrounding application. - * As with all objects in the JPEG library, these structs only define the - * publicly visible methods and state variables of a module. Additional - * private fields may exist after the public ones. - */ - - -/* Error handler object */ - -struct jpeg_error_mgr { - /* Error exit handler: does not return to caller */ - void (*error_exit) (j_common_ptr cinfo); - /* Conditionally emit a trace or warning message */ - void (*emit_message) (j_common_ptr cinfo, int msg_level); - /* Routine that actually outputs a trace or error message */ - void (*output_message) (j_common_ptr cinfo); - /* Format a message string for the most recent JPEG error or message */ - void (*format_message) (j_common_ptr cinfo, char *buffer); -#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ - /* Reset error state variables at start of a new image */ - void (*reset_error_mgr) (j_common_ptr cinfo); - - /* The message ID code and any parameters are saved here. - * A message can have one string parameter or up to 8 int parameters. - */ - int msg_code; -#define JMSG_STR_PARM_MAX 80 - union { - int i[8]; - char s[JMSG_STR_PARM_MAX]; - } msg_parm; - - /* Standard state variables for error facility */ - - int trace_level; /* max msg_level that will be displayed */ - - /* For recoverable corrupt-data errors, we emit a warning message, - * but keep going unless emit_message chooses to abort. emit_message - * should count warnings in num_warnings. The surrounding application - * can check for bad data by seeing if num_warnings is nonzero at the - * end of processing. - */ - long num_warnings; /* number of corrupt-data warnings */ - - /* These fields point to the table(s) of error message strings. - * An application can change the table pointer to switch to a different - * message list (typically, to change the language in which errors are - * reported). Some applications may wish to add additional error codes - * that will be handled by the JPEG library error mechanism; the second - * table pointer is used for this purpose. - * - * First table includes all errors generated by JPEG library itself. - * Error code 0 is reserved for a "no such error string" message. - */ - const char * const *jpeg_message_table; /* Library errors */ - int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ - /* Second table can be added by application (see cjpeg/djpeg for example). - * It contains strings numbered first_addon_message..last_addon_message. - */ - const char * const *addon_message_table; /* Non-library errors */ - int first_addon_message; /* code for first string in addon table */ - int last_addon_message; /* code for last string in addon table */ -}; - - -/* Progress monitor object */ - -struct jpeg_progress_mgr { - void (*progress_monitor) (j_common_ptr cinfo); - - long pass_counter; /* work units completed in this pass */ - long pass_limit; /* total number of work units in this pass */ - int completed_passes; /* passes completed so far */ - int total_passes; /* total number of passes expected */ -}; - - -/* Data destination object for compression */ - -struct jpeg_destination_mgr { - JOCTET *next_output_byte; /* => next byte to write in buffer */ - size_t free_in_buffer; /* # of byte spaces remaining in buffer */ - - void (*init_destination) (j_compress_ptr cinfo); - boolean (*empty_output_buffer) (j_compress_ptr cinfo); - void (*term_destination) (j_compress_ptr cinfo); -}; - - -/* Data source object for decompression */ - -struct jpeg_source_mgr { - const JOCTET *next_input_byte; /* => next byte to read from buffer */ - size_t bytes_in_buffer; /* # of bytes remaining in buffer */ - - void (*init_source) (j_decompress_ptr cinfo); - boolean (*fill_input_buffer) (j_decompress_ptr cinfo); - void (*skip_input_data) (j_decompress_ptr cinfo, long num_bytes); - boolean (*resync_to_restart) (j_decompress_ptr cinfo, int desired); - void (*term_source) (j_decompress_ptr cinfo); -}; - - -/* Memory manager object. - * Allocates "small" objects (a few K total), "large" objects (tens of K), - * and "really big" objects (virtual arrays with backing store if needed). - * The memory manager does not allow individual objects to be freed; rather, - * each created object is assigned to a pool, and whole pools can be freed - * at once. This is faster and more convenient than remembering exactly what - * to free, especially where malloc()/free() are not too speedy. - * NB: alloc routines never return NULL. They exit to error_exit if not - * successful. - */ - -#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ -#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ -#define JPOOL_NUMPOOLS 2 - -typedef struct jvirt_sarray_control *jvirt_sarray_ptr; -typedef struct jvirt_barray_control *jvirt_barray_ptr; - - -struct jpeg_memory_mgr { - /* Method pointers */ - void *(*alloc_small) (j_common_ptr cinfo, int pool_id, size_t sizeofobject); - void *(*alloc_large) (j_common_ptr cinfo, int pool_id, - size_t sizeofobject); - JSAMPARRAY (*alloc_sarray) (j_common_ptr cinfo, int pool_id, - JDIMENSION samplesperrow, JDIMENSION numrows); - JBLOCKARRAY (*alloc_barray) (j_common_ptr cinfo, int pool_id, - JDIMENSION blocksperrow, JDIMENSION numrows); - jvirt_sarray_ptr (*request_virt_sarray) (j_common_ptr cinfo, int pool_id, - boolean pre_zero, - JDIMENSION samplesperrow, - JDIMENSION numrows, - JDIMENSION maxaccess); - jvirt_barray_ptr (*request_virt_barray) (j_common_ptr cinfo, int pool_id, - boolean pre_zero, - JDIMENSION blocksperrow, - JDIMENSION numrows, - JDIMENSION maxaccess); - void (*realize_virt_arrays) (j_common_ptr cinfo); - JSAMPARRAY (*access_virt_sarray) (j_common_ptr cinfo, jvirt_sarray_ptr ptr, - JDIMENSION start_row, JDIMENSION num_rows, - boolean writable); - JBLOCKARRAY (*access_virt_barray) (j_common_ptr cinfo, jvirt_barray_ptr ptr, - JDIMENSION start_row, JDIMENSION num_rows, - boolean writable); - void (*free_pool) (j_common_ptr cinfo, int pool_id); - void (*self_destruct) (j_common_ptr cinfo); - - /* Limit on memory allocation for this JPEG object. (Note that this is - * merely advisory, not a guaranteed maximum; it only affects the space - * used for virtual-array buffers.) May be changed by outer application - * after creating the JPEG object. - */ - long max_memory_to_use; - - /* Maximum allocation request accepted by alloc_large. */ - long max_alloc_chunk; -}; - - -/* Routine signature for application-supplied marker processing methods. - * Need not pass marker code since it is stored in cinfo->unread_marker. - */ -typedef boolean (*jpeg_marker_parser_method) (j_decompress_ptr cinfo); - - -/* Originally, this macro was used as a way of defining function prototypes - * for both modern compilers as well as older compilers that did not support - * prototype parameters. libjpeg-turbo has never supported these older, - * non-ANSI compilers, but the macro is still included because there is some - * software out there that uses it. - */ - -#define JPP(arglist) arglist - - -/* Default error-management setup */ -EXTERN(struct jpeg_error_mgr *) jpeg_std_error (struct jpeg_error_mgr *err); - -/* Initialization of JPEG compression objects. - * jpeg_create_compress() and jpeg_create_decompress() are the exported - * names that applications should call. These expand to calls on - * jpeg_CreateCompress and jpeg_CreateDecompress with additional information - * passed for version mismatch checking. - * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx. - */ -#define jpeg_create_compress(cinfo) \ - jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \ - (size_t) sizeof(struct jpeg_compress_struct)) -#define jpeg_create_decompress(cinfo) \ - jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \ - (size_t) sizeof(struct jpeg_decompress_struct)) -EXTERN(void) jpeg_CreateCompress (j_compress_ptr cinfo, int version, - size_t structsize); -EXTERN(void) jpeg_CreateDecompress (j_decompress_ptr cinfo, int version, - size_t structsize); -/* Destruction of JPEG compression objects */ -EXTERN(void) jpeg_destroy_compress (j_compress_ptr cinfo); -EXTERN(void) jpeg_destroy_decompress (j_decompress_ptr cinfo); - -/* Standard data source and destination managers: stdio streams. */ -/* Caller is responsible for opening the file before and closing after. */ -EXTERN(void) jpeg_stdio_dest (j_compress_ptr cinfo, FILE *outfile); -EXTERN(void) jpeg_stdio_src (j_decompress_ptr cinfo, FILE *infile); - -#if JPEG_LIB_VERSION >= 80 || defined(MEM_SRCDST_SUPPORTED) -/* Data source and destination managers: memory buffers. */ -EXTERN(void) jpeg_mem_dest (j_compress_ptr cinfo, unsigned char **outbuffer, - unsigned long *outsize); -EXTERN(void) jpeg_mem_src (j_decompress_ptr cinfo, - const unsigned char *inbuffer, - unsigned long insize); -#endif - -/* Default parameter setup for compression */ -EXTERN(void) jpeg_set_defaults (j_compress_ptr cinfo); -/* Compression parameter setup aids */ -EXTERN(void) jpeg_set_colorspace (j_compress_ptr cinfo, - J_COLOR_SPACE colorspace); -EXTERN(void) jpeg_default_colorspace (j_compress_ptr cinfo); -EXTERN(void) jpeg_set_quality (j_compress_ptr cinfo, int quality, - boolean force_baseline); -EXTERN(void) jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor, - boolean force_baseline); -#if JPEG_LIB_VERSION >= 70 -EXTERN(void) jpeg_default_qtables (j_compress_ptr cinfo, - boolean force_baseline); -#endif -EXTERN(void) jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl, - const unsigned int *basic_table, - int scale_factor, boolean force_baseline); -EXTERN(int) jpeg_quality_scaling (int quality); -EXTERN(void) jpeg_simple_progression (j_compress_ptr cinfo); -EXTERN(void) jpeg_suppress_tables (j_compress_ptr cinfo, boolean suppress); -EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table (j_common_ptr cinfo); -EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table (j_common_ptr cinfo); - -/* Main entry points for compression */ -EXTERN(void) jpeg_start_compress (j_compress_ptr cinfo, - boolean write_all_tables); -EXTERN(JDIMENSION) jpeg_write_scanlines (j_compress_ptr cinfo, - JSAMPARRAY scanlines, - JDIMENSION num_lines); -EXTERN(void) jpeg_finish_compress (j_compress_ptr cinfo); - -#if JPEG_LIB_VERSION >= 70 -/* Precalculate JPEG dimensions for current compression parameters. */ -EXTERN(void) jpeg_calc_jpeg_dimensions (j_compress_ptr cinfo); -#endif - -/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ -EXTERN(JDIMENSION) jpeg_write_raw_data (j_compress_ptr cinfo, JSAMPIMAGE data, - JDIMENSION num_lines); - -/* Write a special marker. See libjpeg.txt concerning safe usage. */ -EXTERN(void) jpeg_write_marker (j_compress_ptr cinfo, int marker, - const JOCTET *dataptr, unsigned int datalen); -/* Same, but piecemeal. */ -EXTERN(void) jpeg_write_m_header (j_compress_ptr cinfo, int marker, - unsigned int datalen); -EXTERN(void) jpeg_write_m_byte (j_compress_ptr cinfo, int val); - -/* Alternate compression function: just write an abbreviated table file */ -EXTERN(void) jpeg_write_tables (j_compress_ptr cinfo); - -/* Decompression startup: read start of JPEG datastream to see what's there */ -EXTERN(int) jpeg_read_header (j_decompress_ptr cinfo, boolean require_image); -/* Return value is one of: */ -#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */ -#define JPEG_HEADER_OK 1 /* Found valid image datastream */ -#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */ -/* If you pass require_image = TRUE (normal case), you need not check for - * a TABLES_ONLY return code; an abbreviated file will cause an error exit. - * JPEG_SUSPENDED is only possible if you use a data source module that can - * give a suspension return (the stdio source module doesn't). - */ - -/* Main entry points for decompression */ -EXTERN(boolean) jpeg_start_decompress (j_decompress_ptr cinfo); -EXTERN(JDIMENSION) jpeg_read_scanlines (j_decompress_ptr cinfo, - JSAMPARRAY scanlines, - JDIMENSION max_lines); -EXTERN(JDIMENSION) jpeg_skip_scanlines (j_decompress_ptr cinfo, - JDIMENSION num_lines); -EXTERN(void) jpeg_crop_scanline (j_decompress_ptr cinfo, JDIMENSION *xoffset, - JDIMENSION *width); -EXTERN(boolean) jpeg_finish_decompress (j_decompress_ptr cinfo); - -/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ -EXTERN(JDIMENSION) jpeg_read_raw_data (j_decompress_ptr cinfo, JSAMPIMAGE data, - JDIMENSION max_lines); - -/* Additional entry points for buffered-image mode. */ -EXTERN(boolean) jpeg_has_multiple_scans (j_decompress_ptr cinfo); -EXTERN(boolean) jpeg_start_output (j_decompress_ptr cinfo, int scan_number); -EXTERN(boolean) jpeg_finish_output (j_decompress_ptr cinfo); -EXTERN(boolean) jpeg_input_complete (j_decompress_ptr cinfo); -EXTERN(void) jpeg_new_colormap (j_decompress_ptr cinfo); -EXTERN(int) jpeg_consume_input (j_decompress_ptr cinfo); -/* Return value is one of: */ -/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */ -#define JPEG_REACHED_SOS 1 /* Reached start of new scan */ -#define JPEG_REACHED_EOI 2 /* Reached end of image */ -#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */ -#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */ - -/* Precalculate output dimensions for current decompression parameters. */ -#if JPEG_LIB_VERSION >= 80 -EXTERN(void) jpeg_core_output_dimensions (j_decompress_ptr cinfo); -#endif -EXTERN(void) jpeg_calc_output_dimensions (j_decompress_ptr cinfo); - -/* Control saving of COM and APPn markers into marker_list. */ -EXTERN(void) jpeg_save_markers (j_decompress_ptr cinfo, int marker_code, - unsigned int length_limit); - -/* Install a special processing method for COM or APPn markers. */ -EXTERN(void) jpeg_set_marker_processor (j_decompress_ptr cinfo, - int marker_code, - jpeg_marker_parser_method routine); - -/* Read or write raw DCT coefficients --- useful for lossless transcoding. */ -EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients (j_decompress_ptr cinfo); -EXTERN(void) jpeg_write_coefficients (j_compress_ptr cinfo, - jvirt_barray_ptr *coef_arrays); -EXTERN(void) jpeg_copy_critical_parameters (j_decompress_ptr srcinfo, - j_compress_ptr dstinfo); - -/* If you choose to abort compression or decompression before completing - * jpeg_finish_(de)compress, then you need to clean up to release memory, - * temporary files, etc. You can just call jpeg_destroy_(de)compress - * if you're done with the JPEG object, but if you want to clean it up and - * reuse it, call this: - */ -EXTERN(void) jpeg_abort_compress (j_compress_ptr cinfo); -EXTERN(void) jpeg_abort_decompress (j_decompress_ptr cinfo); - -/* Generic versions of jpeg_abort and jpeg_destroy that work on either - * flavor of JPEG object. These may be more convenient in some places. - */ -EXTERN(void) jpeg_abort (j_common_ptr cinfo); -EXTERN(void) jpeg_destroy (j_common_ptr cinfo); - -/* Default restart-marker-resync procedure for use by data source modules */ -EXTERN(boolean) jpeg_resync_to_restart (j_decompress_ptr cinfo, int desired); - - -/* These marker codes are exported since applications and data source modules - * are likely to want to use them. - */ - -#define JPEG_RST0 0xD0 /* RST0 marker code */ -#define JPEG_EOI 0xD9 /* EOI marker code */ -#define JPEG_APP0 0xE0 /* APP0 marker code */ -#define JPEG_COM 0xFE /* COM marker code */ - - -/* If we have a brain-damaged compiler that emits warnings (or worse, errors) - * for structure definitions that are never filled in, keep it quiet by - * supplying dummy definitions for the various substructures. - */ - -#ifdef INCOMPLETE_TYPES_BROKEN -#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ -struct jvirt_sarray_control { long dummy; }; -struct jvirt_barray_control { long dummy; }; -struct jpeg_comp_master { long dummy; }; -struct jpeg_c_main_controller { long dummy; }; -struct jpeg_c_prep_controller { long dummy; }; -struct jpeg_c_coef_controller { long dummy; }; -struct jpeg_marker_writer { long dummy; }; -struct jpeg_color_converter { long dummy; }; -struct jpeg_downsampler { long dummy; }; -struct jpeg_forward_dct { long dummy; }; -struct jpeg_entropy_encoder { long dummy; }; -struct jpeg_decomp_master { long dummy; }; -struct jpeg_d_main_controller { long dummy; }; -struct jpeg_d_coef_controller { long dummy; }; -struct jpeg_d_post_controller { long dummy; }; -struct jpeg_input_controller { long dummy; }; -struct jpeg_marker_reader { long dummy; }; -struct jpeg_entropy_decoder { long dummy; }; -struct jpeg_inverse_dct { long dummy; }; -struct jpeg_upsampler { long dummy; }; -struct jpeg_color_deconverter { long dummy; }; -struct jpeg_color_quantizer { long dummy; }; -#endif /* JPEG_INTERNALS */ -#endif /* INCOMPLETE_TYPES_BROKEN */ - - -/* - * The JPEG library modules define JPEG_INTERNALS before including this file. - * The internal structure declarations are read only when that is true. - * Applications using the library should not include jpegint.h, but may wish - * to include jerror.h. - */ - -#ifdef JPEG_INTERNALS -#include "jpegint.h" /* fetch private declarations */ -#include "jerror.h" /* fetch error codes too */ -#endif - -#ifdef __cplusplus -#ifndef DONT_USE_EXTERN_C -} -#endif -#endif - -#endif /* JPEGLIB_H */ diff --git a/libs/include/turbojpeg.h b/libs/include/turbojpeg.h deleted file mode 100644 index 307dc6f..0000000 --- a/libs/include/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/lib/libjpeg.a b/libs/lib/libjpeg.a deleted file mode 100644 index 54d951d5b9d9bd8e896142eba4ff80b2a9778b30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528136 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%0D||`Bk2RSB7@*b_RGx=@ZWu$lv&A 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 &mpA_P;G1v#{1-?5{q6ra`paMa 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�mK7jO+9CAWlqau`-PG{eqzMDlkBdM61 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�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 diff --git a/libs/lib/libturbojpeg.a b/libs/lib/libturbojpeg.a deleted file mode 100644 index 076b7856aa6b518e299fbcab1b270bd4148aace3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618848 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

e<#l1 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

2%Vy-=}~Xs%$A&e6odp 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

)J%Z~po|f5idjO4v%pN$HP#t!uCcY%smy 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%0DcJ=;pWxD7FfxLRNQ0D* z;G1*6l#k%gb%7}#!CyQDrhEjCI08mau-e0q@PBO6-{QgK{YHoXAN%gyXEZ_2C!Rb~ z!<(KXXFk~Udr0b!TY2P$x6o_HJiK9EFXn4VULEQ1hU<-VNb7Xk@O8ay zR>ml6kJRUo%Z^{Sz!l68p|9)7$=HC+{Z6^@$Xpe#KLO8P*s#8e_!k_}F7>Aep|q3a z_f5nPyVhflN1q>?4R*n|m&nOQALP|1ONZPec1IUpRy2{{) zIC%Y-=sLjfkN8PBSbficJ?R_SMv+VVw3kiab{K*qj>oq|hvZN6NjtOp{sHXKH#$Vu zlMByYR^JgAUVX^vchrkM(QEbn7VODyt<-NWKYLky7hrhxEy3N$PxQ%L!|3zf1oot_ zwgLBMe)cl@d{ba}%UN+uF7+!rR zaocj1Igr)Y0TzAq_j1+k;*S|<@)AG!Ng8b10DkKn>~#QpiHuxAjZKNO?ij2C0LhEI z(^=xBZ&vC2Jo=_lcD`bG_R{)zH}9Qy=DJt%-Mpo_*LgRuc{OkD@AGcnG|8*|idO-( zJ91irb? zT_)>+Y}RBstOasS9#vUH{gHmZ*=?+0$GK~B)(}fNDp+Gj)I@nllE{EFga^(R>Xny# z5T=eb*h#%cB+h8>Z4Yj$Vh!TFmo3x0mn~b?f4Xd>Tu4vVYG0IhrBWWg*3K&`+gXqK z`p9GOu0Ga=FR>@UyCf;E0@h+W&DVP;sf7PpF6HpDeqWc8eQC-jQ+VtbC|PUb&g!T{ zr@UK>{VB>Tv?)&g%tJqXQ#TE)|IHZ+RU>=jgcDt|N8YN-fjYn)&}A+8l(MGGuUFo8 zJf`b!Nw_gfI%A*IXHS$LbxYoO7j%}=@krT{4jW(9w!zI(-+xG4zpI=?KlR1C+CIBH zd6!X(ZUg(ToVfEv*5@z%1J641UR2)Y$(p_>oS+=dJ4kI^+5MfKcFOd9_6Xi*e~@}1 zoUElCn<7lorr>Ftf_iNV`Sbr9tyk^4=mT_YrhirXq613>c08StjrWT z7PdU77B64KVo=swRw>^vHpz)7b%Uf|F48>8;w5zb7BfFdwPi39Y|FEoA;Iz=0b4#T z$F8r`HnWaGy^MJ_F5eYbr(deT3Hyi4*Y)i6nnmS&`T3d!=9#fxuk1V`!^-Uctodw_ z6god!N2Op}N5CZh2G}bX#x1h;vSGdl!zEe0T z3KSD2*6jg zgRuCEJ9(LLy2>!bU;2vVg}=1hVB7<&5RFye5Nf*-jx_mR}3D{8jFFtX3z-W2G3^ zlVkZtcPy82eYDl{6xiyaA5G2)o&y`cZ)$zN!bUkwc zQ>G5*>XN?JsBende(ic_W&Fpc0_sMpN5%tNcHVJTYEF+8&|3_~?DTa#xi8@>cKy5L z#v^leyi2rZ=g-z(5l+Do!(z z#!IhUp2yEC*K?Iz0l`GpURL*yVF->m9)TLDgq3_qyA?ml#}0lHub-cgI{vH - -JpegInformation::JpegInformation(tjhandle handle, uint8_t* jpegBuf, uint64_t jpegSize) -{ - this->buffer = jpegBuf; - this->size = jpegSize; - this->handle = handle; -} - -JpegInformation::~JpegInformation() -{ - if(this->buffer) { - free(this->buffer); - } - tjDestroy(this->handle); -} diff --git a/src/JpegInformation.h b/src/JpegInformation.h deleted file mode 100644 index b1e6d69..0000000 --- a/src/JpegInformation.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef JPEGINFORMATION_H -#define JPEGINFORMATION_H - -#include -#include - -class JpegInformation { -public: - JpegInformation(tjhandle handle, uint8_t* jpegBuf, uint64_t jpegSize); - virtual ~JpegInformation(); - - uint8_t * getBuffer() { - return buffer; - }; - uint64_t getSize() { - return size; - }; - -private: - uint8_t* buffer; - uint64_t size; - tjhandle handle; - -}; - -#endif // JPEGINFORMATION_H diff --git a/src/common.h b/src/common.h index 726f130..bc22c19 100644 --- a/src/common.h +++ b/src/common.h @@ -1,6 +1,15 @@ -#ifndef COMMON_H_ -#define COMMON_H_ +#pragma once -#define WIIU_SCREENSHOT_PATH "sd:/wiiu/screenshots/" +#define WIIU_SCREENSHOT_PATH "fs:/vol/external01/wiiu/screenshots/" -#endif // COMMON_H_ +typedef enum { + IMAGE_OUTPUT_FORMAT_JPEG = 0, + IMAGE_OUTPUT_FORMAT_PNG = 1, + IMAGE_OUTPUT_FORMAT_BMP = 2, +} ImageOutputFormatEnum; + +typedef enum { + IMAGE_SOURCE_TV_AND_DRC = 0, + IMAGE_SOURCE_TV = 1, + IMAGE_SOURCE_DRC = 2, +} ImageSourceEnum; diff --git a/src/fs/FSUtils.cpp b/src/fs/FSUtils.cpp new file mode 100644 index 0000000..f7fad5b --- /dev/null +++ b/src/fs/FSUtils.cpp @@ -0,0 +1,76 @@ +#include "fs/FSUtils.h" +#include +#include +#include + +int32_t FSUtils::CheckFile(const char *filepath) { + if (!filepath) + return 0; + + struct stat filestat; + + char dirnoslash[strlen(filepath) + 2]; + snprintf(dirnoslash, sizeof(dirnoslash), "%s", filepath); + + while (dirnoslash[strlen(dirnoslash) - 1] == '/') + dirnoslash[strlen(dirnoslash) - 1] = '\0'; + + char *notRoot = strrchr(dirnoslash, '/'); + if (!notRoot) { + strcat(dirnoslash, "/"); + } + + if (stat(dirnoslash, &filestat) == 0) + return 1; + + return 0; +} + +int32_t FSUtils::CreateSubfolder(const char *fullpath) { + if (!fullpath) { + return 0; + } + + int32_t result = 0; + + char dirnoslash[strlen(fullpath) + 1]; + strcpy(dirnoslash, fullpath); + + int32_t pos = strlen(dirnoslash) - 1; + while (dirnoslash[pos] == '/') { + dirnoslash[pos] = '\0'; + pos--; + } + + if (CheckFile(dirnoslash)) { + return 1; + } else { + char parentpath[strlen(dirnoslash) + 2]; + strcpy(parentpath, dirnoslash); + char *ptr = strrchr(parentpath, '/'); + + if (!ptr) { + //! Device root directory (must be with '/') + strcat(parentpath, "/"); + struct stat filestat; + if (stat(parentpath, &filestat) == 0) + return 1; + + return 0; + } + + ptr++; + ptr[0] = '\0'; + + result = CreateSubfolder(parentpath); + } + + if (!result) + return 0; + + if (mkdir(dirnoslash, 0777) == -1) { + return 0; + } + + return 1; +} diff --git a/src/fs/FSUtils.h b/src/fs/FSUtils.h new file mode 100644 index 0000000..286b6f2 --- /dev/null +++ b/src/fs/FSUtils.h @@ -0,0 +1,11 @@ +#pragma once + +#include + +class FSUtils { +public: + //! todo: C++ class + static int32_t CreateSubfolder(const char *fullpath); + + static int32_t CheckFile(const char *filepath); +}; diff --git a/src/function_patcher.cpp b/src/function_patcher.cpp index 7b800e4..f0a3c1e 100644 --- a/src/function_patcher.cpp +++ b/src/function_patcher.cpp @@ -1,61 +1,99 @@ -#include -#include -#include -#include -#include -#include -#include #include "common.h" -#include "screenshot_utils.h" +#include "fs/FSUtils.h" #include "retain_vars.hpp" +#include "screenshot_utils.h" +#include "utils/StringTools.h" +#include "utils/logger.h" +#include +#include +#include +#include +#include -static bool takeScreenshotTV __attribute__((section(".data"))) = false; -static bool takeScreenshotDRC __attribute__((section(".data"))) = false; -static uint8_t screenshotCooldown __attribute__((section(".data"))) = 0; -static uint32_t counter __attribute__((section(".data"))) = 0; +static bool takeScreenshotTV = false; +static bool takeScreenshotDRC = false; +static uint8_t screenshotCoolDown = 0; DECL_FUNCTION(int32_t, VPADRead, VPADChan chan, VPADStatus *buffer, uint32_t buffer_size, VPADReadError *error) { - int32_t result = real_VPADRead(chan, buffer, buffer_size, error); + VPADReadError real_error; + int32_t result = real_VPADRead(chan, buffer, buffer_size, &real_error); - if(result > 0 && *error == VPAD_READ_SUCCESS && (buffer[0].hold == gButtonCombo) && screenshotCooldown == 0 && OSIsHomeButtonMenuEnabled()) { - counter++; - takeScreenshotTV = true; - takeScreenshotDRC = true; + if (gEnabled) { + if (result > 0 && real_error == VPAD_READ_SUCCESS && (buffer[0].hold == gButtonCombo) && screenshotCoolDown == 0 && OSIsHomeButtonMenuEnabled()) { + takeScreenshotTV = gImageSource == IMAGE_SOURCE_TV_AND_DRC || gImageSource == IMAGE_SOURCE_TV; + takeScreenshotDRC = gImageSource == IMAGE_SOURCE_TV_AND_DRC || gImageSource == IMAGE_SOURCE_DRC; - screenshotCooldown = 0x3C; - } - if(screenshotCooldown > 0) { - screenshotCooldown--; + screenshotCoolDown = 60; + } + if (screenshotCoolDown > 0) { + screenshotCoolDown--; + } } + if (error) { + *error = real_error; + } return result; } -DECL_FUNCTION(void, GX2CopyColorBufferToScanBuffer, const GX2ColorBuffer *colorBuffer, int32_t scan_target) { - if((takeScreenshotTV || takeScreenshotDRC) && gAppStatus == WUPS_APP_STATUS_FOREGROUND) { +DECL_FUNCTION(void, GX2CopyColorBufferToScanBuffer, const GX2ColorBuffer *colorBuffer, GX2ScanTarget scan_target) { + if ((takeScreenshotTV || takeScreenshotDRC)) { OSCalendarTime output; OSTicksToCalendarTime(OSGetTime(), &output); - char buffer[255] = {0}; - snprintf(buffer,254,"%s%04ld-%02ld-%02ld/",WIIU_SCREENSHOT_PATH,output.tm_year,output.tm_mon,output.tm_mday); - - FSUtils::CreateSubfolder(buffer); - - snprintf(buffer,254,"%s%04ld-%02ld-%02ld/%04ld-%02ld-%02ld_%02ld.%02ld.%02ld_", - WIIU_SCREENSHOT_PATH,output.tm_year,output.tm_mon,output.tm_mday,output.tm_year,output.tm_mon,output.tm_mday,output.tm_hour,output.tm_min,output.tm_sec); - - if(scan_target == 1 && colorBuffer != NULL && takeScreenshotTV && gAppStatus == WUPS_APP_STATUS_FOREGROUND) { - DEBUG_FUNCTION_LINE("Lets take a screenshot from TV. Source format: %d \n",colorBuffer->surface.format); - takeScreenshot((GX2ColorBuffer *)colorBuffer, StringTools::strfmt("%sTV.jpg",buffer).c_str()); - takeScreenshotTV = false; + std::string buffer = string_format("%s%016llX", WIIU_SCREENSHOT_PATH, OSGetTitleID()); + if (!gShortNameEn.empty()) { + buffer += string_format(" (%s)", gShortNameEn.c_str()); } - if(scan_target == 4 && colorBuffer != NULL && takeScreenshotDRC && gAppStatus == WUPS_APP_STATUS_FOREGROUND) { - DEBUG_FUNCTION_LINE("Lets take a screenshot from DRC. Source format: %d \n",colorBuffer->surface.format); - takeScreenshot((GX2ColorBuffer *)colorBuffer, StringTools::strfmt("%sDRC.jpg",buffer).c_str()); + buffer += string_format("/%04d-%02d-%02d/", output.tm_year, output.tm_mon + 1, output.tm_mday); + + bool dirExists = true; + auto dir = opendir(buffer.c_str()); + if (dir) { + closedir(dir); + } else { + if (!FSUtils::CreateSubfolder(buffer.c_str())) { + DEBUG_FUNCTION_LINE_ERR("Failed to create dir: %s", buffer.c_str()); + dirExists = false; + } + } + + if (dirExists) { + buffer = string_format("%s%04d-%02d-%02d_%02d.%02d.%02d_", + buffer.c_str(), output.tm_year, output.tm_mon + 1, + output.tm_mday, output.tm_hour, output.tm_min, output.tm_sec); + + if (scan_target == GX2_SCAN_TARGET_TV && colorBuffer != nullptr && takeScreenshotTV) { + DEBUG_FUNCTION_LINE("Lets take a screenshot from TV."); + takeScreenshot((GX2ColorBuffer *) colorBuffer, buffer, scan_target, gTVSurfaceFormat, gOutputFormat, gQuality); + takeScreenshotTV = false; + } else if (scan_target == GX2_SCAN_TARGET_DRC0 && colorBuffer != nullptr && takeScreenshotDRC) { + DEBUG_FUNCTION_LINE("Lets take a screenshot from DRC."); + takeScreenshot((GX2ColorBuffer *) colorBuffer, buffer, scan_target, gDRCSurfaceFormat, gOutputFormat, gQuality); + takeScreenshotDRC = false; + } + } else { + takeScreenshotTV = false; takeScreenshotDRC = false; } } - real_GX2CopyColorBufferToScanBuffer(colorBuffer,scan_target); + real_GX2CopyColorBufferToScanBuffer(colorBuffer, scan_target); } -WUPS_MUST_REPLACE(VPADRead, WUPS_LOADER_LIBRARY_VPAD, VPADRead); -WUPS_MUST_REPLACE(GX2CopyColorBufferToScanBuffer, WUPS_LOADER_LIBRARY_GX2, GX2CopyColorBufferToScanBuffer); +DECL_FUNCTION(void, GX2SetTVBuffer, void *buffer, uint32_t buffer_size, int32_t tv_render_mode, GX2SurfaceFormat surface_format, GX2BufferingMode buffering_mode) { + DEBUG_FUNCTION_LINE_VERBOSE("Set TV Buffer format to 0x%08X", surface_format); + gTVSurfaceFormat = surface_format; + + return real_GX2SetTVBuffer(buffer, buffer_size, tv_render_mode, surface_format, buffering_mode); +} + +DECL_FUNCTION(void, GX2SetDRCBuffer, void *buffer, uint32_t buffer_size, uint32_t drc_mode, GX2SurfaceFormat surface_format, GX2BufferingMode buffering_mode) { + DEBUG_FUNCTION_LINE_VERBOSE("Set DRC Buffer format to 0x%08X", surface_format); + gDRCSurfaceFormat = surface_format; + + return real_GX2SetDRCBuffer(buffer, buffer_size, drc_mode, surface_format, buffering_mode); +} + +WUPS_MUST_REPLACE(VPADRead, WUPS_LOADER_LIBRARY_VPAD, VPADRead); +WUPS_MUST_REPLACE(GX2CopyColorBufferToScanBuffer, WUPS_LOADER_LIBRARY_GX2, GX2CopyColorBufferToScanBuffer); +WUPS_MUST_REPLACE(GX2SetTVBuffer, WUPS_LOADER_LIBRARY_GX2, GX2SetTVBuffer); +WUPS_MUST_REPLACE(GX2SetDRCBuffer, WUPS_LOADER_LIBRARY_GX2, GX2SetDRCBuffer); \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 60ef4de..4d68995 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,155 +1,254 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "main.h" #include "retain_vars.hpp" +#include "utils/logger.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // Mandatory plugin information. -WUPS_PLUGIN_NAME("Screenshot tool"); +WUPS_PLUGIN_NAME("Screenshot plugin"); WUPS_PLUGIN_DESCRIPTION("This plugin allows you to make screenshots that will be saved to the sd card"); -WUPS_PLUGIN_VERSION("v0.1"); +WUPS_PLUGIN_VERSION(VERSION_FULL); WUPS_PLUGIN_AUTHOR("Maschell"); WUPS_PLUGIN_LICENSE("GPL"); // FS Access -WUPS_FS_ACCESS() +WUPS_USE_WUT_DEVOPTAB(); -uint32_t SplashScreen(int32_t time,int32_t combotime); +WUPS_USE_STORAGE("screenshot_plugin"); + +#define ENABLED_CONFIG_STRING "enabled" +#define FORMAT_CONFIG_STRING "format" +#define QUALITY_CONFIG_STRING "quality" +#define SCREEN_CONFIG_STRING "screen" // Gets called once the loader exists. INITIALIZE_PLUGIN() { - socket_lib_init(); + initLogging(); + gButtonCombo = VPAD_BUTTON_R | VPAD_BUTTON_L | VPAD_BUTTON_ZR | VPAD_BUTTON_ZL; + OSMemoryBarrier(); - log_init(); + // Open storage to read values + WUPSStorageError storageRes = WUPS_OpenStorage(); + if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) { + DEBUG_FUNCTION_LINE_ERR("Failed to open storage %s (%d)", WUPS_GetStorageStatusStr(storageRes), storageRes); + } else { + // Try to get value from storage + if ((storageRes = WUPS_GetInt(nullptr, ENABLED_CONFIG_STRING, reinterpret_cast(&gEnabled))) == WUPS_STORAGE_ERROR_NOT_FOUND) { + // Add the value to the storage if it's missing. + if (WUPS_StoreBool(nullptr, ENABLED_CONFIG_STRING, gEnabled) != WUPS_STORAGE_ERROR_SUCCESS) { + DEBUG_FUNCTION_LINE_ERR("Failed to store value"); + } + } else if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) { + DEBUG_FUNCTION_LINE_ERR("Failed to get value %s (%d)", WUPS_GetStorageStatusStr(storageRes), storageRes); + } + // Try to get value from storage + if ((storageRes = WUPS_GetInt(nullptr, FORMAT_CONFIG_STRING, reinterpret_cast(&gOutputFormat))) == WUPS_STORAGE_ERROR_NOT_FOUND) { + // Add the value to the storage if it's missing. + if (WUPS_StoreBool(nullptr, FORMAT_CONFIG_STRING, gOutputFormat) != WUPS_STORAGE_ERROR_SUCCESS) { + DEBUG_FUNCTION_LINE_ERR("Failed to store value"); + } + } else if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) { + DEBUG_FUNCTION_LINE_ERR("Failed to get value %s (%d)", WUPS_GetStorageStatusStr(storageRes), storageRes); + } - uint32_t res = SplashScreen(10,2); + // Try to get value from storage + if ((storageRes = WUPS_GetInt(nullptr, QUALITY_CONFIG_STRING, reinterpret_cast(&gQuality))) == WUPS_STORAGE_ERROR_NOT_FOUND) { + // Add the value to the storage if it's missing. + if (WUPS_StoreInt(nullptr, QUALITY_CONFIG_STRING, (int32_t) gQuality) != WUPS_STORAGE_ERROR_SUCCESS) { + DEBUG_FUNCTION_LINE_ERR("Failed to store value"); + } + } else if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) { + DEBUG_FUNCTION_LINE_ERR("Failed to get value %s (%d)", WUPS_GetStorageStatusStr(storageRes), storageRes); + } - gButtonCombo = res; - ICInvalidateRange((void*)(&gButtonCombo), 4); - DCFlushRange((void*)(&gButtonCombo), 4); + // Try to get value from storage + if ((storageRes = WUPS_GetInt(nullptr, SCREEN_CONFIG_STRING, reinterpret_cast(&gImageSource))) == WUPS_STORAGE_ERROR_NOT_FOUND) { + // Add the value to the storage if it's missing. + if (WUPS_StoreInt(nullptr, SCREEN_CONFIG_STRING, (int32_t) gImageSource) != WUPS_STORAGE_ERROR_SUCCESS) { + DEBUG_FUNCTION_LINE_ERR("Failed to store value"); + } + } else if (storageRes != WUPS_STORAGE_ERROR_SUCCESS) { + DEBUG_FUNCTION_LINE_ERR("Failed to get value %s (%d)", WUPS_GetStorageStatusStr(storageRes), storageRes); + } + + // Close storage + if (WUPS_CloseStorage() != WUPS_STORAGE_ERROR_SUCCESS) { + DEBUG_FUNCTION_LINE_ERR("Failed to close storage"); + } + } + if (gOutputFormat >= 3) { + gOutputFormat = IMAGE_OUTPUT_FORMAT_JPEG; + } + if (gQuality < 10) { + gQuality = 10; + } else if (gQuality > 100) { + gQuality = 100; + } +} + +void formatChanged(ConfigItemMultipleValues *item, uint32_t newValue) { + DEBUG_FUNCTION_LINE("New value in %s changed: %d", item->configID, newValue); + gOutputFormat = (ImageOutputFormatEnum) newValue; + + if (gOutputFormat >= 3) { + gOutputFormat = IMAGE_OUTPUT_FORMAT_JPEG; + } + + WUPS_StoreInt(nullptr, item->configID, (int32_t) newValue); +} + +void imageSourceChanged(ConfigItemMultipleValues *item, uint32_t newValue) { + DEBUG_FUNCTION_LINE("New value in %s changed: %d", item->configID, newValue); + gImageSource = (ImageSourceEnum) newValue; + + if (gImageSource >= 3) { + gImageSource = IMAGE_SOURCE_TV_AND_DRC; + } + + WUPS_StoreInt(nullptr, item->configID, (int32_t) newValue); +} + +void qualityChanged(ConfigItemIntegerRange *item, int32_t newValue) { + DEBUG_FUNCTION_LINE("New quality: %d", newValue); + gQuality = (ImageOutputFormatEnum) newValue; + + if (gQuality < 10) { + gQuality = 10; + } else if (gQuality > 100) { + gQuality = 100; + } + + WUPS_StoreInt(nullptr, QUALITY_CONFIG_STRING, (int32_t) gQuality); +} + +void enabledChanged(ConfigItemBoolean *item, bool newValue) { + DEBUG_FUNCTION_LINE("gEnabled new value: %d", newValue); + gEnabled = (ImageOutputFormatEnum) newValue; + + WUPS_StoreBool(nullptr, ENABLED_CONFIG_STRING, gEnabled); +} + +WUPS_GET_CONFIG() { + // We open the storage, so we can persist the configuration the user did. + if (WUPS_OpenStorage() != WUPS_STORAGE_ERROR_SUCCESS) { + DEBUG_FUNCTION_LINE_ERR("Failed to open storage"); + return 0; + } + + WUPSConfigHandle config; + WUPSConfig_CreateHandled(&config, "Screenshot plugin"); + + WUPSConfigCategoryHandle setting; + WUPSConfig_AddCategoryByNameHandled(config, "Settings", &setting); + + + WUPSConfigItemBoolean_AddToCategoryHandled(config, setting, ENABLED_CONFIG_STRING, "Enabled", gEnabled, &enabledChanged); + + ConfigItemMultipleValuesPair fileFormat[3]; + fileFormat[0].value = IMAGE_OUTPUT_FORMAT_JPEG; + fileFormat[0].valueName = (char *) "JPEG"; + + fileFormat[1].value = IMAGE_OUTPUT_FORMAT_PNG; + fileFormat[1].valueName = (char *) "PNG"; + + fileFormat[2].value = IMAGE_OUTPUT_FORMAT_BMP; + fileFormat[2].valueName = (char *) "BMP"; + + uint32_t defaultIndex = 0; + uint32_t curIndex = 0; + for (auto &cur : fileFormat) { + if (cur.value == gOutputFormat) { + defaultIndex = curIndex; + break; + } + curIndex++; + } + + WUPSConfigItemMultipleValues_AddToCategoryHandled(config, setting, FORMAT_CONFIG_STRING, "Output format", defaultIndex, fileFormat, + sizeof(fileFormat) / sizeof(fileFormat[0]), &formatChanged); + + + ConfigItemMultipleValuesPair source[3]; + source[0].value = IMAGE_SOURCE_TV_AND_DRC; + source[0].valueName = (char *) "TV & Gamepad"; + + source[1].value = IMAGE_SOURCE_TV; + source[1].valueName = (char *) "TV only"; + + source[2].value = IMAGE_SOURCE_DRC; + source[2].valueName = (char *) "Gamepad only"; + + defaultIndex = 0; + curIndex = 0; + for (auto &cur : source) { + if (cur.value == gImageSource) { + defaultIndex = curIndex; + break; + } + curIndex++; + } + + WUPSConfigItemMultipleValues_AddToCategoryHandled(config, setting, SCREEN_CONFIG_STRING, "Screen", defaultIndex, source, + sizeof(source) / sizeof(source[0]), &imageSourceChanged); + + + WUPSConfigItemIntegerRange_AddToCategoryHandled(config, setting, QUALITY_CONFIG_STRING, "JPEG quality", gQuality, 10, 100, &qualityChanged); + + return config; +} + +WUPS_CONFIG_CLOSED() { + // Save all changes + if (WUPS_CloseStorage() != WUPS_STORAGE_ERROR_SUCCESS) { + DEBUG_FUNCTION_LINE_ERR("Failed to close storage"); + } } // Called whenever an application was started. -ON_APPLICATION_START(my_args) { - socket_lib_init(); - log_init(); - - gAppStatus = WUPS_APP_STATUS_FOREGROUND; - - log_init(); -} - -ON_APP_STATUS_CHANGED(status) { - gAppStatus = status; -} - - -#define FPS 60 -uint32_t SplashScreen(int32_t time,int32_t combotime) { - uint32_t result = VPAD_BUTTON_R | VPAD_BUTTON_L | VPAD_BUTTON_ZR | VPAD_BUTTON_ZL; - - // Init screen - OSScreenInit(); - - uint32_t screen_buf0_size = OSScreenGetBufferSizeEx(SCREEN_TV); - uint32_t screen_buf1_size = OSScreenGetBufferSizeEx(SCREEN_DRC); - - uint32_t * screenbuffer0 = (uint32_t*)memalign(0x100, screen_buf0_size); - uint32_t * screenbuffer1 = (uint32_t*)memalign(0x100, screen_buf1_size); - - if(screenbuffer0 == NULL || screenbuffer1 == NULL) { - if(screenbuffer0 != NULL) { - free(screenbuffer0); +ON_APPLICATION_START() { + initLogging(); + ACPInitialize(); + auto *metaXml = (ACPMetaXml *) memalign(0x40, sizeof(ACPMetaXml)); + if (ACPGetTitleMetaXml(OSGetTitleID(), metaXml) == ACP_RESULT_SUCCESS) { + gShortNameEn = metaXml->shortname_en; + std::string illegalChars = "\\/:?\"<>|@=;`_^]["; + for (auto it = gShortNameEn.begin(); it < gShortNameEn.end(); ++it) { + if (*it < '0' || *it > 'z') { + *it = ' '; + } } - if(screenbuffer1 != NULL) { - free(screenbuffer1); + for (auto it = gShortNameEn.begin(); it < gShortNameEn.end(); ++it) { + bool found = illegalChars.find(*it) != std::string::npos; + if (found) { + *it = ' '; + } } - return result; - } - - OSScreenSetBufferEx(SCREEN_TV, (void *)screenbuffer0); - OSScreenSetBufferEx(SCREEN_DRC, (void *)screenbuffer1); - - OSScreenEnableEx(SCREEN_TV, 1); - OSScreenEnableEx(SCREEN_DRC, 1); - - // Clear screens - OSScreenClearBufferEx(SCREEN_TV, 0); - OSScreenClearBufferEx(SCREEN_DRC, 0); - - // Flip buffers - OSScreenFlipBuffersEx(SCREEN_TV); - OSScreenFlipBuffersEx(SCREEN_DRC); - - OSScreenClearBufferEx(SCREEN_TV, 0); - OSScreenClearBufferEx(SCREEN_DRC, 0); - - std::vector strings; - strings.push_back("Screenshot tool 0.1 - by Maschell."); - strings.push_back(""); - strings.push_back(""); - strings.push_back("Press the combo you want to use for making screenshots now"); - strings.push_back("for 2 seconds."); - strings.push_back(" "); - strings.push_back("Otherwise the default combo (L+R+ZR+ZL button) will be used"); - strings.push_back("in 10 seconds."); - strings.push_back(" "); - strings.push_back("Press the TV buttons to exit with the default combo."); - - uint8_t pos = 0; - for (std::vector::iterator it = strings.begin() ; it != strings.end(); ++it) { - OSScreenPutFontEx(SCREEN_TV, 0, pos, (*it).c_str()); - OSScreenPutFontEx(SCREEN_DRC, 0, pos, (*it).c_str()); - pos++; - } - - OSScreenFlipBuffersEx(SCREEN_TV); - OSScreenFlipBuffersEx(SCREEN_DRC); - - int32_t tickswait = time * FPS * 16; - - int32_t sleepingtime = 16; - int32_t times = tickswait/16; - int32_t i=0; - - VPADStatus vpad_data; - VPADReadError error; - uint32_t last = 0xFFFFFFFF; - int32_t timer = 0; - while(i= combotime*FPS) { - result = vpad_data.hold; - break; - } - i++; - OSSleepTicks(OSMicrosecondsToTicks(sleepingtime*1000)); + } else { + gShortNameEn.clear(); } - - if(screenbuffer0 != NULL) { - free(screenbuffer0); - } - if(screenbuffer1 != NULL) { - free(screenbuffer1); - } - - return result; +} + +ON_APPLICATION_REQUESTS_EXIT() { + deinitLogging(); } diff --git a/src/main.h b/src/main.h new file mode 100644 index 0000000..a87e236 --- /dev/null +++ b/src/main.h @@ -0,0 +1,5 @@ +#pragma once +#include "version.h" + +#define VERSION "v0.1" +#define VERSION_FULL VERSION VERSION_EXTRA \ No newline at end of file diff --git a/src/retain_vars.cpp b/src/retain_vars.cpp index a31d3a8..cb9ad22 100644 --- a/src/retain_vars.cpp +++ b/src/retain_vars.cpp @@ -1,3 +1,10 @@ #include "retain_vars.hpp" -wups_loader_app_status_t gAppStatus __attribute__((section(".data"))) = WUPS_APP_STATUS_UNKNOWN; -uint32_t gButtonCombo __attribute__((section(".data"))) = 0; +#include +GX2SurfaceFormat gTVSurfaceFormat = GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8; +GX2SurfaceFormat gDRCSurfaceFormat = GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8; +ImageSourceEnum gImageSource = IMAGE_SOURCE_TV_AND_DRC; +bool gEnabled = true; +uint32_t gButtonCombo = 0; +int32_t gQuality = 90; +ImageOutputFormatEnum gOutputFormat = IMAGE_OUTPUT_FORMAT_JPEG; +std::string gShortNameEn; \ No newline at end of file diff --git a/src/retain_vars.hpp b/src/retain_vars.hpp index 318a66d..c9c745f 100644 --- a/src/retain_vars.hpp +++ b/src/retain_vars.hpp @@ -1,9 +1,14 @@ -#ifndef _RETAINS_VARS_H_ -#define _RETAINS_VARS_H_ - +#pragma once +#include "common.h" +#include +#include #include -extern wups_loader_app_status_t gAppStatus; +extern bool gEnabled; +extern ImageSourceEnum gImageSource; +extern GX2SurfaceFormat gTVSurfaceFormat; +extern GX2SurfaceFormat gDRCSurfaceFormat; extern uint32_t gButtonCombo; - -#endif // _RETAINS_VARS_H_ +extern int32_t gQuality; +extern ImageOutputFormatEnum gOutputFormat; +extern std::string gShortNameEn; \ No newline at end of file diff --git a/src/screenshot_utils.cpp b/src/screenshot_utils.cpp index 749412c..34186d2 100644 --- a/src/screenshot_utils.cpp +++ b/src/screenshot_utils.cpp @@ -1,102 +1,138 @@ #include "screenshot_utils.h" - -#include -#include -#include +#include "common.h" +#include "utils/utils.h" +#include #include -#include #include +#include +#include +uint8_t RGBComponentToSRGB[] = {0x00, 0x0C, 0x15, 0x1C, 0x21, 0x26, 0x2A, 0x2E, 0x31, 0x34, 0x37, 0x3A, 0x3D, 0x3F, 0x42, 0x44, + 0x46, 0x49, 0x4B, 0x4D, 0x4F, 0x51, 0x52, 0x54, 0x56, 0x58, 0x59, 0x5B, 0x5D, 0x5E, 0x60, 0x61, + 0x63, 0x64, 0x66, 0x67, 0x68, 0x6A, 0x6B, 0x6D, 0x6E, 0x6F, 0x70, 0x72, 0x73, 0x74, 0x75, 0x76, + 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, + 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA1, 0xA2, 0xA3, 0xA4, + 0xA5, 0xA5, 0xA6, 0xA7, 0xA8, 0xA8, 0xA9, 0xAA, 0xAB, 0xAB, 0xAC, 0xAD, 0xAE, 0xAE, 0xAF, 0xB0, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB3, 0xB4, 0xB5, 0xB5, 0xB6, 0xB7, 0xB7, 0xB8, 0xB9, 0xB9, 0xBA, 0xBB, + 0xBB, 0xBC, 0xBD, 0xBD, 0xBE, 0xBF, 0xBF, 0xC0, 0xC1, 0xC1, 0xC2, 0xC2, 0xC3, 0xC4, 0xC4, 0xC5, + 0xC5, 0xC6, 0xC7, 0xC7, 0xC8, 0xC9, 0xC9, 0xCA, 0xCA, 0xCB, 0xCC, 0xCC, 0xCD, 0xCD, 0xCE, 0xCE, + 0xCF, 0xD0, 0xD0, 0xD1, 0xD1, 0xD2, 0xD2, 0xD3, 0xD4, 0xD4, 0xD5, 0xD5, 0xD6, 0xD6, 0xD7, 0xD7, + 0xD8, 0xD9, 0xD9, 0xDA, 0xDA, 0xDB, 0xDB, 0xDC, 0xDC, 0xDD, 0xDD, 0xDE, 0xDE, 0xDF, 0xDF, 0xE0, + 0xE1, 0xE1, 0xE2, 0xE2, 0xE3, 0xE3, 0xE4, 0xE4, 0xE5, 0xE5, 0xE6, 0xE6, 0xE7, 0xE7, 0xE8, 0xE8, + 0xE9, 0xE9, 0xEA, 0xEA, 0xEB, 0xEB, 0xEC, 0xEC, 0xED, 0xED, 0xED, 0xEE, 0xEE, 0xEF, 0xEF, 0xF0, + 0xF0, 0xF1, 0xF1, 0xF2, 0xF2, 0xF3, 0xF3, 0xF4, 0xF4, 0xF5, 0xF5, 0xF5, 0xF6, 0xF6, 0xF7, 0xF7, + 0xF8, 0xF8, 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFB, 0xFC, 0xFC, 0xFD, 0xFD, 0xFE, 0xFE, 0xFE}; -#ifdef __cplusplus -extern "C" { -#endif - -void -GX2ResolveAAColorBuffer(const GX2ColorBuffer * srcColorBuffer, - GX2Surface * dstSurface, - uint32_t dstMip, - uint32_t dstSlice); - -#ifdef __cplusplus -} -#endif - -JpegInformation * convertToJpeg(uint8_t * sourceBuffer, uint32_t width, uint32_t height, uint32_t pitch, uint32_t format, int32_t quality) { - if(sourceBuffer == NULL) { - DEBUG_FUNCTION_LINE("path or buffer NULL\n"); - return NULL; +bool saveTextureAsPicture(const std::string &path, uint8_t *sourceBuffer, uint32_t width, uint32_t height, uint32_t pitch, GX2SurfaceFormat format, ImageOutputFormatEnum outputFormat, bool convertRGBtoSRGB, int quality) { + if (sourceBuffer == nullptr) { + DEBUG_FUNCTION_LINE_ERR("sourceBuffer is nullptr"); + return false; } - if(( format != GX2_SURFACE_FORMAT_SRGB_R8_G8_B8_A8 && - format != GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8)) { - DEBUG_FUNCTION_LINE("Format not supported\n"); - return NULL; + if (format != GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8) { + DEBUG_FUNCTION_LINE_ERR("Surface format 0x%08X not supported", format); + return false; } - tjhandle handle = tjInitCompress(); - - if(handle == NULL) { - const char *err = (const char *) tjGetErrorStr(); - DEBUG_FUNCTION_LINE("TJ Error: %s UNABLE TO INIT TJ Compressor Object\n",err); - return NULL; + if (quality < 10) { + quality = 10; + } else if (quality > 100) { + quality = 100; } - int32_t jpegQual = quality; - int32_t nbands = 4; - int32_t flags = 0; - unsigned char* jpegBuf = NULL; + auto res = false; - int32_t pixelFormat = TJPF_GRAY; - int32_t jpegSubsamp = TJSAMP_GRAY; - if(nbands == 4) { - pixelFormat = TJPF_RGBA; - jpegSubsamp = TJSAMP_411; - } - unsigned long jpegSize = 0; - - int32_t tj_stat = tjCompress2( handle, sourceBuffer, width, pitch * nbands, height, pixelFormat, &(jpegBuf), &jpegSize, jpegSubsamp, jpegQual, flags); - if(tj_stat != 0) { - const char *err = (const char *) tjGetErrorStr(); - DEBUG_FUNCTION_LINE("TurboJPEG Error: %s UNABLE TO COMPRESS JPEG IMAGE\n", err); - tjDestroy(handle); - } else { - DEBUG_FUNCTION_LINE("Success! %08X %08X\n",jpegBuf, jpegSize); - return new JpegInformation(handle, jpegBuf, jpegSize); + gdImagePtr im = gdImageCreateTrueColor((int) width, (int) height); + if (!im) { + DEBUG_FUNCTION_LINE_ERR("Failed to create gdImage with dimension: %d x %d", width, height); + return false; } - return NULL; + gdImageFill(im, 0, 0, gdImageColorAllocate(im, 255, 255, 255)); + + auto *buffer = (uint32_t *) sourceBuffer; + + for (uint32_t y = 0; y < height; ++y) { + for (uint32_t x = 0; x < width; ++x) { + uint32_t pixel = buffer[(y * pitch) + x]; + + uint8_t r = (pixel >> 24) & 0xFF; + uint8_t g = (pixel >> 16) & 0xFF; + uint8_t b = (pixel >> 8) & 0xFF; + + if (convertRGBtoSRGB) { + r = RGBComponentToSRGB[r]; + g = RGBComponentToSRGB[g]; + b = RGBComponentToSRGB[b]; + } + + auto color = gdImageColorAllocate(im, r, g, b); + gdImageSetPixel(im, (int) x, (int) y, color); + } + } + + FILE *file = fopen(path.c_str(), "wb"); + if (file) { + setvbuf(file, nullptr, _IOFBF, 512 * 1024); + res = true; + + DEBUG_FUNCTION_LINE("Saving screenshot as %s", path.c_str()); + switch (outputFormat) { + case IMAGE_OUTPUT_FORMAT_JPEG: { + gdImageJpeg(im, file, (int32_t) quality); + break; + } + case IMAGE_OUTPUT_FORMAT_PNG: { + gdImagePngEx(im, file, -1); + break; + } + case IMAGE_OUTPUT_FORMAT_BMP: + gdImageBmp(im, file, -1); + break; + default: + DEBUG_FUNCTION_LINE_ERR("Invalid output format"); + res = false; + break; + } + + // Close file + fclose(file); + } + gdImageDestroy(im); + + return res; } -bool copyBuffer(GX2ColorBuffer * sourceBuffer, GX2ColorBuffer * targetBuffer, uint32_t targetWidth, uint32_t targetHeight) { - // Making sure the buffers are not NULL - if (sourceBuffer != NULL && targetBuffer != NULL) { - uint32_t depth = 1; - targetBuffer->surface.use = (GX2SurfaceUse) (GX2_SURFACE_USE_COLOR_BUFFER | GX2_SURFACE_USE_TEXTURE); - targetBuffer->surface.dim = GX2_SURFACE_DIM_TEXTURE_2D; - targetBuffer->surface.width = targetWidth; - targetBuffer->surface.height = targetHeight; - targetBuffer->surface.depth = depth; - targetBuffer->surface.mipLevels = 1; - targetBuffer->surface.format = GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8; - targetBuffer->surface.aa = GX2_AA_MODE1X; - targetBuffer->surface.tileMode = GX2_TILE_MODE_LINEAR_ALIGNED; - targetBuffer->viewMip = 0; - targetBuffer->viewFirstSlice = 0; - targetBuffer->viewNumSlices = 1; - targetBuffer->surface.swizzle = 0; - targetBuffer->surface.alignment = 0; - targetBuffer->surface.pitch = 0; +static bool copyBuffer(GX2ColorBuffer *sourceBuffer, GX2ColorBuffer *targetBuffer, uint32_t targetWidth, uint32_t targetHeight) { + // Making sure the buffers are not nullptr + if (sourceBuffer != nullptr && targetBuffer != nullptr) { + uint32_t depth = 1; + targetBuffer->surface.use = (GX2SurfaceUse) (GX2_SURFACE_USE_COLOR_BUFFER | GX2_SURFACE_USE_TEXTURE); + targetBuffer->surface.dim = GX2_SURFACE_DIM_TEXTURE_2D; + targetBuffer->surface.width = targetWidth; + targetBuffer->surface.height = targetHeight; + targetBuffer->surface.depth = depth; + targetBuffer->surface.mipLevels = 1; + targetBuffer->surface.format = GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8; + targetBuffer->surface.aa = GX2_AA_MODE1X; + targetBuffer->surface.tileMode = GX2_TILE_MODE_LINEAR_ALIGNED; + targetBuffer->viewMip = 0; + targetBuffer->viewFirstSlice = 0; + targetBuffer->viewNumSlices = 1; + targetBuffer->surface.swizzle = 0; + targetBuffer->surface.alignment = 0; + targetBuffer->surface.pitch = 0; uint32_t i; - for(i = 0; i < 13; i++) { + for (i = 0; i < 13; i++) { targetBuffer->surface.mipLevelOffset[i] = 0; } - targetBuffer->viewMip = 0; + targetBuffer->viewMip = 0; targetBuffer->viewFirstSlice = 0; - targetBuffer->viewNumSlices = depth; - targetBuffer->aaBuffer = NULL; - targetBuffer->aaSize = 0; - for(i = 0; i < 5; i++){ + targetBuffer->viewNumSlices = depth; + targetBuffer->aaBuffer = nullptr; + targetBuffer->aaSize = 0; + for (i = 0; i < 5; i++) { targetBuffer->regs[i] = 0; } @@ -104,12 +140,11 @@ bool copyBuffer(GX2ColorBuffer * sourceBuffer, GX2ColorBuffer * targetBuffer, ui GX2InitColorBufferRegs(targetBuffer); // Let's allocate the memory. - targetBuffer->surface.image = memalign(targetBuffer->surface.alignment,targetBuffer->surface.imageSize); - if(targetBuffer->surface.image == NULL) { - DEBUG_FUNCTION_LINE("failed to allocate memory.\n"); + targetBuffer->surface.image = MEMAllocFromMappedMemoryForGX2Ex(targetBuffer->surface.imageSize, targetBuffer->surface.alignment); + if (targetBuffer->surface.image == nullptr) { + DEBUG_FUNCTION_LINE_ERR("Failed to allocate memory for the surface image"); return false; } - DEBUG_FUNCTION_LINE("Allocated image data buffer. data %08X size %08X \n",targetBuffer->surface.image,targetBuffer->surface.imageSize); GX2Invalidate(GX2_INVALIDATE_MODE_CPU, targetBuffer->surface.image, targetBuffer->surface.imageSize); if (sourceBuffer->surface.aa == GX2_AA_MODE1X) { @@ -121,74 +156,106 @@ bool copyBuffer(GX2ColorBuffer * sourceBuffer, GX2ColorBuffer * targetBuffer, ui } else { // If AA is enabled, we need to resolve the AA buffer. GX2Surface tempSurface; - tempSurface = sourceBuffer->surface; + tempSurface = sourceBuffer->surface; tempSurface.aa = GX2_AA_MODE1X; GX2CalcSurfaceSizeAndAlignment(&tempSurface); - tempSurface.image = memalign(tempSurface.alignment,tempSurface.imageSize); - if(tempSurface.image == NULL) { - DEBUG_FUNCTION_LINE("failed to allocate data AA.\n"); - if(targetBuffer->surface.image != NULL) { - free(targetBuffer->surface.image); - targetBuffer->surface.image = NULL; + tempSurface.image = MEMAllocFromMappedMemoryForGX2Ex(tempSurface.imageSize, tempSurface.alignment); + if (tempSurface.image == nullptr) { + DEBUG_FUNCTION_LINE_ERR("failed to allocate data for resolving AA"); + if (targetBuffer->surface.image != nullptr) { + MEMFreeToMappedMemory(targetBuffer->surface.image); + targetBuffer->surface.image = nullptr; } return false; } - GX2ResolveAAColorBuffer(sourceBuffer,&tempSurface, 0, 0); - GX2CopySurface(&tempSurface, 0, 0,&targetBuffer->surface, 0, 0); + GX2ResolveAAColorBuffer(sourceBuffer, &tempSurface, 0, 0); + GX2CopySurface(&tempSurface, 0, 0, &targetBuffer->surface, 0, 0); // Sync CPU and GPU GX2DrawDone(); - if(tempSurface.image != NULL) { - free(tempSurface.image); - tempSurface.image = NULL; + if (tempSurface.image != nullptr) { + MEMFreeToMappedMemory(tempSurface.image); + tempSurface.image = nullptr; } } return true; } else { - DEBUG_FUNCTION_LINE("Couldn't copy buffer, pointer was NULL\n"); + DEBUG_FUNCTION_LINE_ERR("Couldn't copy buffer, pointer was nullptr"); return false; } } -bool takeScreenshot(GX2ColorBuffer *srcBuffer,const char * path) { - if(srcBuffer == NULL) { +bool takeScreenshot(GX2ColorBuffer *srcBuffer, const std::string &path, GX2ScanTarget scanTarget, GX2SurfaceFormat outputBufferSurfaceFormat, ImageOutputFormatEnum outputFormat, int quality) { + if (srcBuffer == nullptr) { + DEBUG_FUNCTION_LINE_ERR("Source buffer was NULL"); return false; } - DEBUG_FUNCTION_LINE("Taking screenshot. %s\n",path); GX2ColorBuffer colorBuffer; - GX2ColorBuffer * saveBuffer = NULL; + GX2ColorBuffer *saveBuffer = nullptr; // keep dimensions - uint32_t width = srcBuffer->surface.width; + uint32_t width = srcBuffer->surface.width; uint32_t height = srcBuffer->surface.height; - bool valid = false; - bool cancel = false; - bool low_memory = false; - do { - // At first we need to copy the buffer to fit our resolution. - if(saveBuffer == NULL) { - do { - valid = copyBuffer(srcBuffer,&colorBuffer,width,height); - // If the copying failed, we don't have enough memory. Let's decrease the resolution. - if(!valid) { - low_memory = true; + std::string fullPath = path; - if(height >= 1080) { - width = 1280; + if (scanTarget == GX2_SCAN_TARGET_DRC) { + fullPath += "DRC"; + } else if (scanTarget == GX2_SCAN_TARGET_TV) { + fullPath += "TV"; + } else if (scanTarget == GX2_SCAN_TARGET_DRC1) { + fullPath += "DRC2"; + } else { + DEBUG_FUNCTION_LINE_ERR("Invalid scanTarget %d", scanTarget); + return false; + } + + switch (outputFormat) { + case IMAGE_OUTPUT_FORMAT_JPEG: + fullPath += ".jpg"; + break; + case IMAGE_OUTPUT_FORMAT_PNG: + fullPath += ".png"; + break; + case IMAGE_OUTPUT_FORMAT_BMP: + fullPath += ".bmp"; + break; + default: + DEBUG_FUNCTION_LINE_WARN("Invalid output format, use jpeg instead"); + fullPath += ".jpg"; + break; + } + + bool convertRGBToSRGB = false; + if ((outputBufferSurfaceFormat & 0x400)) { + DEBUG_FUNCTION_LINE_VERBOSE("Images needs to be converted to SRGB"); + convertRGBToSRGB = true; + } + + bool valid; + bool cancel = false; + do { + // At first, we need to copy the buffer to fit our resolution. + if (saveBuffer == nullptr) { + do { + valid = copyBuffer(srcBuffer, &colorBuffer, width, height); + // If the copying failed, we don't have enough memory. Let's decrease the resolution. + if (!valid) { + if (height >= 1080) { + width = 1280; height = 720; - DEBUG_FUNCTION_LINE("Switching to 720p.\n"); - } else if(height >= 720) { - width = 854; + DEBUG_FUNCTION_LINE("Switching to 720p."); + } else if (height >= 720) { + width = 854; height = 480; - DEBUG_FUNCTION_LINE("Switching to 480p.\n"); - } else if(height >= 480) { - width = 640; + DEBUG_FUNCTION_LINE("Switching to 480p."); + } else if (height >= 480) { + width = 640; height = 360; - DEBUG_FUNCTION_LINE("Switching to 360p.\n"); + DEBUG_FUNCTION_LINE("Switching to 360p."); } else { // Cancel the screenshot if the resolution would be too low. cancel = true; @@ -198,65 +265,53 @@ bool takeScreenshot(GX2ColorBuffer *srcBuffer,const char * path) { // On success save the pointer. saveBuffer = &colorBuffer; } - } while(!valid); + } while (!valid); } // Check if we should proceed - if(cancel) { + if (cancel) { // Free the memory on error. - if(colorBuffer.surface.image != NULL) { - free(colorBuffer.surface.image); - colorBuffer.surface.image = NULL; + if (colorBuffer.surface.image != nullptr) { + MEMFreeToMappedMemory(colorBuffer.surface.image); + colorBuffer.surface.image = nullptr; } return false; } // Flush out destinations caches - GX2Invalidate(GX2_INVALIDATE_MODE_COLOR_BUFFER, colorBuffer.surface.image,colorBuffer.surface.imageSize); + GX2Invalidate(GX2_INVALIDATE_MODE_COLOR_BUFFER, colorBuffer.surface.image, colorBuffer.surface.imageSize); // Wait for GPU to finish GX2DrawDone(); - DEBUG_FUNCTION_LINE("Trying to save.\n"); - - JpegInformation * jpegResult = convertToJpeg((uint8_t *) saveBuffer->surface.image,width,height,saveBuffer->surface.pitch,saveBuffer->surface.format, 95); - if(jpegResult != NULL) { - DEBUG_FUNCTION_LINE("Encoded file as JPEG. size = %lld.\n", jpegResult->getSize()); - DCFlushRange(jpegResult->getBuffer(), jpegResult->getSize()); - valid = FSUtils::saveBufferToFile(path, (void *) jpegResult->getBuffer(), jpegResult->getSize()); - if(!valid) { - DEBUG_FUNCTION_LINE("Failed to save buffer to %s \n",path); - } - delete jpegResult; - } + valid = saveTextureAsPicture(fullPath, (uint8_t *) saveBuffer->surface.image, width, height, saveBuffer->surface.pitch, saveBuffer->surface.format, outputFormat, convertRGBToSRGB, quality); // Free the colorbuffer copy. - if(colorBuffer.surface.image != NULL) { - free(colorBuffer.surface.image); - colorBuffer.surface.image = NULL; - saveBuffer = NULL; + if (colorBuffer.surface.image != nullptr) { + MEMFreeToMappedMemory(colorBuffer.surface.image); + colorBuffer.surface.image = nullptr; + saveBuffer = nullptr; } // When taking the screenshot failed, decrease the resolution again ~. - if(!valid) { - low_memory = true; - if(height >= 1080) { - width = 1280; + if (!valid) { + if (height >= 1080) { + width = 1280; height = 720; - DEBUG_FUNCTION_LINE("Switching to 720p.\n"); - } else if(height >= 720) { - width = 854; + DEBUG_FUNCTION_LINE("Switching to 720p."); + } else if (height >= 720) { + width = 854; height = 480; - DEBUG_FUNCTION_LINE("Switching to 480p.\n"); - } else if(height >= 480) { - width = 640; + DEBUG_FUNCTION_LINE("Switching to 480p."); + } else if (height >= 480) { + width = 640; height = 360; - DEBUG_FUNCTION_LINE("Switching to 360p.\n"); + DEBUG_FUNCTION_LINE("Switching to 360p."); } else { return false; } } - } while(!valid); + } while (!valid); return true; } diff --git a/src/screenshot_utils.h b/src/screenshot_utils.h index 1483970..55330a0 100644 --- a/src/screenshot_utils.h +++ b/src/screenshot_utils.h @@ -1,14 +1,13 @@ -#ifndef _SCREENSHOT_UTILS_H_ -#define _SCREENSHOT_UTILS_H_ +#pragma once +#include "common.h" +#include "utils/logger.h" #include -#include -#include "JpegInformation.h" +#include +#include +#include -JpegInformation * convertToJpeg(uint8_t * sourceBuffer, uint32_t width, uint32_t height, uint32_t pitch, uint32_t format, int32_t quality); +bool saveTextureAsPicture(const std::string &path, uint8_t *sourceBuffer, uint32_t width, uint32_t height, uint32_t pitch, GX2SurfaceFormat format, ImageOutputFormatEnum outputFormat, bool convertRGBtoSRGB, int quality); -bool copyBuffer(GX2ColorBuffer * sourceBuffer, GX2ColorBuffer * targetBuffer, uint32_t targetWidth, uint32_t targetHeight); -bool takeScreenshot(GX2ColorBuffer *srcBuffer,const char * path); - -#endif +bool takeScreenshot(GX2ColorBuffer *srcBuffer, const std::string &path, GX2ScanTarget scanTarget, GX2SurfaceFormat outputBufferSurfaceFormat, ImageOutputFormatEnum outputFormat, int quality); diff --git a/src/utils/StringTools.h b/src/utils/StringTools.h new file mode 100644 index 0000000..94e51f6 --- /dev/null +++ b/src/utils/StringTools.h @@ -0,0 +1,14 @@ +#pragma once + +#include +#include +#include + +template +std::string string_format(const std::string &format, Args... args) { + int size_s = std::snprintf(nullptr, 0, format.c_str(), args...) + 1; // Extra space for '\0' + auto size = static_cast(size_s); + auto buf = std::make_unique(size); + std::snprintf(buf.get(), size, format.c_str(), args...); + return std::string(buf.get(), buf.get() + size - 1); // We don't want the '\0' inside +} diff --git a/src/utils/logger.c b/src/utils/logger.c new file mode 100644 index 0000000..f700806 --- /dev/null +++ b/src/utils/logger.c @@ -0,0 +1,36 @@ +#ifdef DEBUG +#include +#include +#include +#include + +uint32_t moduleLogInit = false; +uint32_t cafeLogInit = false; +uint32_t udpLogInit = false; +#endif // DEBUG + +void initLogging() { +#ifdef DEBUG + if (!(moduleLogInit = WHBLogModuleInit())) { + cafeLogInit = WHBLogCafeInit(); + udpLogInit = WHBLogUdpInit(); + } +#endif // DEBUG +} + +void deinitLogging() { +#ifdef DEBUG + if (moduleLogInit) { + WHBLogModuleDeinit(); + moduleLogInit = false; + } + if (cafeLogInit) { + WHBLogCafeDeinit(); + cafeLogInit = false; + } + if (udpLogInit) { + WHBLogUdpDeinit(); + udpLogInit = false; + } +#endif // DEBUG +} \ No newline at end of file diff --git a/src/utils/logger.h b/src/utils/logger.h new file mode 100644 index 0000000..d2cf512 --- /dev/null +++ b/src/utils/logger.h @@ -0,0 +1,72 @@ +#pragma once + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define LOG_APP_TYPE "P" +#define LOG_APP_NAME "ScreenshotPlugin" + +#define __FILENAME__ ({ \ + const char *__filename = __FILE__; \ + const char *__pos = strrchr(__filename, '/'); \ + if (!__pos) __pos = strrchr(__filename, '\\'); \ + __pos ? __pos + 1 : __filename; \ +}) + +#define LOG(LOG_FUNC, FMT, ARGS...) LOG_EX_DEFAULT(LOG_FUNC, "", "", FMT, ##ARGS) + +#define LOG_EX_DEFAULT(LOG_FUNC, LOG_LEVEL, LINE_END, FMT, ARGS...) LOG_EX(__FILENAME__, __FUNCTION__, __LINE__, LOG_FUNC, LOG_LEVEL, LINE_END, FMT, ##ARGS) + +#define LOG_EX(FILENAME, FUNCTION, LINE, LOG_FUNC, LOG_LEVEL, LINE_END, FMT, ARGS...) \ + do { \ + LOG_FUNC("[(%s)%18s][%23s]%30s@L%04d: " LOG_LEVEL "" FMT "" LINE_END, LOG_APP_TYPE, LOG_APP_NAME, FILENAME, FUNCTION, LINE, ##ARGS); \ + } while (0) + +#ifdef DEBUG + +#ifdef VERBOSE_DEBUG +#define DEBUG_FUNCTION_LINE_VERBOSE(FMT, ARGS...) LOG(WHBLogPrintf, FMT, ##ARGS) +#define DEBUG_FUNCTION_LINE_VERBOSE_EX(FILENAME, FUNCTION, LINE, FMT, ARGS...) LOG_EX(FILENAME, FUNCTION, LINE, WHBLogPrintf, "", "", FMT, ##ARGS); +#else +#define DEBUG_FUNCTION_LINE_VERBOSE(FMT, ARGS...) while (0) +#define DEBUG_FUNCTION_LINE_VERBOSE_EX(FMT, ARGS...) while (0) +#endif + +#define DEBUG_FUNCTION_LINE(FMT, ARGS...) LOG(WHBLogPrintf, FMT, ##ARGS) + +#define DEBUG_FUNCTION_LINE_WRITE(FMT, ARGS...) LOG(WHBLogWritef, FMT, ##ARGS) + +#define DEBUG_FUNCTION_LINE_ERR(FMT, ARGS...) LOG_EX_DEFAULT(WHBLogPrintf, "##ERROR## ", "", FMT, ##ARGS) +#define DEBUG_FUNCTION_LINE_WARN(FMT, ARGS...) LOG_EX_DEFAULT(WHBLogPrintf, "##WARN ## ", "", FMT, ##ARGS) + +#define DEBUG_FUNCTION_LINE_ERR_LAMBDA(FILENAME, FUNCTION, LINE, FMT, ARGS...) LOG_EX(FILENAME, FUNCTION, LINE, WHBLogPrintf, "##ERROR## ", "", FMT, ##ARGS); + +#else + +#define DEBUG_FUNCTION_LINE_VERBOSE_EX(FMT, ARGS...) while (0) + +#define DEBUG_FUNCTION_LINE_VERBOSE(FMT, ARGS...) while (0) + +#define DEBUG_FUNCTION_LINE(FMT, ARGS...) while (0) + +#define DEBUG_FUNCTION_LINE_WRITE(FMT, ARGS...) while (0) + +#define DEBUG_FUNCTION_LINE_ERR(FMT, ARGS...) LOG_EX_DEFAULT(OSReport, "##ERROR## ", "\n", FMT, ##ARGS) +#define DEBUG_FUNCTION_LINE_WARN(FMT, ARGS...) LOG_EX_DEFAULT(OSReport, "##WARN ## ", "\n", FMT, ##ARGS) + +#define DEBUG_FUNCTION_LINE_ERR_LAMBDA(FILENAME, FUNCTION, LINE, FMT, ARGS...) LOG_EX(FILENAME, FUNCTION, LINE, OSReport, "##ERROR## ", "\n", FMT, ##ARGS); + +#endif + +void initLogging(); + +void deinitLogging(); + +#ifdef __cplusplus +} +#endif diff --git a/src/utils/utils.h b/src/utils/utils.h new file mode 100644 index 0000000..e945dd0 --- /dev/null +++ b/src/utils/utils.h @@ -0,0 +1,12 @@ +#pragma once +#include + +template +std::unique_ptr make_unique_nothrow(Args &&...args) noexcept(noexcept(T(std::forward(args)...))) { + return std::unique_ptr(new (std::nothrow) T(std::forward(args)...)); +} + +template +std::shared_ptr make_shared_nothrow(Args &&...args) noexcept(noexcept(T(std::forward(args)...))) { + return std::shared_ptr(new (std::nothrow) T(std::forward(args)...)); +} diff --git a/src/version.h b/src/version.h new file mode 100644 index 0000000..66a2c7e --- /dev/null +++ b/src/version.h @@ -0,0 +1,2 @@ +#pragma once +#define VERSION_EXTRA "" \ No newline at end of file