1.Hi3531为例,分析分量掩码;
VI配置属性函数:HI_MPI_VI_SetDevAttr(ViDev, &stViDevAttr);
结构体变量stViDevAttr。
VI_DEV_ATTR_S stViDevAttr;
/* the attributes of a VI device */
typedef struct hiVI_DEV_ATTR_S
{
VI_INTF_MODE_E enIntfMode; /* Interface mode */
VI_WORK_MODE_E enWorkMode; /*1-, 2-, or 4-channel multiplexed work mode */
HI_U32 au32CompMask[2]; /* Component mask */
VI_SCAN_MODE_E enScanMode; /* Input scanning mode (progressive or interlaced) */
HI_S32 s32AdChnId[4]; /* AD channel ID. Typically, the default value -1 is recommended */
/* The below members must be configured in BT.601 mode or DC mode and are invalid in other modes */
VI_DATA_YUV_SEQ_E enDataSeq; /* Input data sequence (only the YUV format is supported) */
VI_SYNC_CFG_S stSynCfg; /* Sync timing. This member must be configured in BT.601 mode or DC mode */
VI_DATA_PATH_E enDataPath; /* ISP enable or bypass */
VI_DATA_TYPE_E enInputDataType; /* RGB: CSC-709 or CSC-601, PT YUV444 disable; YUV: default yuv CSC coef PT YUV444 enable. */
HI_BOOL bDataRev; /* Data reverse */
} VI_DEV_ATTR_S;
VI 视频输入设备 Dev0~Dev3 共用 32bit 数据线(对于 Hi3531/Hi3532 的 Dev4~ Dev7 也是如此),用于与外部视频源对接,对接时可能仅使用 32bit 数据线中的一 部分(由硬件连线决定)。例如 Dev0 输入 8bit 的 YUV 数据,camera 与 VI 对接的 是 32bit 数据线的前 8bit 数据线(即 bit0~bit7 对应的数据线),此时配置输入数据 为单分量,分量掩码为 0xFF000000。
0xFF(Dev0)00(Dev1)00(Dev2)00(Dev3)
0xFF(Dev4)00(Dev5)00(Dev6)00(Dev7)
双分量的配置方法(BT1120):
如果视频数据是双分量输入,则需要将设备属性配为双分量,并根据管脚的实际连接 情况指定每个分量的分量掩码。例如 Dev0 设为 BT.1120、双分量输入(亮度分量和色 度分量各占用 8bit),则分量掩码配置为 0xFF000000 和 0xFF0000。
即:
au32CompMask[0] = 0xFF000000;
au32CompMask[1] = 0x00FF0000
也就是占用了16bit,16根线。
bt656的VI_DEV_ATTR_S设置解析
以下为8bit数据线流入1路视频
VI_DEV_ATTR_S DEV_ATTR_BT656D1_1MUX =
{
/*接口模式*/
VI_MODE_BT656,
/*1、2、4路工作模式: 1Multiplex,这个为单路*/
VI_WORK_MODE_1Multiplex,
/* r_mask g_mask b_mask 分量掩码*/
{0xFF000000, 0x0},
/*逐行or隔行输入*/
VI_SCAN_INTERLACED,
/*AdChnId*/
{-1, -1, -1, -1}
};
以下为8bit数据线流入4路视频
VI_DEV_ATTR_S DEV_ATTR_BT656D1_4MUX =
{
/*接口模式*/
VI_MODE_BT656,
/*1、2、4路工作模式*/
VI_WORK_MODE_4Multiplex,
/* r_mask g_mask b_mask*/
{0xFF000000, 0x0},
/*逐行or隔行输入*/
VI_SCAN_INTERLACED,
/*AdChnId*/
{-1, -1, -1, -1}
};
bt1120的VI_DEV_ATTR_S设置解析
以下为16bit流入1路1080视频流
VI_DEV_ATTR_S DEV_ATTR_7441_BT1120_1080P =
/* 典型时序3:7441 BT1120 1080P@60fps典型时序 (对接时序: 时序)*/
{
/*接口模式*/
VI_MODE_BT1120_STANDARD,
/*1、2、4路工作模式*/
VI_WORK_MODE_1Multiplex,
/* r_mask g_mask b_mask*/
{0xFF000000, 0xFF0000},
/*逐行or隔行输入*/
VI_SCAN_PROGRESSIVE,
/*AdChnId*/
{-1, -1, -1, -1},
/*enDataSeq, 仅支持YUV格式*/
VI_INPUT_DATA_UVUV,
/*同步信息,对应reg手册的如下配置, --bt1120时序无效*/
{
/*port_vsync port_vsync_neg port_hsync port_hsync_neg */
VI_VSYNC_PULSE, VI_VSYNC_NEG_HIGH, VI_HSYNC_VALID_SINGNAL,VI_HSYNC_NEG_HIGH,VI_VSYNC_NORM_PULSE,VI_VSYNC_VALID_NEG_HIGH,
/*timing信息,对应reg手册的如下配置*/
/*hsync_hfb hsync_act hsync_hhb*/
{0, 1920, 0,
/*vsync0_vhb vsync0_act vsync0_hhb*/
0, 1080, 0,
/*vsync1_vhb vsync1_act vsync1_hhb*/
0, 0, 0}
}
};