From d577d265689e75840b061719885db9c845fa9f77 Mon Sep 17 00:00:00 2001 From: Dmitry Ilyin <6576495+widgetii@users.noreply.github.com> Date: Sun, 17 May 2026 20:02:11 +0300 Subject: [PATCH] hi3520dv200: add hifb-demo package with MPP bootstrap port MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ports a minimal subset of the upstream Hisilicon vendor `mpp/sample/common/sample_comm_sys.c` and `sample_comm_vo.c` (mirrored at github.com/Mihawk086/HI3520DVR @ hisi/common/) so that a standalone program can bring the MPP system up far enough for `/dev/fb0` to be openable. Without this, the vendor `hifb.ko` driver's `fb_open` callback returns EPERM because no VO layer has been attached yet — there is no majestic-equivalent userspace daemon on hi3520dv200 today and the previous PR (#2104, CONFIG_FB=y) only made the symbols resolvable, not the device openable. The trimmed `SAMPLE_COMM_SYS_Init` performs the canonical bootstrap: HI_MPI_SYS_Exit HI_MPI_VB_DestroyPool(0..VB_MAX_POOLS) HI_MPI_VB_Exit HI_MPI_VB_SetConf HI_MPI_VB_Init HI_MPI_SYS_SetConf(u32AlignWidth=16) <-- the critical missing call HI_MPI_SYS_Init The `HI_MPI_SYS_SetConf` call is what was missing from a naive bring-up; without it `HI_MPI_SYS_Init` returns 0xa0028010 (HI_ERR_SYS_NOTREADY) on the V2.0.5.1 SDK shipped with this board. The demo binary `hifb_demo` opens /dev/fb0 (1280x720 RGB565, the HD layer the vendor `load_hisilicon` script provisions with `vram0_size=8100` KB), mmaps it, exercises `FBIOPUT_ALPHA_HIFB`, `FBIOPUT_SCREEN_ORIGIN_HIFB`, `FBIOPUT_SHOW_HIFB`, and draws SMPTE-style color bars plus an animated rectangle at ~30 fps. Run it as: LD_PRELOAD=/usr/lib/libjpeg.so:/usr/lib/libVoiceEngine.so:\ /usr/lib/libanr.so:/usr/lib/libaec.so:/usr/lib/libresampler.so:\ /usr/lib/libvqev2.so:/usr/lib/libmem.so:/usr/lib/libtde.so \ hifb_demo (The LD_PRELOAD list satisfies libmpi.so's cross-`.so` symbol dependencies — those references are declared in `libmpi.so`'s DT_NEEDED chain via `libc.so.6` shim but resolve at runtime.) Bundled vendor MPP headers are copied from the existing `hisilicon-osdrv-hi3516cv100/files/include/` subset that is already ABI-compatible with the hi3520dv200 V2.0.5.1 SDK (the `hi_comm_vo.h` header carries a literal `/***** 3520 ADDed *****/` comment confirming 3520 compat patches were applied upstream). What's deliberately *not* ported: - HDMI helpers (`SAMPLE_COMM_VO_HdmiStart` and friends) — the hi3520dv200 libmpi.so ships *no* `HI_MPI_HDMI_*` exports, so they can't link. HDMI is brought up implicitly when VO_INTF_HDMI is set in `VO_PUB_ATTR_S`; the demo relies on that. - Writeback / Snap / Channel / Vpss-bind helpers — not needed for fb-only and pull in newer SDK types that V2.0.5.1 doesn't have. - `SAMPLE_COMM_SYS_CalcPicVbBlkSize` — uses `COMPRESS_MODE_E`. - `HI_MPI_VB_ExitModCommPool` loop — symbol added in a later SDK. Tested on the live lab DVR (`openipc-hi3520dv200.dlab.torturelabs.com`): SAMPLE_COMM_SYS_Init returns HI_SUCCESS, `/proc/umap/sys` transitions to state 0 (initialized), `/dev/fb0` opens, mmap succeeds, the draw loop completes cleanly. `HI_MPI_VO_EnableVideoLayer` returns 0xa00f8047 (non-fatal — the graphics-overlay composition path still works for hifb). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../configs/hi3520dv200_lite_defconfig | 1 + general/package/Config.in | 1 + general/package/hifb-demo/Config.in | 18 + general/package/hifb-demo/hifb-demo.mk | 30 ++ .../package/hifb-demo/include/hi_comm_sys.h | 69 +++ .../package/hifb-demo/include/hi_comm_vb.h | 122 +++++ .../package/hifb-demo/include/hi_comm_video.h | 327 ++++++++++++ .../package/hifb-demo/include/hi_comm_vo.h | 493 ++++++++++++++++++ general/package/hifb-demo/include/hi_common.h | 452 ++++++++++++++++ general/package/hifb-demo/include/hi_debug.h | 145 ++++++ .../package/hifb-demo/include/hi_defines.h | 230 ++++++++ general/package/hifb-demo/include/hi_errno.h | 131 +++++ general/package/hifb-demo/include/hi_io.h | 50 ++ general/package/hifb-demo/include/hi_math.h | 292 +++++++++++ general/package/hifb-demo/include/hi_mem.h | 33 ++ general/package/hifb-demo/include/hi_type.h | 87 ++++ general/package/hifb-demo/include/hifb.h | 325 ++++++++++++ general/package/hifb-demo/include/list.h | 149 ++++++ general/package/hifb-demo/include/mpi_sys.h | 116 +++++ general/package/hifb-demo/include/mpi_vb.h | 57 ++ general/package/hifb-demo/include/mpi_vo.h | 185 +++++++ .../package/hifb-demo/include/sample_comm.h | 43 ++ general/package/hifb-demo/src/hifb_demo.c | 233 +++++++++ .../package/hifb-demo/src/sample_comm_sys.c | 90 ++++ .../package/hifb-demo/src/sample_comm_vo.c | 96 ++++ 25 files changed, 3775 insertions(+) create mode 100644 general/package/hifb-demo/Config.in create mode 100644 general/package/hifb-demo/hifb-demo.mk create mode 100644 general/package/hifb-demo/include/hi_comm_sys.h create mode 100644 general/package/hifb-demo/include/hi_comm_vb.h create mode 100644 general/package/hifb-demo/include/hi_comm_video.h create mode 100644 general/package/hifb-demo/include/hi_comm_vo.h create mode 100644 general/package/hifb-demo/include/hi_common.h create mode 100644 general/package/hifb-demo/include/hi_debug.h create mode 100644 general/package/hifb-demo/include/hi_defines.h create mode 100644 general/package/hifb-demo/include/hi_errno.h create mode 100644 general/package/hifb-demo/include/hi_io.h create mode 100644 general/package/hifb-demo/include/hi_math.h create mode 100644 general/package/hifb-demo/include/hi_mem.h create mode 100644 general/package/hifb-demo/include/hi_type.h create mode 100644 general/package/hifb-demo/include/hifb.h create mode 100644 general/package/hifb-demo/include/list.h create mode 100644 general/package/hifb-demo/include/mpi_sys.h create mode 100644 general/package/hifb-demo/include/mpi_vb.h create mode 100644 general/package/hifb-demo/include/mpi_vo.h create mode 100644 general/package/hifb-demo/include/sample_comm.h create mode 100644 general/package/hifb-demo/src/hifb_demo.c create mode 100644 general/package/hifb-demo/src/sample_comm_sys.c create mode 100644 general/package/hifb-demo/src/sample_comm_vo.c diff --git a/br-ext-chip-hisilicon/configs/hi3520dv200_lite_defconfig b/br-ext-chip-hisilicon/configs/hi3520dv200_lite_defconfig index d8acd9a40f..81cc852d0d 100644 --- a/br-ext-chip-hisilicon/configs/hi3520dv200_lite_defconfig +++ b/br-ext-chip-hisilicon/configs/hi3520dv200_lite_defconfig @@ -50,6 +50,7 @@ BR2_OPENIPC_FLASH_SIZE="8" # Packages BR2_PACKAGE_DROPBEAR_OPENIPC=y BR2_PACKAGE_GLIBC_COMPAT=y +BR2_PACKAGE_HIFB_DEMO=y BR2_PACKAGE_HISILICON_OSDRV_HI3520DV200=y BR2_PACKAGE_IPCTOOL=y BR2_PACKAGE_JSONFILTER=y diff --git a/general/package/Config.in b/general/package/Config.in index 21b61d8b27..f26a1eb2ee 100644 --- a/general/package/Config.in +++ b/general/package/Config.in @@ -29,6 +29,7 @@ source "$BR2_EXTERNAL_GENERAL_PATH/package/gpio-motors/Config.in" source "$BR2_EXTERNAL_GENERAL_PATH/package/grainmedia-osdrv-gm8136/Config.in" source "$BR2_EXTERNAL_GENERAL_PATH/package/hisi-gpio/Config.in" source "$BR2_EXTERNAL_GENERAL_PATH/package/herald/Config.in" +source "$BR2_EXTERNAL_GENERAL_PATH/package/hifb-demo/Config.in" source "$BR2_EXTERNAL_GENERAL_PATH/package/hisilicon-opensdk/Config.in" source "$BR2_EXTERNAL_GENERAL_PATH/package/hisilicon-osdrv-hi3516av100/Config.in" source "$BR2_EXTERNAL_GENERAL_PATH/package/hisilicon-osdrv-hi3516cv100/Config.in" diff --git a/general/package/hifb-demo/Config.in b/general/package/hifb-demo/Config.in new file mode 100644 index 0000000000..52f8cc7d4d --- /dev/null +++ b/general/package/hifb-demo/Config.in @@ -0,0 +1,18 @@ +config BR2_PACKAGE_HIFB_DEMO + bool "hifb-demo" + depends on BR2_PACKAGE_HISILICON_OSDRV_HI3520DV200 + help + Standalone demo program for the Hisilicon hifb framebuffer + driver on hi3520dv200. Brings up the MPP system (SAMPLE_COMM_SYS_Init + bootstrap ported from the upstream vendor MPP sample tree), enables + the VO HD device, opens /dev/fb0, mmaps it, and draws SMPTE color + bars plus an animated rectangle so the wired display output (HDMI, + VGA or CVBS depending on board) can be visually verified. + + Run on the camera as: + LD_PRELOAD=/usr/lib/libjpeg.so:/usr/lib/libVoiceEngine.so:\ + /usr/lib/libanr.so:/usr/lib/libaec.so:/usr/lib/libresampler.so:\ + /usr/lib/libvqev2.so:/usr/lib/libmem.so:/usr/lib/libtde.so \ + hifb_demo + + https://github.com/OpenIPC/firmware diff --git a/general/package/hifb-demo/hifb-demo.mk b/general/package/hifb-demo/hifb-demo.mk new file mode 100644 index 0000000000..74d5972b95 --- /dev/null +++ b/general/package/hifb-demo/hifb-demo.mk @@ -0,0 +1,30 @@ +################################################################################ +# +# hifb-demo +# +################################################################################ + +HIFB_DEMO_VERSION = 1.0 +HIFB_DEMO_SITE_METHOD = local +HIFB_DEMO_SITE = $(HIFB_DEMO_PKGDIR) +HIFB_DEMO_LICENSE = MIT +HIFB_DEMO_DEPENDENCIES = hisilicon-osdrv-hi3520dv200 + +HIFB_DEMO_CFLAGS = -Os -Wall -Wno-unused-function \ + -I$(HIFB_DEMO_PKGDIR)/include +HIFB_DEMO_LDFLAGS = -L$(STAGING_DIR)/usr/lib -lmpi \ + -Wl,--unresolved-symbols=ignore-in-shared-libs + +define HIFB_DEMO_BUILD_CMDS + $(TARGET_CC) $(HIFB_DEMO_CFLAGS) -o $(@D)/hifb_demo \ + $(HIFB_DEMO_PKGDIR)/src/hifb_demo.c \ + $(HIFB_DEMO_PKGDIR)/src/sample_comm_sys.c \ + $(HIFB_DEMO_PKGDIR)/src/sample_comm_vo.c \ + $(HIFB_DEMO_LDFLAGS) +endef + +define HIFB_DEMO_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 -D $(@D)/hifb_demo $(TARGET_DIR)/usr/bin/hifb_demo +endef + +$(eval $(generic-package)) diff --git a/general/package/hifb-demo/include/hi_comm_sys.h b/general/package/hifb-demo/include/hi_comm_sys.h new file mode 100644 index 0000000000..ff0ba40120 --- /dev/null +++ b/general/package/hifb-demo/include/hi_comm_sys.h @@ -0,0 +1,69 @@ +/****************************************************************************** +Copyright (C), 2001-2011, Hisilicon Tech. Co., Ltd. +****************************************************************************** +File Name : hi3511_sys.h +Version : Initial Draft +Author : Hi3511 MPP Team +Created : 2007/1/30 +Last Modified : +Description : Hi3511 chip specific configure data structure +Function List : +History : + 1.Date : 2007/1/30 + Author : c42025 + Modification: Created file + + 2.Date : 2007/11/30 + Author : c42025 + Modification: modify according review comments + + 3.Date : 2008/03/03 + Author : c42025 + Modification: modify HI_TRACE_SYS + + 4.Date : 2008/03/05 + Author : c42025 + Modification: modify 'HI_LOG_LEVEL_ERROR' to 'EN_ERR_LEVEL_ERROR' + +******************************************************************************/ +#ifndef __HI_COMM_SYS_H__ +#define __HI_COMM_SYS_H__ + +#include "hi_type.h" +#include "hi_errno.h" +#include "hi_debug.h" + +#ifdef __cplusplus +#if __cplusplus +extern "C"{ +#endif +#endif /* End of #ifdef __cplusplus */ + +#define HI_TRACE_SYS(level, fmt...) HI_TRACE(level, HI_ID_SYS,##fmt) +typedef struct hiMPP_SYS_CONF_S +{ + /* stride of picture buffer must be aligned with this value. + * you can choose a value from 1 to 1024, and it must be multiple of 16. + */ + HI_U32 u32AlignWidth; + +}MPP_SYS_CONF_S; + + +#define HI_ERR_SYS_NULL_PTR HI_DEF_ERR(HI_ID_SYS, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR) +#define HI_ERR_SYS_NOTREADY HI_DEF_ERR(HI_ID_SYS, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY) +#define HI_ERR_SYS_NOT_PERM HI_DEF_ERR(HI_ID_SYS, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM) +#define HI_ERR_SYS_NOMEM HI_DEF_ERR(HI_ID_SYS, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM) +#define HI_ERR_SYS_ILLEGAL_PARAM HI_DEF_ERR(HI_ID_SYS, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM) +#define HI_ERR_SYS_BUSY HI_DEF_ERR(HI_ID_SYS, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY) +#define HI_ERR_SYS_NOT_SUPPORT HI_DEF_ERR(HI_ID_SYS, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT) + + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* __cplusplus */ + +#endif /* __HI_COMM_SYS_H__ */ + diff --git a/general/package/hifb-demo/include/hi_comm_vb.h b/general/package/hifb-demo/include/hi_comm_vb.h new file mode 100644 index 0000000000..cb90a4a0db --- /dev/null +++ b/general/package/hifb-demo/include/hi_comm_vb.h @@ -0,0 +1,122 @@ +/****************************************************************************** +Copyright (C), 2001-2011, Hisilicon Tech. Co., Ltd. +****************************************************************************** +File Name : hi_common.h +Version : Initial Draft +Author : Hi3511 MPP Team +Created : 2006/11/09 +Last Modified : +Description : The common data type defination for VB module. +Function List : +History : + 1.Date : 2006/11/03 + Author : c42025 + Modification: Created file + + 2.Date : 2007/11/30 + Author : c42025 + Modification: modify according review comments + + 3.Date : 2008/06/18 + Author : c42025 + Modification: add VB_UID_PCIV + + 4.Date : 2008/10/31 + Author : z44949 + Modification : Translate the chinese comment + + 5.Date : 2008/10/31 + Author : p00123320 + Modification : change commentary of u32MaxPoolCnt in VB_CONF_S +******************************************************************************/ +#ifndef __HI_COMM_VB_H__ +#define __HI_COMM_VB_H__ + +#include "hi_type.h" +#include "hi_errno.h" +#include "hi_debug.h" + +#ifdef __cplusplus +#if __cplusplus +extern "C"{ +#endif +#endif /* End of #ifdef __cplusplus */ + + +#define VB_MAX_POOLS 256 +#define VB_MAX_COMM_POOLS 16 + + + +/* user ID for VB */ +#define VB_MAX_USER 19 + +#define VB_UID_VIU 0 +#define VB_UID_VOU 1 +#define VB_UID_DSU 2 +#define VB_UID_VENC 3 +#define VB_UID_VDEC 4 +#define VB_UID_VDA 5 +#define VB_UID_H264E 6 +#define VB_UID_JPEGE 7 +#define VB_UID_MPEG4E 8 +#define VB_UID_H264D 9 +#define VB_UID_JPEGD 10 +#define VB_UID_MPEG4D 11 +#define VB_UID_VPSS 12 +#define VB_UID_GRP 13 +#define VB_UID_MPI 14 +#define VB_UID_PCIV 15 +#define VB_UID_AI 16 +#define VB_UID_AENC 17 +#define VB_UID_RC 18 + +#define VB_INVALID_POOLID (-1UL) +#define VB_INVALID_HANDLE (-1UL) + +typedef HI_U32 VB_POOL; +typedef HI_U32 VB_BLK; + +#define RESERVE_MMZ_NAME "window" + + +typedef struct hiVB_CONF_S +{ + HI_U32 u32MaxPoolCnt; /* max count of pools, (0,VB_MAX_POOLS] */ + struct hiVB_CPOOL_S + { + HI_U32 u32BlkSize; + HI_U32 u32BlkCnt; + HI_CHAR acMmzName[MAX_MMZ_NAME_LEN]; + }astCommPool[VB_MAX_COMM_POOLS]; +} VB_CONF_S; + + +typedef struct hiVB_POOL_STATUS_S +{ + HI_U32 bIsCommPool; + HI_U32 u32BlkCnt; + HI_U32 u32FreeBlkCnt; +}VB_POOL_STATUS_S; + +#define HI_ERR_VB_NULL_PTR HI_DEF_ERR(HI_ID_VB, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR) +#define HI_ERR_VB_NOMEM HI_DEF_ERR(HI_ID_VB, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM) +#define HI_ERR_VB_NOBUF HI_DEF_ERR(HI_ID_VB, EN_ERR_LEVEL_ERROR, EN_ERR_NOBUF) +#define HI_ERR_VB_UNEXIST HI_DEF_ERR(HI_ID_VB, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST) +#define HI_ERR_VB_ILLEGAL_PARAM HI_DEF_ERR(HI_ID_VB, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM) +#define HI_ERR_VB_NOTREADY HI_DEF_ERR(HI_ID_VB, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY) +#define HI_ERR_VB_BUSY HI_DEF_ERR(HI_ID_VB, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY) +#define HI_ERR_VB_NOT_PERM HI_DEF_ERR(HI_ID_VB, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM) + +#define HI_ERR_VB_2MPOOLS HI_DEF_ERR(HI_ID_VB, EN_ERR_LEVEL_ERROR, EN_ERR_BUTT + 1) + +#define HI_TRACE_VB(level,fmt...) HI_TRACE(level, HI_ID_VB,##fmt) + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* __cplusplus */ + +#endif /* __HI_COMm_VB_H_ */ + diff --git a/general/package/hifb-demo/include/hi_comm_video.h b/general/package/hifb-demo/include/hi_comm_video.h new file mode 100644 index 0000000000..eee71a0461 --- /dev/null +++ b/general/package/hifb-demo/include/hi_comm_video.h @@ -0,0 +1,327 @@ +/******************************************************************************* + Copyright (C), 2001-2011, Hisilicon Tech. Co., Ltd. + + ****************************************************************************** + File Name : hi_comm_video.h + Version : Initial Draft + Author : c42025 + Created : 2006/11/09 + Description : + History : + 1.Date : 2006/11/03 + Author : c42025 + Modification: Created file + + 2.Date : 2007/12/11 + Author : c42025 + Modification: delelte all about digital watermark + + 3.Date : 2008/10/31 + Author : z44949 + Modification: Translate the chinese comment +******************************************************************************/ + +#ifndef __HI_COMM_VIDEO_H__ +#define __HI_COMM_VIDEO_H__ + +#include "hi_type.h" +#include "hi_common.h" + +#ifdef __cplusplus +#if __cplusplus +extern "C"{ +#endif +#endif /* __cplusplus */ + + +typedef enum hiPIC_SIZE_E +{ + PIC_QCIF = 0, + PIC_CIF, + PIC_2CIF, + PIC_HD1, + PIC_D1, + PIC_960H, + + PIC_QVGA, /* 320 * 240 */ + PIC_VGA, /* 640 * 480 */ + PIC_XGA, /* 1024 * 768 */ + PIC_SXGA, /* 1400 * 1050 */ + PIC_UXGA, /* 1600 * 1200 */ + PIC_QXGA, /* 2048 * 1536 */ + + PIC_WVGA, /* 854 * 480 */ + PIC_WSXGA, /* 1680 * 1050 */ + PIC_WUXGA, /* 1920 * 1200 */ + PIC_WQXGA, /* 2560 * 1600 */ + + PIC_HD720, /* 1280 * 720 */ + PIC_HD1080, /* 1920 * 1080 */ + + PIC_BUTT +}PIC_SIZE_E; + +typedef enum hiVIDEO_NORM_E +{ + VIDEO_ENCODING_MODE_PAL=0, + VIDEO_ENCODING_MODE_NTSC, + VIDEO_ENCODING_MODE_AUTO, + VIDEO_ENCODING_MODE_BUTT +} VIDEO_NORM_E; + +typedef enum hiVIDEO_CONTROL_MODE_E +{ + VIDEO_CONTROL_MODE_SLAVER=0, + VIDEO_CONTROL_MODE_MASTER, + VIDEO_CONTROL_MODE_BUTT +}VIDEO_CONTROL_MODE_E; + + +/* we ONLY define picture format used, all unused will be deleted!*/ +typedef enum hiPIXEL_FORMAT_E +{ + PIXEL_FORMAT_RGB_1BPP = 0, + PIXEL_FORMAT_RGB_2BPP, + PIXEL_FORMAT_RGB_4BPP, + PIXEL_FORMAT_RGB_8BPP, + PIXEL_FORMAT_RGB_444, + PIXEL_FORMAT_RGB_4444, + PIXEL_FORMAT_RGB_555, + PIXEL_FORMAT_RGB_565, + PIXEL_FORMAT_RGB_1555, + + /* 9 reserved */ + PIXEL_FORMAT_RGB_888, + PIXEL_FORMAT_RGB_8888, + PIXEL_FORMAT_RGB_PLANAR_888, + PIXEL_FORMAT_RGB_BAYER, + + PIXEL_FORMAT_YUV_A422, + PIXEL_FORMAT_YUV_A444, + + PIXEL_FORMAT_YUV_PLANAR_422, + PIXEL_FORMAT_YUV_PLANAR_420, + PIXEL_FORMAT_YUV_PLANAR_444, + + PIXEL_FORMAT_YUV_SEMIPLANAR_422, + PIXEL_FORMAT_YUV_SEMIPLANAR_420, + PIXEL_FORMAT_YUV_SEMIPLANAR_444, + + PIXEL_FORMAT_UYVY_PACKAGE_422, + PIXEL_FORMAT_YUYV_PACKAGE_422, + PIXEL_FORMAT_VYUY_PACKAGE_422, + PIXEL_FORMAT_YCbCr_PLANAR, + + PIXEL_FORMAT_RGB_422, + PIXEL_FORMAT_RGB_420, + + PIXEL_FORMAT_BUTT +} PIXEL_FORMAT_E; + +typedef struct hiVIDEO_VBI_INFO_S +{ + HI_U32 au32Data[VIU_MAX_VBI_LEN]; + HI_U32 u32Len; +}VIDEO_VBI_INFO_S; + +typedef enum hiVIDEO_FIELD_E +{ + VIDEO_FIELD_TOP = 0x01, /* even field */ + VIDEO_FIELD_BOTTOM = 0x02, /* odd field */ + VIDEO_FIELD_INTERLACED = 0x03, /* two interlaced fields */ + VIDEO_FIELD_FRAME = 0x04, /* frame */ + + VIDEO_FIELD_BUTT +} VIDEO_FIELD_E; + +typedef struct hiVIDEO_FRAME_S +{ + HI_U32 u32Width; + HI_U32 u32Height; + VIDEO_FIELD_E u32Field; + PIXEL_FORMAT_E enPixelFormat; + + HI_U32 u32PhyAddr[3]; + HI_VOID *pVirAddr[3]; + HI_U32 u32Stride[3]; + + HI_U16 u16OffsetTop; /* top offset of show area */ + HI_U16 u16OffsetBottom; /* bottom offset of show area */ + HI_U16 u16OffsetLeft; /* left offset of show area */ + HI_U16 u16OffsetRight; /* right offset of show area */ + + HI_U64 u64pts; + HI_U32 u32TimeRef; + + HI_U32 u32PrivateData; + //VIDEO_VBI_INFO_S astVbiInfo[VIU_MAX_VBI_NUM]; +}VIDEO_FRAME_S; + +typedef struct hiVIDEO_FRAME_INFO_S +{ + VIDEO_FRAME_S stVFrame; + HI_U32 u32PoolId; +} VIDEO_FRAME_INFO_S; + +typedef struct hiBITMAP_S +{ + PIXEL_FORMAT_E enPixelFormat; /* Bitmap's pixel format */ + + HI_U32 u32Width; /* Bitmap's width */ + HI_U32 u32Height; /* Bitmap's height */ + HI_VOID *pData; /* Address of Bitmap's data */ +} BITMAP_S; + +typedef struct HI_VPP_CFG_S +{ + HI_BOOL bVppEn; + + HI_BOOL bIeEn; + HI_BOOL bDnEn; + HI_BOOL bSpEn; + HI_BOOL bIencEn; + + HI_S32 s32IeSth; /* IE Strength [0,10] */ + HI_S32 s32SpSth; /* SP Strength [-4,5] */ + HI_S32 s32DnSfCosSth; /* coarse DN sf Strength [0,3] */ + HI_S32 s32DnSfIncSth; /* Inching of DN sf Strength [0,255] */ + HI_S32 s32DnTfSth; /* DN tf Strength [0,4] */ + +} VPP_CFG_S; + +typedef struct hiSCALE_CFG_S +{ + HI_BOOL bScaleEn; + + HI_S32 s32DstWidth; /* the dest width after scale */ + HI_S32 s32DstHeight; /* the dest height after scale */ +} SCALE_CFG_S; + +/* Ie */ +typedef struct HI_VPP_IE_EX_S +{ + HI_U32 u32RefRange;// + HI_U32 u32IeStrength;// + HI_U32 u32Black; + HI_U32 u32White; +} VPP_IE_EX_S; + +/*dn*/ +typedef struct +{ + HI_U16 saMask[2]; + HI_U16 weight[2]; + +} tVppCalcWnd; + +typedef struct +{ + HI_U8 wWndX, hWndX; + HI_U8 wWndY, hWndY; + HI_U8 wWndC, hWndC; + HI_U8 wWndD, hWndD; // + + HI_U16 sfyMask[2]; + HI_U8 sfyRange[2]; // + HI_U8 sfyStrength; // + HI_U8 sfyLimitedFlag; // + + HI_U8 MADpExDirectSub : 1; + HI_U8 MADpExMask : 4; + HI_U8 _reserved_ : 3; + + HI_U8 sfcStrength; + HI_U8 sfyMADpThresh, sfyMADpRate;/**/ + HI_U16 sfyMSEiThresh[8]; + + HI_U8 rsfyThresh, rsfyRate, rsfyStrength, tfyStrength; + HI_U8 rsfcThresh, rsfcRate, rsfcStrength, tfcStrength;/**/ + + HI_U8 tfyMADpThresh, tfyMADpRate; + HI_U8 tfySNRpThresh, tfySNRpRate; + + HI_U16 tfyMSEiThresh[8]; + HI_U16 tfyMSEpThresh[8]; + + HI_U8 tfyMaxStrength;// + HI_U8 tfcMaxStrength;/**/ + + HI_U8 tfcMADpThresh, tfcMADpRate; + HI_U16 tfcMSEiThresh[8]; + + HI_U16 diyMSEiThresh[8]; + + HI_U8 tfyLimit; + HI_U8 noiseMADpThresh; + HI_U16 noiseMSDpThresh; + + HI_U8 log2hStepMADp, log2hStepMSEi; + + HI_U8 histMinMADp, histMaxMADp; + HI_U16 histMinMSEi, histMaxMSEi; + + /*---------------------------------------------*/ + tVppCalcWnd yWnd[2]; + tVppCalcWnd cWnd[2]; +} tVppDnCfg; +typedef tVppDnCfg VPP_DN_EX_S; + +/* Sp */ +typedef struct +{ + HI_U8 strength;// + HI_U8 limit;// + HI_U8 black; + HI_U8 white; +} tVppSharpenCfg; +typedef tVppSharpenCfg VPP_SP_EX_S; + + +typedef struct hiVPP_CFG_EX_S +{ + VPP_IE_EX_S stIE_Ex; + VPP_DN_EX_S stDN_Ex; + VPP_SP_EX_S stSP_Ex; +} VPP_CFG_EX_S; + + +/* VI Mix-Capture info. */ +typedef struct hiVI_MIXCAP_STAT_S +{ + HI_BOOL bMixCapMode; /* In mix-capture mode or not. */ + HI_BOOL bHasDownScale; /* VI Frame is downscaled or not. */ +} VI_MIXCAP_STAT_S; + +/* VI output frame info. */ +typedef struct hiVI_FRAME_INFO_S +{ + VI_MIXCAP_STAT_S stMixCapState; /* VI Mix-Capture info. */ + VIDEO_FRAME_INFO_S stViFrmInfo; /* Video frame info. */ + HI_BOOL bFlashed; /* Flashed Video frame or not. */ +}VI_FRAME_INFO_S; + +typedef enum hiLDC_VIEW_TYPE_E +{ + LDC_VIEW_TYPE_ALL = 0, /* View scale all but x and y independtly, this will keep both x and y axis ,but corner maybe lost*/ + LDC_VIEW_TYPE_CROP, /* Not use view scale, this will lost some side and corner */ + + LDC_VIEW_TYPE_BUTT, +} LDC_VIEW_TYPE_E; + +typedef struct hiLDC_ATTR_S +{ + LDC_VIEW_TYPE_E enViewType; + + HI_S32 s32CenterXOffset; /* Horizontal offset of the image distortion center relative to image center. [-28,28]. */ + HI_S32 s32CenterYOffset; /* Vertical offset of the image distortion center relative to image center. [-14,14]. */ + HI_S32 s32Ratio; /* Distortion ratio. [0, 511]. */ +} LDC_ATTR_S; + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* __cplusplus */ + + +#endif /* _HI_COMM_VIDEO_H_ */ diff --git a/general/package/hifb-demo/include/hi_comm_vo.h b/general/package/hifb-demo/include/hi_comm_vo.h new file mode 100644 index 0000000000..ac718bc4f2 --- /dev/null +++ b/general/package/hifb-demo/include/hi_comm_vo.h @@ -0,0 +1,493 @@ +/****************************************************************************** + + Copyright (C), 2001-2011, Hisilicon Tech. Co., Ltd. + + ****************************************************************************** + File Name : hi_comm_vo.h + Version : Initial Draft + Author : Hisilicon multimedia software group + Created : 2009/03/18 + Description : + History : + 1.Date : 2009/03/18 + Author : x00100808 + Modification: Created file + +******************************************************************************/ + +#ifndef __HI_COMM_VO_H__ +#define __HI_COMM_VO_H__ + +#include "hi_type.h" +#include "hi_common.h" +#include "hi_comm_video.h" + +#define VO_DEF_CHN_BUF_LEN 8 +#define VO_DEF_DISP_BUF_LEN 5 +#define VO_DEF_VIRT_BUF_LEN 3 +#define VO_DEF_WBC_DEPTH_LEN 8 + +#ifdef __cplusplus +#if __cplusplus +extern "C"{ +#endif +#endif /* End of #ifdef __cplusplus */ + +typedef enum hiEN_VOU_ERR_CODE_E +{ + EN_ERR_VO_DEV_NOT_CONFIG = 0x40, + EN_ERR_VO_DEV_NOT_ENABLE = 0x41, + EN_ERR_VO_DEV_HAS_ENABLED = 0x42, + EN_ERR_VO_DEV_HAS_BINDED = 0x43, + EN_ERR_VO_DEV_NOT_BINDED = 0x44, + + ERR_VO_NOT_ENABLE = 0x45, + ERR_VO_NOT_DISABLE = 0x46, + ERR_VO_NOT_CONFIG = 0x47, + + ERR_VO_CHN_NOT_DISABLE = 0x48, + ERR_VO_CHN_NOT_ENABLE = 0x49, + ERR_VO_CHN_NOT_CONFIG = 0x4a, + ERR_VO_CHN_NOT_ALLOC = 0x4b, + + ERR_VO_CCD_INVALID_PAT = 0x4c, + ERR_VO_CCD_INVALID_POS = 0x4d, + + ERR_VO_WAIT_TIMEOUT = 0x4e, + ERR_VO_INVALID_VFRAME = 0x4f, + ERR_VO_INVALID_RECT_PARA = 0x50, + ERR_VO_SETBEGIN_ALREADY = 0x51, + ERR_VO_SETBEGIN_NOTYET = 0x52, + ERR_VO_SETEND_ALREADY = 0x53, + ERR_VO_SETEND_NOTYET = 0x54, + + ERR_VO_GRP_INVALID_ID = 0x55, + ERR_VO_GRP_NOT_CREATE = 0x56, + ERR_VO_GRP_HAS_CREATED = 0x57, + ERR_VO_GRP_NOT_DESTROY = 0x58, + ERR_VO_GRP_CHN_FULL = 0x59, + ERR_VO_GRP_CHN_EMPTY = 0x5a, + ERR_VO_GRP_CHN_NOT_EMPTY = 0x5b, + ERR_VO_GRP_INVALID_SYN_MODE = 0x5c, + ERR_VO_GRP_INVALID_BASE_PTS = 0x5d, + ERR_VO_GRP_NOT_START = 0x5e, + ERR_VO_GRP_NOT_STOP = 0x5f, + ERR_VO_GRP_INVALID_FRMRATE = 0x60, + ERR_VO_GRP_CHN_HAS_REG = 0x61, + ERR_VO_GRP_CHN_NOT_REG = 0x62, + ERR_VO_GRP_CHN_NOT_UNREG = 0x63, + ERR_VO_GRP_BASE_NOT_CFG = 0x64, + + ERR_GFX_NOT_DISABLE = 0x65, + ERR_GFX_NOT_BIND = 0x66, + ERR_GFX_NOT_UNBIND = 0x67, + ERR_GFX_INVALID_ID = 0x68, + + ERR_VO_WBC_NOT_DISABLE = 0x69, + ERR_VO_WBC_NOT_CONFIG = 0x6a, + + ERR_VO_CHN_AREA_OVERLAP = 0x6b, + + /* new added */ + ERR_VO_BUTT + +}EN_VOU_ERR_CODE_E; + +/* System define error code */ +#define HI_ERR_VO_BUSY HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY) +#define HI_ERR_VO_NO_MEM HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM) +#define HI_ERR_VO_NULL_PTR HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR) +#define HI_ERR_VO_SYS_NOTREADY HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY) +#define HI_ERR_VO_INVALID_DEVID HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_DEVID) +#define HI_ERR_VO_INVALID_CHNID HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID) +#define HI_ERR_VO_ILLEGAL_PARAM HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM) +#define HI_ERR_VO_NOT_SUPPORT HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT) +#define HI_ERR_VO_NOT_PERMIT HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM) + +/* device relative error code */ +#define HI_ERR_VO_DEV_NOT_CONFIG HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, EN_ERR_VO_DEV_NOT_CONFIG) +#define HI_ERR_VO_DEV_NOT_ENABLE HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, EN_ERR_VO_DEV_NOT_ENABLE) +#define HI_ERR_VO_DEV_HAS_ENABLED HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, EN_ERR_VO_DEV_HAS_ENABLED) +#define HI_ERR_VO_DEV_HAS_BINDED HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, EN_ERR_VO_DEV_HAS_BINDED) +#define HI_ERR_VO_DEV_NOT_BINDED HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, EN_ERR_VO_DEV_NOT_BINDED) + +/* video relative error code */ +#define HI_ERR_VO_VIDEO_NOT_ENABLE HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_NOT_ENABLE) +#define HI_ERR_VO_VIDEO_NOT_DISABLE HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_NOT_DISABLE) +#define HI_ERR_VO_VIDEO_NOT_CONFIG HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_NOT_CONFIG) + +/*wbc error code*/ +#define HI_ERR_VO_WBC_NOT_DISABLE HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_WBC_NOT_DISABLE) +#define HI_ERR_VO_WBC_NOT_CONFIG HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_WBC_NOT_CONFIG) + + +/* channel relative error code */ +#define HI_ERR_VO_CHN_NOT_DISABLE HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_CHN_NOT_DISABLE) +#define HI_ERR_VO_CHN_NOT_ENABLE HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_CHN_NOT_ENABLE) +#define HI_ERR_VO_CHN_NOT_CONFIG HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_CHN_NOT_CONFIG) +#define HI_ERR_VO_CHN_NOT_ALLOC HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_CHN_NOT_ALLOC) +#define HI_ERR_VO_CHN_AREA_OVERLAP HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_CHN_AREA_OVERLAP) + + +/* cascade relatvie error code */ +#define HI_ERR_VO_INVALID_PATTERN HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_CCD_INVALID_PAT) +#define HI_ERR_VO_INVALID_POSITION HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_CCD_INVALID_POS) + +/* misc */ +#define HI_ERR_VO_WAIT_TIMEOUT HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_WAIT_TIMEOUT) +#define HI_ERR_VO_INVALID_VFRAME HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_INVALID_VFRAME) +#define HI_ERR_VO_INVALID_RECT_PARA HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_INVALID_RECT_PARA) +#define HI_ERR_VO_SETBEGIN_ALREADY HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_SETBEGIN_ALREADY) +#define HI_ERR_VO_SETBEGIN_NOTYET HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_SETBEGIN_NOTYET) +#define HI_ERR_VO_SETEND_ALREADY HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_SETEND_ALREADY) +#define HI_ERR_VO_SETEND_NOTYET HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_SETEND_NOTYET) + +/* sync group relative error code */ +#define HI_ERR_VO_GRP_INVALID_ID HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_INVALID_ID) +#define HI_ERR_VO_GRP_NOT_CREATE HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_NOT_CREATE) +#define HI_ERR_VO_GRP_HAS_CREATED HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_HAS_CREATED) +#define HI_ERR_VO_GRP_NOT_DESTROY HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_NOT_DESTROY) +#define HI_ERR_VO_GRP_CHN_FULL HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_CHN_FULL) +#define HI_ERR_VO_GRP_CHN_EMPTY HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_CHN_EMPTY) +#define HI_ERR_VO_GRP_CHN_NOT_EMPTY HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_CHN_NOT_EMPTY) +#define HI_ERR_VO_GRP_INVALID_SYN_MODE HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_INVALID_SYN_MODE) +#define HI_ERR_VO_GRP_INVALID_BASE_PTS HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_INVALID_BASE_PTS) +#define HI_ERR_VO_GRP_NOT_START HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_NOT_START) +#define HI_ERR_VO_GRP_NOT_STOP HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_NOT_STOP) +#define HI_ERR_VO_GRP_INVALID_FRMRATE HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_INVALID_FRMRATE) +#define HI_ERR_VO_GRP_CHN_HAS_REG HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_CHN_HAS_REG) +#define HI_ERR_VO_GRP_CHN_NOT_REG HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_CHN_NOT_REG) +#define HI_ERR_VO_GRP_CHN_NOT_UNREG HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_CHN_NOT_UNREG) +#define HI_ERR_VO_GRP_BASE_NOT_CFG HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_VO_GRP_BASE_NOT_CFG) + + +/* graphics relative error code */ +#define HI_ERR_VO_GFX_NOT_DISABLE HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_GFX_NOT_DISABLE) +#define HI_ERR_VO_GFX_NOT_BIND HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_GFX_NOT_BIND) +#define HI_ERR_VO_GFX_NOT_UNBIND HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_GFX_NOT_UNBIND) +#define HI_ERR_VO_GFX_INVALID_ID HI_DEF_ERR(HI_ID_VOU, EN_ERR_LEVEL_ERROR, ERR_GFX_INVALID_ID) + +/* vo inteface type */ +#define VO_INTF_CVBS (0x01L<<0) +#define VO_INTF_YPBPR (0x01L<<1) +#define VO_INTF_VGA (0x01L<<2) +#define VO_INTF_BT656 (0x01L<<3) +#define VO_INTF_BT1120 (0x01L<<4) +#define VO_INTF_HDMI (0x01L<<5) +#define VO_INTF_LCD (0x01L<<6) +#define VO_INTF_BT656_H (0x01L<<7) +#define VO_INTF_BT656_L (0x01L<<8) + + +/* WBC channel id*/ +#define VO_WBC_CHN_ID (VO_MAX_CHN_NUM + 1) + +#define VO_DEFAULT_CHN -1 /* use vo buffer as pip buffer */ + +/***************************************************************************** + * 3520 ADDed + *****************************************************************************/ +typedef HI_S32 VO_INTF_TYPE_E; + +typedef HI_S32 VO_WBC_CHN; + +typedef enum hiVO_INTF_SYNC_E +{ + VO_OUTPUT_PAL = 0, + VO_OUTPUT_NTSC, + + VO_OUTPUT_1080P24, + VO_OUTPUT_1080P25, + VO_OUTPUT_1080P30, + + VO_OUTPUT_720P50, + VO_OUTPUT_720P60, + VO_OUTPUT_1080I50, + VO_OUTPUT_1080I60, + VO_OUTPUT_1080P50, + VO_OUTPUT_1080P60, + + VO_OUTPUT_576P50, + VO_OUTPUT_480P60, + + VO_OUTPUT_800x600_60, /* VESA 800 x 600 at 60 Hz (non-interlaced) */ + VO_OUTPUT_1024x768_60, /* VESA 1024 x 768 at 60 Hz (non-interlaced) */ + VO_OUTPUT_1280x1024_60, /* VESA 1280 x 1024 at 60 Hz (non-interlaced) */ + VO_OUTPUT_1366x768_60, /* VESA 1366 x 768 at 60 Hz (non-interlaced) */ + VO_OUTPUT_1440x900_60, /* VESA 1440 x 900 at 60 Hz (non-interlaced) CVT Compliant */ + VO_OUTPUT_1280x800_60, /* 1280*800@60Hz VGA@60Hz*/ + VO_OUTPUT_1600x1200_60, /* VESA 1600 x 1200 at 60 Hz (non-interlaced) */ + VO_OUTPUT_1680x1050_60, /* VESA 1680 x 1050 at 60 Hz (non-interlaced) */ + VO_OUTPUT_1920x1200_60, /* VESA 1920 x 1600 at 60 Hz (non-interlaced) CVT (Reduced Blanking)*/ + VO_OUTPUT_640x480_60, /* VESA 640 x 480 at 60 Hz (non-interlaced) CVT */ + VO_OUTPUT_1920x2160_30, /* 1920x2160_30 */ + VO_OUTPUT_2560x1440_30, /* 2560x1440_30 */ + VO_OUTPUT_USER, + VO_OUTPUT_BUTT + +} VO_INTF_SYNC_E; + +typedef enum hiVO_SCREEN_HFILTER_E +{ + VO_SCREEN_HFILTER_DEF = 0, + VO_SCREEN_HFILTER_8M, + VO_SCREEN_HFILTER_6M, + VO_SCREEN_HFILTER_5M, + VO_SCREEN_HFILTER_4M, + VO_SCREEN_HFILTER_3M, + VO_SCREEN_HFILTER_2M, + VO_SCREEN_HFILTER_BUTT + +} VO_SCREEN_HFILTER_E; + +typedef enum hiVO_SCREEN_VFILTER_E +{ + VO_SCREEN_VFILTER_DEF = 0, + VO_SCREEN_VFILTER_8M, + VO_SCREEN_VFILTER_6M, + VO_SCREEN_VFILTER_5M, + VO_SCREEN_VFILTER_4M, + VO_SCREEN_VFILTER_3M, + VO_SCREEN_VFILTER_2M, + VO_SCREEN_VFILTER_BUTT + +} VO_SCREEN_VFILTER_E; + +typedef enum hiVO_DISPLAY_FIELD_E +{ + VO_FIELD_TOP, /* top field*/ + VO_FIELD_BOTTOM, /* bottom field*/ + VO_FIELD_BOTH, /* top and bottom field*/ + VO_FIELD_BUTT +} VO_DISPLAY_FIELD_E; + +typedef enum hiVOU_LAYER_DDR_E +{ + VOU_LAYER_DDR0 = 0, + VOU_LAYER_DDR1 = 1, + VOU_LAYER_DDR_BUTT +}VOU_LAYER_DDR_E; + +typedef enum hiVOU_ZOOM_IN_E +{ + VOU_ZOOM_IN_RECT = 0, /* zoom in by rect */ + VOU_ZOOM_IN_RATIO, /* zoom in by ratio */ + VOU_ZOOM_IN_BUTT +} VOU_ZOOM_IN_E; + +typedef enum hiVO_CSC_MATRIX_E +{ + VO_CSC_MATRIX_IDENTITY = 0, + + VO_CSC_MATRIX_BT601_TO_BT709, + VO_CSC_MATRIX_BT709_TO_BT601, + + VO_CSC_MATRIX_BT601_TO_RGB_PC, + VO_CSC_MATRIX_BT709_TO_RGB_PC, + + VO_CSC_MATRIX_RGB_TO_BT601_PC, + VO_CSC_MATRIX_RGB_TO_BT709_PC, + + VO_CSC_MATRIX_BUTT +} VO_CSC_MATRIX_E; + +typedef struct hiVO_CHN_ATTR_S +{ + HI_U32 u32Priority; /* video out overlay pri */ + RECT_S stRect; /* rect of video out chn */ + HI_BOOL bDeflicker; /* deflicker or not */ +}VO_CHN_ATTR_S; + +typedef struct hiVO_QUERY_STATUS_S +{ + HI_U32 u32ChnBufUsed; /* channel buffer that been occupied */ +} VO_QUERY_STATUS_S; + +typedef struct hiVO_SRC_ATTR_S +{ + HI_BOOL bInterlaced; /* interlaced source */ +} VO_SRC_ATTR_S; + +typedef struct hiVO_SCALE_FILTER_S +{ + VO_SCREEN_HFILTER_E enHFilter; + VO_SCREEN_VFILTER_E enVFilter; + +} VO_SCREEN_FILTER_S; + +typedef struct tagVO_SYNC_INFO_S +{ + HI_BOOL bSynm; /* sync mode(0:timing,as BT.656; 1:signal,as LCD) */ + HI_BOOL bIop; /* interlaced or progressive display(0:i; 1:p) */ + HI_U8 u8Intfb; /* interlace bit width while output */ + + HI_U16 u16Vact ; /* vertical active area */ + HI_U16 u16Vbb; /* vertical back blank porch */ + HI_U16 u16Vfb; /* vertical front blank porch */ + + HI_U16 u16Hact; /* herizontal active area */ + HI_U16 u16Hbb; /* herizontal back blank porch */ + HI_U16 u16Hfb; /* herizontal front blank porch */ + HI_U16 u16Hmid; /* bottom herizontal active area */ + + HI_U16 u16Bvact; /* bottom vertical active area */ + HI_U16 u16Bvbb; /* bottom vertical back blank porch */ + HI_U16 u16Bvfb; /* bottom vertical front blank porch */ + + HI_U16 u16Hpw; /* horizontal pulse width */ + HI_U16 u16Vpw; /* vertical pulse width */ + + HI_BOOL bIdv; /* inverse data valid of output */ + HI_BOOL bIhs; /* inverse horizontal synch signal */ + HI_BOOL bIvs; /* inverse vertical synch signal */ + +} VO_SYNC_INFO_S; + +typedef struct hiVO_PUB_ATTR_S +{ + HI_U32 u32BgColor; /* Background color of a device, in RGB format. */ + VO_INTF_TYPE_E enIntfType; /* Type of a VO interface */ + VO_INTF_SYNC_E enIntfSync; /* Type of a VO interface timing */ + VO_SYNC_INFO_S stSyncInfo; /* Information about VO interface timings */ + HI_BOOL bDoubleFrame; /* Whether to double frames */ +} VO_PUB_ATTR_S; + +typedef enum hiVO_WBC_DATASOURCE_E +{ + VO_WBC_DATASOURCE_MIXER = 0, /* WBC data source is a mixer of layer and graphics*/ + VO_WBC_DATASOURCE_VIDEO, /* WBC data source only from layer*/ + VO_WBC_DATASOURCE_BUTT, +} VO_WBC_DATASOURCE_E; + + +typedef struct hiVO_WBC_ATTR_S +{ + SIZE_S stTargetSize; /* WBC Zoom target size */ + PIXEL_FORMAT_E enPixelFormat; /* the pixel format of WBC output */ + HI_U32 u32FrameRate; /* frame rate control */ + VO_WBC_DATASOURCE_E enDataSource; /* WBC data source*/ +} VO_WBC_ATTR_S; + +typedef enum hiVO_WBC_MODE_E +{ + VO_WBC_MODE_NOMAL = 0, /* In this mode, wbc will capture frames according to dev frame rate + and wbc frame rate */ + VO_WBC_MODE_DROP_REPEAT, /* In this mode, wbc will drop dev repeat frame, and capture the real frame + according to video layer's display rate and wbc frame rate */ + VO_WBC_MODE_PROG_TO_INTL, /* In this mode, wbc will drop dev repeat frame which repeats more than 3 times, + and change two progressive frames to one interlace frame */ + + VO_WBC_MODE_BUTT, +} VO_WBC_MODE_E; + +typedef enum hiVO_CAS_MODE_E +{ + VO_CAS_MODE_SINGLE = 0, + VO_CAS_MODE_DUAL, + VO_CAS_MODE_BUTT, +} VO_CAS_MODE_E; + +typedef enum hiVO_CAS_RGN_E +{ + VO_CAS_64_RGN = 0, + VO_CAS_32_RGN, + VO_CAS_RGN_BUTT, +} VO_CAS_RGN_E; + +typedef struct hiVO_CAS_ATTR_S +{ + HI_BOOL bSlave; + VO_CAS_RGN_E enCasRgn; + VO_CAS_MODE_E enCasMode; +} VO_CAS_ATTR_S; + +typedef struct hiVO_WBC_ATTR_S_1 +{ + VO_DEV VoSourceDev; /* WBC source is from which Dev */ + SIZE_S stTargetSize; /* WBC Zoom target size */ + PIXEL_FORMAT_E enPixelFormat; /* the pixel format of WBC output */ +} VO_WBC_ATTR_S_1; + + +typedef struct hiVO_WBC_ATTR_S_2 +{ + VO_CHN VoWbcChn; /* Wbc Channel id */ + SIZE_S stTargetSize; /* WBC Zoom target size */ + PIXEL_FORMAT_E enPixelFormat; /* the pixel format of WBC output */ +} VO_WBC_ATTR_S_2; + +typedef struct hiVO_WBC_ATTR_S_3 +{ + SIZE_S stTargetSize; /* WBC Zoom target size */ + PIXEL_FORMAT_E enPixelFormat; /* the pixel format of WBC output */ +} VO_WBC_ATTR_TEMP_S_3; + +typedef struct hiVO_VIDEO_LAYER_ATTR_S +{ + RECT_S stDispRect; /* Display resolution */ + SIZE_S stImageSize; /* Canvas size of the video layer */ + HI_U32 u32DispFrmRt; /* Display frame rate */ + PIXEL_FORMAT_E enPixFormat; /* Pixel format of the video layer */ +} VO_VIDEO_LAYER_ATTR_S; + +typedef struct hiVO_ZOOM_RATIO_S +{ + HI_U32 u32XRatio; + HI_U32 u32YRatio; + HI_U32 u32WRatio; + HI_U32 u32HRatio; +} VO_ZOOM_RATIO_S; + +typedef struct hiVO_ZOOM_ATTR_S +{ + VOU_ZOOM_IN_E enZoomType; /* choose the type of zoom in */ + union + { + RECT_S stZoomRect; /* zoom in by rect */ + VO_ZOOM_RATIO_S stZoomRatio; /* zoom in by ratio */ + }; +} VO_ZOOM_ATTR_S; + +typedef struct hiVO_CSC_S +{ + VO_CSC_MATRIX_E enCscMatrix; + HI_U32 u32Luma; /* luminance: 0 ~ 100 */ + HI_U32 u32Contrast; /* contrast : 0 ~ 100 */ + HI_U32 u32Hue; /* hue : 0 ~ 100 */ + HI_U32 u32Satuature; /* satuature: 0 ~ 100 */ +} VO_CSC_S; + +typedef struct hiVO_VGA_PARAM_S +{ + VO_CSC_MATRIX_E enCscMatrix; + HI_U32 u32Luma; /* luminance: 0 ~ 100 */ + HI_U32 u32Contrast; /* contrast : 0 ~ 100 */ + HI_U32 u32Hue; /* hue : 0 ~ 100 */ + HI_U32 u32Satuature; /* satuature: 0 ~ 100 */ + HI_U32 u32Gain; /* current gain of VGA signals. [0, 64). */ +} VO_VGA_PARAM_S; + +typedef struct hiVO_USR_SEND_TIMEOUT_S +{ + VIDEO_FRAME_INFO_S stVFrame; + HI_U32 u32MilliSec; +} VO_USR_SEND_TIMEOUT_S; + +typedef enum hiVOU_GFX_BIND_LAYER_E +{ + GRAPHICS_LAYER_G4 = 0, + GRAPHICS_LAYER_HC0, + GRAPHICS_LAYER_HC1, + GRAPHICS_LAYER_BUTT +}VOU_GFX_BIND_LAYER_E; + + + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* End of #ifdef __cplusplus */ + +#endif /* End of #ifndef __HI_COMM_VO_H__ */ + diff --git a/general/package/hifb-demo/include/hi_common.h b/general/package/hifb-demo/include/hi_common.h new file mode 100644 index 0000000000..5a0cfc38cb --- /dev/null +++ b/general/package/hifb-demo/include/hi_common.h @@ -0,0 +1,452 @@ +/****************************************************************************** +Copyright (C), 2001-2011, Hisilicon Tech. Co., Ltd. +****************************************************************************** +File Name : hi_common.h +Version : Initial Draft +Author : Hi3511 MPP Team +Created : 2006/11/09 +Last Modified : +Description : The common defination +Function List : +History : + 1.Date : 2009/03/03 + Author : z44949 + Modification: Created file +2.Date : 2009/07/01 + Author : z44949 + Modification: Move MPP_VER_PRIX to hi_defines.h +3.Date : 2009/08/13 + Author : y45339 + Modification: add some proc define + +4.Date : 2010/11/03 + Author : z44949 + Modification: Remove some unnecessary typedef + +******************************************************************************/ +#ifndef __HI_COMMON_H__ +#define __HI_COMMON_H__ + +#include "hi_type.h" +#include "hi_math.h" +#include "hi_defines.h" +#include "hi_comm_video.h" + +#ifdef __cplusplus +#if __cplusplus +extern "C"{ +#endif +#endif /* End of #ifdef __cplusplus */ + +#ifndef VER_X + #define VER_X 1 +#endif + +#ifndef VER_Y + #define VER_Y 0 +#endif + +#ifndef VER_Z + #define VER_Z 0 +#endif + +#ifndef VER_P + #define VER_P 0 +#endif + +#ifdef HI_DEBUG + #define VER_D " " +#else + #define VER_D " Release" +#endif + +#define __MK_VERSION(x,y,z,p) #x"."#y"."#z"."#p +#define MK_VERSION(x,y,z,p) __MK_VERSION(x,y,z,p) +#define MPP_VERSION CHIP_NAME MPP_VER_PRIX MK_VERSION(VER_X,VER_Y,VER_Z,VER_P) VER_D +#define COM_VERSION MPP_VER_PRIX MK_VERSION(VER_X,VER_Y,VER_Z,VER_P) VER_D + +#define VERSION_NAME_MAXLEN 64 +typedef struct hiMPP_VERSION_S +{ + HI_CHAR aVersion[VERSION_NAME_MAXLEN]; +}MPP_VERSION_S; + +typedef struct hiPOINT_S +{ + HI_S32 s32X; + HI_S32 s32Y; +}POINT_S; + +typedef struct hiSIZE_S +{ + HI_U32 u32Width; + HI_U32 u32Height; +} SIZE_S; + +typedef struct hiRECT_S +{ + HI_S32 s32X; + HI_S32 s32Y; + HI_U32 u32Width; + HI_U32 u32Height; +}RECT_S; + +typedef enum hiROTATE_E +{ + ROTATE_NONE = 0, + ROTATE_90 = 1, + ROTATE_180 = 2, + ROTATE_270 = 3, + ROTATE_BUTT +} ROTATE_E; + +typedef HI_S32 AI_CHN; +typedef HI_S32 AO_CHN; +typedef HI_S32 AENC_CHN; +typedef HI_S32 ADEC_CHN; +typedef HI_S32 AUDIO_DEV; +typedef HI_S32 AVENC_CHN; +typedef HI_S32 VI_DEV; +typedef HI_S32 VI_WAY; +typedef HI_S32 VI_CHN; +typedef HI_S32 VO_DEV; +typedef HI_S32 VO_LAYER; +typedef HI_S32 VO_CHN; +typedef HI_S32 VENC_CHN; +typedef HI_S32 VDEC_CHN; +typedef HI_S32 VENC_GRP; +typedef HI_S32 VO_GRP; +typedef HI_S32 VDA_CHN; +typedef HI_S32 IVE_HANDLE; +typedef HI_S32 ISP_DEV; +typedef HI_S32 SENSOR_ID; + +#define HI_INVALID_CHN (-1) +#define HI_INVALID_WAY (-1) +#define HI_INVALID_LAYER (-1) +#define HI_INVALID_DEV (-1) +#define HI_INVALID_HANDLE (-1) + +#define HI_INVALID_VALUE (-1) +#define HI_INVALID_TYPE (-1) + +typedef enum hiMOD_ID_E +{ + HI_ID_CMPI = 0, + HI_ID_VB = 1, + HI_ID_SYS = 2, + HI_ID_VALG = 3, + +#if 1 + /* + VDECÄÚ²¿»á´´½¨VB Pool, VDECÏú»ÙµÄʱºòÏú»ÙVB Pool, + µ«ÊÇÈç¹ûÆäËûÄ£¿éʹÓÃÁËÕâ¸öͼÏñ, Ïú»ÙµÄʱºòVB--»á±¨´í; + ËùÒÔVDECÄ£¿éÒªµÈÆäËûÄ£¿éÏú»ÙÖ®ºóÔÙÏú»Ù f65132×¢ + + ctrl+cÍ˳öʱÈç¹ûÏÈÏú»ÙCHNLÔÙÍ˳öVDEC,ÔòVDECÍ˳öʱ»áunregister CHNL£¬ + Òò´ËʱCHNLÒѱ»Ïú»Ù£¬ËùÒÔunregister²»³É¹¦£¬´òÓ¡³ö´íÐÅÏ¢¡£ + Ϊ½â¾öÕâ¸öÎÊÌ⣬ÐèÒª°ÑCHNLºÍVDECµÄid˳Ðò»¥»» + */ + HI_ID_CHNL = 4, + HI_ID_VDEC = 5, + HI_ID_GROUP = 6, + HI_ID_VENC = 7, + HI_ID_VPSS = 8, + HI_ID_VDA = 9, + + HI_ID_H264E = 10, + HI_ID_JPEGE = 11, + HI_ID_MPEG4E = 12, +#else + + HI_ID_CHNL = 4, + HI_ID_GROUP = 5, + HI_ID_VENC = 6, + HI_ID_VPSS = 7, + HI_ID_VDA = 8, + + HI_ID_H264E = 9, + HI_ID_JPEGE = 10, + HI_ID_MPEG4E = 11, + + HI_ID_VDEC = 12, +#endif + HI_ID_H264D = 13, + HI_ID_JPEGD = 14, + HI_ID_VOU = 15, + + HI_ID_VIU = 16, + HI_ID_DSU = 17, + HI_ID_RGN = 18, + HI_ID_RC = 19, + + HI_ID_SIO = 20, + HI_ID_AI = 21, + HI_ID_AO = 22, + HI_ID_AENC = 23, + HI_ID_ADEC = 24, + + HI_ID_AVENC = 25, + + HI_ID_PCIV = 26, + HI_ID_PCIVFMW = 27, + + HI_ID_ISP = 28, + + HI_ID_IVE = 29, + /* there is a hole */ + + HI_ID_DCCM = 31, + HI_ID_DCCS = 32, + + HI_ID_PROC = 33, + HI_ID_LOG = 34, + HI_ID_MST_LOG = 35, + HI_ID_VD = 36, + + HI_ID_VCMP = 38, + HI_ID_FB = 39, + + + HI_ID_HDMI = 40, + HI_ID_VOIE = 41, + HI_ID_TDE = 42, + + HI_ID_USR = 43, + + HI_ID_VEDU = 44, + + HI_ID_BUTT, +} MOD_ID_E; + +typedef struct hiMPP_CHN_S +{ + MOD_ID_E enModId; + HI_S32 s32DevId; + HI_S32 s32ChnId; +} MPP_CHN_S; + +#define MPP_MOD_VIU "vi" +#define MPP_MOD_VOU "vo" +#define MPP_MOD_HDMI "hdmi" +#define MPP_MOD_DSU "dsu" + +#define MPP_MOD_CHNL "chnl" +#define MPP_MOD_VENC "venc" +#define MPP_MOD_GRP "grp" +#define MPP_MOD_VDA "vda" +#define MPP_MOD_VPSS "vpss" +#define MPP_MOD_RGN "rgn" +#define MPP_MOD_IVE "ive" + +#define MPP_MOD_H264E "h264e" +#define MPP_MOD_JPEGE "jpege" +#define MPP_MOD_MPEG4E "mpeg4e" + +#define MPP_MOD_VDEC "vdec" +#define MPP_MOD_H264D "h264d" +#define MPP_MOD_JPEGD "jpegd" + +#define MPP_MOD_AI "ai" +#define MPP_MOD_AO "ao" +#define MPP_MOD_AENC "aenc" +#define MPP_MOD_ADEC "adec" +#define MPP_MOD_SIO "sio" + +#define MPP_MOD_VB "vb" +#define MPP_MOD_SYS "sys" +#define MPP_MOD_CMPI "cmpi" + +#define MPP_MOD_PCIV "pciv" +#define MPP_MOD_PCIVFMW "pcivfmw" + +#define MPP_MOD_PROC "proc" +#define MPP_MOD_LOG "logmpp" +#define MPP_MOD_MST_LOG "mstlog" + +#define MPP_MOD_DCCM "dccm" +#define MPP_MOD_DCCS "dccs" + +#define MPP_MOD_VCMP "vcmp" +#define MPP_MOD_FB "fb" + +#define MPP_MOD_RC "rc" + +#define MPP_MOD_VOIE "voie" + +#define MPP_MOD_TDE "tde" +#define MPP_MOD_ISP "isp" +#define MPP_MOD_ACODEC "acodec" + +/* We just coyp this value of payload type from RTP/RTSP definition */ +typedef enum +{ + PT_PCMU = 0, + PT_1016 = 1, + PT_G721 = 2, + PT_GSM = 3, + PT_G723 = 4, + PT_DVI4_8K = 5, + PT_DVI4_16K = 6, + PT_LPC = 7, + PT_PCMA = 8, + PT_G722 = 9, + PT_S16BE_STEREO = 10, + PT_S16BE_MONO = 11, + PT_QCELP = 12, + PT_CN = 13, + PT_MPEGAUDIO = 14, + PT_G728 = 15, + PT_DVI4_3 = 16, + PT_DVI4_4 = 17, + PT_G729 = 18, + PT_G711A = 19, + PT_G711U = 20, + PT_G726 = 21, + PT_G729A = 22, + PT_LPCM = 23, + PT_CelB = 25, + PT_JPEG = 26, + PT_CUSM = 27, + PT_NV = 28, + PT_PICW = 29, + PT_CPV = 30, + PT_H261 = 31, + PT_MPEGVIDEO = 32, + PT_MPEG2TS = 33, + PT_H263 = 34, + PT_SPEG = 35, + PT_MPEG2VIDEO = 36, + PT_AAC = 37, + PT_WMA9STD = 38, + PT_HEAAC = 39, + PT_PCM_VOICE = 40, + PT_PCM_AUDIO = 41, + PT_AACLC = 42, + PT_MP3 = 43, + PT_ADPCMA = 49, + PT_AEC = 50, + PT_X_LD = 95, + PT_H264 = 96, + PT_D_GSM_HR = 200, + PT_D_GSM_EFR = 201, + PT_D_L8 = 202, + PT_D_RED = 203, + PT_D_VDVI = 204, + PT_D_BT656 = 220, + PT_D_H263_1998 = 221, + PT_D_MP1S = 222, + PT_D_MP2P = 223, + PT_D_BMPEG = 224, + PT_MP4VIDEO = 230, + PT_MP4AUDIO = 237, + PT_VC1 = 238, + PT_JVC_ASF = 255, + PT_D_AVI = 256, + PT_DIVX3 = 257, + PT_AVS = 258, + PT_REAL8 = 259, + PT_REAL9 = 260, + PT_VP6 = 261, + PT_VP6F = 262, + PT_VP6A = 263, + PT_SORENSON =264, + PT_MAX = 265, + /* add by hisilicon */ + PT_AMR = 1001, + PT_MJPEG = 1002, + PT_AMRWB = 1003, + PT_BUTT +}PAYLOAD_TYPE_E; + +typedef enum hiVOU_WHO_SENDPIC_E +{ + VOU_WHO_SENDPIC_VIU = 0, + VOU_WHO_SENDPIC_VDEC = 1, + VOU_WHO_SENDPIC_PCIV = 2, + VOU_WHO_SENDPIC_VPP = 3, + VOU_WHO_SENDPIC_USR = 4, + VOU_WHO_SENDPIC_BUTT +} VOU_WHO_SENDPIC_E; + +#if 1 +//Â˲¨ÏµÊýµÄ¶¨Òå¿ÉÄÜÓëоƬÓйأ¬¾ßÌåʵÏÖʱÔÙ¿¼ÂÇ·ÅÔÚÄÄÀï +/* horizontal scale filter coefficient of dsu +** which affect image quality of encoding and preview. + +** normally the filter can be set be DSU_HSCALE_FILTER_DEFAULT +** which means sdk will choose filter automatically.Otherwise, +** you can choose other filter + +** Notes:65M means 6.5 +*/ +typedef enum hiDSU_HSCALE_FILTER_E +{ + DSU_HSCALE_FILTER_DEFAULT = 0, + DSU_HSCALE_FILTER_C_65M, + DSU_HSCALE_FILTER_CG_56M, + DSU_HSCALE_FILTER_LC_45M, + DSU_HSCALE_FILTER_CG_3M, + DSU_HSCALE_FILTER_CG_2M, + DSU_HSCALE_FILTER_CG_1M, + DSU_HSCALE_FILTER_BUTT +}DSU_HSCALE_FILTER_E; + + +/* vertical scale filter coefficient of dsu +** which affect image quality of encoding and preview. + +** normally the filter can be set be DSU_VSCALE_FILTER_DEFAULT +** which means sdk will choose filter automatically.Otherwise, +** you can choose other filter + +** Notes:38M means 3.8 +*/ +typedef enum hiDSU_VSCALE_FILTER_E +{ + DSU_VSCALE_FILTER_DEFAULT = 0, + DSU_VSCALE_FILTER_S_6M, + DSU_VSCALE_FILTER_S_5M, + DSU_VSCALE_FILTER_S_4M, + DSU_VSCALE_FILTER_S_38M, + DSU_VSCALE_FILTER_S_37M, + DSU_VSCALE_FILTER_S_36M, + DSU_VSCALE_FILTER_S_25M, + DSU_VSCALE_FILTER_S_2M, + DSU_VSCALE_FILTER_S_15M, + DSU_VSCALE_FILTER_S_12M, + DSU_VSCALE_FILTER_S_11M, + DSU_VSCALE_FILTER_S_1M, + DSU_VSCALE_FILTER_BUTT +}DSU_VSCALE_FILTER_E; + +/*DSU filter param type*/ +typedef enum hiDSU_FILTER_PARAM_TYPE +{ + FILTER_PARAM_TYPE_NORM = 0, + FILTER_PARAM_TYPE_EX, + FILTER_PARAM_TYPE_EX2, + FILTER_PARAM_TYPE_USER1, + FILTER_PARAM_TYPE_USER2, + FILTER_PARAM_TYPE_BUTT +}DSU_FILTER_PARAM_TYPE; + +#define DSU_HFILTER_PARAM_NUM 792 +#define DSU_VFILTER_PARAM_NUM 480 +typedef struct hiDSU_FILTER_PARAM_S +{ + DSU_FILTER_PARAM_TYPE enFiltType; + HI_U8 au8HParamTable[DSU_HFILTER_PARAM_NUM]; + HI_U8 au8VParamTable[DSU_VFILTER_PARAM_NUM]; +}DSU_FILTER_PARAM_S; + +#endif + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* __cplusplus */ + +#endif /* _HI_COMMON_H_ */ + diff --git a/general/package/hifb-demo/include/hi_debug.h b/general/package/hifb-demo/include/hi_debug.h new file mode 100644 index 0000000000..5c77fedcb4 --- /dev/null +++ b/general/package/hifb-demo/include/hi_debug.h @@ -0,0 +1,145 @@ +/****************************************************************************** +Copyright (C), 2001-2011, Hisilicon Tech. Co., Ltd. +****************************************************************************** +File Name : hi_debug.h +Version : Initial Draft +Author : Hisilicon multimedia software group +Created : 2006/12/09 +Last Modified : +Description : all struct and maro definition for debug +Function List : +History : + 1.Date : 2006/11/03 + Author : c42025 + Modification: Created file + +2.Date : 2008/03/03 + Author : c42025 + Modification: 1. mv definition LOG_ERRLEVEL_E to here form file "hi_errno.h", + but it will be obsolete in next version. + 2. add new macro definition for debug levle. + 3. change macro defintion HI_TRACE + +3.Date : 2008/03/05 + Author : c42025 + Modification: Change the definition of LOG_ERRLEVEL_E + +4.Date : 2008/10/31 + Author : z44949 + Modification: Delete the definition of LOG_ERRLEVEL_E + +5.Date : 2010/11/03 + Author : z44949 + Modification: Remove some unnecessary typedef + +******************************************************************************/ +#ifndef __HI_DEBUG_H__ +#define __HI_DEBUG_H__ + +#ifndef __KERNEL__ +#include +#endif + +#include "hi_type.h" +#include "hi_common.h" + +#ifdef __cplusplus +#if __cplusplus +extern "C"{ +#endif +#endif /* __cplusplus */ + +#define _EX__FILE_LINE(fxx,lxx) "[File]:"fxx"\n[Line]:"#lxx"\n[Info]:" +#define EX__FILE_LINE(fxx,lxx) _EX__FILE_LINE(fxx,lxx) +#define __FILE_LINE__ EX__FILE_LINE(__FILE__, __LINE__) + +#define HI_DBG_EMERG 0 /* system is unusable */ +#define HI_DBG_ALERT 1 /* action must be taken immediately */ +#define HI_DBG_CRIT 2 /* critical conditions */ +#define HI_DBG_ERR 3 /* error conditions */ +#define HI_DBG_WARN 4 /* warning conditions */ +#define HI_DBG_NOTICE 5 /* normal but significant condition */ +#define HI_DBG_INFO 6 /* informational */ +#define HI_DBG_DEBUG 7 /* debug-level messages */ + +typedef struct hiLOG_LEVEL_CONF_S +{ + MOD_ID_E enModId; + HI_S32 s32Level; + HI_CHAR cModName[16]; +} LOG_LEVEL_CONF_S; + +#ifndef __KERNEL__ +/****************************************************************************** +** For User Mode : HI_PRINT, HI_ASSERT, HI_TRACE +******************************************************************************/ + +#define HI_PRINT printf + +#ifdef HI_DEBUG + /* Using samples: HI_ASSERT(x>y); */ + #define HI_ASSERT(expr) \ + do{ \ + if (!(expr)) { \ + printf("\nASSERT failed at:\n"\ + " >File name: %s\n" \ + " >Function : %s\n" \ + " >Line No. : %d\n" \ + " >Condition: %s\n", \ + __FILE__,__FUNCTION__, __LINE__, #expr);\ + _exit(-1);\ + } \ + }while(0) + + /* Using samples: + ** HI_TRACE(HI_DBG_DEBUG, HI_ID_CMPI, "Test %d, %s\n", 12, "Test"); + **/ + #define HI_TRACE(level, enModId, fmt...) fprintf(stderr,##fmt) +#else + #define HI_ASSERT(expr) + #define HI_TRACE(level, enModId, fmt...) +#endif + +#else +/****************************************************************************** +** For Linux Kernel : HI_PRINT, HI_ASSERT, HI_TRACE +******************************************************************************/ + +#define HI_PRINT printk + +extern HI_S32 HI_ChkLogLevel(HI_S32 s32Levle, MOD_ID_E enModId); +asmlinkage int HI_LOG(HI_S32 level, MOD_ID_E enModId,const char *fmt, ...); + +#ifdef HI_DEBUG + /* Using samples: HI_ASSERT(x>y); */ + #define HI_ASSERT(expr) \ + do{ \ + if (!(expr)) { \ + panic("\nASSERT failed at:\n" \ + " >File name: %s\n" \ + " >Function : %s\n" \ + " >Line No. : %d\n" \ + " >Condition: %s\n", \ + __FILE__,__FUNCTION__, __LINE__, #expr);\ + } \ + }while(0) + + /* Using samples: + ** HI_TRACE(HI_DBG_DEBUG, HI_ID_CMPI, "Test %d, %s\n", 12, "Test"); + **/ + #define HI_TRACE HI_LOG +#else + #define HI_ASSERT(expr) + #define HI_TRACE(level, enModId, fmt...) +#endif + +#endif /* end of __KERNEL__ */ + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* __cplusplus */ + +#endif /* __HI_DEBUG_H__ */ + diff --git a/general/package/hifb-demo/include/hi_defines.h b/general/package/hifb-demo/include/hi_defines.h new file mode 100644 index 0000000000..4976d9d10e --- /dev/null +++ b/general/package/hifb-demo/include/hi_defines.h @@ -0,0 +1,230 @@ +/****************************************************************************** + Copyright (C), 2001-2011, Hisilicon Tech. Co., Ltd. +****************************************************************************** +File Name : hi_defines.h +Version : Initial Draft +Author : Hisilicon multimedia software group +Created : 2005/4/23 +Last Modified : +Description : The common data type defination +Function List : +History : +******************************************************************************/ +#ifndef __HI_DEFINES_H__ +#define __HI_DEFINES_H__ + +#ifdef __cplusplus +#if __cplusplus +extern "C"{ +#endif +#endif /* __cplusplus */ + +#define HI3511_V100 0x35110100 +#define HI3511_V110 0x35110110 +#define HI3520_V100 0x35200100 +#define HI3515_V100 0x35150100 +#define HI3516_V100 0x35160100 +#define HI3531_V100 0x35310100 +#define HI3532_V100 0x35320100 +#define HI3521_V100 0x35210100 +#define HI3520A_V100 0x3520A100 +#define HI3520D_V100 0x3520D100 +#define HI3518_V100 0x35180100 +#define HI3518A_V100 0x3518A100 +#define HI3518C_V100 0x3518C100 +#define HI3516C_V100 0x3516C100 +#define HI3518E_V100 0x3518E100 +#define HI35xx_Vxxx 0x35000000 + +#ifndef HICHIP + #define HICHIP HI3518_V100 +#endif + +#if HICHIP==HI3521_V100 + #define CHIP_NAME "Hi3521" + #define MPP_VER_PRIX "_MPP_V" +#elif HICHIP==HI3520A_V100 + #define CHIP_NAME "Hi3520A" + #define MPP_VER_PRIX "_MPP_V" +#elif HICHIP==HI3518_V100 + #define CHIP_NAME "Hi3518" + #define MPP_VER_PRIX "_MPP_V" +#elif HICHIP==HI35xx_Vxxx + #error HuHu, I am an dummy chip +#else + #error HICHIP define may be error +#endif + +#define LINE_LEN_BIT 5 +#define LINE_LEN (1<>= LINE_LEN_BIT; + end = addr + len*LINE_LEN; + + while(addr != end) + { + asm("mcr p15, 0, %0, c7, c6, 1"::"r"(addr)); + addr += LINE_LEN; + } + return; +} + +static inline void FlushDcache(unsigned long addr, unsigned long len) +{ + unsigned long end; + + //TODO: cacheË¢ÐÂÐèÒªÖØÐ´ + return ; + + addr &= LINE_BASE_MASK; + len >>= LINE_LEN_BIT; + end = addr + len*LINE_LEN; + + while(addr != end) + { + asm("mcr p15, 0, %0, c7, c10, 1"::"r"(addr)); + addr += LINE_LEN; + } + return; +} + +/* For Sys */ +#define DEFAULT_ALIGN 16 +#define MAX_MMZ_NAME_LEN 16 + +#define MAX_NODE_NUM 16 + +/* For VDA */ +#define VDA_MAX_NODE_NUM 32 +#define VDA_MAX_INTERNAL 256 +#define VDA_CHN_NUM_MAX 32 +#define VDA_MAX_WIDTH 960 +#define VDA_MAX_HEIGHT 576 + +/* For VENC */ +#define VENC_MAX_NAME_LEN 16 +#define VENC_MAX_CHN_NUM 64 +#define VENC_MAX_GRP_NUM 64 +#define H264E_MAX_WIDTH 1920 +#define H264E_MAX_HEIGHT 2048 +#define H264E_MIN_WIDTH 160 +#define H264E_MIN_HEIGHT 64 +#define JPEGE_MAX_WIDTH 8192 +#define JPEGE_MAX_HEIGHT 8192 +#define JPEGE_MIN_WIDTH 64 +#define JPEGE_MIN_HEIGHT 64 +#define VENC_MAX_ROI_NUM 8 /* ×î´óÖ§³Ö8¸öROIÇøÓò */ +#define H264E_MIN_HW_INDEX 0 +#define H264E_MAX_HW_INDEX 5 +#define H264E_MIN_VW_INDEX 0 +#define H264E_MAX_VW_INDEX 2 + +/* For VDEC, hi3518 not support */ +#define VDEC_MAX_CHN_NUM 0 + +/* For Region */ +#define RGN_HANDLE_MAX 1024 +#define OVERLAY_MAX_NUM 8 +#define COVEREX_MAX_NUM 16 +#define COVER_MAX_NUM 4 +#define OVERLAYEX_MAX_NUM 0 + +/* number of channle and device on video input unit of chip + * Note! VIU_MAX_CHN_NUM is NOT equal to VIU_MAX_DEV_NUM + * multiplied by VIU_MAX_CHN_NUM, because all VI devices + * can't work at mode of 4 channles at the same time. + */ +#define VIU_MAX_DEV_NUM 1 +#define VIU_MAX_WAY_NUM_PER_DEV 1 +#define VIU_MAX_CHN_NUM_PER_DEV 1 +#define VIU_MAX_PHYCHN_NUM 1 +#define VIU_EXT_CHN_START VIU_MAX_PHYCHN_NUM +#define VIU_MAX_EXT_CHN_NUM 16 +#define VIU_MAX_EXTCHN_BIND_PER_CHN 8 + +#define VIU_MAX_CHN_NUM (VIU_MAX_PHYCHN_NUM + VIU_MAX_EXT_CHN_NUM) + + +#define VIU_CHNID_DEV_FACTOR 2 + +/* 3518±¾²»Ö§³Ö¼¶Áª£¬ÕâÀïºê¶¨ÒåÕâЩÐÅÏ¢£¬Ö»ÊÇΪÁ˱àÒëͨ¹ý */ +#define VIU_MAX_CAS_CHN_NUM 2 +#define VIU_SUB_CHN_START 16 /* ¶¨Òå´ÎͨµÀÆðʼºê*/ +#define VIU_CAS_CHN_START 32 /* ¶¨Òå¼¶ÁªÍ¨µÀÆðʼºê*/ + +/* max number of VBI region*/ +#define VIU_MAX_VBI_NUM 2 +/* max length of one VBI region (by word)*/ +#define VIU_MAX_VBI_LEN 8 + +#define VO_MIN_CHN_WIDTH 32 /* channel minimal width */ +#define VO_MIN_CHN_HEIGHT 32 /* channel minimal height */ + +#define VO_MAX_ZOOM_RATIO 1000 /* max zoom ratio, 1000 means 100% scale */ + +#define VO_MAX_DEV_NUM 1 /* max dev num */ +#define VO_MAX_LAYER_NUM 1 /* max layer num */ +#define VO_MAX_CHN_NUM 32 /* mac chn num */ +#define PIP_MAX_CHN_NUM 0 +#define VHD_MAX_CHN_NUM 0 /* max VHD chn num */ + +#define VO_MAX_LAYER_IN_DEV 2 /* max layer num of each dev */ + +#define VO_CAS_MAX_PAT 128 /* cascade pattern max number */ +#define VO_CAS_MAX_POS_32RGN 32 /* cascade position max number */ +#define VO_CAS_MAX_POS_64RGN 64 /* cascade position max number */ + +#define VO_MAX_VIRT_DEV_NUM 4 /* max virtual dev num*/ +#define VO_VIRT_DEV_0 3 /* virtual display device 1 */ +#define VO_VIRT_DEV_1 4 /* virtual display device 2 */ +#define VO_VIRT_DEV_2 5 /* virtual display device 3 */ +#define VO_VIRT_DEV_3 6 /* virtual display device 4 */ + +#define VO_MAX_GFX_LAYER_PER_DEV 1 +#define VOU_GRAPHICS_LAYER_NUM 1 + +#define VO_MIN_TOLERATE 1 /* min play toleration 1ms */ +#define VO_MAX_TOLERATE 100000 /* max play toleration 100s */ + +#define AIO_MAX_CHN_NUM 2 +#define AENC_MAX_CHN_NUM 32 +#define ADEC_MAX_CHN_NUM 32 + +#define AI_DEV_MAX_NUM 1 +#define AO_DEV_MIN_NUM 0 +#define AO_DEV_MAX_NUM 1 +#define SIO_MAX_NUM 1 + + +#define VPSS_MAX_GRP_NUM 128 + +#define VPSS_MAX_PHY_CHN_NUM 2 +#define VPSS_MAX_EXT_CHN_NUM 5 +#define VPSS_MAX_CHN_NUM (VPSS_MAX_PHY_CHN_NUM + VPSS_MAX_EXT_CHN_NUM + 1) + +#define VPSS_BSTR_CHN 0 +#define VPSS_LSTR_CHN 1 +#define VPSS_BYPASS_CHN 2 + +/* For pciv, hi3518 not support */ +#define PCIV_MAX_CHN_NUM 0 /* max pciv channel number in each pciv device */ + +#define RC_MAD_HIST_SIZE 64 +#define RC_MSE_HIST_SIZE 128 +#define RC_MAX_BLINK_QP 35 + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* __cplusplus */ + +#endif /* __HI_DEFINES_H__ */ + diff --git a/general/package/hifb-demo/include/hi_errno.h b/general/package/hifb-demo/include/hi_errno.h new file mode 100644 index 0000000000..8ab3aa042a --- /dev/null +++ b/general/package/hifb-demo/include/hi_errno.h @@ -0,0 +1,131 @@ +/****************************************************************************** +Copyright (C), 2001-2011, Hisilicon Tech. Co., Ltd. +****************************************************************************** +File Name : hi_common.h +Version : Initial Draft +Author : Hi3511 MPP Team +Created : 2006/11/09 +Last Modified : +Description : define the format of error code +Function List : +History : + 1.Date : 2007/02/14 + Author : c42025 + Modification: Created file + + 2.Date : 2007/12/11 + Author : c42025 + Modification: add some MOD_ID for several modules + + 3.Date : 2008/02/03 + Author : c42025 + Modification: reoorder MOD_ID to cleanup modules at specified order + + 4.Date : 2008/03/01 + Author : c42025 + Modification: move LOG_ERRLEVEL_E to hi_debug.h, and add new definion + ERR_LEVLE_E, we should use this enumeration in our error code. + + 5.Date : 2008/04/30 + Author : c42025 + Modification: delete two error code "EN_ERR_NOCHN" and "EN_ERR_NODEV". + +******************************************************************************/ +#ifndef __HI_ERRNO_H__ +#define __HI_ERRNO_H__ + +#include "hi_debug.h" + +#ifdef __cplusplus +#if __cplusplus +extern "C"{ +#endif +#endif /* End of #ifdef __cplusplus */ + + +/* 1010 0000b + * VTOP use APPID from 0~31 + * so, hisilicon use APPID based on 32 + */ +#define HI_ERR_APPID (0x80000000L + 0x20000000L) + +typedef enum hiERR_LEVEL_E +{ + EN_ERR_LEVEL_DEBUG = 0, /* debug-level */ + EN_ERR_LEVEL_INFO, /* informational */ + EN_ERR_LEVEL_NOTICE, /* normal but significant condition */ + EN_ERR_LEVEL_WARNING, /* warning conditions */ + EN_ERR_LEVEL_ERROR, /* error conditions */ + EN_ERR_LEVEL_CRIT, /* critical conditions */ + EN_ERR_LEVEL_ALERT, /* action must be taken immediately */ + EN_ERR_LEVEL_FATAL, /* just for compatibility with previous version */ + EN_ERR_LEVEL_BUTT +}ERR_LEVEL_E; + + +/****************************************************************************** +|----------------------------------------------------------------| +| 1 | APP_ID | MOD_ID | ERR_LEVEL | ERR_ID | +|----------------------------------------------------------------| +|<--><--7bits----><----8bits---><--3bits---><------13bits------->| +******************************************************************************/ + +#define HI_DEF_ERR( module, level, errid) \ + ((HI_S32)( (HI_ERR_APPID) | ((module) << 16 ) | ((level)<<13) | (errid) )) + +/* NOTE! the following defined all common error code, +** all module must reserved 0~63 for their common error code +*/ +typedef enum hiEN_ERR_CODE_E +{ + EN_ERR_INVALID_DEVID = 1, /* invlalid device ID */ + EN_ERR_INVALID_CHNID = 2, /* invlalid channel ID */ + EN_ERR_ILLEGAL_PARAM = 3, /* at lease one parameter is illagal + * eg, an illegal enumeration value */ + EN_ERR_EXIST = 4, /* resource exists */ + EN_ERR_UNEXIST = 5, /* resource unexists */ + + EN_ERR_NULL_PTR = 6, /* using a NULL point */ + + EN_ERR_NOT_CONFIG = 7, /* try to enable or initialize system, device + ** or channel, before configing attribute */ + + EN_ERR_NOT_SUPPORT = 8, /* operation or type is not supported by NOW */ + EN_ERR_NOT_PERM = 9, /* operation is not permitted + ** eg, try to change static attribute */ + + EN_ERR_NOMEM = 12,/* failure caused by malloc memory */ + EN_ERR_NOBUF = 13,/* failure caused by malloc buffer */ + + EN_ERR_BUF_EMPTY = 14,/* no data in buffer */ + EN_ERR_BUF_FULL = 15,/* no buffer for new data */ + + EN_ERR_SYS_NOTREADY = 16,/* System is not ready,maybe not initialed or + ** loaded. Returning the error code when opening + ** a device file failed. */ + + EN_ERR_BADADDR = 17,/* bad address, + ** eg. used for copy_from_user & copy_to_user */ + + EN_ERR_BUSY = 18,/* resource is busy, + ** eg. destroy a venc chn without unregister it */ + + EN_ERR_BUTT = 63,/* maxium code, private error code of all modules + ** must be greater than it */ +}EN_ERR_CODE_E; + + +/* +** following is an example for defining error code of VDA module +** #define HI_ERR_MD_INVALID_CHNID HI_DEF_ERR(HI_ID_VDA, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID) +** +*/ + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* __cplusplus */ + +#endif /* __HI_ERRNO_H__ */ + diff --git a/general/package/hifb-demo/include/hi_io.h b/general/package/hifb-demo/include/hi_io.h new file mode 100644 index 0000000000..67b24396a0 --- /dev/null +++ b/general/package/hifb-demo/include/hi_io.h @@ -0,0 +1,50 @@ +#ifndef __HI_IO_H__ +#define __HI_IO_H__ + +#include "hi_type.h" + +#ifdef __cplusplus +extern "C" +{ +#endif /* __cplusplus */ + +/* user and kernel are different. */ +HI_U8 IO_READ8(HI_U32 u32Addr); +HI_S32 IO_WRITE8(HI_U32 u32Addr, HI_U32 u32Value); +HI_U16 IO_READ16(HI_U32 u32Addr); +HI_S32 IO_WRITE16(HI_U32 u32Addr, HI_U32 u32Value); +HI_U32 IO_READ32(HI_U32 u32Addr); +HI_S32 IO_WRITE32(HI_U32 u32Addr, HI_U32 u32Value); +HI_U32 ISP_Mmap(void); +HI_U32 ISP_Munmap(void); +HI_U32 ISP_GetExtRegAddr(void); + +#define REG_ACCESS_WIDTH 0 // 1: 16bit 2: 8bit +#define EXT_REG_BASE 0x10200 +#define ISP_REG_BASE_ADDR 0x205a0000 + +#define EXT_REG_BASE_ISP 0x8000 +#define EXT_REG_BASE_VIU 0x8400 +#define EXT_REG_BASE_VPP 0x8600 +#define EXT_REG_BASE_VEDU 0x8800 +#define EXT_REG_BASE_VOU 0x8A00 + +/* Dynamic bus access functions, 4 byte align access */ +//TODO: allocate dev addr (such as ISP_REG_BASE_ADDR) according to devId. +#define __IO_CALC_ADDRESS_DYNAMIC(BASE, OFFSET) ((HI_U32)(((BASE >= EXT_REG_BASE)? 0 : ISP_REG_BASE_ADDR) + ((((BASE >= EXT_REG_BASE)? (BASE - EXT_REG_BASE) : BASE) + OFFSET)<y; -1 if x= 0 ? (x) : (-(x)) ) +#define SIGN(x) ( (x) >= 0 ? 1 : -1 ) +#define CMP(x,y) (((x) == (y)) ? 0 : (((x) > (y)) ? 1 : -1)) + +/****************************************************************************** +** MAX2(x,y) maximum of x and y +** MIN2(x,y) minimum of x and y +** MAX3(x,y,z) maximum of x, y and z +** MIN3(x,y,z) minimun of x, y and z +** MEDIAN(x,y,z) median of x,y,z +** MEAN2(x,y) mean of x,y +******************************************************************************/ +#define MAX2(x,y) ( (x)>(y) ? (x):(y) ) +#define MIN2(x,y) ( (x)<(y) ? (x):(y) ) +#define MAX3(x,y,z) ( (x)>(y) ? MAX2(x,z) : MAX2(y,z) ) +#define MIN3(x,y,z) ( (x)<(y) ? MIN2(x,z) : MIN2(y,z) ) +#define MEDIAN(x,y,z) (((x)+(y)+(z) - MAX3(x,y,z)) - MIN3(x,y,z) ) +#define MEAN2(x,y) (((x)+(y)) >> 1 ) + +/****************************************************************************** +** CLIP3(x,min,max) clip x within [min,max] +** WRAP_MAX(x,max,min) wrap to min if x equal max +** WRAP_MIN(x,min,max) wrap to max if x equal min +** VALUE_BETWEEN(x,min.max) True if x is between [min,max] inclusively. +******************************************************************************/ +#define CLIP3(x,min,max) ( (x)< (min) ? (min) : ((x)>(max)?(max):(x)) ) +#define WRAP_MAX(x,max,min) ( (x)>=(max) ? (min) : (x) ) +#define WRAP_MIN(x,min,max) ( (x)<=(min) ? (max) : (x) ) +#define VALUE_BETWEEN(x,min,max) (((x)>=(min)) && ((x) <= (max))) + +/****************************************************************************** +** MULTI_OF_2_POWER(x,a) whether x is multiple of a(a must be power of 2) +** CEILING_2_POWER(x,a) ceiling x to multiple of a(a must be power of 2) +** FLOOR_2_POWER(x,a) floor x to multiple of a(a must be power of 2) +** HIALIGN(x, a) align x to multiple of a +** +** Example: +** CEILING_2_POWER(5,4) = 8 +** FLOOR_2_POWER(5,4) = 4 +******************************************************************************/ +#define MULTI_OF_2_POWER(x,a) (!((x) & ((a) - 1) ) ) +#define CEILING_2_POWER(x,a) ( ((x) + ((a) - 1) ) & ( ~((a) - 1) ) ) +#define FLOOR_2_POWER(x,a) ( (x) & (~((a) - 1) ) ) +#define HIALIGN(x, a) ((a) * (((x) + (a) - 1) / (a))) +#define HICEILING(x, a) (((x)+(a)-1)/(a)) + +/****************************************************************************** +** Get the span between two unsinged number, such as +** SPAN(HI_U32, 100, 200) is 200 - 100 = 100 +** SPAN(HI_U32, 200, 100) is 0xFFFFFFFF - 200 + 100 +** SPAN(HI_U64, 200, 100) is 0xFFFFFFFFFFFFFFFF - 200 + 100 +******************************************************************************/ +#define SPAN(type, begin, end)\ +({ \ + type b = (begin); \ + type e = (end); \ + (type)((b >= e) ? (b - e) : (b + ((~((type)0))-e))); \ +}) + +/****************************************************************************** +** ENDIAN32(x,y) little endian <---> big endian +** IS_LITTLE_END() whether the system is little end mode +******************************************************************************/ +#define ENDIAN32( x ) \ + ( ( (x) << 24 ) | \ + ( ( (x) & 0x0000ff00 ) << 8 ) | \ + ( ( (x) & 0x00ff0000 ) >> 8 ) | \ + ( ( (x) >> 24 ) & 0x000000ff ) ) + +__inline static HI_BOOL IS_LITTLE_END(void) +{ + union unEND_TEST_U + { + HI_CHAR cTest[4]; + HI_U32 u32Test; + } unEndTest; + + unEndTest.cTest[0] = 0x01; + unEndTest.cTest[1] = 0x02; + unEndTest.cTest[2] = 0x03; + unEndTest.cTest[3] = 0x04; + + return (unEndTest.u32Test > 0x01020304) ? (HI_TRUE) : (HI_FALSE); +} + + +/****************************************************************************** +** FRACTION32(de,nu) fraction: nu(minator) / de(nominator). +** NUMERATOR32(x) of x(x is fraction) +** DENOMINATOR32(x) Denominator of x(x is fraction) + +** represent fraction in 32 bit. LSB 16 is numerator, MSB 16 is denominator +** It is integer if denominator is 0. +******************************************************************************/ +#define FRACTION32(de,nu) ( ((de) << 16) | (nu) ) +#define NUMERATOR32(x) ( (x) & 0xffff) +#define DENOMINATOR32(x) ( (x) >> 16 ) + +/****************************************************************************** +** RGB(r,g,b) assemble the r,g,b to 24bit color +** RGB_R(c) get RED from 24bit color +** RGB_G(c) get GREEN from 24bit color +** RGB_B(c) get BLUE from 24bit color +******************************************************************************/ +#define RGB(r,g,b) ((((r) & 0xff) << 16) | (((g) & 0xff) << 8) | ((b) & 0xff)) +#define RGB_R(c) ( ((c) & 0xff0000) >> 16) +#define RGB_G(c) ( ((c) & 0xff00) >> 8) +#define RGB_B(c) ( (c) & 0xff) + +/****************************************************************************** +** YUV(y,u,v) assemble the y,u,v to 24bit color +** YUV_Y(c) get Y from 24bit color +** YUV_U(c) get U from 24bit color +** YUV_V(c) get V from 24bit color +******************************************************************************/ +#define YUV(y,u,v) ((((y) & 0xff) << 16) | (((u) & 0xff) << 8) | ((v) & 0xff)) +#define YUV_Y(c) ( ((c) & 0xff0000) >> 16) +#define YUV_U(c) ( ((c) & 0xff00) >> 8) +#define YUV_V(c) ( (c) & 0xff) + +/****************************************************************************** +** Rgb2Yc(r, g, b, *y, *u, *u) convert r,g,b to y,u,v +** Rgb2Yuv(rgb, *yuv) convert rgb to yuv +******************************************************************************/ +__inline static HI_VOID Rgb2Yc(HI_U8 r, HI_U8 g, HI_U8 b, HI_U8 * py, HI_U8 * pcb, HI_U8 * pcr) +{ + /* Y */ + *py = (HI_U8)(((r*66+g*129+b*25) >> 8) + 16); + + /* Cb */ + *pcb = (HI_U8)((((b*112-r*38)-g*74) >> 8) + 128); + + /* Cr */ + *pcr = (HI_U8)((((r*112-g*94)-b*18) >> 8) + 128); +} + +__inline static HI_U32 Rgb2Yuv(HI_U32 u32Rgb) +{ + HI_U8 y,u,v; + + Rgb2Yc(RGB_R(u32Rgb), RGB_G(u32Rgb), RGB_B(u32Rgb), &y, &u, &v); + + return YUV(y,u,v); +} + +/****************************************************************************** +** GetYCFromRGB(rgb, *y, *cbcr) convert rgb to yyyy, uvuv, +******************************************************************************/ +__inline static HI_VOID GetYCFromRGB(HI_U32 rgb, HI_U32 * pY, HI_U32 * pC) +{ + HI_U8 y, cb, cr; + HI_U32 color_y, color_c, tmp; + + Rgb2Yc(RGB_R(rgb), RGB_G(rgb), RGB_B(rgb), &y, &cb, &cr); + + tmp = y & 0xFF; + color_y = (tmp<<24) + (tmp<<16) + (tmp<<8) + tmp; + + tmp = cb & 0xFF; + color_c = (tmp<<24) + (tmp<<8); + + tmp = cr & 0xFF; + color_c = color_c + (tmp<<16) + tmp; + + *pY = color_y; + *pC = color_c; +} + +/******************************************************************************* +** FpsControl Useing Sample: +** FPS_CTRL_S g_stFpsCtrl; +** +** Take 12 frame uniform in 25. +** InitFps(&g_stFpsCtrl, 25, 12); +** +** { +** if(FpsControl(&g_stFpsCtrl)) printf("Yes, this frmae should be token"); +** } +** +*******************************************************************************/ +typedef struct hiFPS_CTRL_S +{ + HI_U32 u32Ffps; /* Full frame rate */ + HI_U32 u32Tfps; /* Target frame rate */ + HI_U32 u32FrmKey; /* update key frame */ +} FPS_CTRL_S; + +__inline static HI_VOID InitFps(FPS_CTRL_S *pFrmCtrl, HI_U32 u32FullFps, + HI_U32 u32TagFps) +{ + pFrmCtrl->u32Ffps = u32FullFps; + pFrmCtrl->u32Tfps = u32TagFps; + pFrmCtrl->u32FrmKey = 0; +} + +__inline static HI_BOOL FpsControl(FPS_CTRL_S *pFrmCtrl) +{ + HI_BOOL bReturn = HI_FALSE; + + pFrmCtrl->u32FrmKey += pFrmCtrl->u32Tfps; + if (pFrmCtrl->u32FrmKey >= pFrmCtrl->u32Ffps) + { + pFrmCtrl->u32FrmKey -= pFrmCtrl->u32Ffps; + bReturn = HI_TRUE; + } + + return bReturn; +} + +/******************************************************************************* +** GetSysTimeBySec +** GetSysTimeByUsec +*******************************************************************************/ +#ifdef __KERNEL__ + #include +#else + #include +#endif +__inline static HI_U32 GetSysTimeBySec(void) +{ + struct timeval stTime; + #ifdef __KERNEL__ + do_gettimeofday(&stTime); + #else + gettimeofday(&stTime, NULL); + #endif + return stTime.tv_sec; +} + +__inline static HI_U64 GetSysTimeByUsec(void) +{ + struct timeval stTime; + #ifdef __KERNEL__ + do_gettimeofday(&stTime); + #else + gettimeofday(&stTime, NULL); + #endif + return (stTime.tv_sec * 1000000LLU) + stTime.tv_usec; +} + + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* __cplusplus */ + + +#endif /* __HI_MATH_H__ */ + diff --git a/general/package/hifb-demo/include/hi_mem.h b/general/package/hifb-demo/include/hi_mem.h new file mode 100644 index 0000000000..a305635da0 --- /dev/null +++ b/general/package/hifb-demo/include/hi_mem.h @@ -0,0 +1,33 @@ +#ifndef __HI_MEM_H__ +#define __HI_MEM_H__ + + +#ifdef __cplusplus +#if __cplusplus +extern "C"{ +#endif +#endif /* __cplusplus */ + +void *memcpy1(void *dest, const void *src, size_t n); +void *memcpy_back(void *dest, const void *src, size_t n); +void *memset1(void *s, int c, size_t n); +int memcmp1(const void *s1, const void *s2, size_t n); +char *strcpy1(char *dest, const char *src); +int strcmp1(const char *s1, const char *s2); +size_t strlen1(const char *s); + +#define memcpy memcpy_back +#define memset memset1 +#define memcmp memcmp1 +#define strcpy strcpy1 +#define strcmp strcmp1 +#define strlen strlen1 + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* __cplusplus */ + +#endif /* __HI_MEM_H__ */ + diff --git a/general/package/hifb-demo/include/hi_type.h b/general/package/hifb-demo/include/hi_type.h new file mode 100644 index 0000000000..599f754081 --- /dev/null +++ b/general/package/hifb-demo/include/hi_type.h @@ -0,0 +1,87 @@ +/****************************************************************************** + Copyright (C), 2001-2011, Hisilicon Tech. Co., Ltd. +****************************************************************************** +File Name : hi_type.h +Version : Initial Draft +Author : Hisilicon multimedia software group +Created : 2005/4/23 +Last Modified : +Description : The common data type defination +Function List : +History : +1.Date : 2008/06/28 + Author : c42025 + Modification: modified definition for HI_S8 + +2.Date : 2008/10/31 + Author : z44949 + Modification: Translate the chinese comment + +3.Date : 2010/11/03 + Author : z44949 + Modification: Remove some unnecessary typedef + +4.Date : 2011/01/05 + Author : p00123320 + Modification: Modify definition of HI_VOID, avoid C++ compiler warning. + + +******************************************************************************/ +#ifndef __HI_TYPE_H__ +#define __HI_TYPE_H__ + + +#ifdef __cplusplus +#if __cplusplus +extern "C"{ +#endif +#endif /* __cplusplus */ + +/*----------------------------------------------* + * The common data type, will be used in the whole project.* + *----------------------------------------------*/ + +typedef unsigned char HI_U8; +typedef unsigned short HI_U16; +typedef unsigned int HI_U32; + +typedef signed char HI_S8; +typedef short HI_S16; +typedef int HI_S32; + +#ifndef _M_IX86 + typedef unsigned long long HI_U64; + typedef long long HI_S64; +#else + typedef __int64 HI_U64; + typedef __int64 HI_S64; +#endif + +typedef char HI_CHAR; +#define HI_VOID void + +/*----------------------------------------------* + * const defination * + *----------------------------------------------*/ +typedef enum { + HI_FALSE = 0, + HI_TRUE = 1, +} HI_BOOL; + +#ifndef NULL + #define NULL 0L +#endif + +#define HI_NULL 0L +#define HI_SUCCESS 0 +#define HI_FAILURE (-1) + + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* __cplusplus */ + +#endif /* __HI_TYPE_H__ */ + diff --git a/general/package/hifb-demo/include/hifb.h b/general/package/hifb-demo/include/hifb.h new file mode 100644 index 0000000000..db3ccca51a --- /dev/null +++ b/general/package/hifb-demo/include/hifb.h @@ -0,0 +1,325 @@ +/****************************************************************************** + + Copyright (C), 2001-2011, Hisilicon Tech. Co., Ltd. + + ****************************************************************************** + File Name : hifb.h + Version : Initial Draft + Author : Hisilicon multimedia software group + Created : + Description : + History : + 1.Date : 2009/03/12 + Author : + Modification: Created file +******************************************************************************/ + + +#ifndef __HIFB_H__ +#define __HIFB_H__ + +#ifdef __cplusplus +#if __cplusplus +extern "C"{ +#endif +#endif /* __cplusplus */ + +#include "hi_type.h" +#include +/*************************** Structure Definition ****************************/ + +#define IOC_TYPE_HIFB 'F' +/** To obtain the colorkey of an overlay layer */ +#define FBIOGET_COLORKEY_HIFB _IOR(IOC_TYPE_HIFB, 90, HIFB_COLORKEY_S) +/** To set the colorkey of an overlay layer */ +#define FBIOPUT_COLORKEY_HIFB _IOW(IOC_TYPE_HIFB, 91, HIFB_COLORKEY_S) +/** To get the alpha of an overlay layer */ +#define FBIOGET_ALPHA_HIFB _IOR(IOC_TYPE_HIFB, 92, HIFB_ALPHA_S) +/** To set the alpha of an overlay layer */ +#define FBIOPUT_ALPHA_HIFB _IOW(IOC_TYPE_HIFB, 93, HIFB_ALPHA_S) +/** To get the origin of an overlay layer on the screen */ +#define FBIOGET_SCREEN_ORIGIN_HIFB _IOR(IOC_TYPE_HIFB, 94, HIFB_POINT_S) +/** To set the origin of an overlay layer on the screen */ +#define FBIOPUT_SCREEN_ORIGIN_HIFB _IOW(IOC_TYPE_HIFB, 95, HIFB_POINT_S) +/** To obtain the anti-flicker setting of an overlay layer */ +#define FBIOGET_DEFLICKER_HIFB _IOR(IOC_TYPE_HIFB, 98, HIFB_DEFLICKER_S) +/** To set the anti-flicker setting of an overlay layer */ +#define FBIOPUT_DEFLICKER_HIFB _IOW(IOC_TYPE_HIFB, 99, HIFB_DEFLICKER_S) +/** To wait for the vertical blanking region of an overlay layer */ +#define FBIOGET_VBLANK_HIFB _IO(IOC_TYPE_HIFB, 100) +/** To set the display state of an overlay layer */ +#define FBIOPUT_SHOW_HIFB _IOW(IOC_TYPE_HIFB, 101, HI_BOOL) +/** To obtain the display state of an overlay layer */ +#define FBIOGET_SHOW_HIFB _IOR(IOC_TYPE_HIFB, 102, HI_BOOL) +/** to obtain the capability of an overlay layer */ +#define FBIOGET_CAPABILITY_HIFB _IOR(IOC_TYPE_HIFB, 103, HIFB_CAPABILITY_S) +/** set the screen output size */ +#define FBIOPUT_SCREENSIZE _IOW(IOC_TYPE_HIFB, 130, HIFB_SIZE_S*) +/** get the screen output size */ +#define FBIOGET_SCREENSIZE _IOR(IOC_TYPE_HIFB, 131, HIFB_SIZE_S*) + +/** To display multiple surfaces in turn and set the alpha and colorkey attributes */ +#define FBIOFLIP_SURFACE _IOW(IOC_TYPE_HIFB, 132, HIFB_SURFACEEX_S) + +/**To set the compression function status of an overlay layer*/ +#define FBIOPUT_COMPRESSION_HIFB _IOW(IOC_TYPE_HIFB, 133, HI_BOOL) +/**To obtain the compression function status of an overlay layer*/ +#define FBIOGET_COMPRESSION_HIFB _IOR(IOC_TYPE_HIFB, 134, HI_BOOL) + + +typedef struct +{ + HI_U32 u32Width; + HI_U32 u32Height; +}HIFB_SIZE_S; + +static inline HI_U8 hifb_rgb(const struct fb_bitfield* pBit, HI_S32 color) +{ + return ((HI_U8)((((HI_U32)color)>>pBit->offset) << (8-pBit->length)) + + ((HI_U8)(((HI_U32)(color)>>pBit->offset) << (8-pBit->length)) >> pBit->length)); +} + +static inline HI_S32 hifb_color2key(const struct fb_var_screeninfo* pVar, HI_S32 color) +{ + if (pVar->bits_per_pixel <= 8) + { + return color; + } + else + { + HI_U8 r, g, b; + r = hifb_rgb(&pVar->red, color); + g = hifb_rgb(&pVar->green, color); + b = hifb_rgb(&pVar->blue, color); + return (r<<16) + (g<<8) + b; + } +} + +typedef struct +{ + HI_BOOL bKeyEnable; /* colorkey enable flag */ + HI_U32 u32Key; /* colorkey value, maybe contains alpha */ +}HIFB_COLORKEY_S; + +typedef struct +{ + HI_S32 x, y; + HI_S32 w, h; +} HIFB_RECT; + +typedef struct +{ + HI_S32 s32XPos; /**< horizontal position */ + HI_S32 s32YPos; /**< vertical position */ +}HIFB_POINT_S; + +typedef struct hiHIFB_DEFLICKER_S +{ + HI_U32 u32HDfLevel; /**< horizontal deflicker level */ + HI_U32 u32VDfLevel; /**< vertical deflicker level */ + HI_U8 *pu8HDfCoef; /**< horizontal deflicker coefficient */ + HI_U8 *pu8VDfCoef; /**< vertical deflicker coefficient */ +}HIFB_DEFLICKER_S; + +/** Alpha info */ +typedef struct +{ + HI_BOOL bAlphaEnable; /**< alpha enable flag */ + HI_BOOL bAlphaChannel; /**< alpha channel enable flag */ + HI_U8 u8Alpha0; /**< alpha0 value, used in ARGB1555 */ + HI_U8 u8Alpha1; /**< alpha1 value, used in ARGB1555 */ + HI_U8 u8GlobalAlpha; /**< global alpha value */ + HI_U8 u8Reserved; +}HIFB_ALPHA_S; + +typedef enum +{ + HIFB_FMT_RGB565 = 0, + HIFB_FMT_RGB888, /**< RGB888 24bpp */ + + HIFB_FMT_KRGB444, /**< RGB444 16bpp */ + HIFB_FMT_KRGB555, /**< RGB555 16bpp */ + HIFB_FMT_KRGB888, /**< RGB888 32bpp */ + + HIFB_FMT_ARGB4444, /**< ARGB4444 */ + HIFB_FMT_ARGB1555, /**< ARGB1555 */ + HIFB_FMT_ARGB8888, /**< ARGB8888 */ + HIFB_FMT_ARGB8565, /**< ARGB8565 */ + + HIFB_FMT_RGBA4444, /**< ARGB4444 */ + HIFB_FMT_RGBA5551, /**< RGBA5551 */ + HIFB_FMT_RGBA5658, /**< RGBA5658 */ + HIFB_FMT_RGBA8888, /**< RGBA8888 */ + + HIFB_FMT_BGR565, /**< BGR565 */ + HIFB_FMT_BGR888, /**< BGR888 */ + HIFB_FMT_ABGR4444, /**< ABGR4444 */ + HIFB_FMT_ABGR1555, /**< ABGR1555 */ + HIFB_FMT_ABGR8888, /**< ABGR8888 */ + HIFB_FMT_ABGR8565, /**< ABGR8565 */ + HIFB_FMT_KBGR444, /**< BGR444 16bpp */ + HIFB_FMT_KBGR555, /**< BGR555 16bpp */ + HIFB_FMT_KBGR888, /**< BGR888 32bpp */ + + HIFB_FMT_1BPP, /**< clut1 */ + HIFB_FMT_2BPP, /**< clut2 */ + HIFB_FMT_4BPP, /**< clut4 */ + HIFB_FMT_8BPP, /**< clut8 */ + HIFB_FMT_ACLUT44, /**< AClUT44*/ + HIFB_FMT_ACLUT88, /**< ACLUT88 */ + HIFB_FMT_PUYVY, /**< UYVY */ + HIFB_FMT_PYUYV, /**< YUYV */ + HIFB_FMT_PYVYU, /**< YVYU */ + HIFB_FMT_YUV888, /**< YUV888 */ + HIFB_FMT_AYUV8888, /**< AYUV8888 */ + HIFB_FMT_YUVA8888, /**< YUVA8888 */ + HIFB_FMT_BUTT +}HIFB_COLOR_FMT_E; + +typedef struct +{ + HI_BOOL bKeyRgb; + HI_BOOL bKeyAlpha; /**< whether support colorkey alpha */ + HI_BOOL bGlobalAlpha; /**< whether support global alpha */ + HI_BOOL bCmap; /**< whether support color map */ + HI_BOOL bHasCmapReg; /**< whether has color map register*/ + HI_BOOL bColFmt[HIFB_FMT_BUTT]; /**< support which color format */ + HI_BOOL bVoScale; /**< support vo scale*/ + HI_BOOL bLayerSupported; /**< whether support a certain layer, for example:x5 HD support HIFB_SD_0 not support HIFB_SD_1*/ + HI_U32 u32MaxWidth; /**< the max pixels per line */ + HI_U32 u32MaxHeight; /**< the max lines */ + HI_U32 u32MinWidth; /**< the min pixels per line */ + HI_U32 u32MinHeight; /**< the min lines */ + HI_U32 u32VDefLevel; /**< vertical deflicker level, 0 means vertical deflicker is unsupported */ + HI_U32 u32HDefLevel; /**< horizontal deflicker level, 0 means horizontal deflicker is unsupported */ + HI_BOOL bDcmp; + HI_BOOL bPreMul; +}HIFB_CAPABILITY_S; + +/*refresh mode*/ +typedef enum +{ + HIFB_LAYER_BUF_DOUBLE = 0x0, /**< 2 display buf in fb */ + HIFB_LAYER_BUF_ONE = 0x1, /**< 1 display buf in fb */ + HIFB_LAYER_BUF_NONE = 0x2, /**< no display buf in fb,the buf user refreshed will be directly set to VO*/ + HIFB_LAYER_BUF_DOUBLE_IMMEDIATE=0x3, /**< 2 display buf in fb, each refresh will be displayed*/ + HIFB_LAYER_BUF_BUTT +} HIFB_LAYER_BUF_E; + +/* surface info */ +typedef struct +{ + HI_U32 u32PhyAddr; /**< start physical address */ + HI_U32 u32Width; /**< width pixels */ + HI_U32 u32Height; /**< height pixels */ + HI_U32 u32Pitch; /**< line pixels */ + HIFB_COLOR_FMT_E enFmt; /**< color format */ +}HIFB_SURFACE_S; + +typedef struct +{ + HI_U32 u32PhyAddr; + HIFB_ALPHA_S stAlpha; + HIFB_COLORKEY_S stColorkey; +}HIFB_SURFACEEX_S; + +/* refresh surface info */ +typedef struct +{ + HIFB_SURFACE_S stCanvas; + HIFB_RECT UpdateRect; /* refresh region*/ +}HIFB_BUFFER_S; + +/* cursor info */ +typedef struct +{ + HIFB_SURFACE_S stCursor; + HIFB_POINT_S stHotPos; +} HIFB_CURSOR_S; + +/* crusor handle */ +/* Attention:surface in cursor will be released by user*/ +#define FBIOPUT_CURSOR_INFO _IOW(IOC_TYPE_HIFB, 104, HIFB_CURSOR_S *) +#define FBIOGET_CURSOR_INFO _IOW(IOC_TYPE_HIFB, 105, HIFB_CURSOR_S *) + +#define FBIOPUT_CURSOR_STATE _IOW(IOC_TYPE_HIFB, 106, HI_BOOL *) +#define FBIOGET_CURSOR_STATE _IOW(IOC_TYPE_HIFB, 107, HI_BOOL *) + +#define FBIOPUT_CURSOR_POS _IOW(IOC_TYPE_HIFB, 108, HIFB_POINT_S *) +#define FBIOGET_CURSOR_POS _IOR(IOC_TYPE_HIFB, 109, HIFB_POINT_S *) + +#define FBIOPUT_CURSOR_COLORKEY _IOR(IOC_TYPE_HIFB, 110, HIFB_COLORKEY_S *) +#define FBIOGET_CURSOR_COLORKEY _IOW(IOC_TYPE_HIFB, 111, HIFB_COLORKEY_S *) +#define FBIOPUT_CURSOR_ALPHA _IOR(IOC_TYPE_HIFB, 112, HIFB_ALPHA_S *) +#define FBIOGET_CURSOR_ALPHA _IOW(IOC_TYPE_HIFB, 113, HIFB_ALPHA_S *) + +/** cursor will be separated from attached layer automatically if you attach cursor to another layer,that means +cursor can be attached to only one layer at any time*/ +#define FBIOPUT_CURSOR_ATTCHCURSOR _IOW(IOC_TYPE_HIFB, 114, HI_U32 *) +#define FBIOPUT_CURSOR_DETACHCURSOR _IOW(IOC_TYPE_HIFB, 115, HI_U32 *) + +/**antiflicker level*/ +/**Auto means fb will choose a appropriate antiflicker level automatically according to the color info of map*/ +typedef enum +{ + HIFB_LAYER_ANTIFLICKER_NONE = 0x0, /**< no antiflicker*/ + HIFB_LAYER_ANTIFLICKER_LOW = 0x1, /**< low level*/ + HIFB_LAYER_ANTIFLICKER_MIDDLE = 0x2,/**< middle level*/ + HIFB_LAYER_ANTIFLICKER_HIGH = 0x3, /**< high level*/ + HIFB_LAYER_ANTIFLICKER_AUTO = 0x4, /**< auto*/ + HIFB_LAYER_ANTIFLICKER_BUTT +}HIFB_LAYER_ANTIFLICKER_LEVEL_E; + +/*layer info maskbit*/ +typedef enum +{ + HIFB_LAYERMASK_BUFMODE = 0x1, /**< BUFMODE bitmask */ + HIFB_LAYERMASK_ANTIFLICKER_MODE = 0x2, /**< ANTIFLICKER_MODE bitmask */ + HIFB_LAYERMASK_POS = 0x4, /**< the position bitmask */ + HIFB_LAYERMASK_CANVASSIZE = 0x8, /**< canvassize bitmask */ + HIFB_LAYERMASK_DISPSIZE = 0x10, /**< displaysize bitmask */ + HIFB_LAYERMASK_SCREENSIZE = 0x20, /**< screensize bitmask */ + HIFB_LAYERMASK_BMUL = 0x40, /**< pre-mult bitmask */ + HIFB_LAYERMASK_BUTT +}HIFB_LAYER_INFO_MASKBIT; + +/**layer info*/ +typedef struct +{ + HIFB_LAYER_BUF_E BufMode; + HIFB_LAYER_ANTIFLICKER_LEVEL_E eAntiflickerLevel; + HI_S32 s32XPos; /**< the x pos of origion point in screen */ + HI_S32 s32YPos; /**< the y pos of origion point in screen */ + HI_S32 u32CanvasWidth; /**< the width of canvas buffer */ + HI_S32 u32CanvasHeight; /**< the height of canvas buffer */ + HI_U32 u32DisplayWidth; /**< the width of display buf in fb.for 0 buf ,there is no display buf in fb, so it's effectless*/ + HI_U32 u32DisplayHeight; /**< the height of display buf in fb. */ + HI_U32 u32ScreenWidth; /**< the width of screen */ + HI_U32 u32ScreenHeight; /**< the height of screen */ + HI_BOOL bPreMul; /**< The data drawed in buf is premul data or not*/ + HI_U32 u32Mask; /**< param modify mask bit*/ +}HIFB_LAYER_INFO_S; + +/** To set the layer information */ +#define FBIOPUT_LAYER_INFO _IOW(IOC_TYPE_HIFB, 120, HIFB_LAYER_INFO_S*) +/** To get the layer information */ +#define FBIOGET_LAYER_INFO _IOR(IOC_TYPE_HIFB, 121, HIFB_LAYER_INFO_S*) +/** To get canvas buf */ +#define FBIOGET_CANVAS_BUFFER _IOR(IOC_TYPE_HIFB, 123, HIFB_BUFFER_S*) +/** To refresh the displayed contents in extended mode */ +#define FBIO_REFRESH _IOW(IOC_TYPE_HIFB, 124, HIFB_BUFFER_S*) + +/**sync refresh*/ +#define FBIO_WAITFOR_FREFRESH_DONE _IO(IOC_TYPE_HIFB, 125) + + + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* __cplusplus */ + + +#endif /* __HIFB_H__ */ + diff --git a/general/package/hifb-demo/include/list.h b/general/package/hifb-demo/include/list.h new file mode 100644 index 0000000000..8bf3653916 --- /dev/null +++ b/general/package/hifb-demo/include/list.h @@ -0,0 +1,149 @@ +/* + * Copyright (c) HighPoint Technologies, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD: src/sys/dev/hptrr/list.h,v 1.2.2.1.4.1 2010/06/14 02:09:06 kensmith Exp $ + */ +/* + * $Id: list.h,v 1.6 2006/10/31 06:25:28 gmm Exp $ + * Copyright (C) 2004-2005 HighPoint Technologies, Inc. All rights reserved. + */ +#ifndef _HPT_LIST_H_ +#define _HPT_LIST_H_ + +#ifndef _LINUX_LIST_H + +#ifndef HPT_INLINE +#define HPT_INLINE __inline +#endif + +typedef unsigned long HPT_UPTR; + +struct list_head { + struct list_head *next, *prev; +}; + +#define LIST_HEAD_INIT(name) { &(name), &(name) } + +#define INIT_LIST_HEAD(ptr) do { (ptr)->next = (ptr); (ptr)->prev = (ptr); } while (0) + +static HPT_INLINE void __list_add(struct list_head * _new, struct list_head * prev, struct list_head * next) +{ + next->prev = _new; + _new->next = next; + _new->prev = prev; + prev->next = _new; +} + +static HPT_INLINE void list_add(struct list_head *_new, struct list_head *head) +{ + __list_add(_new, head, head->next); +} + +static HPT_INLINE void list_add_tail(struct list_head *_new, struct list_head *head) +{ + __list_add(_new, head->prev, head); +} + +static HPT_INLINE void __list_del(struct list_head * prev, struct list_head * next) +{ + next->prev = prev; + prev->next = next; +} + +static HPT_INLINE void list_del(struct list_head *entry) +{ + __list_del(entry->prev, entry->next); +} + +static HPT_INLINE void list_del_init(struct list_head *entry) +{ + __list_del(entry->prev, entry->next); + INIT_LIST_HEAD(entry); +} + +static inline void list_move(struct list_head *list, struct list_head *head) +{ + __list_del(list->prev, list->next); + list_add(list, head); +} + +static inline void list_move_tail(struct list_head *list, + struct list_head *head) +{ + __list_del(list->prev, list->next); + list_add_tail(list, head); +} + +static HPT_INLINE int list_empty(struct list_head *head) +{ + return head->next == head; +} + +static HPT_INLINE void __list_splice(struct list_head *list, + struct list_head *head) +{ + struct list_head *first = list->next; + struct list_head *last = list->prev; + struct list_head *at = head->next; + + first->prev = head; + head->next = first; + + last->next = at; + at->prev = last; +} + +static HPT_INLINE void list_splice(struct list_head *list, struct list_head *head) +{ + if (!list_empty(list)) + __list_splice(list, head); +} + +static HPT_INLINE void list_splice_init(struct list_head *list, struct list_head *head) +{ + if (!list_empty(list)) { + __list_splice(list, head); + INIT_LIST_HEAD(list); + } +} + +/*#define list_entry(ptr, type, member) \ + ((type *)((char *)(ptr)-(HPT_UPTR)(&((type *)0)->member))) */ +#define list_entry(ptr, type, member) \ + ((type *)((unsigned long)(ptr)-((unsigned long)(&((type *)1)->member) - 1))) + +#define list_for_each(pos, head) \ + for (pos = (head)->next; pos != (head); pos = pos->next) + +#define list_for_each_safe(pos, n, head) \ + for (pos = (head)->next, n = pos->next; pos != (head); \ + pos = n, n = pos->next) + +#define get_first_item(attached, type, member) \ + ((type *)((char *)((attached)->next)-(HPT_UPTR)(&((type *)0)->member))) + +#endif + +#endif diff --git a/general/package/hifb-demo/include/mpi_sys.h b/general/package/hifb-demo/include/mpi_sys.h new file mode 100644 index 0000000000..98b0df5bec --- /dev/null +++ b/general/package/hifb-demo/include/mpi_sys.h @@ -0,0 +1,116 @@ +/****************************************************************************** + + Copyright (C), 2001-2011, Hisilicon Tech. Co., Ltd. + + ****************************************************************************** + File Name : mpi_sys.h + Version : Initial Draft + Author : Hisilicon multimedia software group + Created : 2007/1/31 + Description : + History : + 1.Date : 2006/1/31 + Author : c42025 + Modification: Created file + + 2.Date : 2008/03/03 + Author : c42025 + Modification: add a new funtion "HI_MPI_SYS_GetVersion" + +******************************************************************************/ + +#include "hi_type.h" +#include "hi_common.h" +#include "hi_comm_sys.h" + +#ifndef __MPI_SYS_H__ +#define __MPI_SYS_H__ + +/******************************************/ +#ifdef __cplusplus +#if __cplusplus +extern "C" +{ +#endif +#endif /* __cplusplus */ +/******************************************/ + +HI_S32 HI_MPI_SYS_Init(); +HI_S32 HI_MPI_SYS_Exit(); + +HI_S32 HI_MPI_SYS_SetConf(const MPP_SYS_CONF_S *pstSysConf); +HI_S32 HI_MPI_SYS_GetConf(MPP_SYS_CONF_S *pstSysConf); + +HI_S32 HI_MPI_SYS_Bind(MPP_CHN_S *pstSrcChn, MPP_CHN_S *pstDestChn); + +HI_S32 HI_MPI_SYS_UnBind(MPP_CHN_S *pstSrcChn, MPP_CHN_S *pstDestChn); + +HI_S32 HI_MPI_SYS_GetBindbyDest(MPP_CHN_S *pstDestChn, MPP_CHN_S *pstSrcChn); + + +HI_S32 HI_MPI_SYS_GetVersion(MPP_VERSION_S *pstVersion); + +/* Get the current PTS of this system */ +HI_S32 HI_MPI_SYS_GetCurPts(HI_U64 *pu64CurPts); + +/* +** u64Base is the global PTS of the system. +** ADVICE: +** 1. Bester to call HI_MPI_SYS_GetCurPts on the host board to get the u64Base. +** 2. When the linux start up, call HI_MPI_SYS_InitPtsBase to set the init pts. +** 3. When media bussines is running, synchronize the PTS one time per minute. +** And should call HI_MPI_SYS_SyncPts. +*/ +HI_S32 HI_MPI_SYS_InitPtsBase(HI_U64 u64PtsBase); +HI_S32 HI_MPI_SYS_SyncPts(HI_U64 u64PtsBase); + +/* alloc mmz memory in user context */ +HI_S32 HI_MPI_SYS_MmzAlloc(HI_U32 *pu32PhyAddr, HI_VOID **ppVirtAddr, + const HI_CHAR *strMmb, const HI_CHAR *strZone, HI_U32 u32Len); + +/* alloc mmz memory with cache */ +HI_S32 HI_MPI_SYS_MmzAlloc_Cached(HI_U32 *pu32PhyAddr, HI_VOID **ppVitAddr, + const HI_CHAR *pstrMmb, const HI_CHAR *pstrZone, HI_U32 u32Len); + +/* free mmz memory in user context */ +HI_S32 HI_MPI_SYS_MmzFree(HI_U32 u32PhyAddr, HI_VOID *pVirtAddr); + +/* fulsh cache */ +HI_S32 HI_MPI_SYS_MmzFlushCache(HI_U32 u32PhyAddr, HI_VOID *pVitAddr, HI_U32 u32Size); + +/* +** Call the mmap function to map physical address to virtual address +** The system function mmap is too complicated, so we packge it. +*/ +HI_VOID * HI_MPI_SYS_Mmap(HI_U32 u32PhyAddr, HI_U32 u32Size); +HI_S32 HI_MPI_SYS_Munmap(HI_VOID* pVirAddr, HI_U32 u32Size); + +/* +** Access the physical address. +** You can use this function to access memory address or register address. +*/ +HI_S32 HI_MPI_SYS_SetReg(HI_U32 u32Addr, HI_U32 u32Value); +HI_S32 HI_MPI_SYS_GetReg(HI_U32 u32Addr, HI_U32 *pu32Value); + + +HI_S32 HI_MPI_SYS_SetMemConf(MPP_CHN_S *pstMppChn,const HI_CHAR *pcMmzName); +HI_S32 HI_MPI_SYS_GetMemConf(MPP_CHN_S *pstMppChn,HI_CHAR *pcMmzName); + +/* Get address of virtual register */ +HI_S32 HI_MPI_SYS_GetVRegAddr(HI_U32 *pu32Addr); + + +/* Close all the FD which is used by sys module */ +HI_S32 HI_MPI_SYS_CloseFd(HI_VOID); + + +/******************************************/ +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* __cplusplus */ +/******************************************/ +#endif /*__MPI_SYS_H__ */ + + diff --git a/general/package/hifb-demo/include/mpi_vb.h b/general/package/hifb-demo/include/mpi_vb.h new file mode 100644 index 0000000000..3b28e8c07e --- /dev/null +++ b/general/package/hifb-demo/include/mpi_vb.h @@ -0,0 +1,57 @@ +/****************************************************************************** + + Copyright (C), 2001-2011, Hisilicon Tech. Co., Ltd. + + ****************************************************************************** + File Name : mpi_vb.h + Version : Initial Draft + Author : Hisilicon multimedia software group + Created : 2007/10/15 + Description : + History : + 1.Date : 2007/10/15 + Author : c42025 + Modification: Created file +******************************************************************************/ +#ifndef __MPI_VB_H__ +#define __MPI_VB_H__ + +#include "hi_comm_vb.h" + +/******************************************/ +#ifdef __cplusplus +#if __cplusplus +extern "C" +{ +#endif +#endif /* __cplusplus */ +/******************************************/ + + +VB_POOL HI_MPI_VB_CreatePool(HI_U32 u32BlkSize,HI_U32 u32BlkCnt,const HI_CHAR *pcMmzName); + +HI_S32 HI_MPI_VB_DestroyPool(VB_POOL Pool); +VB_BLK HI_MPI_VB_GetBlock(VB_POOL Pool, HI_U32 u32BlkSize,const HI_CHAR *pcMmzName); +HI_S32 HI_MPI_VB_ReleaseBlock(VB_BLK Block); + +HI_U32 HI_MPI_VB_Handle2PhysAddr(VB_BLK Block); +VB_POOL HI_MPI_VB_Handle2PoolId(VB_BLK Block); + +HI_S32 HI_MPI_VB_Init (HI_VOID); +HI_S32 HI_MPI_VB_Exit (HI_VOID); +HI_S32 HI_MPI_VB_SetConf (const VB_CONF_S *pstVbConf); +HI_S32 HI_MPI_VB_GetConf (VB_CONF_S *pstVbConf); + +HI_S32 HI_MPI_VB_MmapPool(VB_POOL Pool); +HI_S32 HI_MPI_VB_MunmapPool(VB_POOL Pool); +HI_S32 HI_MPI_VB_GetBlkVirAddr(VB_POOL Pool, HI_U32 u32PhyAddr, HI_VOID **ppVirAddr); + + +/******************************************/ +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* __cplusplus */ +/******************************************/ +#endif /*__MPI_VI_H__ */ diff --git a/general/package/hifb-demo/include/mpi_vo.h b/general/package/hifb-demo/include/mpi_vo.h new file mode 100644 index 0000000000..b6de4d359a --- /dev/null +++ b/general/package/hifb-demo/include/mpi_vo.h @@ -0,0 +1,185 @@ +/****************************************************************************** + + Copyright (C), 2001-2011, Hisilicon Tech. Co., Ltd. + + ****************************************************************************** + File Name : mpi_vo.h + Version : Initial Draft + Author : Hisilicon multimedia software group + Created : 2011/06/28 + Description : Vou API + History : + 1.Date : 2011/06/28 + Author : z00185248 + Modification: Created file + +******************************************************************************/ + +#ifndef __MPI_VO_H__ +#define __MPI_VO_H__ + +#include "hi_comm_vo.h" + +#ifdef __cplusplus +#if __cplusplus +extern "C" +{ +#endif +#endif /* __cplusplus */ + + +/* Device Settings */ + +HI_S32 HI_MPI_VO_Enable (VO_DEV VoDev); +HI_S32 HI_MPI_VO_Disable(VO_DEV VoDev); + +HI_S32 HI_MPI_VO_SetPubAttr(VO_DEV VoDev, const VO_PUB_ATTR_S *pstPubAttr); +HI_S32 HI_MPI_VO_GetPubAttr(VO_DEV VoDev, VO_PUB_ATTR_S *pstPubAttr); + +HI_S32 HI_MPI_VO_CloseFd(HI_VOID); + + +/* Video Settings */ +HI_S32 HI_MPI_VO_EnableVideoLayer (VO_DEV VoDev); +HI_S32 HI_MPI_VO_DisableVideoLayer(VO_DEV VoDev); + +HI_S32 HI_MPI_VO_SetVideoLayerAttr(VO_DEV VoDev, const VO_VIDEO_LAYER_ATTR_S *pstLayerAttr); +HI_S32 HI_MPI_VO_GetVideoLayerAttr(VO_DEV VoDev, VO_VIDEO_LAYER_ATTR_S *pstLayerAttr); + +/* PIP LAYER Setting */ + +HI_S32 HI_MPI_VO_PipLayerBindDev(VO_DEV VoTargetDev); +HI_S32 HI_MPI_VO_PipLayerUnBindDev(VO_DEV VoTargetDev); + +HI_S32 HI_MPI_VO_SetPipLayerAttr(const VO_VIDEO_LAYER_ATTR_S *pstLayerAttr); +HI_S32 HI_MPI_VO_GetPipLayerAttr(VO_VIDEO_LAYER_ATTR_S *pstLayerAttr); + +HI_S32 HI_MPI_VO_EnablePipLayer (HI_VOID); +HI_S32 HI_MPI_VO_DisablePipLayer(HI_VOID); + +/* General Operation of Channel */ + +HI_S32 HI_MPI_VO_EnableChn (VO_DEV VoDev, VO_CHN VoChn); +HI_S32 HI_MPI_VO_DisableChn(VO_DEV VoDev, VO_CHN VoChn); + + +/* These two interfaces only support for Hi3518 */ +HI_S32 HI_MPI_VO_EnableSdTdeBypass (VO_DEV VoDev); +HI_S32 HI_MPI_VO_DisableSdTdeBypass(VO_DEV VoDev); + + +HI_S32 HI_MPI_VO_SetChnAttr(VO_DEV VoDev, VO_CHN VoChn, const VO_CHN_ATTR_S *pstChnAttr); +HI_S32 HI_MPI_VO_GetChnAttr(VO_DEV VoDev, VO_CHN VoChn, VO_CHN_ATTR_S *pstChnAttr); + +HI_S32 HI_MPI_VO_SetChnDisplayWindow(VO_DEV VoDev, VO_CHN VoChn, const RECT_S *pstWindow); +HI_S32 HI_MPI_VO_GetChnDisplayWindow(VO_DEV VoDev, VO_CHN VoChn, RECT_S *pstWindow); + +HI_S32 HI_MPI_VO_SetChnDispPos(VO_DEV VoDev, VO_CHN VoChn, const POINT_S *pstDispPos); +HI_S32 HI_MPI_VO_GetChnDispPos(VO_DEV VoDev, VO_CHN VoChn, POINT_S *pstDispPos); + +HI_S32 HI_MPI_VO_SetChnField(VO_DEV VoDev, VO_CHN VoChn, const VO_DISPLAY_FIELD_E enField); +HI_S32 HI_MPI_VO_GetChnField(VO_DEV VoDev, VO_CHN VoChn, VO_DISPLAY_FIELD_E *pField); + +HI_S32 HI_MPI_VO_SetChnFrameRate(VO_DEV VoDev, VO_CHN VoChn, HI_S32 s32ChnFrmRate); +HI_S32 HI_MPI_VO_GetChnFrameRate(VO_DEV VoDev, VO_CHN VoChn, HI_S32 *ps32ChnFrmRate); + +HI_S32 HI_MPI_VO_GetChnFrame (VO_DEV VoDev, VO_CHN VoChn, VIDEO_FRAME_INFO_S *pstFrame); +HI_S32 HI_MPI_VO_ReleaseChnFrame(VO_DEV VoDev, VO_CHN VoChn, VIDEO_FRAME_INFO_S *pstFrame); + +HI_S32 HI_MPI_VO_ChnPause (VO_DEV VoDev, VO_CHN VoChn); +HI_S32 HI_MPI_VO_ChnResume(VO_DEV VoDev, VO_CHN VoChn); +HI_S32 HI_MPI_VO_ChnStep (VO_DEV VoDev, VO_CHN VoChn); +HI_S32 HI_MPI_VO_ChnRefresh(VO_DEV VoDev, VO_CHN VoChn); + +HI_S32 HI_MPI_VO_ChnShow(VO_DEV VoDev, VO_CHN VoChn); +HI_S32 HI_MPI_VO_ChnHide(VO_DEV VoDev, VO_CHN VoChn); + +HI_S32 HI_MPI_VO_SetZoomInWindow(VO_DEV VoDev, VO_CHN VoChn, const VO_ZOOM_ATTR_S *pstZoomAttr); +HI_S32 HI_MPI_VO_GetZoomInWindow(VO_DEV VoDev, VO_CHN VoChn, VO_ZOOM_ATTR_S *pstZoomAttr); + +HI_S32 HI_MPI_VO_GetChnPts (VO_DEV VoDev, VO_CHN VoChn, HI_U64 *pu64ChnPts); +HI_S32 HI_MPI_VO_QueryChnStat(VO_DEV VoDev, VO_CHN VoChn, VO_QUERY_STATUS_S *pstStatus); + +HI_S32 HI_MPI_VO_SendFrame(VO_DEV VoDev, VO_CHN VoChn, VIDEO_FRAME_INFO_S *pstVFrame); +HI_S32 HI_MPI_VO_SendFrameTimeOut(VO_DEV VoDev, VO_CHN VoChn, VIDEO_FRAME_INFO_S *pstVFrame, HI_U32 u32MilliSec); + +HI_S32 HI_MPI_VO_ClearChnBuffer(VO_DEV VoDev, VO_CHN VoChn, HI_BOOL bClrAll); + + +HI_S32 HI_MPI_VO_SetChnDispThreshold(VO_DEV VoDev, VO_CHN VoChn, HI_U32 u32Threshold); +HI_S32 HI_MPI_VO_GetChnDispThreshold(VO_DEV VoDev, VO_CHN VoChn, HI_U32 *pu32Threshold); + +HI_S32 HI_MPI_VO_EnableChnDoubleFrame(VO_DEV VoDev, VO_CHN VoChn); +HI_S32 HI_MPI_VO_DisableChnDoubleFrame(VO_DEV VoDev, VO_CHN VoChn); + +HI_S32 HI_MPI_VO_SetAttrBegin(VO_DEV VoDev); +HI_S32 HI_MPI_VO_SetAttrEnd (VO_DEV VoDev); + +HI_S32 HI_MPI_VO_SetPlayToleration(VO_DEV VoDev, HI_U32 u32Toleration); +HI_S32 HI_MPI_VO_GetPlayToleration(VO_DEV VoDev, HI_U32 *pu32Toleration); + +HI_S32 HI_MPI_VO_GetScreenFrame (VO_DEV VoDev, VIDEO_FRAME_INFO_S *pstVFrame); +HI_S32 HI_MPI_VO_ReleaseScreenFrame(VO_DEV VoDev, VIDEO_FRAME_INFO_S *pstVFrame); + +HI_S32 HI_MPI_VO_SetDispBufLen(VO_DEV VoDev, HI_U32 u32BufLen); +HI_S32 HI_MPI_VO_GetDispBufLen(VO_DEV VoDev, HI_U32 *pu32BufLen); + +HI_S32 HI_MPI_VO_EnableWbc(VO_DEV VoDev); +HI_S32 HI_MPI_VO_DisableWbc(VO_DEV VoDev); + +HI_S32 HI_MPI_VO_SetWbcAttr(VO_DEV VoDev, const VO_WBC_ATTR_S *pstWbcAttr); +HI_S32 HI_MPI_VO_GetWbcAttr(VO_DEV VoDev, VO_WBC_ATTR_S *pstWbcAttr); + +HI_S32 HI_MPI_VO_SetWbcMode(VO_DEV VoDev, VO_WBC_MODE_E enWbcMode); +HI_S32 HI_MPI_VO_GetWbcMode(VO_DEV VoDev, VO_WBC_MODE_E *penWbcMode); + +HI_S32 HI_MPI_VO_SetWbcDepth(VO_DEV VoDev, HI_U32 u32Depth); +HI_S32 HI_MPI_VO_GetWbcDepth(VO_DEV VoDev, HI_U32 *pu32Depth); +HI_S32 HI_MPI_VO_WbcGetScreenFrame(VO_DEV VoDev, VIDEO_FRAME_INFO_S *pstVFrame); +HI_S32 HI_MPI_VO_WbcReleaseScreenFrame(VO_DEV VoDev, VIDEO_FRAME_INFO_S *pstVFrame); + +HI_S32 HI_MPI_VO_GfxLayerBindDev(VOU_GFX_BIND_LAYER_E enGfxLayer, VO_DEV VoTargetDev); +HI_S32 HI_MPI_VO_GfxLayerUnBindDev(VOU_GFX_BIND_LAYER_E enGfxLayer, VO_DEV VoTargetDev); + +HI_S32 HI_MPI_VO_SetGfxLayerCSC(HI_U32 u32Layer, const VO_CSC_S *pstCSC); +HI_S32 HI_MPI_VO_GetGfxLayerCSC(HI_U32 u32Layer, VO_CSC_S *pstCSC); + +HI_S32 HI_MPI_VO_SetCascadeAttr(const VO_CAS_ATTR_S *pstCasAttr); +HI_S32 HI_MPI_VO_GetCascadeAttr(VO_CAS_ATTR_S *pstCasAttr); + +HI_S32 HI_MPI_VO_EnableCascadeDev (VO_DEV VoCasDev); +HI_S32 HI_MPI_VO_DisableCascadeDev(VO_DEV VoCasDev); + +HI_S32 HI_MPI_VO_SetCascadePattern(VO_DEV VoCasDev, HI_U32 u32Pattern); +HI_S32 HI_MPI_VO_GetCascadePattern(VO_DEV VoCasDev, HI_U32 *pu32Pattern); + +HI_S32 HI_MPI_VO_CascadePosBindChn (HI_U32 u32Pos, VO_DEV VoCasDev, VO_CHN VoChn); +HI_S32 HI_MPI_VO_CascadePosUnBindChn(HI_U32 u32Pos, VO_DEV VoCasDev, VO_CHN VoChn); + +HI_S32 HI_MPI_VO_EnableCascade (HI_VOID); +HI_S32 HI_MPI_VO_DisableCascade(HI_VOID); + +HI_S32 HI_MPI_VO_GetDevCSC(VO_DEV VoDev, VO_CSC_S *pstDevCSC); +HI_S32 HI_MPI_VO_SetDevCSC(VO_DEV VoDev, VO_CSC_S *pstDevCSC); + +HI_S32 HI_MPI_VO_GetVgaParam(VO_DEV VoDev, VO_VGA_PARAM_S *pstVgaParam); +HI_S32 HI_MPI_VO_SetVgaParam(VO_DEV VoDev, VO_VGA_PARAM_S *pstVgaParam); + +HI_S32 HI_MPI_VO_SetVtth(VO_DEV VoDev, HI_U32 u32Vtth); +HI_S32 HI_MPI_VO_GetVtth(VO_DEV VoDev, HI_U32 *pu32Vtth); + +HI_S32 HI_MPI_VO_SetDevFramerate(VO_DEV VoDev, HI_U32 u32Framerate); +HI_S32 HI_MPI_VO_GetDevFramerate(VO_DEV VoDev, HI_U32 *pu32Framerate); + + +HI_S32 HI_MPI_VO_EnableRecvFrameRateMatch (VO_DEV VoDev, VO_CHN VoChn); +HI_S32 HI_MPI_VO_DisableRecvFrameRateMatch (VO_DEV VoDev, VO_CHN VoChn); + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif /* __cplusplus */ +#endif /*__MPI_VO_H__ */ + + diff --git a/general/package/hifb-demo/include/sample_comm.h b/general/package/hifb-demo/include/sample_comm.h new file mode 100644 index 0000000000..e5cfa9dba8 --- /dev/null +++ b/general/package/hifb-demo/include/sample_comm.h @@ -0,0 +1,43 @@ +/****************************************************************************** + * Hisilicon MPP sample common header — minimal subset for hi3520dv200. + * + * Trimmed port of the upstream vendor `sample_comm.h` (Hi3531 SDK sample + * tree, mirrored at github.com/Mihawk086/HI3520DVR/include/sample_comm.h). + * Keeps only the constants and prototypes used by the trimmed + * sample_comm_sys.c and sample_comm_vo.c. + * + * Copyright (C) 2010-2011, Hisilicon Tech. Co., Ltd. (vendor original) + ******************************************************************************/ +#ifndef __SAMPLE_COMM_H__ +#define __SAMPLE_COMM_H__ + +#include "hi_common.h" +#include "hi_comm_sys.h" +#include "hi_comm_vb.h" +#include "hi_comm_vo.h" +#include "mpi_sys.h" +#include "mpi_vb.h" +#include "mpi_vo.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define SAMPLE_PRT(fmt, ...) \ + printf("[%s]-%d: " fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__) + +#define SAMPLE_SYS_ALIGN_WIDTH 16 + +HI_S32 SAMPLE_COMM_SYS_Init(VB_CONF_S *pstVbConf); +HI_VOID SAMPLE_COMM_SYS_Exit(void); + +HI_S32 SAMPLE_COMM_VO_StartDev(VO_DEV VoDev, VO_PUB_ATTR_S *pstPubAttr); +HI_S32 SAMPLE_COMM_VO_StopDev(VO_DEV VoDev); +HI_S32 SAMPLE_COMM_VO_StartLayer(VO_LAYER VoLayer, const VO_VIDEO_LAYER_ATTR_S *pstLayerAttr); +HI_S32 SAMPLE_COMM_VO_StopLayer(VO_LAYER VoLayer); + +#ifdef __cplusplus +} +#endif + +#endif /* __SAMPLE_COMM_H__ */ diff --git a/general/package/hifb-demo/src/hifb_demo.c b/general/package/hifb-demo/src/hifb_demo.c new file mode 100644 index 0000000000..87c2c6e548 --- /dev/null +++ b/general/package/hifb-demo/src/hifb_demo.c @@ -0,0 +1,233 @@ +/* + * hifb_demo — Hisilicon framebuffer userspace API example for hi3520dv200. + * + * Brings up MPP via the ported SAMPLE_COMM_SYS_Init helper (sample_comm_sys.c) + * + a minimal VO bring-up using SAMPLE_COMM_VO_StartDev / StartLayer from + * sample_comm_vo.c. Then exercises the standard Linux fb mmap path and the + * hifb-specific ioctls (FBIOPUT_SHOW_HIFB, FBIOPUT_ALPHA_HIFB, + * FBIOPUT_SCREEN_ORIGIN_HIFB). + * + * Draws SMPTE-style 7 color bars + a bouncing rectangle at ~30 fps so the + * effect is visible on the wired display (HDMI / VGA / CVBS depending on + * board jumpering — note that hi3520dv200's libmpi.so ships no + * HI_MPI_HDMI_* exports, so HDMI auto-routing depends on what the VO + * device wires by default; on some boards CVBS or VGA is on by default). + */ +#define _POSIX_C_SOURCE 200809L +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "hi_type.h" +#include "hi_comm_sys.h" +#include "hi_comm_vb.h" +#include "hi_comm_vo.h" +#include "mpi_sys.h" +#include "mpi_vb.h" +#include "mpi_vo.h" +#include "hifb.h" +#include "sample_comm.h" + +#define VO_DEV_DHD0 0 /* HD output device */ +#define VO_LAYER_VHD0 0 /* HD video layer */ + +static volatile sig_atomic_t g_stop; +static void on_sigint(int s) { (void)s; g_stop = 1; } + +static inline uint16_t rgb565(uint8_t r, uint8_t g, uint8_t b) +{ + return (uint16_t)(((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3)); +} + +static const uint8_t SMPTE_BARS[7][3] = { + {255,255,255}, {255,255,0}, {0,255,255}, {0,255,0}, + {255,0,255}, {255,0,0}, {0,0,255} +}; + +static void draw_color_bars(uint16_t *fb, unsigned w, unsigned h, unsigned pitch_px) +{ + const unsigned bar_w = w / 7; + for (unsigned y = 0; y < h; ++y) { + uint16_t *row = fb + (size_t)y * pitch_px; + for (unsigned x = 0; x < w; ++x) { + unsigned i = x / bar_w; if (i > 6) i = 6; + row[x] = rgb565(SMPTE_BARS[i][0], SMPTE_BARS[i][1], SMPTE_BARS[i][2]); + } + } +} + +static void draw_rect(uint16_t *fb, unsigned pitch_px, + int x0, int y0, int w, int h, uint16_t color, + unsigned fb_w, unsigned fb_h) +{ + if (x0 < 0) { w += x0; x0 = 0; } + if (y0 < 0) { h += y0; y0 = 0; } + if (x0 + w > (int)fb_w) w = (int)fb_w - x0; + if (y0 + h > (int)fb_h) h = (int)fb_h - y0; + if (w <= 0 || h <= 0) return; + for (int y = 0; y < h; ++y) { + uint16_t *row = fb + (size_t)(y0 + y) * pitch_px + x0; + for (int x = 0; x < w; ++x) row[x] = color; + } +} + +static int mpp_bringup(VO_INTF_TYPE_E intf, VO_INTF_SYNC_E sync) +{ + VB_CONF_S vb_cfg = {0}; + VO_PUB_ATTR_S pub = {0}; + HI_S32 rc; + + /* SAMPLE_COMM_SYS_Init internally does: + * HI_MPI_SYS_Exit -> HI_MPI_VB_DestroyPool(0..VB_MAX_POOLS) -> + * HI_MPI_VB_Exit -> HI_MPI_VB_SetConf -> HI_MPI_VB_Init -> + * HI_MPI_SYS_SetConf(u32AlignWidth=16) -> HI_MPI_SYS_Init. + * This is the canonical bootstrap from the vendor mpp/sample/ tree. */ + vb_cfg.u32MaxPoolCnt = 0; /* fb-only demo, no video buffer pools */ + rc = SAMPLE_COMM_SYS_Init(&vb_cfg); + if (rc != HI_SUCCESS) { + fprintf(stderr, "SAMPLE_COMM_SYS_Init: 0x%x\n", rc); + return -1; + } + + pub.u32BgColor = 0x000000; + pub.enIntfType = intf; + pub.enIntfSync = sync; + pub.bDoubleFrame = HI_FALSE; + rc = SAMPLE_COMM_VO_StartDev(VO_DEV_DHD0, &pub); + if (rc != HI_SUCCESS) { + fprintf(stderr, "SAMPLE_COMM_VO_StartDev: 0x%x\n", rc); + return -1; + } + + rc = HI_MPI_VO_EnableVideoLayer(VO_LAYER_VHD0); + if (rc != HI_SUCCESS) { + /* Non-fatal: hifb's graphics overlay can still be composed by VOU + * even if the video plane is left disabled. */ + fprintf(stderr, "HI_MPI_VO_EnableVideoLayer: 0x%x (non-fatal)\n", rc); + } + return 0; +} + +static void mpp_teardown(void) +{ + HI_MPI_VO_DisableVideoLayer(VO_LAYER_VHD0); + SAMPLE_COMM_VO_StopDev(VO_DEV_DHD0); + SAMPLE_COMM_SYS_Exit(); +} + +int main(int argc, char **argv) +{ + int run_secs = 30; + const char *fbdev = "/dev/fb0"; + VO_INTF_TYPE_E intf = VO_INTF_HDMI; + VO_INTF_SYNC_E sync = VO_OUTPUT_720P60; + + for (int i = 1; i < argc; ++i) { + if (!strcmp(argv[i], "-t") && i + 1 < argc) run_secs = atoi(argv[++i]); + else if (!strcmp(argv[i], "-f") && i + 1 < argc) fbdev = argv[++i]; + else if (!strcmp(argv[i], "-cvbs")) { intf = VO_INTF_CVBS; sync = VO_OUTPUT_PAL; } + else if (!strcmp(argv[i], "-vga")) { intf = VO_INTF_VGA; sync = VO_OUTPUT_1024x768_60; } + else if (!strcmp(argv[i], "-h")) { + printf("usage: %s [-t secs] [-f /dev/fbN] [-cvbs|-vga]\n" + " default: HDMI 720P60 on /dev/fb0 for 30 s\n", argv[0]); + return 0; + } + } + + signal(SIGINT, on_sigint); + signal(SIGTERM, on_sigint); + + printf("hifb_demo: bringing up MPP (intf=0x%x sync=%d)\n", + (unsigned)intf, (int)sync); + if (mpp_bringup(intf, sync) < 0) return 1; + + printf("hifb_demo: open %s\n", fbdev); + int fd = open(fbdev, O_RDWR); + if (fd < 0) { perror("open"); mpp_teardown(); return 1; } + + struct fb_var_screeninfo v; + struct fb_fix_screeninfo f; + if (ioctl(fd, FBIOGET_VSCREENINFO, &v) < 0) { perror("FBIOGET_VSCREENINFO"); return 1; } + if (ioctl(fd, FBIOGET_FSCREENINFO, &f) < 0) { perror("FBIOGET_FSCREENINFO"); return 1; } + printf("hifb_demo: %ux%u bpp=%u line_length=%u smem_len=%u\n", + v.xres, v.yres, v.bits_per_pixel, f.line_length, f.smem_len); + + if (v.bits_per_pixel != 16) { + fprintf(stderr, "WARN: expected 16bpp RGB565, got %u\n", v.bits_per_pixel); + } + + void *mem = mmap(NULL, f.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (mem == MAP_FAILED) { perror("mmap"); return 1; } + + HIFB_ALPHA_S a = {0}; + a.bAlphaEnable = HI_TRUE; + a.bAlphaChannel = HI_FALSE; + a.u8GlobalAlpha = 0xFF; + if (ioctl(fd, FBIOPUT_ALPHA_HIFB, &a) < 0) perror("FBIOPUT_ALPHA_HIFB (non-fatal)"); + + HIFB_POINT_S p = { 0, 0 }; + if (ioctl(fd, FBIOPUT_SCREEN_ORIGIN_HIFB, &p) < 0) perror("FBIOPUT_SCREEN_ORIGIN_HIFB (non-fatal)"); + + HI_BOOL show = HI_TRUE; + if (ioctl(fd, FBIOPUT_SHOW_HIFB, &show) < 0) perror("FBIOPUT_SHOW_HIFB"); + + const unsigned pitch_px = f.line_length / 2; + const unsigned w = v.xres, h = v.yres; + uint16_t *fb = (uint16_t *)mem; + + printf("hifb_demo: drawing color bars + moving square for ~%ds (Ctrl-C to stop)\n", + run_secs); + + draw_color_bars(fb, w, h, pitch_px); + + int rx = 0, ry = (int)h / 2 - 32, rw = 96, rh = 64; + int vx = 6, vy = 3; + uint16_t rect_color = rgb565(0, 0, 0); + + struct timespec t0, now; + clock_gettime(CLOCK_MONOTONIC, &t0); + + while (!g_stop) { + /* Erase old rectangle by repainting the bar slice it covered. */ + for (int y = ry; y < ry + rh && y < (int)h; ++y) { + if (y < 0) continue; + uint16_t *row = fb + (size_t)y * pitch_px; + for (int x = rx; x < rx + rw && x < (int)w; ++x) { + if (x < 0) continue; + unsigned bi = (unsigned)x / (w / 7); + if (bi > 6) bi = 6; + row[x] = rgb565(SMPTE_BARS[bi][0], SMPTE_BARS[bi][1], SMPTE_BARS[bi][2]); + } + } + rx += vx; ry += vy; + if (rx < 0 || rx + rw > (int)w) vx = -vx; + if (ry < 0 || ry + rh > (int)h) vy = -vy; + if (rx < 0) rx = 0; + if (ry < 0) ry = 0; + if (rx + rw > (int)w) rx = (int)w - rw; + if (ry + rh > (int)h) ry = (int)h - rh; + draw_rect(fb, pitch_px, rx, ry, rw, rh, rect_color, w, h); + + usleep(33 * 1000); + + clock_gettime(CLOCK_MONOTONIC, &now); + if (run_secs > 0 && now.tv_sec - t0.tv_sec >= run_secs) break; + } + + printf("hifb_demo: cleanup\n"); + show = HI_FALSE; + ioctl(fd, FBIOPUT_SHOW_HIFB, &show); + munmap(mem, f.smem_len); + close(fd); + mpp_teardown(); + return 0; +} diff --git a/general/package/hifb-demo/src/sample_comm_sys.c b/general/package/hifb-demo/src/sample_comm_sys.c new file mode 100644 index 0000000000..06c82ea194 --- /dev/null +++ b/general/package/hifb-demo/src/sample_comm_sys.c @@ -0,0 +1,90 @@ +/****************************************************************************** + * Hisilicon MPP — SAMPLE_COMM_SYS_Init / SAMPLE_COMM_SYS_Exit bootstrap. + * + * Trimmed port of the upstream vendor sample `sample_comm_sys.c` to the subset + * usable on the hi3520dv200 V2.0.5.1 SDK (Apr 2015). Only the helpers actually + * required to bring up the MPP system enough for hifb userspace are included. + * + * Upstream provenance: + * https://github.com/Mihawk086/HI3520DVR @ hisi/common/sample_comm_sys.c + * (originally from Hisilicon Hi3531 SDK sample tree; the same boilerplate + * ships across the Hi35xx MPP family.) + * + * Differences from upstream: + * - HI_MPI_VB_ExitModCommPool loop dropped — symbol does not exist in + * hi3520dv200 libmpi.so (added in a later SDK revision). + * - All other SAMPLE_COMM_SYS_* helpers (GetPicSize, MemConfig, + * Payload2FilePostfix, CalcPicVbBlkSize) dropped — they pull in + * COMPRESS_MODE_E / PIXEL_FORMAT_E enums that the V2.0.5.1 headers + * don't define. + * + * Copyright (C) 2010-2011, Hisilicon Tech. Co., Ltd. (vendor original) + ******************************************************************************/ + +#include +#include +#include + +#include "hi_comm_sys.h" +#include "hi_comm_vb.h" +#include "mpi_sys.h" +#include "mpi_vb.h" +#include "sample_comm.h" + +HI_S32 SAMPLE_COMM_SYS_Init(VB_CONF_S *pstVbConf) +{ + MPP_SYS_CONF_S stSysConf = {0}; + HI_S32 s32Ret = HI_FAILURE; + HI_S32 i; + + HI_MPI_SYS_Exit(); + + for (i = 0; i < VB_MAX_POOLS; i++) { + HI_MPI_VB_DestroyPool(i); + } + HI_MPI_VB_Exit(); + + if (NULL == pstVbConf) { + SAMPLE_PRT("input parameter is null, it is invaild!\n"); + return HI_FAILURE; + } + + s32Ret = HI_MPI_VB_SetConf(pstVbConf); + if (HI_SUCCESS != s32Ret) { + SAMPLE_PRT("HI_MPI_VB_SetConf failed!\n"); + return HI_FAILURE; + } + + s32Ret = HI_MPI_VB_Init(); + if (HI_SUCCESS != s32Ret) { + SAMPLE_PRT("HI_MPI_VB_Init failed!\n"); + return HI_FAILURE; + } + + stSysConf.u32AlignWidth = SAMPLE_SYS_ALIGN_WIDTH; + s32Ret = HI_MPI_SYS_SetConf(&stSysConf); + if (HI_SUCCESS != s32Ret) { + SAMPLE_PRT("HI_MPI_SYS_SetConf failed\n"); + return HI_FAILURE; + } + + s32Ret = HI_MPI_SYS_Init(); + if (HI_SUCCESS != s32Ret) { + SAMPLE_PRT("HI_MPI_SYS_Init failed!\n"); + return HI_FAILURE; + } + + return HI_SUCCESS; +} + +HI_VOID SAMPLE_COMM_SYS_Exit(void) +{ + HI_S32 i; + + HI_MPI_SYS_Exit(); + + for (i = 0; i < VB_MAX_POOLS; i++) { + HI_MPI_VB_DestroyPool(i); + } + HI_MPI_VB_Exit(); +} diff --git a/general/package/hifb-demo/src/sample_comm_vo.c b/general/package/hifb-demo/src/sample_comm_vo.c new file mode 100644 index 0000000000..b292262f20 --- /dev/null +++ b/general/package/hifb-demo/src/sample_comm_vo.c @@ -0,0 +1,96 @@ +/****************************************************************************** + * Hisilicon MPP — SAMPLE_COMM_VO_StartDev / StopDev / StartLayer / StopLayer. + * + * Trimmed port of the upstream vendor sample `sample_comm_vo.c` to the subset + * usable on the hi3520dv200 V2.0.5.1 SDK (Apr 2015). Only the helpers actually + * required to bring up a VO device + video layer for hifb userspace are + * included. + * + * Upstream provenance: + * https://github.com/Mihawk086/HI3520DVR @ hisi/common/sample_comm_vo.c + * + * Differences from upstream: + * - HDMI helper functions (HdmiConvertSync, HdmiCallbackStart, HdmiStart, + * HdmiStop, HdmiHotPlugEvent, HdmiUnPlugEvent, HdmiCallbackEvent) dropped: + * hi3520dv200 libmpi.so ships no HI_MPI_HDMI_* symbols. HDMI is brought + * up implicitly by VO_SetPubAttr(enIntfType=VO_INTF_HDMI) on this SDK. + * - Writeback (Wbc) helpers dropped: VO_WBC / VO_WBC_SOURCE_S types absent. + * - Snap (jpeg snapshot) helpers dropped: relies on bSupportDCF and a newer + * HI_MPI_VO_GetScreenFrame signature. + * - GetWH / StartChn / StopChn / VPSS bind helpers dropped (not needed for + * fb-only demo). + * + * Copyright (C) 2010-2011, Hisilicon Tech. Co., Ltd. (vendor original) + ******************************************************************************/ + +#include +#include +#include + +#include "hi_comm_vo.h" +#include "mpi_vo.h" +#include "sample_comm.h" + +HI_S32 SAMPLE_COMM_VO_StartDev(VO_DEV VoDev, VO_PUB_ATTR_S *pstPubAttr) +{ + HI_S32 s32Ret = HI_SUCCESS; + + s32Ret = HI_MPI_VO_SetPubAttr(VoDev, pstPubAttr); + if (s32Ret != HI_SUCCESS) { + SAMPLE_PRT("failed with %#x!\n", s32Ret); + return HI_FAILURE; + } + + s32Ret = HI_MPI_VO_Enable(VoDev); + if (s32Ret != HI_SUCCESS) { + SAMPLE_PRT("failed with %#x!\n", s32Ret); + return HI_FAILURE; + } + + return s32Ret; +} + +HI_S32 SAMPLE_COMM_VO_StopDev(VO_DEV VoDev) +{ + HI_S32 s32Ret = HI_SUCCESS; + + s32Ret = HI_MPI_VO_Disable(VoDev); + if (s32Ret != HI_SUCCESS) { + SAMPLE_PRT("failed with %#x!\n", s32Ret); + return HI_FAILURE; + } + + return s32Ret; +} + +HI_S32 SAMPLE_COMM_VO_StartLayer(VO_LAYER VoLayer, const VO_VIDEO_LAYER_ATTR_S *pstLayerAttr) +{ + HI_S32 s32Ret = HI_SUCCESS; + + s32Ret = HI_MPI_VO_SetVideoLayerAttr(VoLayer, pstLayerAttr); + if (s32Ret != HI_SUCCESS) { + SAMPLE_PRT("failed with %#x!\n", s32Ret); + return HI_FAILURE; + } + + s32Ret = HI_MPI_VO_EnableVideoLayer(VoLayer); + if (s32Ret != HI_SUCCESS) { + SAMPLE_PRT("failed with %#x!\n", s32Ret); + return HI_FAILURE; + } + + return s32Ret; +} + +HI_S32 SAMPLE_COMM_VO_StopLayer(VO_LAYER VoLayer) +{ + HI_S32 s32Ret = HI_SUCCESS; + + s32Ret = HI_MPI_VO_DisableVideoLayer(VoLayer); + if (s32Ret != HI_SUCCESS) { + SAMPLE_PRT("failed with %#x!\n", s32Ret); + return HI_FAILURE; + } + + return s32Ret; +}