mirror of
https://github.com/webmproject/libwebp.git
synced 2024-11-20 04:18:26 +01:00
d260310511
You can now use WebPDecBuffer, WebPBitstreamFeatures and WebPDecoderOptions to have better control over the decoding process (and the speed/quality tradeoff). WebPDecoderOptions allow to: - turn fancy upsampler on/off - turn in-loop filter on/off - perform on-the-fly cropping - perform on the-fly rescale (and more to come. Not all features are implemented yet). On-the-fly cropping and scaling allow to save quite some memory (as the decoding operation will now scale with the output's size, not the input's one). It saves some CPU too (since for instance, in-loop filtering is partially turned off where it doesn't matter, and some YUV->RGB conversion operations are ommitted too). The scaler uses summed area, so is mainly meant to be used for downscaling (like: for generating thumbnails or previews). Incremental decoding works with these new options. More doc to come soon. dwebp is now using the new decoding interface, with the new flags: -nofancy -nofilter -crop top left width height -scale width height Change-Id: I08baf2fa291941686f4ef70a9cc2e4137874e85e
221 lines
5.9 KiB
Makefile
221 lines
5.9 KiB
Makefile
#
|
|
# Stem for static libs and DLLs
|
|
#
|
|
LIB_NAME = libwebp_a
|
|
LIB_NAME_DEBUG = libwebp_a_debug
|
|
|
|
#
|
|
# Stem for DLL import libs
|
|
#
|
|
IMPLIB_NAME = libwebp
|
|
IMPLIB_NAME_DEBUG = libwepb_debug
|
|
|
|
!IFNDEF DEP_PATH
|
|
DEPS_PATH = ../../deps
|
|
!ENDIF
|
|
|
|
!IFNDEF ARCH
|
|
!IF ! [ cl 2>&1 | find "x86" > NUL ]
|
|
ARCH = x86
|
|
!ELSE IF ! [ cl 2>&1 | find "x64" > NUL ]
|
|
ARCH = x64
|
|
!ELSE
|
|
!ERROR Unable to auto-detect toolchain architecture! \
|
|
If cl.exe is in your PATH rerun nmake with ARCH=<arch>.
|
|
!ENDIF
|
|
!ENDIF
|
|
|
|
!IF "$(ARCH)" == "x86"
|
|
PLATFORM_LDFLAGS = /SAFESEH
|
|
!ENDIF
|
|
|
|
#############################################################
|
|
## Nothing more to do below this line!
|
|
|
|
MT = mt.exe
|
|
CCNODBG = cl.exe /nologo /O2 /DNDEBUG
|
|
CCDEBUG = cl.exe /nologo /Od /Gm /Zi /D_DEBUG /RTC1
|
|
CFLAGS = /Isrc /nologo /W3 /EHsc /FD /c /GS
|
|
CFLAGS = $(CFLAGS) /DWIN32 /D_CRT_SECURE_NO_WARNINGS /DHAVE_WINCODEC_H
|
|
LDFLAGS = /LARGEADDRESSAWARE /MANIFEST /NXCOMPAT /DYNAMICBASE $(PLATFORM_LDFLAGS)
|
|
CFLAGSLIB = /DLIBWEBP_STATICLIB
|
|
LNKDLL = link.exe /DLL
|
|
LNKLIB = link.exe /lib
|
|
LNKEXE = link.exe
|
|
LFLAGS = /nologo /machine:$(ARCH)
|
|
|
|
CFGSET = FALSE
|
|
!IF "$(OBJDIR)" == ""
|
|
OUTDIR = ..\obj\
|
|
!ELSE
|
|
OUTDIR = $(OBJDIR)
|
|
!ENDIF
|
|
|
|
##############################################################
|
|
# Runtime library configuration
|
|
!IF "$(RTLIBCFG)" == "static"
|
|
RTLIB = /MT
|
|
RTLIBD = /MTd
|
|
!ELSE
|
|
RTLIB = /MD
|
|
RTLIBD = /MDd
|
|
!ENDIF
|
|
DIRBASE = $(OUTDIR)\$(CFG)\$(ARCH)
|
|
DIROBJ = $(DIRBASE)\obj
|
|
DIRLIB = $(DIRBASE)\lib
|
|
DIRINC = $(DIRBASE)\include
|
|
DIRBIN = $(DIRBASE)\bin
|
|
|
|
# release-static
|
|
!IF "$(CFG)" == "release-static"
|
|
TARGET = $(LIB_NAME).lib
|
|
LNK = $(LNKLIB) /out:$(DIRLIB)\$(TARGET)
|
|
CC = $(CCNODBG) $(RTLIB) $(CFLAGSLIB)
|
|
CFGSET = TRUE
|
|
!ENDIF
|
|
|
|
# debug-static
|
|
!IF "$(CFG)" == "debug-static"
|
|
TARGET = $(LIB_NAME_DEBUG).lib
|
|
LNK = $(LNKLIB) /out:$(DIRLIB)\$(TARGET)
|
|
CC = $(CCDEBUG) $(RTLIBD) $(CFLAGSLIB)
|
|
CFGSET = TRUE
|
|
!ENDIF
|
|
|
|
#######################
|
|
# Usage
|
|
#
|
|
!IF "$(CFGSET)" == "FALSE"
|
|
!MESSAGE Usage: nmake /f Makefile.vc [CFG=<config>] [OBJDIR=<path>] [RTLIBCFG=<rtlib>] [<target>]
|
|
!MESSAGE where <config> is one of:
|
|
!MESSAGE - release-static - release static library
|
|
!MESSAGE - debug-static - debug static library
|
|
!MESSAGE <target> may be:
|
|
!MESSAGE - clean - perform a clean for CFG
|
|
!MESSAGE - experimental - build CFG with experimental
|
|
!MESSAGE . features enabled. Requires zlib.
|
|
!MESSAGE
|
|
!MESSAGE <rtlibcfg> controls the runtime library linkage - can be 'static' or 'dynamic'.
|
|
!MESSAGE <target> can be left blank in which case all is assumed
|
|
!MESSAGE <path> is the path where you like to build (obj, bins, etc.)
|
|
!MESSAGE default to ..\obj\
|
|
|
|
!IF "$(CFG)" != ""
|
|
!MESSAGE
|
|
!ERROR please choose a valid configuration instead of "$(CFG)"
|
|
!ENDIF
|
|
!ENDIF
|
|
|
|
#######################
|
|
# Rules
|
|
#
|
|
!IF "$(CFGSET)" == "TRUE"
|
|
# A config was provided, so the library can be built.
|
|
#
|
|
|
|
X_OBJS= \
|
|
$(DIROBJ)\dec\bits.obj \
|
|
$(DIROBJ)\dec\dsp.obj \
|
|
$(DIROBJ)\dec\dsp_sse2.obj \
|
|
$(DIROBJ)\dec\frame.obj \
|
|
$(DIROBJ)\dec\quant.obj \
|
|
$(DIROBJ)\dec\tree.obj \
|
|
$(DIROBJ)\dec\vp8.obj \
|
|
$(DIROBJ)\dec\webp.obj \
|
|
$(DIROBJ)\dec\io.obj \
|
|
$(DIROBJ)\dec\buffer.obj \
|
|
$(DIROBJ)\dec\yuv.obj \
|
|
$(DIROBJ)\dec\idec.obj \
|
|
$(DIROBJ)\dec\alpha.obj \
|
|
$(DIROBJ)\dec\layer.obj \
|
|
$(DIROBJ)\enc\analysis.obj \
|
|
$(DIROBJ)\enc\bit_writer.obj \
|
|
$(DIROBJ)\enc\config.obj \
|
|
$(DIROBJ)\enc\cost.obj \
|
|
$(DIROBJ)\enc\dsp.obj \
|
|
$(DIROBJ)\enc\dsp_sse2.obj \
|
|
$(DIROBJ)\enc\frame.obj \
|
|
$(DIROBJ)\enc\filter.obj \
|
|
$(DIROBJ)\enc\iterator.obj \
|
|
$(DIROBJ)\enc\picture.obj \
|
|
$(DIROBJ)\enc\quant.obj \
|
|
$(DIROBJ)\enc\syntax.obj \
|
|
$(DIROBJ)\enc\tree.obj \
|
|
$(DIROBJ)\enc\webpenc.obj \
|
|
$(DIROBJ)\enc\alpha.obj \
|
|
$(DIROBJ)\enc\layer.obj \
|
|
$(RESOURCE)
|
|
|
|
EXAMPLES_OBJS = \
|
|
$(DIROBJ)\examples\cwebp.obj \
|
|
$(DIROBJ)\examples\dwebp.obj
|
|
|
|
all: $(DIRLIB)\$(TARGET) $(DIRBIN)\dwebp.exe $(DIRBIN)\cwebp.exe
|
|
|
|
# Additional include and library paths (for zlib) can be passed via the CL and
|
|
# LINK environment variables respectively:
|
|
# > set CL=/I\zlib\include
|
|
# > set LINK=\zlib\zlib.lib
|
|
# > nmake /f Makefile.vc CFG=release-static experimental
|
|
experimental:
|
|
$(MAKE) /f Makefile.vc \
|
|
CFG=$(CFG) CFLAGS="$(CFLAGS) /DWEBP_EXPERIMENTAL_FEATURES" /$(MAKEFLAGS)
|
|
|
|
$(DIRLIB)\$(TARGET): $(X_OBJS)
|
|
$(LNK) $(LFLAGS) $(X_OBJS)
|
|
-xcopy $(DIROBJ)\$(LIB_NAME).dll $(DIRBIN) /y
|
|
-xcopy $(DIROBJ)\$(LIB_NAME).lib $(DIRLIB) /y
|
|
-xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).dll $(DIRBIN) /y
|
|
-xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).lib $(DIRLIB) /y
|
|
-xcopy $(DIROBJ)\$(IMPLIB_NAME).lib $(DIRLIB) /y
|
|
-xcopy $(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib $(DIRLIB) /y
|
|
-xcopy $(DIROBJ)\*.exp $(DIRLIB) /y
|
|
-xcopy $(DIROBJ)\*.pdb $(DIRLIB) /y
|
|
|
|
$(X_OBJS): $(DIROBJ)\enc $(DIROBJ)\dec $(DIRLIB) $(DIRINC) $(DIRBIN)
|
|
|
|
$(EXAMPLES_OBJS): $(DIROBJ)\examples $(DIRLIB)\$(TARGET)
|
|
|
|
$(DIROBJ)\enc:
|
|
@if not exist "$(DIROBJ)\enc" mkdir $(DIROBJ)\enc
|
|
|
|
$(DIROBJ)\examples:
|
|
@if not exist "$(DIROBJ)\examples" mkdir $(DIROBJ)\examples
|
|
|
|
$(DIROBJ)\dec:
|
|
@if not exist "$(DIROBJ)\dec" mkdir $(DIROBJ)\dec
|
|
|
|
$(DIRLIB):
|
|
@if not exist "$(DIRLIB)" mkdir $(DIRLIB)
|
|
|
|
$(DIRINC):
|
|
@if not exist "$(DIRINC)" mkdir $(DIRINC)
|
|
|
|
$(DIRBIN):
|
|
@if not exist "$(DIRBIN)" mkdir $(DIRBIN)
|
|
|
|
.SUFFIXES: .c .obj .res .exe
|
|
{examples}.c{$(DIROBJ)\examples}.obj:
|
|
$(CC) $(CFLAGS) /Fo"$@" $<
|
|
{src\dec}.c{$(DIROBJ)\dec}.obj:
|
|
$(CC) $(CFLAGS) /Fo"$@" $<
|
|
{src\enc}.c{$(DIROBJ)\enc}.obj:
|
|
$(CC) $(CFLAGS) /Fo"$@" $<
|
|
|
|
{$(DIROBJ)\examples}.obj{$(DIRBIN)}.exe:
|
|
$(LNKEXE) $(LDFLAGS) /OUT:"$@" $< ole32.lib windowscodecs.lib shlwapi.lib $(DIRLIB)\$(TARGET)
|
|
$(MT) -manifest $@.manifest -outputresource:$@;1
|
|
del $@.manifest
|
|
|
|
clean:
|
|
@-erase /s $(DIROBJ)\*.dll 2> NUL
|
|
@-erase /s $(DIROBJ)\*.exp 2> NUL
|
|
@-erase /s $(DIROBJ)\*.idb 2> NUL
|
|
@-erase /s $(DIROBJ)\*.lib 2> NUL
|
|
@-erase /s $(DIROBJ)\*.obj 2> NUL
|
|
@-erase /s $(DIROBJ)\*.pch 2> NUL
|
|
@-erase /s $(DIROBJ)\*.pdb 2> NUL
|
|
@-erase /s $(DIROBJ)\*.res 2> NUL
|
|
|
|
!ENDIF # End of case where a config was provided.
|