0

Obs.: My guess is that I am not setting something in the makefile or that I am using the work SDL-devel and SDL_image-devel packages they ask to install previously. Actually, I am installing "libsdl2-image-2.0-0" and "libsdl2-image-dev" from the repositories... However, the readme file says that those are needed only for the BPGviewer: (# Compile bpgview (SDL and SDL_image libraries needed) #USE_BPGVIEW=y)

OBS.1: I have just found this: https://unix.stackexchange.com/questions/181735/how-to-install-bpg-better-portable-graphics-on-linux-mint-17

libbpg depends on version 1.6 of the PNG library, which you cannot install with apt-get on Linux Mint 17. This library is incompatible with libpng12 and needs to be installed from source (I used version 1.6.16)

Well, anyway, I am trying to complile libbpg-0.9.7 folowing the readme file:

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

And then:

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

However, it's not working:

$: 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

The content of the make file is:

# 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)

Any guesses? Thanks.

0

This is what I did to get it done:

From Ubuntu: Issues finding the location of package: libsdl2-image-2.0-0 https://unix.stackexchange.com/questions/181735/how-to-install-bpg-better-portable-graphics-on-linux-mint-17

LIBPNG libbpg depends on version 1.6 of the PNG library, which you cannot install with apt-get. This library is incompatible with libpng12 and needs to be installed from source (I used version 1.6.16). It's better not to change the officialy installed package libpng12-dev but rather to indicate in the Makefile from libbpg where to find libpng 1.6.

sudo apt-get install -y libsdl-image1.2-dev libsdl1.2-dev libjpeg8-dev emscripten
sudo apt-get install --force-yes -y yasm

download, configure, make and make install PNG 1.6

wget -O libpng-1.6.28.tar.xz "https://downloads.sourceforge.net/project/libpng/libpng16/1.6.28/libpng-1.6.28.tar.gz?ts=$(date +%s)"
tar xf libpng-1.6.28.tar.xz
./configure --help
./configure
make -j
sudo make install
sudo checkinstall
sudo ldconfig /usr/local/lib

Done. The new package has been installed and saved to
/home/rgr/src/libpng/libpng-1.6.28/libpng_1.6.28-1_amd64.deb
You can remove it from your system anytime using: 

dpkg -r libpng

Download, make and make install BPG

mkdir bpg
cd bpg
wget http://bellard.org/bpg/libbpg-0.9.5.tar.gz
tar xzf libbpg-0.9.5.tar.gz
cd libbpg-0.9.5/

edit Makefile and insert the two following directive:

sudo nano Makefile
"CFLAGS+=-I/usr/local/include"      after the line "CFLAGS+=-I"
"LDFLAGS+=-L /usr/local/lib"        before the line "CFLAGS+=-g"

Then: make -j 6 sudo make install sudo checkinstall sudo ldconfig /usr/local/lib


Done. The new package has been installed and saved to
/home/rgr/src/bpg/libbpg-0.9.5/libbpg_0.9.5-1_amd64.deb
You can remove it from your system anytime using: 

dpkg -r libbpg

0

When trying to build LibBPG 0.98 in Ubuntu 18.04 LTS I kept running into errors when compiling. Errors occured with libnuma. At the end of the building process it failed and I got messages stating

undefined reference to 'numa_available', 'numa_run_on_node_mask', 'numa_max_node'

I've been trying to compile numerous times with all the suggestions above but at the end the answer was pretty simple.

I've removed the libnuma-dev library completely and then compiled LibBPG without errors. Then installed libnuma-dev again. I know this is pretty clumsy, but it works. Oh and I used libpng 1.6.37.

I hope this saves people that run into this annoying error a lot of time, it took me hours. ;)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.