在imx VPU解码分析1https://blog.youkuaiyun.com/huntenganwei/article/details/132526586?spm=1001.2014.3001.5502中介绍了wrap的解码基本内容,这里从库中扣除一个示例,来看看wrap具体的解码。
官方开源库https://github.com/nxp-imx/imx-vpuwrap
这里我抠出二个c文件
test_dec_arm_elinux.c
decode_stream.c
主函数在test_dec_arm_elinux.c中,进行一些参数的解析,在decode_stream.c中处理具体的wrap解码过程。
只需要二个头文件
decode_stream.h
vpu_wrapper.h
vpu_wrapper.h这个文件就是我们的wrap库的头文件了,基本对应了在imx VPU解码分析1中的介绍。
这几个所需要的库文件抠出来,编译器目录里面有,我下载的 imx-vpuwrap库也带了,或者在开发板里面抠出来。我引用了这几个
然后就是编写Makefile文件了
#源文件,自动找所有.c和.cpp文件,并将目标定义为同名.o文件,不需要修改
SOURCE := $(wildcard *.c) $(wildcard *.cpp)
OBJS := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE)))
#目标文件名,可修改为任意你想要的执行文件名
TARGET := vpuwraptest
#编译参数
CC := aarch64-poky-linux-gcc --sysroot=$(SDKTARGETSYSROOT)
##库文件的目录
LIBS = -L./lib -lhantro -lfslvpuwrap -lcodec -lg1
#LDFLAGS := -L.
##头文件的目录
CFLAGS := -I.
CXXFLAGS:= $(CFLAGS) -DHAVE_CONFIG_H
#下面的基本上不需要做任何改动了
.PHONY : everything objs clean veryclean rebuild
everything : $(TARGET)
all : $(TARGET)
objs : $(OBJS)
rebuild: veryclean everything
clean :
rm -fr *.o
veryclean : clean
rm -fr $(TARGET)
$(TARGET) : $(OBJS)
$(CC) $(CXXFLAGS) -o $@ $(OBJS) $(LDFLAGS) $(LIBS)
和之前的博文经典写法基本一致
运行指令是: ./vpuwraptest -i 200frames.h264 -f 8 -o out.yuv
可以看出这里需要h264流文件,输出的是yuv420文件,使用yuv工具查看正常。
如此,一个极简的wrap测试例程即完成。
我在编译时发现把编译器库路径添加上,会报一些莫名的错误,这里还是不多搞操作,使用编译器环境的environment-setup设置下。
程序就不细看了,对着第一篇基本就清晰了。