Obs .: Meine Vermutung ist, dass ich nicht etwas im Makefile setze oder die Arbeitspakete SDL-devel und SDL_image-devel verwende, die zuvor installiert werden sollen. Eigentlich installiere ich "libsdl2-image-2.0-0" und "libsdl2-image-dev" aus den Repositorys ... Die Readme-Datei besagt jedoch, dass diese nur für den BPGviewer benötigt werden:
(# Compile bpgview (SDL and SDL_image libraries needed) #USE_BPGVIEW=y)
OBS.1: Ich habe gerade folgendes gefunden: https://unix.stackexchange.com/questions/181735/how-to-install-bpg-better-portable-graphics-on-linux-mint-17
libbpg hängt von Version 1.6 der PNG-Bibliothek ab, die mit apt-get unter Linux Mint 17 nicht installiert werden kann. Diese Bibliothek ist nicht mit libpng12 kompatibel und muss vom Quellcode aus installiert werden (ich habe Version 1.6.16 verwendet).
Nun, ich versuche, libbpg-0.9.7 nach der Readme-Datei zu vereinfachen:
2) Compilation and Installation Notes ------------------------------------- 2.1) Linux ---------- - Edit the Makefile to change the compile options (the default compile options should be OK). Type 'make' to compile and 'make install' to install the compiled binaries. - Use 'make -j N' where N is the number of CPU cores to compile faster. - The following packages must be installed: SDL-devel SDL_image-devel yasm. It is recommended to use yasm version >= 1.3.0 to have a faster compilation.
So:
sudo apt-get install --force-yes -y libsdl2-image-2.0-0 libsdl2-image-dev yasm sudo apt-get install -y emscripten
Und dann:
wget http://bellard.org/bpg/libbpg-0.9.7.tar.gz tar xzf libbpg-0.9.7.tar.gz cd libbpg-0.9.7/ make
Es funktioniert jedoch nicht:
$: make -j 6 install gcc -Os -Wall -MMD -fno-asynchronous-unwind-tables -fdata-sections -ffunction-sections -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -fomit-frame-pointer -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_REENTRANT -I. -DCONFIG_BPG_VERSION=\"0.9.7\" -g -DUSE_X265 -Wno-unused-but-set-variable -c -o bpgenc.o bpgenc.c make -C x265.out/12bit make[1]: Entering directory `/home/rgr/src/bpg/libbpg-0.9.7/x265.out/12bit' make[1]: *** No targets specified and no makefile found. Stop. ar rcs libbpg.a libavcodec/hevc_cabac.o libavcodec/hevc_filter.o libavcodec/hevc.o libavcodec/hevcpred.o libavcodec/hevc_refs.o libavcodec/hevcdsp.o libavcodec/hevc_mvs.o libavcodec/hevc_ps.o libavcodec/hevc_sei.o libavcodec/utils.o libavcodec/cabac.o libavcodec/golomb.o libavcodec/videodsp.o libavutil/mem.o libavutil/buffer.o libavutil/log2_tab.o libavutil/frame.o libavutil/pixdesc.o libavutil/md5.o libbpg.o make[1]: Leaving directory `/home/rgr/src/bpg/libbpg-0.9.7/x265.out/12bit' make: *** [x265_make] Error 2 make: *** Waiting for unfinished jobs.... bpgenc.c: In function ‘read_png’: bpgenc.c:987:9: warning: implicit declaration of function ‘png_set_alpha_mode’ [-Wimplicit-function-declaration] png_set_alpha_mode(png_ptr, PNG_ALPHA_ASSOCIATED, PNG_GAMMA_LINEAR); ^ bpgenc.c:987:37: error: ‘PNG_ALPHA_ASSOCIATED’ undeclared (first use in this function) png_set_alpha_mode(png_ptr, PNG_ALPHA_ASSOCIATED, PNG_GAMMA_LINEAR); ^ bpgenc.c:987:37: note: each undeclared identifier is reported only once for each function it appears in bpgenc.c:987:59: error: ‘PNG_GAMMA_LINEAR’ undeclared (first use in this function) png_set_alpha_mode(png_ptr, PNG_ALPHA_ASSOCIATED, PNG_GAMMA_LINEAR); ^ bpgenc.c:1072:26: warning: passing argument 5 of ‘png_get_iCCP’ from incompatible pointer type [enabled by default] &name, &comp_type, &iccp_buf, &iccp_buf_len) == ^ In file included from /usr/include/png.h:540:0, from bpgenc.c:32: /usr/include/png.h:2490:8: note: expected ‘png_charpp’ but argument is of type ‘png_byte **’ extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr, ^ make: *** [bpgenc.o] Error 1
Der Inhalt der Make-Datei lautet:
# libbpg Makefile # # Compile options: # # Enable compilation of Javascript decoder with Emscripten #USE_EMCC=y # Enable x265 for the encoder USE_X265=y # Enable the JCTVC code (best quality but slow) for the encoder #USE_JCTVC=y # Compile bpgview (SDL and SDL_image libraries needed) #USE_BPGVIEW=y # Enable it to use bit depths > 12 (need more tests to validate encoder) #USE_JCTVC_HIGH_BIT_DEPTH=y # Enable the cross compilation for Windows #CONFIG_WIN32=y # Enable for compilation on MacOS X #CONFIG_APPLE=y # Installation prefix prefix=/usr/local ################################# ifdef CONFIG_WIN32 CROSS_PREFIX:=x86_64-w64-mingw32- #CROSS_PREFIX=i686-w64-mingw32- EXE:=.exe else CROSS_PREFIX:= EXE:= endif CC=$(CROSS_PREFIX)gcc CXX=$(CROSS_PREFIX)g++ AR=$(CROSS_PREFIX)ar EMCC=emcc PWD:=$(shell pwd) CFLAGS:=-Os -Wall -MMD -fno-asynchronous-unwind-tables -fdata-sections -ffunction-sections -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -fomit-frame-pointer CFLAGS+=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_REENTRANT CFLAGS+=-I. CFLAGS+=-DCONFIG_BPG_VERSION=\"$(shell cat VERSION)\" ifdef USE_JCTVC_HIGH_BIT_DEPTH CFLAGS+=-DRExt__HIGH_BIT_DEPTH_SUPPORT endif # Emscriptem config EMLDFLAGS:=-s "EXPORTED_FUNCTIONS=['_bpg_decoder_open','_bpg_decoder_decode','_bpg_decoder_get_info','_bpg_decoder_start','_bpg_decoder_get_frame_duration','_bpg_decoder_get_line','_bpg_decoder_close','_malloc','_free']" EMLDFLAGS+=-s NO_FILESYSTEM=1 -s NO_BROWSER=1 #EMLDFLAGS+=-O1 --pre-js pre.js --post-js post.js # Note: the closure compiler is disabled because it adds unwanted global symbols EMLDFLAGS+=-O3 --memory-init-file 0 --closure 0 --pre-js pre.js --post-js post.js EMCFLAGS:=$(CFLAGS) LDFLAGS=-g ifdef CONFIG_APPLE LDFLAGS+=-Wl,-dead_strip else LDFLAGS+=-Wl,--gc-sections endif CFLAGS+=-g CXXFLAGS=$(CFLAGS) PROGS=bpgdec$(EXE) bpgenc$(EXE) ifdef USE_BPGVIEW PROGS+=bpgview$(EXE) endif ifdef USE_EMCC PROGS+=bpgdec.js bpgdec8.js bpgdec8a.js endif all: $(PROGS) LIBBPG_OBJS:=$(addprefix libavcodec/, \ hevc_cabac.o hevc_filter.o hevc.o hevcpred.o hevc_refs.o\ hevcdsp.o hevc_mvs.o hevc_ps.o hevc_sei.o\ utils.o cabac.o golomb.o videodsp.o ) LIBBPG_OBJS+=$(addprefix libavutil/, mem.o buffer.o log2_tab.o frame.o pixdesc.o md5.o ) LIBBPG_OBJS+=libbpg.o LIBBPG_JS_OBJS:=$(patsubst %.o, %.js.o, $(LIBBPG_OBJS)) tmalloc.js.o LIBBPG_JS8_OBJS:=$(patsubst %.o, %.js8.o, $(LIBBPG_OBJS)) tmalloc.js8.o LIBBPG_JS8A_OBJS:=$(patsubst %.o, %.js8a.o, $(LIBBPG_OBJS)) tmalloc.js8a.o $(LIBBPG_OBJS): CFLAGS+=-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DHAVE_AV_CONFIG_H -std=c99 -D_GNU_SOURCE=1 -DUSE_VAR_BIT_DEPTH -DUSE_PRED $(LIBBPG_JS_OBJS): EMCFLAGS+=-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DHAVE_AV_CONFIG_H -std=c99 -D_GNU_SOURCE=1 -DUSE_VAR_BIT_DEPTH $(LIBBPG_JS8_OBJS): EMCFLAGS+=-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DHAVE_AV_CONFIG_H -std=c99 -D_GNU_SOURCE=1 $(LIBBPG_JS8A_OBJS): EMCFLAGS+=-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DHAVE_AV_CONFIG_H -std=c99 -D_GNU_SOURCE=1 -DUSE_PRED BPGENC_OBJS:=bpgenc.o BPGENC_LIBS:= ifdef USE_X265 X265_LIBS:=./x265.out/8bit/libx265.a ./x265.out/10bit/libx265.a ./x265.out/12bit/libx265.a BPGENC_OBJS+=x265_glue.o $(X265_LIBS) bpgenc.o: CFLAGS+=-DUSE_X265 x265_glue.o: CFLAGS+=-I./x265/source -I./x265.out/8bit x265_glue.o: $(X265_LIBS) ifdef CONFIG_WIN32 CMAKE_OPTS:=-DCMAKE_TOOLCHAIN_FILE=../../x265/build/msys/toolchain-x86_64-w64-mingw32.cmake else CMAKE_OPTS:= endif x265.out: mkdir -p x265.out/8bit x265.out/10bit x265.out/12bit cd x265.out/12bit && cmake ../../x265/source $(CMAKE_OPTS) -DHIGH_BIT_DEPTH=ON -DEXPORT_C_API=OFF -DENABLE_SHARED=OFF -DENABLE_CLI=OFF -DMAIN12=ON cd x265.out/10bit && cmake ../../x265/source $(CMAKE_OPTS) -DHIGH_BIT_DEPTH=ON -DEXPORT_C_API=OFF -DENABLE_SHARED=OFF -DENABLE_CLI=OFF -DMAIN10=ON cd x265.out/8bit && cmake ../../x265/source $(CMAKE_OPTS) -DLINKED_10BIT=ON -DLINKED_12BIT=ON -DENABLE_SHARED=OFF -DENABLE_CLI=OFF # use this target to manually rebuild x265 x265_make: | x265.out $(MAKE) -C x265.out/12bit $(MAKE) -C x265.out/10bit $(MAKE) -C x265.out/8bit x265_clean: rm -rf x265.out $(X265_LIBS): x265_make else x265_clean: endif # USE_X265 ifdef USE_JCTVC JCTVC_OBJS=$(addprefix jctvc/TLibEncoder/, SyntaxElementWriter.o TEncSbac.o \ TEncBinCoderCABACCounter.o TEncGOP.o\ TEncSampleAdaptiveOffset.o TEncBinCoderCABAC.o TEncAnalyze.o\ TEncEntropy.o TEncTop.o SEIwrite.o TEncPic.o TEncRateCtrl.o\ WeightPredAnalysis.o TEncSlice.o TEncCu.o NALwrite.o TEncCavlc.o\ TEncSearch.o TEncPreanalyzer.o) JCTVC_OBJS+=jctvc/TLibVideoIO/TVideoIOYuv.o JCTVC_OBJS+=$(addprefix jctvc/TLibCommon/, TComWeightPrediction.o TComLoopFilter.o\ TComBitStream.o TComMotionInfo.o TComSlice.o ContextModel3DBuffer.o\ TComPic.o TComRdCostWeightPrediction.o TComTU.o TComPicSym.o\ TComPicYuv.o TComYuv.o TComTrQuant.o TComInterpolationFilter.o\ ContextModel.o TComSampleAdaptiveOffset.o SEI.o TComPrediction.o\ TComDataCU.o TComChromaFormat.o Debug.o TComRom.o\ TComPicYuvMD5.o TComRdCost.o TComPattern.o TComCABACTables.o) JCTVC_OBJS+=jctvc/libmd5/libmd5.o JCTVC_OBJS+=jctvc/TAppEncCfg.o jctvc/TAppEncTop.o jctvc/program_options_lite.o $(JCTVC_OBJS) jctvc_glue.o: CFLAGS+=-I$(PWD)/jctvc -Wno-sign-compare jctvc/libjctvc.a: $(JCTVC_OBJS) $(AR) rcs $@ $^ BPGENC_OBJS+=jctvc_glue.o jctvc/libjctvc.a bpgenc.o: CFLAGS+=-DUSE_JCTVC endif # USE_JCTVC ifdef CONFIG_WIN32 BPGDEC_LIBS:=-lpng -lz BPGENC_LIBS+=-lpng -ljpeg -lz BPGVIEW_LIBS:=-lmingw32 -lSDLmain -lSDL_image -lSDL -mwindows else ifdef CONFIG_APPLE LIBS:= else LIBS:=-lrt endif # !CONFIG_APPLE LIBS+=-lm -lpthread BPGDEC_LIBS:=-lpng $(LIBS) BPGENC_LIBS+=-lpng -ljpeg $(LIBS) BPGVIEW_LIBS:=-lSDL_image -lSDL $(LIBS) endif #!CONFIG_WIN32 bpgenc.o: CFLAGS+=-Wno-unused-but-set-variable libbpg.a: $(LIBBPG_OBJS) $(AR) rcs $@ $^ bpgdec$(EXE): bpgdec.o libbpg.a $(CC) $(LDFLAGS) -o $@ $^ $(BPGDEC_LIBS) bpgenc$(EXE): $(BPGENC_OBJS) $(CXX) $(LDFLAGS) -o $@ $^ $(BPGENC_LIBS) bpgview$(EXE): bpgview.o libbpg.a $(CC) $(LDFLAGS) -o $@ $^ $(BPGVIEW_LIBS) bpgdec.js: $(LIBBPG_JS_OBJS) post.js $(EMCC) $(EMLDFLAGS) -s TOTAL_MEMORY=33554432 -o $@ $(LIBBPG_JS_OBJS) bpgdec8.js: $(LIBBPG_JS8_OBJS) post.js $(EMCC) $(EMLDFLAGS) -s TOTAL_MEMORY=33554432 -o $@ $(LIBBPG_JS8_OBJS) bpgdec8a.js: $(LIBBPG_JS8A_OBJS) post.js $(EMCC) $(EMLDFLAGS) -s TOTAL_MEMORY=33554432 -o $@ $(LIBBPG_JS8A_OBJS) size: strip bpgdec size bpgdec libbpg.o libavcodec/*.o libavutil/*.o | sort -n gzip < bpgdec | wc install: bpgenc bpgdec install -s -m 755 $^ $(prefix)/bin CLEAN_DIRS=doc html libavcodec libavutil \ jctvc jctvc/TLibEncoder jctvc/TLibVideoIO jctvc/TLibCommon jctvc/libmd5 clean: x265_clean rm -f $(PROGS) *.o *.a *.d *~ $(addsuffix /*.o, $(CLEAN_DIRS)) \ $(addsuffix /*.d, $(CLEAN_DIRS)) $(addsuffix /*~, $(CLEAN_DIRS)) \ $(addsuffix /*.a, $(CLEAN_DIRS)) %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< %.o: %.cpp $(CXX) $(CXXFLAGS) -c -o $@ $< %.js.o: %.c $(EMCC) $(EMCFLAGS) -c -o $@ $< %.js8.o: %.c $(EMCC) $(EMCFLAGS) -c -o $@ $< %.js8a.o: %.c $(EMCC) $(EMCFLAGS) -c -o $@ $< -include $(wildcard *.d) -include $(wildcard libavcodec/*.d) -include $(wildcard libavutil/*.d) -include $(wildcard jctvc/*.d) -include $(wildcard jctvc/TLibEncoder/*.d) -include $(wildcard jctvc/TLibVideoIO/*.d) -include $(wildcard jctvc/TLibCommon/*.d) -include $(wildcard jctvc/libmd5/*.d)
Irgendwelche Ideen? Vielen Dank.