Nios® V/II Embedded Design Suite (EDS)
Support for Embedded Development Tools, Processors (SoCs and Nios® V/II processor), Embedded Development Suites (EDSs), Boot and Configuration, Operating Systems, C and C++

x264 for uclinux on DE2

Altera_Forum
Honored Contributor II
1,187 Views

Hi, 

I want to add x264( encoder for h.264) to uclinux as an application.  

I follow uClinux-dist-test/Documentation/Adding-User-Apps-HOWTO . 

 

1. add a line to user/Makefile , dir_$(CONFIG_USER_X264_X264) +=x264 

2. add a line to misc section of config/config.in, bool 'x264' CONFIG_USER_X264_X264 

3. mkdir ~/uClinux-dist-test/user/x264 

4. put all the code in user/x264 dir, 

5. create Makefile in user/hello dir, 

The Makefile ad follows: 

# Makefile 

 

include config.mak 

 

SRCS = common/mc.c common/predict.c common/pixel.c common/macroblock.c  

common/frame.c common/dct.c common/cpu.c common/cabac.c  

common/common.c common/mdate.c common/csp.c common/set.c  

common/quant.c  

encoder/analyse.c encoder/me.c encoder/ratecontrol.c  

encoder/set.c encoder/macroblock.c encoder/cabac.c  

encoder/cavlc.c encoder/encoder.c encoder/eval.c 

# Visualization sources 

ifeq ($(VIS),yes) 

SRCS += common/visualize.c common/display-x11.c 

endif 

# MMX/SSE optims 

ifeq ($(ARCH),X86) 

SRCS += common/i386/mc-c.c common/i386/dct-c.c common/i386/predict.c 

ASMSRC = common/i386/dct-a.asm common/i386/cpu-a.asm  

common/i386/pixel-a.asm common/i386/mc-a.asm  

common/i386/mc-a2.asm common/i386/predict-a.asm  

common/i386/pixel-sse2.asm common/i386/quant-a.asm  

common/i386/deblock-a.asm 

OBJASM = $(ASMSRC:%.asm=%.o) 

endif 

# MMX/SSE optims 

ifeq ($(ARCH),X86_64) 

SRCS += common/i386/mc-c.c common/i386/dct-c.c common/i386/predict.c 

ASMSRC = common/amd64/dct-a.asm common/amd64/cpu-a.asm  

common/amd64/pixel-a.asm common/amd64/mc-a.asm  

common/amd64/mc-a2.asm common/amd64/predict-a.asm  

common/amd64/pixel-sse2.asm common/amd64/quant-a.asm  

common/amd64/deblock-a.asm 

OBJASM = $(ASMSRC:%.asm=%.o) 

ASFLAGS += -Icommon/amd64 

endif 

# AltiVec optims 

ifeq ($(ARCH),PPC) 

SRCS += common/ppc/mc.c common/ppc/pixel.c common/ppc/dct.c 

endif 

# VIS optims 

ifeq ($(ARCH),UltraSparc) 

ASMSRC += common/sparc/pixel.asm 

OBJASM = $(ASMSRC:%.asm=%.o) 

endif 

 

ifneq ($(HAVE_GETOPT_LONG),1) 

SRCS += extras/getopt.c 

CFLAGS += -DHAVE_GETOPT_LONG=0 

else 

CFLAGS += -DHAVE_GETOPT_LONG=1 

endif 

 

OBJS = $(SRCS:%.c=%.o) 

DEP = depend 

 

.PHONY: default fprofiled clean distclean install uninstall 

default: $(DEP) x264$(EXE) 

 

libx264.a: .depend $(OBJS) $(OBJASM) 

ar rc libx264.a $(OBJS) $(OBJASM) 

ranlib libx264.a 

 

x264$(EXE): libx264.a x264.o matroska.o 

$(CC) -o $@ x264.o matroska.o libx264.a $(LDFLAGS) 

 

x264vfw.dll: libx264.a $(wildcard vfw/*.c vfw/*.h) 

make -C vfw/build/cygwin 

 

checkasm: tools/checkasm.o libx264.a 

$(CC) -o $@ $< libx264.a $(LDFLAGS) 

 

common/amd64/*.o: common/amd64/amd64inc.asm 

%.o: %.asm 

$(AS) $(ASFLAGS) -o $@ $< 

 

.depend: config.mak 

rm -f .depend# Hacky - because gcc 2.9x doesn&#39;t have -MT 

$(foreach SRC, $(SRCS) x264.c matroska.c, ( echo -n "`dirname $(SRC)`/" && $(CC) $(CFLAGS) $(SRC) -MM -g0 ) 1>> .depend;) 

 

config.mak: $(wildcard .svn/entries */.svn/entries */*/.svn/entries) 

./configure $(CONFIGURE_ARGS) 

 

depend: .depend 

ifneq ($(wildcard .depend),) 

include .depend 

endif 

 

SRC2 = $(SRCS) x264.c matroska.c# These should cover most of the important codepaths 

OPT0 = --crf 30 -b1 -m1 -r1 --me dia --no-cabac 

OPT1 = --crf 18 -b2 -m3 -r3 --me hex -8 --cqm jvt --direct spatial 

OPT2 = --crf 24 -b3 -m6 -r6 --me umh -8 -w -t1 -A all --b-pyramid --b-rdo --mixed-refs 

 

ifeq (,$(VIDS)) 

fprofiled: 

@echo &#39;usage: make fprofiled VIDS="infile1 infile2 ..."&#39; 

@echo &#39;where infiles are anything that x264 understands,&#39; 

@echo &#39;i.e. YUV with resolution in the filename, or avisynth.&#39; 

else 

fprofiled: 

make clean 

mv config.mak config.mak2 

sed -e &#39;s/CFLAGS.*/& -fprofile-generate/; s/LDFLAGS.*/& -fprofile-generate/&#39; config.mak2 > config.mak 

make x264$(EXE) 

$(foreach V, $(VIDS), $(foreach I, 0 1 2, ./x264$(EXE) $(OPT$I) $(V) --progress -o $(DEVNULL) http://forum.niosforum.com/work2/style_emoticons/<#EMO_DIR#>/wink.gif ) 

rm -f $(SRC2:%.c=%.o) 

sed -e &#39;s/CFLAGS.*/& -fprofile-use/; s/LDFLAGS.*/& -fprofile-use/&#39; config.mak2 > config.mak 

make 

rm -f $(SRC2:%.c=%.gcda) $(SRC2:%.c=%.gcno) 

mv config.mak2 config.mak 

endif 

 

clean: 

rm -f $(OBJS) $(OBJASM) config.h *.a x264.o matroska.o x264 x264.exe .depend TAGS 

rm -f checkasm checkasm.exe tools/checkasm.o 

rm -f tools/avc2avi tools/avc2avi.exe tools/avc2avi.o 

rm -rf vfw/build/cygwin/bin 

rm -f $(SRC2:%.c=%.gcda) $(SRC2:%.c=%.gcno) 

- sed -e &#39;s/ *-fprofile-\(generate\|use\)//g&#39; config.mak > config.mak2 && mv config.mak2 config.mak 

 

distclean: clean 

rm -f config.mak vfw/build/cygwin/config.mak x264.pc 

 

install: x264 

install -d $(DESTDIR)$(bindir) $(DESTDIR)$(includedir) 

install -d $(DESTDIR)$(libdir) $(DESTDIR)$(libdir)/pkgconfig 

install -m 644 x264.h $(DESTDIR)$(includedir) 

install -m 644 libx264.a $(DESTDIR)$(libdir) 

install -m 644 x264.pc $(DESTDIR)$(libdir)/pkgconfig 

install x264 $(DESTDIR)$(bindir) 

ranlib $(DESTDIR)$(libdir)/libx264.a 

 

uninstall: 

rm -f $(DESTDIR)$(includedir)/x264.h $(DESTDIR)$(libdir)/libx264.a 

rm -f $(DESTDIR)$(bindir)/x264 $(DESTDIR)$(libdir)/pkgconfig/x264.pc 

 

etags: TAGS 

 

TAGS: 

etags $(SRCS) 

 

The config.mak as follows: 

prefix=/usr/local 

exec_prefix=${prefix} 

bindir=${exec_prefix}/bin 

libdir=${exec_prefix}/lib 

includedir=${prefix}/include 

ARCH=X86 

SYS=LINUX 

CC=gcc 

CFLAGS=-Wall -I. -O4 -ffast-math -D__X264__ -DHAVE_MALLOC_H -DHAVE_MMXEXT -DHAVE_SSE2 -DARCH_X86 -DSYS_LINUX -s -fomit-frame-pointer 

LDFLAGS= -lm -s 

AS=nasm 

ASFLAGS=-f elf 

VFW=no 

EXE= 

VIS=no 

HAVE_GETOPT_LONG=1 

DEVNULL=/dev/null 

CONFIGURE_ARGS= 

 

 

I have "make" and "make linux image", but in the uClinux-test-dist/romfs/bin the executable file is elf, not flat. So when I download the kennal to the board ,the application did not work. I had tried to modify 

"LDFLAGE= -W1 -elf2flt -lm -s" ,it was not useful.  

 

Pls give me some advice. 

Thanks!
0 Kudos
1 Reply
Altera_Forum
Honored Contributor II
453 Views

Hi,  

 

There is nobody to do the work about h.264 for uclinux on DE2??? 

 

If someone got some experience,pls give me some advice.Thanks!
0 Kudos
Reply