4. 摄像头
GC2053 是一个遵循MIPI CSI标准的2 lane摄像头。通过I2C可以控制对其进行控制。
没找到摄像头数据是怎么进来的资料,只能从板子里反推了。MIPI进的是RAW10的数据,到PIPE被转为RGB(有些PIPE不支持yuv),最后再在VI chn转为sp422出去。
MIPI模式,进RAW10的数据。
lane的划分模式用第二个,第一个设备就用0,2,第二个用1,3。
combo_dev_attr_t MIPI_GC2053_ATTR =
{
/* input mode */
.devno = 0,
.input_mode = INPUT_MODE_MIPI,
.data_rate = MIPI_DATA_RATE_X1,
.img_rect = {0, 0, 1920, 1080},
{
.mipi_attr =
{
DATA_TYPE_RAW_10BIT,
HI_MIPI_WDR_MODE_NONE,
{0, 2, -1, -1}
}
}
};
VI设备和MIPI好像差不多,由于是10bit的,掩码前10位为1,类型也是RGB。
VI_DEV_ATTR_S DEV_ATTR_GC2053_1080P_BASE =
{
/* interface mode */
VI_MODE_MIPI,
/* multiplex mode */
VI_WORK_MODE_1Multiplex,
/* r_mask g_mask b_mask*/
{0xffc00000, 0x0000000},
/* progessive or interleaving */
VI_SCAN_PROGRESSIVE, /*逐行*/
/*AdChnId*/
{-1, -1, -1, -1},
/*enDataSeq, only support yuv*/
VI_DATA_SEQ_UVUV,
/* synchronization information */
{
/*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,
/*hsync_hfb hsync_act hsync_hhb*/
{
0, 0, 0,
/*vsync0_vhb vsync0_act vsync0_hhb*/
0, 0, 0,
/*vsync1_vhb vsync1_act vsync1_hhb*/
0, 0, 0}},
/* input data type */
VI_DATA_TYPE_RGB,
/* bReverse */
HI_FALSE,
/* input size */
{1920, 1080},
{{
{1920, 1080},
},
{VI_REPHASE_MODE_NONE, VI_REPHASE_MODE_NONE}},
{WDR_MODE_NONE, 1080},
DATA_RATE_X1};
像素格式这里要选择bayer格式,是相机的原始数据格式。
VI_PIPE_ATTR_S PIPE_ATTR_GC2053_10800P_RGB = {
/* bBindDev bYuvSkip */
VI_PIPE_BYPASS_NONE,
HI_FALSE, /*YUV skip enable */
HI_FALSE, /* ISP Bypass */
1920,
1080,
PIXEL_FORMAT_RGB_BAYER_10BPP,
COMPRESS_MODE_NONE,
DATA_BITWIDTH_10, /* bit_width width: 16 illegal, should be when YUV!*/
HI_FALSE,
{PIXEL_FORMAT_RGB_BAYER_10BPP, DATA_BITWIDTH_10, VI_NR_REF_FROM_RFR,
COMPRESS_MODE_NONE},
HI_FALSE,
{-1, -1}
};
这里的这一步主要是配置摄像头,输出RAW格式的数据,否则是没有数据输出或者输出的数据不是我们相要的(要看厂家的手册)。用的是卖家的代码,这里主要配置一个sensor类型就可以了。
基于海思的一个VIO的例子,进行sensor配置信息的添加,完成了图像的输入。使用ISP配置GC2053输出10bit的RAW数据(Bayer),VI接收的时候是RGB。
做了一半的时候发现是有GC2053的配置的,错怪了卖家。还有就是ISP获取结构体有一个函数没有传感器类型的枚举值,而是一个id,实际的传感器类型是通过Makfile传过来的。总之,看代码的时候还是要认真一点。