From e0036cf0a917e9b0590c409c5b5826ccd819e565 Mon Sep 17 00:00:00 2001 From: Andreas Cord-Landwehr Date: Wed, 25 Jan 2023 21:33:40 +0100 Subject: [PATCH] libsf-wave511: package WAVE511 decoder library Make upstream library build with horribly patched symlink and Makefile fork combination. Need to be refactored to a decent build system. --- recipes-multimedia/vpu/libsf-wave511.bb | 75 ++++++++ .../vpu/libsf-wave511/20_vdec.rules | 1 + .../vpu/libsf-wave511/WaveDecode_yocto.mak | 168 ++++++++++++++++++ 3 files changed, 244 insertions(+) create mode 100644 recipes-multimedia/vpu/libsf-wave511.bb create mode 100644 recipes-multimedia/vpu/libsf-wave511/20_vdec.rules create mode 100644 recipes-multimedia/vpu/libsf-wave511/WaveDecode_yocto.mak diff --git a/recipes-multimedia/vpu/libsf-wave511.bb b/recipes-multimedia/vpu/libsf-wave511.bb new file mode 100644 index 0000000..c4a4d3d --- /dev/null +++ b/recipes-multimedia/vpu/libsf-wave511.bb @@ -0,0 +1,75 @@ +SUMMARY = "WAVE511 decoding library for VisionFive2" +DESCRIPTION = "Library provides API to vdec Kernel module for using the WAVE511 chip for HEVC/H.265 and AVC/H.264 decoding." + +LICENSE = "ChipsMedia_VisionFive2" +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=16bead7cc56b053f5da0061ce0637ad2" + +COMPATIBLE_MACHINE = "visionfive2" + +require recipes-bsp/common/visionfive2-firmware.inc +inherit autotools + +SOLIBS = ".so" +FILES_SOLIBSDEV = "" + +SRC_URI += " \ + file://WaveDecode_yocto.mak;subdir=git/wave511/code \ + file://20_vdec.rules \ +" + +S = "${WORKDIR}/git/wave511/code" + +do_configure:prepend() { + # workaround wrong build system/include path assumptions + ln -sf ${S} ${S}/wave511 +} + +do_compile() { + oe_runmake -C ${S} -f WaveDecode_yocto.mak +} + +do_install() { + install -D -m 0644 ${S}/sample_v2/component_list_all.h ${D}/usr/include/wave511/sample_v2/component_list_all.h + install -D -m 0644 ${S}/sample_v2/helper/misc/bw_monitor.h ${D}/usr/include/wave511/sample_v2/helper/misc/bw_monitor.h + install -D -m 0644 ${S}/sample_v2/helper/misc/pbu.h ${D}/usr/include/wave511/sample_v2/helper/misc/pbu.h + install -D -m 0644 ${S}/sample_v2/helper/misc/json_output.h ${D}/usr/include/wave511/sample_v2/helper/misc/json_output.h + install -D -m 0644 ${S}/sample_v2/helper/misc/header_struct.h ${D}/usr/include/wave511/sample_v2/helper/misc/header_struct.h + install -D -m 0644 ${S}/sample_v2/helper/misc/debug.h ${D}/usr/include/wave511/sample_v2/helper/misc/debug.h + install -D -m 0644 ${S}/sample_v2/helper/main_helper.h ${D}/usr/include/wave511/sample_v2/helper/main_helper.h + install -D -m 0644 ${S}/sample_v2/component_decoder/decoder_listener.h ${D}/usr/include/wave511/sample_v2/component_decoder/decoder_listener.h + install -D -m 0644 ${S}/sample_v2/component_encoder/encoder_listener.h ${D}/usr/include/wave511/sample_v2/component_encoder/encoder_listener.h + install -D -m 0644 ${S}/sample_v2/component/component.h ${D}/usr/include/wave511/sample_v2/component/component.h + install -D -m 0644 ${S}/sample_v2/component/component_list.h ${D}/usr/include/wave511/sample_v2/component/component_list.h + install -D -m 0644 ${S}/sample_v2/component/cnm_app_internal.h ${D}/usr/include/wave511/sample_v2/component/cnm_app_internal.h + install -D -m 0644 ${S}/sample_v2/component/cnm_app.h ${D}/usr/include/wave511/sample_v2/component/cnm_app.h + install -D -m 0644 ${S}/sample_v2/component_list_decoder.h ${D}/usr/include/wave511/sample_v2/component_list_decoder.h + install -D -m 0644 ${S}/sample_v2/component_list_encoder.h ${D}/usr/include/wave511/sample_v2/component_list_encoder.h + install -D -m 0644 ${S}/config.h ${D}/usr/include/wave511/config.h + install -D -m 0644 ${S}/vpuapi/wave/wave5_regdefine.h ${D}/usr/include/wave511/vpuapi/wave/wave5_regdefine.h + install -D -m 0644 ${S}/vpuapi/wave/wave5.h ${D}/usr/include/wave511/vpuapi/wave/wave5.h + install -D -m 0644 ${S}/vpuapi/vpuerror.h ${D}/usr/include/wave511/vpuapi/vpuerror.h + install -D -m 0644 ${S}/vpuapi/vputypes.h ${D}/usr/include/wave511/vpuapi/vputypes.h + install -D -m 0644 ${S}/vpuapi/vpuconfig.h ${D}/usr/include/wave511/vpuapi/vpuconfig.h + install -D -m 0644 ${S}/vpuapi/coda9/coda9.h ${D}/usr/include/wave511/vpuapi/coda9/coda9.h + install -D -m 0644 ${S}/vpuapi/coda9/coda9_vpuconfig.h ${D}/usr/include/wave511/vpuapi/coda9/coda9_vpuconfig.h + install -D -m 0644 ${S}/vpuapi/coda9/coda9_regdefine.h ${D}/usr/include/wave511/vpuapi/coda9/coda9_regdefine.h + install -D -m 0644 ${S}/vpuapi/vpuapifunc.h ${D}/usr/include/wave511/vpuapi/vpuapifunc.h + install -D -m 0644 ${S}/vpuapi/vpuapi.h ${D}/usr/include/wave511/vpuapi/vpuapi.h + install -D -m 0644 ${S}/vpuapi/product.h ${D}/usr/include/wave511/vpuapi/product.h + install -D -m 0644 ${S}/vdi/mm.h ${D}/usr/include/wave511/vdi/mm.h + install -D -m 0644 ${S}/vdi/linux/driver/vdec-starfive.h ${D}/usr/include/wave511/vdi/linux/driver/vdec-starfive.h + install -D -m 0644 ${S}/vdi/linux/driver/vpu.h ${D}/usr/include/wave511/vdi/linux/driver/vpu.h + install -D -m 0644 ${S}/vdi/linux/driver/vmm.h ${D}/usr/include/wave511/vdi/linux/driver/vmm.h + install -D -m 0644 ${S}/vdi/vdi.h ${D}/usr/include/wave511/vdi/vdi.h + install -D -m 0644 ${S}/vdi/vdi_osal.h ${D}/usr/include/wave511/vdi/vdi_osal.h + install -d ${D}/usr/lib + install -m 0644 ${S}/libsfdec.so ${D}/usr/lib/ + + install -d ${D}/${base_libdir}/udev/rules.d/ + install -m 0644 ${WORKDIR}/20_vdec.rules ${D}/${base_libdir}/udev/rules.d/ +} + +FILES:${PN} += " \ + ${base_libdir}/* \ + ${libdir}/* \ +" diff --git a/recipes-multimedia/vpu/libsf-wave511/20_vdec.rules b/recipes-multimedia/vpu/libsf-wave511/20_vdec.rules new file mode 100644 index 0000000..eecc269 --- /dev/null +++ b/recipes-multimedia/vpu/libsf-wave511/20_vdec.rules @@ -0,0 +1 @@ +SUBSYSTEM=="vdec", MODE="0666" diff --git a/recipes-multimedia/vpu/libsf-wave511/WaveDecode_yocto.mak b/recipes-multimedia/vpu/libsf-wave511/WaveDecode_yocto.mak new file mode 100644 index 0000000..3d39bdf --- /dev/null +++ b/recipes-multimedia/vpu/libsf-wave511/WaveDecode_yocto.mak @@ -0,0 +1,168 @@ +# ---------------------------------------------------------------------- +# +# Project: C&M Video decoder sample +# +# ---------------------------------------------------------------------- +.PHONY: CREATE_DIR +BUILD_CONFIGURATION := EmbeddedRiscvLinux + +PRODUCT := WAVE511 +#PRODUCT := WAVE521C + +$(shell cp sample_v2/component_list_decoder.h sample_v2/component/component_list.h) + +USE_PTHREAD = yes +USE_RTL_SIM = no +LINT_HOME = etc/lint + +UNAME = $(shell uname -a) +ifneq (,$(findstring i386, $(UNAME))) + USE_32BIT = yes +endif + +ifeq ($(RTL_SIM), 1) +USE_RTL_SIM = yes +endif + +REFC := 0 + +ifeq ($(USE_32BIT), yes) +PLATFORM = nativelinux +else +PLATFORM = nativelinux_64bit +endif + +CROSS_CC_PREFIX = +VDI_C = vdi/linux/vdi.c +VDI_OSAL_C = vdi/linux/vdi_osal.c +MM_C = +PLATFORM_FLAGS = + +VDI_VPATH = vdi/linux +ifeq ("$(BUILD_CONFIGURATION)", "NonOS") + CROSS_CC_PREFIX = arm-none-eabi- + VDI_C = vdi/nonos/vdi.c + VDI_OSAL_C = vdi/nonos/vdi_osal.c + MM_C = vdi/mm.c + USE_PTHREAD = no + PLATFORM = none + DEFINES = -DLIB_C_STUB + PLATFORM_FLAGS = + VDI_VPATH = vdi/nonos + NONOS_RULE = options_nonos.lnt +endif +ifeq ("$(BUILD_CONFIGURATION)", "EmbeddedLinux") + CROSS_CC_PREFIX = arm-none-linux-gnueabi- + PLATFORM = armlinux +endif + +ifeq ("$(BUILD_CONFIGURATION)", "EmbeddedRiscvLinux") +# CROSS_CC_PREFIX = riscv64-buildroot-linux-gnu- +# PLATFORM = riscvlinux +endif +#CC = $(CROSS_CC_PREFIX)gcc +#CXX = $(CROSS_CC_PREFIX)g++ +LINKER=$(CC) +AR = $(CROSS_CC_PREFIX)ar + +INCLUDES = -I./vpuapi -I./ffmpeg/include -I./sample_v2/helper -I./sample_v2/helper/misc -I./sample_v2/component -I./vdi -I../ +INCLUDES += -I./sample_v2/component_decoder +ifeq ($(USE_RTL_SIM), yes) +DEFINES += -DCNM_SIM_PLATFORM -DCNM_SIM_DPI_INTERFACE -DSUPPORT_DECODER +DEFINES += -D$(PRODUCT) -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE +else +DEFINES += -D$(PRODUCT) -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE +endif # USE_SIM_PLATFORM +DEFINES += -DUSE_FEEDING_METHOD_BUFFER + +CFLAGS += -g -I. -Wl,--fatal-warning $(INCLUDES) $(DEFINES) $(PLATFORM_FLAGS) +ifeq ($(USE_RTL_SIM), yes) +ifeq ($(IUS), 1) +CFLAGS += -fPIC # ncverilog is 64bit version +endif +endif +ARFLAGS += cru + +#LDFLAGS = $(PLATFORM_FLAGS) + +ifeq ($(USE_PTHREAD), yes) +LDLIBS += -lpthread +endif +LDLIBS += -lm -lrt + +BUILDLIST=DECTEST +MAKEFILE=WaveDecode.mak +DECTEST=libsfdec.so + +OBJDIR=obj +ALLOBJS=*.o +ALLDEPS=*.dep +ALLLIBS=*.a +RM=rm -f +MKDIR=mkdir -p + +SOURCES_COMMON =main_helper.c vpuhelper.c bitstreamfeeder.c \ + bitstreamreader.c bsfeeder_fixedsize_impl.c bsfeeder_framesize_impl.c \ + bsfeeder_size_plus_es_impl.c bin_comparator_impl.c comparator.c \ + md5_comparator_impl.c yuv_comparator_impl.c bsfeeder_buffer_impl.c \ + cfgParser.c decoder_listener.c \ + cnm_video_helper.c container.c \ + datastructure.c debug.c \ + bw_monitor.c pf_monitor.c \ + cnm_app.c cnm_task.c component.c \ + component_dec_decoder.c component_dec_feeder.c component_dec_renderer.c \ + product.c vpuapifunc.c vpuapi.c \ + coda9.c wave5.c \ + $(VDI_C) $(VDI_OSAL_C) $(MM_C) + + + +VPATH = sample_v2: +VPATH += sample_v2/component_encoder: +VPATH += sample_v2/component_decoder: +VPATH += sample_v2/helper: +VPATH += sample_v2/helper/bitstream: +VPATH += sample_v2/helper/comparator: +VPATH += sample_v2/helper/display:sample_v2/helper/misc:sample_v2/helper/yuv:sample_v2/component: +VPATH += vdi: +VPATH += $(VDI_VPATH):vpuapi:vpuapi/coda9:vpuapi/wave + +VPATH2=$(patsubst %,-I%,$(subst :, ,$(VPATH))) + +OBJECTNAMES_COMMON=$(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES_COMMON))) +OBJECTPATHS_COMMON=$(addprefix $(OBJDIR)/,$(notdir $(OBJECTNAMES_COMMON))) + +SOURCES_DECTEST = sample_v2/main_dec_test.c +ifeq ($(USE_RTL_SIM), yes) + SOURCES_DECTEST += sample/main_sim.c +endif + +OBJECTNAMES_DECTEST=$(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES_DECTEST))) +OBJECTPATHS_DECTEST=$(addprefix $(OBJDIR)/,$(notdir $(OBJECTNAMES_DECTEST))) $(OBJECTPATHS_COMMON) + +all: $(BUILDLIST) + +ifeq ($(USE_RTL_SIM), yes) +DECTEST: CREATE_DIR $(OBJECTPATHS_COMMON) +else +DECTEST: CREATE_DIR $(OBJECTPATHS_COMMON) + $(LINKER) -fPIC -shared -o $(DECTEST) $(LDFLAGS) -Wl,-gc-section -Wl,--start-group $(OBJECTPATHS_COMMON) $(LDLIBS) -Wl,--end-group +endif + +-include $(OBJECTPATHS:.o=.dep) + +clean: + $(RM) $(DECTEST) + $(RM) $(OBJDIR)/$(ALLOBJS) + $(RM) $(OBJDIR)/$(ALLDEPS) + +CREATE_DIR: + -mkdir -p $(OBJDIR) + +obj/%.o: %.c $(MAKEFILE) + $(CC) -fPIC -shared $(CFLAGS) -Wall -c $< -o $@ -MD -MF $(@:.o=.dep) + + +lint: + "$(LINT_HOME)/flint" -i"$(LINT_HOME)" $(DEFINES) $(INCLUDES) $(VPATH2) linux_std.lnt $(HAPS_RULE) $(NONOS_RULE) $(SOURCES_COMMON) +