3100 lines
90 KiB
C
3100 lines
90 KiB
C
/******************************************************************************
|
||
Some simple Hisilicon HI3531 video input functions.
|
||
|
||
Copyright (C), 2010-2011, Hisilicon Tech. Co., Ltd.
|
||
******************************************************************************
|
||
Modification: 2011-8 Created
|
||
******************************************************************************/
|
||
#ifdef __cplusplus
|
||
#if __cplusplus
|
||
extern "C"{
|
||
#endif
|
||
#endif /* End of #ifdef __cplusplus */
|
||
|
||
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
#include <string.h>
|
||
#include <sys/types.h>
|
||
#include <sys/stat.h>
|
||
#include <sys/ioctl.h>
|
||
#include <sys/poll.h>
|
||
#include <sys/time.h>
|
||
#include <fcntl.h>
|
||
#include <errno.h>
|
||
#include <pthread.h>
|
||
#include <math.h>
|
||
#include <unistd.h>
|
||
#include <signal.h>
|
||
#include "hi_mipi.h"
|
||
|
||
#include "hi_common.h"
|
||
#include "sample_comm.h"
|
||
|
||
VI_DEV_ATTR_S DEV_ATTR_BT656D1_1MUX =
|
||
{
|
||
/* interface mode */
|
||
VI_MODE_BT656,
|
||
/* multiplex mode */
|
||
VI_WORK_MODE_1Multiplex,
|
||
/* r_mask g_mask b_mask*/
|
||
{0xFF000000, 0x0},
|
||
/* progessive or interleaving */
|
||
VI_SCAN_INTERLACED,
|
||
/*AdChnId*/
|
||
{-1, -1, -1, -1},
|
||
/*enDataSeq, only support yuv*/
|
||
VI_INPUT_DATA_YVYU,
|
||
/* synchronization information */
|
||
{
|
||
/*port_vsync port_vsync_neg port_hsync port_hsync_neg */
|
||
VI_VSYNC_FIELD, VI_VSYNC_NEG_HIGH, VI_HSYNC_VALID_SINGNAL,VI_HSYNC_NEG_HIGH,VI_VSYNC_VALID_SINGAL,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}
|
||
},
|
||
/* ISP bypass */
|
||
VI_PATH_BYPASS,
|
||
/* input data type */
|
||
VI_DATA_TYPE_YUV,
|
||
/* bReverse */
|
||
HI_FALSE,
|
||
/* DEV CROP */
|
||
{0, 0, 1920, 1080}
|
||
};
|
||
|
||
/* BT1120 1080I¨º?¨¨? */
|
||
VI_DEV_ATTR_S DEV_ATTR_BT1120_1080I_1MUX =
|
||
{
|
||
/* interface mode */
|
||
VI_MODE_BT1120_STANDARD,
|
||
/* multiplex mode */
|
||
VI_WORK_MODE_1Multiplex,
|
||
/* r_mask g_mask b_mask*/
|
||
{0xFF000000, 0xFF0000},
|
||
/* progessive or interleaving */
|
||
VI_SCAN_INTERLACED,
|
||
/*AdChnId*/
|
||
{-1, -1, -1, -1},
|
||
/*enDataSeq, only support yuv*/
|
||
VI_INPUT_DATA_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
|
||
}
|
||
},
|
||
/* ISP bypass */
|
||
VI_PATH_BYPASS,
|
||
/* input data type */
|
||
VI_DATA_TYPE_YUV,
|
||
/* bReverse */
|
||
HI_FALSE,
|
||
/* DEV CROP */
|
||
{0, 0, 1920, 1080}
|
||
};
|
||
|
||
/* BT1120 1080p */
|
||
VI_DEV_ATTR_S DEV_ATTR_BT1120_1080P_BASE =
|
||
{
|
||
/* interface mode */
|
||
VI_MODE_BT1120_STANDARD,
|
||
/* multiplex mode */
|
||
VI_WORK_MODE_1Multiplex,
|
||
/* r_mask g_mask b_mask*/
|
||
{0xFF000000, 0xFF0000},
|
||
/* progessive or interleaving */
|
||
VI_SCAN_PROGRESSIVE,
|
||
/*AdChnId*/
|
||
{-1, -1, -1, -1},
|
||
/*enDataSeq, only support yuv*/
|
||
VI_INPUT_DATA_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
|
||
}
|
||
},
|
||
/* ISP bypass */
|
||
VI_PATH_BYPASS,
|
||
/* input data type */
|
||
VI_DATA_TYPE_YUV,
|
||
/* bReverse */
|
||
HI_FALSE,
|
||
/* DEV CROP */
|
||
{0, 0, 1920, 1080}
|
||
};
|
||
|
||
|
||
/* BT1120 720P */
|
||
VI_DEV_ATTR_S DEV_ATTR_BT1120_720P_BASE =
|
||
/* classical timing 3:7441 BT1120 720P@60fps*/
|
||
{
|
||
/* interface mode */
|
||
VI_MODE_BT1120_STANDARD,
|
||
/* multiplex mode */
|
||
VI_WORK_MODE_1Multiplex,
|
||
/* r_mask g_mask b_mask*/
|
||
{0xFF000000, 0xFF0000},
|
||
/* progessive or interleaving */
|
||
VI_SCAN_PROGRESSIVE,
|
||
//VI_SCAN_INTERLACED,
|
||
/*AdChnId*/
|
||
{-1, -1, -1, -1},
|
||
/*enDataSeq, only support yuv*/
|
||
VI_INPUT_DATA_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, 1280, 0,
|
||
/*vsync0_vhb vsync0_act vsync0_hhb*/
|
||
0, 720, 0,
|
||
/*vsync1_vhb vsync1_act vsync1_hhb*/
|
||
0, 0, 0
|
||
}
|
||
},
|
||
/* ISP bypass */
|
||
VI_PATH_BYPASS,
|
||
/* input data type */
|
||
VI_DATA_TYPE_YUV,
|
||
/* bReverse */
|
||
HI_FALSE,
|
||
/* DEV CROP */
|
||
{0, 0, 1280, 720}
|
||
};
|
||
|
||
|
||
/*imx122 DC 12bitÊäÈë*/
|
||
VI_DEV_ATTR_S DEV_ATTR_IMX122_DC_1080P_BASE =
|
||
{
|
||
/* interface mode */
|
||
VI_MODE_DIGITAL_CAMERA,
|
||
/* multiplex mode */
|
||
VI_WORK_MODE_1Multiplex,
|
||
/* r_mask g_mask b_mask*/
|
||
{0xFFF0000, 0x0},
|
||
/* progessive or interleaving */
|
||
VI_SCAN_PROGRESSIVE,
|
||
/*AdChnId*/
|
||
{-1, -1, -1, -1},
|
||
/*enDataSeq, only support yuv*/
|
||
VI_INPUT_DATA_YUYV,
|
||
|
||
/* 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_VALID_SINGAL,VI_VSYNC_VALID_NEG_HIGH,
|
||
|
||
/*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}
|
||
},
|
||
/* use interior ISP */
|
||
VI_PATH_ISP,
|
||
/* input data type */
|
||
VI_DATA_TYPE_RGB,
|
||
/* bRevert */
|
||
HI_FALSE,
|
||
/* stDevRect */
|
||
{200, 20, 1920, 1080}
|
||
};
|
||
|
||
/*imx122 DC 12bitÊäÈë*/
|
||
VI_DEV_ATTR_S DEV_ATTR_IMX122_DC_720P_BASE =
|
||
{
|
||
/* interface mode */
|
||
VI_MODE_DIGITAL_CAMERA,
|
||
/* multiplex mode */
|
||
VI_WORK_MODE_1Multiplex,
|
||
/* r_mask g_mask b_mask*/
|
||
{0xFFF0000, 0x0},
|
||
/* progessive or interleaving */
|
||
VI_SCAN_PROGRESSIVE,
|
||
/*AdChnId*/
|
||
{-1, -1, -1, -1},
|
||
/*enDataSeq, only support yuv*/
|
||
VI_INPUT_DATA_YUYV,
|
||
|
||
/* 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_VALID_SINGAL,VI_VSYNC_VALID_NEG_HIGH,
|
||
|
||
/*hsync_hfb hsync_act hsync_hhb*/
|
||
{0, 1280, 0,
|
||
/*vsync0_vhb vsync0_act vsync0_hhb*/
|
||
0, 720, 0,
|
||
/*vsync1_vhb vsync1_act vsync1_hhb*/
|
||
0, 0, 0}
|
||
},
|
||
/* use interior ISP */
|
||
VI_PATH_ISP,
|
||
/* input data type */
|
||
VI_DATA_TYPE_RGB,
|
||
/* bRevert */
|
||
HI_FALSE,
|
||
/* stDevRect */
|
||
{200, 20, 1280, 720}
|
||
};
|
||
|
||
/*9M034 DC 12bitÊäÈë720P@30fps*/
|
||
VI_DEV_ATTR_S DEV_ATTR_9M034_DC_720P_BASE =
|
||
{
|
||
/*½Ó¿Úģʽ*/
|
||
VI_MODE_DIGITAL_CAMERA,
|
||
/*1¡¢2¡¢4·¹¤×÷ģʽ*/
|
||
VI_WORK_MODE_1Multiplex,
|
||
/* r_mask g_mask b_mask*/
|
||
{0xFFF0000, 0x0},
|
||
/*ÖðÐÐor¸ôÐÐÊäÈë*/
|
||
VI_SCAN_PROGRESSIVE,
|
||
/*AdChnId*/
|
||
{-1, -1, -1, -1},
|
||
/*enDataSeq, ½öÖ§³ÖYUV¸ñʽ*/
|
||
VI_INPUT_DATA_YUYV,
|
||
|
||
/*ͬ²½ÐÅÏ¢£¬¶ÔÓ¦regÊÖ²áµÄÈçÏÂÅäÖÃ, --bt1120ʱÐòÎÞЧ*/
|
||
{
|
||
/*port_vsync port_vsync_neg port_hsync port_hsync_neg */
|
||
VI_VSYNC_PULSE, VI_VSYNC_NEG_LOW, VI_HSYNC_VALID_SINGNAL,VI_HSYNC_NEG_HIGH,VI_VSYNC_VALID_SINGAL,VI_VSYNC_VALID_NEG_HIGH,
|
||
|
||
/*timingÐÅÏ¢£¬¶ÔÓ¦regÊÖ²áµÄÈçÏÂÅäÖÃ*/
|
||
/*hsync_hfb hsync_act hsync_hhb*/
|
||
{370, 1280, 0,
|
||
/*vsync0_vhb vsync0_act vsync0_hhb*/
|
||
6, 720, 6,
|
||
/*vsync1_vhb vsync1_act vsync1_hhb*/
|
||
0, 0, 0}
|
||
},
|
||
/*ʹÓÃÄÚ²¿ISP*/
|
||
VI_PATH_ISP,
|
||
/*ÊäÈëÊý¾ÝÀàÐÍ*/
|
||
VI_DATA_TYPE_RGB,
|
||
/* Data Reverse */
|
||
HI_FALSE,
|
||
{0, 0, 1280, 720}
|
||
};
|
||
|
||
|
||
/*mt9p006 DC 12bitÊäÈë*/
|
||
VI_DEV_ATTR_S DEV_ATTR_MT9P006_DC_1080P =
|
||
{
|
||
/* interface mode */
|
||
VI_MODE_DIGITAL_CAMERA,
|
||
/* multiplex mode */
|
||
VI_WORK_MODE_1Multiplex,
|
||
/* r_mask g_mask b_mask*/
|
||
{0xFFF00000, 0x0},
|
||
/* progessive or interleaving */
|
||
VI_SCAN_PROGRESSIVE,
|
||
/*AdChnId*/
|
||
{-1, -1, -1, -1},
|
||
/*enDataSeq, only support yuv*/
|
||
VI_INPUT_DATA_YUYV,
|
||
|
||
/* 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_VALID_SINGAL,VI_VSYNC_VALID_NEG_HIGH,
|
||
|
||
/*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}
|
||
},
|
||
/* use interior ISP */
|
||
VI_PATH_ISP,
|
||
/* input data type */
|
||
VI_DATA_TYPE_RGB
|
||
};
|
||
|
||
VI_DEV_ATTR_S DEV_ATTR_LVDS_BASE =
|
||
{
|
||
/* interface mode */
|
||
VI_MODE_LVDS,
|
||
/* multiplex mode */
|
||
VI_WORK_MODE_1Multiplex,
|
||
/* r_mask g_mask b_mask*/
|
||
{0xFFF00000, 0x0},
|
||
/* progessive or interleaving */
|
||
VI_SCAN_PROGRESSIVE,
|
||
/*AdChnId*/
|
||
{-1, -1, -1, -1},
|
||
/*enDataSeq, only support yuv*/
|
||
VI_INPUT_DATA_YUYV,
|
||
|
||
/* synchronization information */
|
||
{
|
||
/*port_vsync port_vsync_neg port_hsync port_hsync_neg */
|
||
VI_VSYNC_PULSE, VI_VSYNC_NEG_LOW, VI_HSYNC_VALID_SINGNAL,VI_HSYNC_NEG_HIGH,VI_VSYNC_VALID_SINGAL,VI_VSYNC_VALID_NEG_HIGH,
|
||
|
||
/*hsync_hfb hsync_act hsync_hhb*/
|
||
{0, 1280, 0,
|
||
/*vsync0_vhb vsync0_act vsync0_hhb*/
|
||
0, 720, 0,
|
||
/*vsync1_vhb vsync1_act vsync1_hhb*/
|
||
0, 0, 0}
|
||
},
|
||
/* use interior ISP */
|
||
VI_PATH_ISP,
|
||
/* input data type */
|
||
VI_DATA_TYPE_RGB,
|
||
/* bRever */
|
||
HI_FALSE,
|
||
/* DEV CROP */
|
||
{0, 0, 1920, 1080}
|
||
};
|
||
|
||
VI_DEV_ATTR_S DEV_ATTR_HISPI_BASE =
|
||
{
|
||
/* interface mode */
|
||
VI_MODE_HISPI,
|
||
/* multiplex mode */
|
||
VI_WORK_MODE_1Multiplex,
|
||
/* r_mask g_mask b_mask*/
|
||
{0xFFF00000, 0x0},
|
||
/* progessive or interleaving */
|
||
VI_SCAN_PROGRESSIVE,
|
||
/*AdChnId*/
|
||
{-1, -1, -1, -1},
|
||
/*enDataSeq, only support yuv*/
|
||
VI_INPUT_DATA_YUYV,
|
||
|
||
/* synchronization information */
|
||
{
|
||
/*port_vsync port_vsync_neg port_hsync port_hsync_neg */
|
||
VI_VSYNC_PULSE, VI_VSYNC_NEG_LOW, VI_HSYNC_VALID_SINGNAL,VI_HSYNC_NEG_HIGH,VI_VSYNC_VALID_SINGAL,VI_VSYNC_VALID_NEG_HIGH,
|
||
|
||
/*hsync_hfb hsync_act hsync_hhb*/
|
||
{0, 1280, 0,
|
||
/*vsync0_vhb vsync0_act vsync0_hhb*/
|
||
0, 720, 0,
|
||
/*vsync1_vhb vsync1_act vsync1_hhb*/
|
||
0, 0, 0}
|
||
},
|
||
/* use interior ISP */
|
||
VI_PATH_ISP,
|
||
/* input data type */
|
||
VI_DATA_TYPE_RGB,
|
||
/* bRever */
|
||
HI_FALSE,
|
||
/* DEV CROP */
|
||
{0, 0, 1920, 1080}
|
||
};
|
||
|
||
|
||
VI_DEV_ATTR_S DEV_ATTR_MIPI_BASE =
|
||
{
|
||
/* interface mode */
|
||
VI_MODE_MIPI,
|
||
/* multiplex mode */
|
||
VI_WORK_MODE_1Multiplex,
|
||
/* r_mask g_mask b_mask*/
|
||
{0xFFF00000, 0x0},
|
||
/* progessive or interleaving */
|
||
VI_SCAN_PROGRESSIVE,
|
||
/*AdChnId*/
|
||
{-1, -1, -1, -1},
|
||
/*enDataSeq, only support yuv*/
|
||
VI_INPUT_DATA_YUYV,
|
||
|
||
/* synchronization information */
|
||
{
|
||
/*port_vsync port_vsync_neg port_hsync port_hsync_neg */
|
||
VI_VSYNC_PULSE, VI_VSYNC_NEG_LOW, VI_HSYNC_VALID_SINGNAL,VI_HSYNC_NEG_HIGH,VI_VSYNC_VALID_SINGAL,VI_VSYNC_VALID_NEG_HIGH,
|
||
|
||
/*hsync_hfb hsync_act hsync_hhb*/
|
||
{0, 1280, 0,
|
||
/*vsync0_vhb vsync0_act vsync0_hhb*/
|
||
0, 720, 0,
|
||
/*vsync1_vhb vsync1_act vsync1_hhb*/
|
||
0, 0, 0}
|
||
},
|
||
/* use interior ISP */
|
||
VI_PATH_ISP,
|
||
/* input data type */
|
||
VI_DATA_TYPE_RGB,
|
||
/* bRever */
|
||
HI_FALSE,
|
||
/* DEV CROP */
|
||
{0, 0, 1920, 1080}
|
||
};
|
||
|
||
|
||
combo_dev_attr_t LVDS_4lane_SENSOR_IMX136_12BIT_1080_NOWDR_ATTR =
|
||
{
|
||
/* input mode */
|
||
.input_mode = INPUT_MODE_LVDS,
|
||
{
|
||
.lvds_attr = {
|
||
.img_size = {1920, 1080},
|
||
HI_WDR_MODE_NONE,
|
||
LVDS_SYNC_MODE_SAV,
|
||
RAW_DATA_12BIT,
|
||
LVDS_ENDIAN_BIG,
|
||
LVDS_ENDIAN_BIG,
|
||
.lane_id = {0, 1, 2, 3, -1, -1, -1, -1},
|
||
.sync_code = {
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}}
|
||
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
combo_dev_attr_t SUBLVDS_4lane_SENSOR_MN34220_12BIT_1080_NOWDR_ATTR =
|
||
{
|
||
/* input mode */
|
||
.input_mode = INPUT_MODE_SUBLVDS,
|
||
|
||
{
|
||
.lvds_attr = {
|
||
.img_size = {1920, 1080},
|
||
HI_WDR_MODE_NONE,
|
||
LVDS_SYNC_MODE_SOL,
|
||
RAW_DATA_12BIT,
|
||
LVDS_ENDIAN_BIG,
|
||
LVDS_ENDIAN_BIG,
|
||
.lane_id = {0, 2, -1, -1, 1, 3, -1, -1},
|
||
.sync_code = {
|
||
{{0x002, 0x003, 0x000, 0x001}, //PHY0_lane0
|
||
{0x202, 0x203, 0x200, 0x201},
|
||
{0x102, 0x103, 0x100, 0x101},
|
||
{0x302, 0x303, 0x300, 0x301}},
|
||
|
||
{{0x006, 0x007, 0x004, 0x005}, //PHY0_lane1
|
||
{0x206, 0x207, 0x204, 0x205},
|
||
{0x106, 0x107, 0x104, 0x105},
|
||
{0x306, 0x307, 0x304, 0x305}},
|
||
|
||
{{0x00a, 0x00b, 0x008, 0x009}, //PHY0_lane2
|
||
{0x20a, 0x20b, 0x208, 0x209},
|
||
{0x10a, 0x10b, 0x108, 0x109},
|
||
{0x30a, 0x30b, 0x308, 0x309}},
|
||
|
||
{{0x00a, 0x00b, 0x008, 0x009}, //PHY0_lane3 INPUT_MODE_LVDS
|
||
{0x20a, 0x20b, 0x208, 0x209},
|
||
{0x10a, 0x10b, 0x108, 0x109},
|
||
{0x30a, 0x30b, 0x308, 0x309}},
|
||
|
||
{{0x012, 0x013, 0x010, 0x011},//PHY1_lane0
|
||
{0x212, 0x213, 0x210, 0x211},
|
||
{0x112, 0x113, 0x110, 0x111},
|
||
{0x312, 0x313, 0x310, 0x311}},
|
||
|
||
{{0x016, 0x017, 0x014, 0x015}, //PHY1_lane1
|
||
{0x216, 0x217, 0x214, 0x215},
|
||
{0x116, 0x117, 0x114, 0x115},
|
||
{0x316, 0x317, 0x314, 0x315}},
|
||
|
||
{{0x01a, 0x01b, 0x018, 0x019}, //PHY1_lane2
|
||
{0x21a, 0x21b, 0x218, 0x219},
|
||
{0x11a, 0x11b, 0x118, 0x119},
|
||
{0x31a, 0x31b, 0x318, 0x319}},
|
||
|
||
{{0x01a, 0x01b, 0x018, 0x019}, //PHY1_lane3
|
||
{0x21a, 0x21b, 0x218, 0x219},
|
||
{0x11a, 0x11b, 0x118, 0x119},
|
||
{0x31a, 0x31b, 0x318, 0x319}}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
combo_dev_attr_t SUBLVDS_4lane_SENSOR_MN34220_12BIT_1080_2WDR1_ATTR =
|
||
{
|
||
/* input mode */
|
||
.input_mode = INPUT_MODE_SUBLVDS,
|
||
|
||
{
|
||
.lvds_attr = {
|
||
.img_size = {1920, 1108},
|
||
HI_WDR_MODE_2F,
|
||
LVDS_SYNC_MODE_SOL,
|
||
RAW_DATA_12BIT,
|
||
LVDS_ENDIAN_BIG,
|
||
LVDS_ENDIAN_BIG,
|
||
.lane_id = {0, 2, -1, -1, 1, 3, -1, -1},
|
||
.sync_code = {
|
||
{{0x002, 0x003, 0x000, 0x001}, //PHY0_lane0
|
||
{0x202, 0x203, 0x200, 0x201},
|
||
{0x102, 0x103, 0x100, 0x101},
|
||
{0x302, 0x303, 0x300, 0x301}},
|
||
|
||
{{0x006, 0x007, 0x004, 0x005}, //PHY0_lane1
|
||
{0x206, 0x207, 0x204, 0x205},
|
||
{0x106, 0x107, 0x104, 0x105},
|
||
{0x306, 0x307, 0x304, 0x305}},
|
||
|
||
{{0x00a, 0x00b, 0x008, 0x009}, //PHY0_lane2
|
||
{0x20a, 0x20b, 0x208, 0x209},
|
||
{0x10a, 0x10b, 0x108, 0x109},
|
||
{0x30a, 0x30b, 0x308, 0x309}},
|
||
|
||
{{0x00a, 0x00b, 0x008, 0x009}, //PHY0_lane3 INPUT_MODE_LVDS
|
||
{0x20a, 0x20b, 0x208, 0x209},
|
||
{0x10a, 0x10b, 0x108, 0x109},
|
||
{0x30a, 0x30b, 0x308, 0x309}},
|
||
|
||
{{0x012, 0x013, 0x010, 0x011},//PHY1_lane0
|
||
{0x212, 0x213, 0x210, 0x211},
|
||
{0x112, 0x113, 0x110, 0x111},
|
||
{0x312, 0x313, 0x310, 0x311}},
|
||
|
||
{{0x016, 0x017, 0x014, 0x015}, //PHY1_lane1
|
||
{0x216, 0x217, 0x214, 0x215},
|
||
{0x116, 0x117, 0x114, 0x115},
|
||
{0x316, 0x317, 0x314, 0x315}},
|
||
|
||
{{0x01a, 0x01b, 0x018, 0x019}, //PHY1_lane2
|
||
{0x21a, 0x21b, 0x218, 0x219},
|
||
{0x11a, 0x11b, 0x118, 0x119},
|
||
{0x31a, 0x31b, 0x318, 0x319}},
|
||
|
||
{{0x01a, 0x01b, 0x018, 0x019}, //PHY1_lane3
|
||
{0x21a, 0x21b, 0x218, 0x219},
|
||
{0x11a, 0x11b, 0x118, 0x119},
|
||
{0x31a, 0x31b, 0x318, 0x319}}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
combo_dev_attr_t SUBLVDS_4lane_SENSOR_MN34220_12BIT_720_NOWDR_ATTR =
|
||
{
|
||
/* input mode */
|
||
.input_mode = INPUT_MODE_SUBLVDS,
|
||
|
||
{
|
||
.lvds_attr = {
|
||
.img_size = {1280, 720},
|
||
HI_WDR_MODE_NONE,
|
||
LVDS_SYNC_MODE_SOL,
|
||
RAW_DATA_12BIT,
|
||
LVDS_ENDIAN_BIG,
|
||
LVDS_ENDIAN_BIG,
|
||
.lane_id = {0, 2, -1, -1, 1, 3, -1, -1},
|
||
.sync_code = {
|
||
{{0x002, 0x003, 0x000, 0x001}, //PHY0_lane0
|
||
{0x202, 0x203, 0x200, 0x201},
|
||
{0x102, 0x103, 0x100, 0x101},
|
||
{0x302, 0x303, 0x300, 0x301}},
|
||
|
||
{{0x006, 0x007, 0x004, 0x005}, //PHY0_lane1
|
||
{0x206, 0x207, 0x204, 0x205},
|
||
{0x106, 0x107, 0x104, 0x105},
|
||
{0x306, 0x307, 0x304, 0x305}},
|
||
|
||
{{0x00a, 0x00b, 0x008, 0x009}, //PHY0_lane2
|
||
{0x20a, 0x20b, 0x208, 0x209},
|
||
{0x10a, 0x10b, 0x108, 0x109},
|
||
{0x30a, 0x30b, 0x308, 0x309}},
|
||
|
||
{{0x00a, 0x00b, 0x008, 0x009}, //PHY0_lane3 INPUT_MODE_LVDS
|
||
{0x20a, 0x20b, 0x208, 0x209},
|
||
{0x10a, 0x10b, 0x108, 0x109},
|
||
{0x30a, 0x30b, 0x308, 0x309}},
|
||
|
||
{{0x012, 0x013, 0x010, 0x011},//PHY1_lane0
|
||
{0x212, 0x213, 0x210, 0x211},
|
||
{0x112, 0x113, 0x110, 0x111},
|
||
{0x312, 0x313, 0x310, 0x311}},
|
||
|
||
{{0x016, 0x017, 0x014, 0x015}, //PHY1_lane1
|
||
{0x216, 0x217, 0x214, 0x215},
|
||
{0x116, 0x117, 0x114, 0x115},
|
||
{0x316, 0x317, 0x314, 0x315}},
|
||
|
||
{{0x01a, 0x01b, 0x018, 0x019}, //PHY1_lane2
|
||
{0x21a, 0x21b, 0x218, 0x219},
|
||
{0x11a, 0x11b, 0x118, 0x119},
|
||
{0x31a, 0x31b, 0x318, 0x319}},
|
||
|
||
{{0x01a, 0x01b, 0x018, 0x019}, //PHY1_lane3
|
||
{0x21a, 0x21b, 0x218, 0x219},
|
||
{0x11a, 0x11b, 0x118, 0x119},
|
||
{0x31a, 0x31b, 0x318, 0x319}}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
combo_dev_attr_t SUBLVDS_4lane_SENSOR_MN34220_12BIT_720_2WDR1_ATTR =
|
||
{
|
||
/* input mode */
|
||
.input_mode = INPUT_MODE_SUBLVDS,
|
||
|
||
{
|
||
.lvds_attr = {
|
||
.img_size = {1280, 720},
|
||
HI_WDR_MODE_2F,
|
||
LVDS_SYNC_MODE_SOL,
|
||
RAW_DATA_12BIT,
|
||
LVDS_ENDIAN_BIG,
|
||
LVDS_ENDIAN_BIG,
|
||
.lane_id = {0, 2, -1, -1, 1, 3, -1, -1},
|
||
.sync_code = {
|
||
{{0x002, 0x003, 0x000, 0x001}, //PHY0_lane0
|
||
{0x202, 0x203, 0x200, 0x201},
|
||
{0x102, 0x103, 0x100, 0x101},
|
||
{0x302, 0x303, 0x300, 0x301}},
|
||
|
||
{{0x006, 0x007, 0x004, 0x005}, //PHY0_lane1
|
||
{0x206, 0x207, 0x204, 0x205},
|
||
{0x106, 0x107, 0x104, 0x105},
|
||
{0x306, 0x307, 0x304, 0x305}},
|
||
|
||
{{0x00a, 0x00b, 0x008, 0x009}, //PHY0_lane2
|
||
{0x20a, 0x20b, 0x208, 0x209},
|
||
{0x10a, 0x10b, 0x108, 0x109},
|
||
{0x30a, 0x30b, 0x308, 0x309}},
|
||
|
||
{{0x00a, 0x00b, 0x008, 0x009}, //PHY0_lane3 INPUT_MODE_LVDS
|
||
{0x20a, 0x20b, 0x208, 0x209},
|
||
{0x10a, 0x10b, 0x108, 0x109},
|
||
{0x30a, 0x30b, 0x308, 0x309}},
|
||
|
||
{{0x012, 0x013, 0x010, 0x011},//PHY1_lane0
|
||
{0x212, 0x213, 0x210, 0x211},
|
||
{0x112, 0x113, 0x110, 0x111},
|
||
{0x312, 0x313, 0x310, 0x311}},
|
||
|
||
{{0x016, 0x017, 0x014, 0x015}, //PHY1_lane1
|
||
{0x216, 0x217, 0x214, 0x215},
|
||
{0x116, 0x117, 0x114, 0x115},
|
||
{0x316, 0x317, 0x314, 0x315}},
|
||
|
||
{{0x01a, 0x01b, 0x018, 0x019}, //PHY1_lane2
|
||
{0x21a, 0x21b, 0x218, 0x219},
|
||
{0x11a, 0x11b, 0x118, 0x119},
|
||
{0x31a, 0x31b, 0x318, 0x319}},
|
||
|
||
{{0x01a, 0x01b, 0x018, 0x019}, //PHY1_lane3
|
||
{0x21a, 0x21b, 0x218, 0x219},
|
||
{0x11a, 0x11b, 0x118, 0x119},
|
||
{0x31a, 0x31b, 0x318, 0x319}}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
combo_dev_attr_t LVDS_4lane_SENSOR_IMX178_12BIT_5M_NOWDR_ATTR =
|
||
{
|
||
/* input mode */
|
||
.input_mode = INPUT_MODE_LVDS,
|
||
{
|
||
.lvds_attr = {
|
||
.img_size = {2592, 1944},
|
||
HI_WDR_MODE_NONE,
|
||
LVDS_SYNC_MODE_SAV,
|
||
RAW_DATA_12BIT,
|
||
LVDS_ENDIAN_BIG,
|
||
LVDS_ENDIAN_BIG,
|
||
.lane_id = {0, 1, 2, 3, -1, -1, -1, -1},
|
||
.sync_code = {
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
combo_dev_attr_t LVDS_4lane_SENSOR_IMX178_12BIT_1080p_ATTR =
|
||
{
|
||
/* input mode */
|
||
.input_mode = INPUT_MODE_LVDS,
|
||
{
|
||
.lvds_attr = {
|
||
.img_size = {1920, 1080},
|
||
HI_WDR_MODE_NONE,
|
||
LVDS_SYNC_MODE_SAV,
|
||
RAW_DATA_12BIT,
|
||
LVDS_ENDIAN_BIG,
|
||
LVDS_ENDIAN_BIG,
|
||
.lane_id = {0, 1, 2, 3, -1, -1, -1, -1},
|
||
.sync_code = {
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}},
|
||
|
||
{{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0},
|
||
{0xab0, 0xb60, 0x800, 0x9d0}}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
combo_dev_attr_t MIPI_CMOS3V3_ATTR =
|
||
{
|
||
/* input mode */
|
||
.input_mode = INPUT_MODE_CMOS_33V,
|
||
{
|
||
|
||
}
|
||
};
|
||
|
||
combo_dev_attr_t MIPI_4lane_SENSOR_MN34220_MIPI_12BIT_ATTR =
|
||
{
|
||
.input_mode = INPUT_MODE_MIPI,
|
||
{
|
||
.mipi_attr =
|
||
{
|
||
RAW_DATA_12BIT,
|
||
{0, 1, 2, 3, -1, -1, -1, -1}
|
||
}
|
||
}
|
||
|
||
};
|
||
|
||
combo_dev_attr_t MIPI_BT1120_ATTR =
|
||
{
|
||
/* input mode */
|
||
.input_mode = INPUT_MODE_BT1120,
|
||
{
|
||
|
||
}
|
||
};
|
||
|
||
|
||
combo_dev_attr_t MIPI_4lane_SENSOR_OV4682_10BIT_ATTR =
|
||
{
|
||
.input_mode = INPUT_MODE_MIPI,
|
||
{
|
||
.mipi_attr =
|
||
{
|
||
RAW_DATA_10BIT,
|
||
// ¸Ä°æºóÐÂsensor
|
||
{0, 1, 2, 3, -1, -1, -1, -1}
|
||
// ¸Ä°æÇ°¾Ésensor
|
||
//{1, 0, 2, 3, -1, -1, -1, -1}
|
||
}
|
||
}
|
||
|
||
};
|
||
|
||
combo_dev_attr_t HISPI_4lane_SENSOR_AR0230_12BIT_ATTR =
|
||
{
|
||
/* input mode */
|
||
.input_mode = INPUT_MODE_HISPI,
|
||
{
|
||
.lvds_attr =
|
||
{
|
||
.img_size = {1920, 1080},
|
||
HI_WDR_MODE_NONE,
|
||
LVDS_SYNC_MODE_SOL,
|
||
RAW_DATA_12BIT,
|
||
LVDS_ENDIAN_LITTLE,
|
||
LVDS_ENDIAN_LITTLE,
|
||
.lane_id = {0, 1, 2, 3, -1, -1, -1, -1},
|
||
.sync_code =
|
||
{
|
||
{{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005}},
|
||
|
||
{{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005}},
|
||
|
||
{{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005}},
|
||
|
||
{{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005}},
|
||
|
||
{{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005}},
|
||
|
||
{{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005}},
|
||
|
||
{{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005}},
|
||
|
||
{{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005},
|
||
{0x003, 0x007, 0x001, 0x005}}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
|
||
|
||
VI_CHN_ATTR_S CHN_ATTR_1920x1080_422 =
|
||
/*µäÐÍͨµÀÊôÐÔ2:1920x1080@xxfps ¸ñʽ422*/
|
||
{
|
||
/* crop_x crop_y crop_w crop_h */
|
||
{0, 0, 1920, 1080},
|
||
/* dest_w dest_h */
|
||
{1920, 1080 },
|
||
/*enCapSel*/
|
||
VI_CAPSEL_BOTH,
|
||
/* channel pixel format */
|
||
PIXEL_FORMAT_YUV_SEMIPLANAR_422,
|
||
/*bMirr bFlip bChromaResample*/
|
||
0, 0, 0,
|
||
/*s32SrcFrameRate s32DstFrameRate*/
|
||
-1, -1
|
||
};
|
||
|
||
VI_CHN_ATTR_S CHN_ATTR_860x540_422 =
|
||
{
|
||
/*crop_x crop_y crop_w crop_h*/
|
||
{0, 0, 860, 540},
|
||
/* dest_w dest_h */
|
||
{860, 540 },
|
||
/*enCapSel*/
|
||
VI_CAPSEL_BOTH,
|
||
/* channel pixel format */
|
||
PIXEL_FORMAT_YUV_SEMIPLANAR_422,
|
||
/*bMirr bFlip bChromaResample*/
|
||
0, 0, 0,
|
||
/*s32SrcFrameRate s32DstFrameRate*/
|
||
-1, -1
|
||
};
|
||
|
||
|
||
VI_CHN_ATTR_S CHN_ATTR_1280x720_422 =
|
||
{
|
||
/* crop_x crop_y crop_w crop_h */
|
||
{0, 0, 1280, 720 },
|
||
/* dest_w dest_h */
|
||
{1280, 720 },
|
||
/*enCapSel*/
|
||
VI_CAPSEL_BOTH,
|
||
/* channel pixel format */
|
||
PIXEL_FORMAT_YUV_SEMIPLANAR_422,
|
||
/*bMirr bFlip bChromaResample*/
|
||
0, 0, 0,
|
||
/*s32SrcFrameRate s32DstFrameRate*/
|
||
-1, -1
|
||
};
|
||
|
||
VI_CHN_ATTR_S CHN_ATTR_640x360_422 =
|
||
{
|
||
/* crop_x crop_y crop_w crop_h */
|
||
{0, 0, 640, 360},
|
||
/* dest_w dest_h */
|
||
{640, 360 },
|
||
/*enCapSel*/
|
||
VI_CAPSEL_BOTH,
|
||
/* channel pixel format */
|
||
PIXEL_FORMAT_YUV_SEMIPLANAR_422,
|
||
/*bMirr bFlip bChromaResample*/
|
||
0, 0, 0,
|
||
/*s32SrcFrameRate s32DstFrameRate*/
|
||
-1, -1
|
||
};
|
||
|
||
|
||
VI_CHN_ATTR_S CHN_ATTR_1280x720_420 =
|
||
{
|
||
/* crop_x crop_y crop_w crop_h */
|
||
{0, 0, 1280, 720},
|
||
/* dest_w dest_h */
|
||
{1280, 720 },
|
||
/*enCapSel*/
|
||
VI_CAPSEL_BOTH,
|
||
/* channel pixel format */
|
||
PIXEL_FORMAT_YUV_SEMIPLANAR_420,
|
||
/*bMirr bFlip bChromaResample*/
|
||
0, 0, 0,
|
||
/*s32SrcFrameRate s32DstFrameRate*/
|
||
-1, -1
|
||
};
|
||
|
||
|
||
VI_CHN_ATTR_S CHN_ATTR_720x576_422 =
|
||
{
|
||
/* crop_x crop_y crop_w crop_h */
|
||
{0, 0, 720, 576 },
|
||
/* dest_w dest_h */
|
||
{720, 576 },
|
||
/*enCapSel*/
|
||
VI_CAPSEL_BOTH,
|
||
/* channel pixel format */
|
||
PIXEL_FORMAT_YUV_SEMIPLANAR_422,
|
||
/*bMirr bFlip bChromaResample*/
|
||
0, 0, 0,
|
||
/*s32SrcFrameRate s32DstFrameRate*/
|
||
-1, -1
|
||
};
|
||
|
||
VI_CHN_ATTR_S CHN_ATTR_720x576_420 =
|
||
{
|
||
/* crop_x crop_y crop_w crop_h */
|
||
{0, 0, 720, 576},
|
||
/* dest_w dest_h */
|
||
{720, 576},
|
||
/*enCapSel*/
|
||
VI_CAPSEL_BOTH,
|
||
/* channel pixel format */
|
||
PIXEL_FORMAT_YUV_SEMIPLANAR_420,
|
||
/*bMirr bFlip bChromaResample*/
|
||
0, 0, 0,
|
||
/*s32SrcFrameRate s32DstFrameRate*/
|
||
-1, -1
|
||
};
|
||
|
||
VI_CHN_ATTR_S CHN_ATTR_360x288_422 =
|
||
{
|
||
/* crop_x crop_y crop_w crop_h */
|
||
{0, 0, 360, 288 },
|
||
/* dest_w dest_h */
|
||
{360, 288 },
|
||
/*enCapSel*/
|
||
VI_CAPSEL_BOTH,
|
||
/* channel pixel format */
|
||
PIXEL_FORMAT_YUV_SEMIPLANAR_422,
|
||
/*bMirr bFlip bChromaResample*/
|
||
0, 0, 0,
|
||
/*s32SrcFrameRate s32DstFrameRate*/
|
||
-1, -1
|
||
};
|
||
|
||
VI_CHN_ATTR_S CHN_ATTR_360x288_420 =
|
||
{
|
||
/* crop_x crop_y crop_w crop_h */
|
||
{0, 0, 360, 288},
|
||
/* dest_w dest_h */
|
||
{360, 288},
|
||
/*enCapSel*/
|
||
VI_CAPSEL_BOTH,
|
||
/* channel pixel format */
|
||
PIXEL_FORMAT_YUV_SEMIPLANAR_420,
|
||
/*bMirr bFlip bChromaResample*/
|
||
0, 0, 0,
|
||
/*s32SrcFrameRate s32DstFrameRate*/
|
||
-1, -1
|
||
};
|
||
|
||
VI_CHN_ATTR_S CHN_ATTR_16x16_422 =
|
||
{
|
||
/* crop_x crop_y crop_w crop_h */
|
||
{0, 0, 16, 16 },
|
||
/* dest_w dest_h */
|
||
{16, 16 },
|
||
/*enCapSel*/
|
||
VI_CAPSEL_BOTH,
|
||
/* channel pixel format */
|
||
PIXEL_FORMAT_YUV_SEMIPLANAR_422,
|
||
/*bMirr bFlip bChromaResample*/
|
||
0, 0, 0,
|
||
/*s32SrcFrameRate s32DstFrameRate*/
|
||
-1, -1
|
||
};
|
||
|
||
VI_CHN_ATTR_S CHN_ATTR_960x576_422 =
|
||
{
|
||
/* crop_x crop_y crop_w crop_h */
|
||
{0, 0, 960, 576 },
|
||
/* dest_w dest_h */
|
||
{960, 576 },
|
||
/*enCapSel*/
|
||
VI_CAPSEL_BOTH,
|
||
/* channel pixel format */
|
||
PIXEL_FORMAT_YUV_SEMIPLANAR_422,
|
||
/*bMirr bFlip bChromaResample*/
|
||
0, 0, 0,
|
||
/*s32SrcFrameRate s32DstFrameRate*/
|
||
-1, -1
|
||
};
|
||
|
||
VI_CHN_ATTR_S CHN_ATTR_480x288_422 =
|
||
{
|
||
/* crop_x crop_y crop_w crop_h */
|
||
{0, 0, 480, 288},
|
||
/* dest_w dest_h */
|
||
{480, 288 },
|
||
/*enCapSel*/
|
||
VI_CAPSEL_BOTH,
|
||
/* channel pixel format */
|
||
PIXEL_FORMAT_YUV_SEMIPLANAR_422,
|
||
/*bMirr bFlip bChromaResample*/
|
||
0, 0, 0,
|
||
/*s32SrcFrameRate s32DstFrameRate*/
|
||
-1, -1
|
||
};
|
||
|
||
VI_DEV g_as32ViDev[VIU_MAX_DEV_NUM];
|
||
VI_CHN g_as32MaxChn[VIU_MAX_CHN_NUM];
|
||
VI_CHN g_as32SubChn[VIU_MAX_CHN_NUM];
|
||
|
||
HI_S32 SAMPLE_TW2865_CfgV(VIDEO_NORM_E enVideoMode,VI_WORK_MODE_E enWorkMode)
|
||
{
|
||
#if 0
|
||
int fd, i;
|
||
int video_mode;
|
||
tw2865_video_norm stVideoMode;
|
||
tw2865_work_mode work_mode;
|
||
|
||
int chip_cnt = 4;
|
||
|
||
fd = open(TW2865_FILE, O_RDWR);
|
||
if (fd < 0)
|
||
{
|
||
SAMPLE_PRT("open 2865 (%s) fail\n", TW2865_FILE);
|
||
return -1;
|
||
}
|
||
|
||
video_mode = (VIDEO_ENCODING_MODE_PAL == enVideoMode) ? TW2865_PAL : TW2865_NTSC ;
|
||
|
||
for (i=0; i<chip_cnt; i++)
|
||
{
|
||
stVideoMode.chip = i;
|
||
stVideoMode.mode = video_mode;
|
||
if (ioctl(fd, TW2865_SET_VIDEO_NORM, &stVideoMode))
|
||
{
|
||
SAMPLE_PRT("set tw2865(%d) video mode fail\n", i);
|
||
close(fd);
|
||
return -1;
|
||
}
|
||
}
|
||
|
||
for (i=0; i<chip_cnt; i++)
|
||
{
|
||
work_mode.chip = i;
|
||
if (VI_WORK_MODE_4Multiplex== enWorkMode)
|
||
{
|
||
work_mode.mode = TW2865_4D1_MODE;
|
||
}
|
||
else if (VI_WORK_MODE_2Multiplex== enWorkMode)
|
||
{
|
||
work_mode.mode = TW2865_2D1_MODE;
|
||
}
|
||
else if (VI_WORK_MODE_1Multiplex == enWorkMode)
|
||
{
|
||
work_mode.mode = TW2865_1D1_MODE;
|
||
}
|
||
else
|
||
{
|
||
SAMPLE_PRT("work mode not support\n");
|
||
return -1;
|
||
}
|
||
ioctl(fd, TW2865_SET_WORK_MODE, &work_mode);
|
||
}
|
||
|
||
close(fd);
|
||
#endif
|
||
return 0;
|
||
}
|
||
|
||
HI_S32 SAMPLE_COMM_VI_Mode2Param(SAMPLE_VI_MODE_E enViMode, SAMPLE_VI_PARAM_S *pstViParam)
|
||
{
|
||
switch (enViMode)
|
||
{
|
||
default:
|
||
pstViParam->s32ViDevCnt = 1;
|
||
pstViParam->s32ViDevInterval = 1;
|
||
pstViParam->s32ViChnCnt = 1;
|
||
pstViParam->s32ViChnInterval = 1;
|
||
break;
|
||
}
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
/*****************************************************************************
|
||
* function : get vi parameter, according to vi type
|
||
*****************************************************************************/
|
||
HI_S32 SAMPLE_COMM_VI_ADStart(SAMPLE_VI_MODE_E enViMode, VIDEO_NORM_E enNorm)
|
||
{
|
||
VI_WORK_MODE_E enWorkMode;
|
||
HI_S32 s32Ret;
|
||
|
||
switch (enViMode)
|
||
{
|
||
case SAMPLE_VI_MODE_1_D1:
|
||
enWorkMode = VI_WORK_MODE_1Multiplex;
|
||
s32Ret = SAMPLE_TW2865_CfgV(enNorm, enWorkMode);
|
||
if (s32Ret != HI_SUCCESS)
|
||
{
|
||
SAMPLE_PRT("SAMPLE_TW2865_CfgV failed with %#x!\n",\
|
||
s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
break;
|
||
|
||
/* use 7601 without drv */
|
||
case SAMPLE_VI_MODE_BT1120_720P:
|
||
case SAMPLE_VI_MODE_BT1120_1080P:
|
||
break;
|
||
|
||
default:
|
||
SAMPLE_PRT("AD not support!\n");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
|
||
|
||
/*****************************************************************************
|
||
* function : get vi parameter, according to vi type
|
||
*****************************************************************************/
|
||
HI_S32 SAMPLE_COMM_VI_Mode2Size(SAMPLE_VI_MODE_E enViMode, VIDEO_NORM_E enNorm, SIZE_S *pstSize)
|
||
{
|
||
switch (enViMode)
|
||
{
|
||
case SAMPLE_VI_MODE_1_D1:
|
||
pstSize->u32Width = 720;
|
||
pstSize->u32Height = (VIDEO_ENCODING_MODE_PAL==enNorm)?576:480;
|
||
break;
|
||
|
||
case SAMPLE_VI_MODE_BT1120_1080P:
|
||
pstSize->u32Width = 1920;
|
||
pstSize->u32Height = 1080;
|
||
break;
|
||
|
||
case SAMPLE_VI_MODE_BT1120_720P:
|
||
pstSize->u32Width = 1280;
|
||
pstSize->u32Height = 720;
|
||
break;
|
||
|
||
default:
|
||
SAMPLE_PRT("vi mode invaild!\n");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
/*****************************************************************************
|
||
* function : Get Vi Dev No. according to Vi_Chn No.
|
||
*****************************************************************************/
|
||
VI_DEV SAMPLE_COMM_VI_GetDev(SAMPLE_VI_MODE_E enViMode, VI_CHN ViChn)
|
||
{
|
||
HI_S32 s32Ret, s32ChnPerDev;
|
||
SAMPLE_VI_PARAM_S stViParam;
|
||
|
||
s32Ret = SAMPLE_COMM_VI_Mode2Param(enViMode, &stViParam);
|
||
if (HI_SUCCESS !=s32Ret)
|
||
{
|
||
SAMPLE_PRT("vi get param failed!\n");
|
||
return (VI_DEV)-1;
|
||
}
|
||
|
||
s32ChnPerDev = stViParam.s32ViChnCnt / stViParam.s32ViDevCnt;
|
||
return (VI_DEV)(ViChn /stViParam.s32ViChnInterval / s32ChnPerDev * stViParam.s32ViDevInterval);
|
||
}
|
||
|
||
/******************************************************************************
|
||
* function : Set vi system memory location
|
||
******************************************************************************/
|
||
HI_S32 SAMPLE_COMM_VI_MemConfig(SAMPLE_VI_MODE_E enViMode)
|
||
{
|
||
HI_CHAR * pcMmzName;
|
||
MPP_CHN_S stMppChnVI;
|
||
SAMPLE_VI_PARAM_S stViParam;
|
||
VI_DEV ViDev;
|
||
VI_CHN ViChn;
|
||
|
||
HI_S32 i, s32Ret;
|
||
|
||
s32Ret = SAMPLE_COMM_VI_Mode2Param(enViMode, &stViParam);
|
||
if (HI_SUCCESS !=s32Ret)
|
||
{
|
||
SAMPLE_PRT("vi get param failed!\n");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
for(i=0; i<stViParam.s32ViChnCnt; i++)
|
||
{
|
||
ViChn = i * stViParam.s32ViChnInterval;
|
||
ViDev = SAMPLE_COMM_VI_GetDev(enViMode, ViChn);
|
||
//printf("dev:%d, chn:%d\n", ViDev, ViChn);
|
||
if (ViDev < 0)
|
||
{
|
||
SAMPLE_PRT("get vi dev failed !\n");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
pcMmzName = (0==i%2)?NULL: "ddr1";
|
||
stMppChnVI.enModId = HI_ID_VIU;
|
||
stMppChnVI.s32DevId = 0; //For VIU mode, this item must be set to zero
|
||
stMppChnVI.s32ChnId = ViChn;
|
||
s32Ret = HI_MPI_SYS_SetMemConf(&stMppChnVI,pcMmzName);
|
||
if (s32Ret)
|
||
{
|
||
SAMPLE_PRT("VI HI_MPI_SYS_SetMemConf failed with %#x!\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
}
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
HI_S32 SAMPLE_COMM_VI_SetMipiAttr(SAMPLE_VI_CONFIG_S* pstViConfig);
|
||
|
||
/*****************************************************************************
|
||
* function : init mipi
|
||
*****************************************************************************/
|
||
HI_S32 SAMPLE_COMM_VI_StartMIPI(SAMPLE_VI_CONFIG_S* pstViConfig)
|
||
{
|
||
int s32Ret;
|
||
|
||
/* SAMPLE_COMM_VI_SetMipiAttr */
|
||
s32Ret = SAMPLE_COMM_VI_SetMipiAttr(pstViConfig);
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
SAMPLE_PRT("%s: mipi init failed!\n", __FUNCTION__);
|
||
/* disable videv */
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
/*****************************************************************************
|
||
* function : star vi dev (cfg vi_dev_attr; set_dev_cfg; enable dev)
|
||
*****************************************************************************/
|
||
HI_S32 SAMPLE_COMM_VI_StartDev(VI_DEV ViDev, SAMPLE_VI_MODE_E enViMode)
|
||
{
|
||
HI_S32 s32Ret;
|
||
HI_S32 s32IspDev = 0;
|
||
ISP_WDR_MODE_S stWdrMode;
|
||
VI_DEV_ATTR_S stViDevAttr;
|
||
|
||
memset(&stViDevAttr,0,sizeof(stViDevAttr));
|
||
|
||
switch (enViMode)
|
||
{
|
||
case SAMPLE_VI_MODE_1_D1:
|
||
memcpy(&stViDevAttr,&DEV_ATTR_BT656D1_1MUX,sizeof(stViDevAttr));
|
||
break;
|
||
|
||
case SAMPLE_VI_MODE_BT1120_1080P:
|
||
memcpy(&stViDevAttr,&DEV_ATTR_BT1120_1080P_BASE,sizeof(stViDevAttr));
|
||
break;
|
||
|
||
case SAMPLE_VI_MODE_BT1120_720P:
|
||
memcpy(&stViDevAttr,&DEV_ATTR_BT1120_720P_BASE,sizeof(stViDevAttr));
|
||
break;
|
||
|
||
|
||
case SONY_IMX122_DC_1080P_30FPS:
|
||
memcpy(&stViDevAttr,&DEV_ATTR_IMX122_DC_1080P_BASE,sizeof(stViDevAttr));
|
||
break;
|
||
|
||
case SONY_IMX122_DC_720P_30FPS:
|
||
memcpy(&stViDevAttr,&DEV_ATTR_IMX122_DC_720P_BASE,sizeof(stViDevAttr));
|
||
break;
|
||
|
||
case APTINA_9M034_DC_720P_30FPS:
|
||
memcpy(&stViDevAttr,&DEV_ATTR_9M034_DC_720P_BASE,sizeof(stViDevAttr));
|
||
break;
|
||
|
||
case APTINA_AR0130_DC_720P_30FPS:
|
||
memcpy(&stViDevAttr,&DEV_ATTR_9M034_DC_720P_BASE,sizeof(stViDevAttr));
|
||
break;
|
||
|
||
case APTINA_AR0230_HISPI_1080P_30FPS:
|
||
memcpy(&stViDevAttr,&DEV_ATTR_HISPI_BASE,sizeof(stViDevAttr));
|
||
stViDevAttr.stDevRect.s32X = 0;
|
||
stViDevAttr.stDevRect.s32Y = 0;
|
||
stViDevAttr.stDevRect.u32Width = 1920;
|
||
stViDevAttr.stDevRect.u32Height = 1080;
|
||
break;
|
||
|
||
default:
|
||
memcpy(&stViDevAttr,&DEV_ATTR_LVDS_BASE,sizeof(stViDevAttr));
|
||
}
|
||
|
||
s32Ret = HI_MPI_VI_SetDevAttr(ViDev, &stViDevAttr);
|
||
if (s32Ret != HI_SUCCESS)
|
||
{
|
||
SAMPLE_PRT("HI_MPI_VI_SetDevAttr failed with %#x!\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
if ( (SAMPLE_VI_MODE_BT1120_1080P != enViMode)
|
||
&&(SAMPLE_VI_MODE_BT1120_720P != enViMode) )
|
||
{
|
||
s32Ret = HI_MPI_ISP_GetWDRMode(s32IspDev, &stWdrMode);
|
||
if (s32Ret != HI_SUCCESS)
|
||
{
|
||
SAMPLE_PRT("HI_MPI_ISP_GetWDRMode failed with %#x!\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
if (stWdrMode.enWDRMode) //wdr mode
|
||
{
|
||
VI_WDR_ATTR_S stWdrAttr;
|
||
|
||
stWdrAttr.enWDRMode = stWdrMode.enWDRMode;
|
||
stWdrAttr.bCompress = HI_FALSE;
|
||
|
||
s32Ret = HI_MPI_VI_SetWDRAttr(ViDev, &stWdrAttr);
|
||
if (s32Ret)
|
||
{
|
||
SAMPLE_PRT("HI_MPI_VI_SetWDRAttr failed with %#x!\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
}
|
||
}
|
||
|
||
s32Ret = HI_MPI_VI_EnableDev(ViDev);
|
||
if (s32Ret != HI_SUCCESS)
|
||
{
|
||
SAMPLE_PRT("HI_MPI_VI_EnableDev failed with %#x!\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
/*****************************************************************************
|
||
* function : star vi chn
|
||
*****************************************************************************/
|
||
HI_S32 SAMPLE_COMM_VI_StartChn(VI_CHN ViChn, RECT_S *pstCapRect, SIZE_S *pstTarSize, SAMPLE_VI_CONFIG_S* pstViConfig)
|
||
{
|
||
HI_S32 s32Ret;
|
||
VI_CHN_ATTR_S stChnAttr;
|
||
ROTATE_E enRotate = ROTATE_NONE;
|
||
SAMPLE_VI_CHN_SET_E enViChnSet = VI_CHN_SET_NORMAL;
|
||
|
||
if(pstViConfig)
|
||
{
|
||
enViChnSet = pstViConfig->enViChnSet;
|
||
enRotate = pstViConfig->enRotate;
|
||
}
|
||
|
||
/* step 5: config & start vicap dev */
|
||
memcpy(&stChnAttr.stCapRect, pstCapRect, sizeof(RECT_S));
|
||
stChnAttr.enCapSel = VI_CAPSEL_BOTH;
|
||
/* to show scale. this is a sample only, we want to show dist_size = D1 only */
|
||
stChnAttr.stDestSize.u32Width = pstTarSize->u32Width;
|
||
stChnAttr.stDestSize.u32Height = pstTarSize->u32Height;
|
||
stChnAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420; /* sp420 or sp422 */
|
||
|
||
stChnAttr.bMirror = HI_FALSE;
|
||
stChnAttr.bFlip = HI_FALSE;
|
||
|
||
switch(enViChnSet)
|
||
{
|
||
case VI_CHN_SET_MIRROR:
|
||
stChnAttr.bMirror = HI_TRUE;
|
||
break;
|
||
|
||
case VI_CHN_SET_FLIP:
|
||
stChnAttr.bFlip = HI_TRUE;
|
||
break;
|
||
|
||
case VI_CHN_SET_FLIP_MIRROR:
|
||
stChnAttr.bMirror = HI_TRUE;
|
||
stChnAttr.bFlip = HI_TRUE;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
stChnAttr.s32SrcFrameRate = -1;
|
||
stChnAttr.s32DstFrameRate = -1;
|
||
stChnAttr.enCompressMode = COMPRESS_MODE_NONE;
|
||
|
||
s32Ret = HI_MPI_VI_SetChnAttr(ViChn, &stChnAttr);
|
||
if (s32Ret != HI_SUCCESS)
|
||
{
|
||
SAMPLE_PRT("failed with %#x!\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
if(ROTATE_NONE != enRotate)
|
||
{
|
||
s32Ret = HI_MPI_VI_SetRotate(ViChn, enRotate);
|
||
if (s32Ret != HI_SUCCESS)
|
||
{
|
||
SAMPLE_PRT("HI_MPI_VI_SetRotate failed with %#x!\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
}
|
||
|
||
s32Ret = HI_MPI_VI_EnableChn(ViChn);
|
||
if (s32Ret != HI_SUCCESS)
|
||
{
|
||
SAMPLE_PRT("failed with %#x!\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
/*****************************************************************************
|
||
* function : star vi according to product type
|
||
*****************************************************************************/
|
||
HI_S32 SAMPLE_COMM_VI_StartBT656(SAMPLE_VI_CONFIG_S* pstViConfig)
|
||
{
|
||
HI_S32 i, s32Ret = HI_SUCCESS;
|
||
VI_DEV ViDev;
|
||
VI_CHN ViChn;
|
||
HI_U32 u32DevNum = 1;
|
||
HI_U32 u32ChnNum = 1;
|
||
SIZE_S stTargetSize;
|
||
RECT_S stCapRect;
|
||
SAMPLE_VI_MODE_E enViMode;
|
||
|
||
if(!pstViConfig)
|
||
{
|
||
SAMPLE_PRT("%s: null ptr\n", __FUNCTION__);
|
||
return HI_FAILURE;
|
||
}
|
||
enViMode = pstViConfig->enViMode;
|
||
|
||
/******************************************
|
||
step 1: mipi configure
|
||
******************************************/
|
||
s32Ret = SAMPLE_COMM_VI_StartMIPI_BT1120(enViMode);
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
SAMPLE_PRT("%s: MIPI init failed!\n", __FUNCTION__);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
for (i = 0; i < u32DevNum; i++)
|
||
{
|
||
ViDev = i;
|
||
s32Ret = SAMPLE_COMM_VI_StartDev(ViDev, enViMode);
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
SAMPLE_PRT("%s: start vi dev[%d] failed!\n", __FUNCTION__, i);
|
||
return HI_FAILURE;
|
||
}
|
||
}
|
||
|
||
/******************************************************
|
||
* Step 2: config & start vicap chn (max 1)
|
||
******************************************************/
|
||
for (i = 0; i < u32ChnNum; i++)
|
||
{
|
||
ViChn = i;
|
||
|
||
stCapRect.s32X = 0;
|
||
stCapRect.s32Y = 0;
|
||
switch (enViMode)
|
||
{
|
||
case SAMPLE_VI_MODE_BT1120_720P:
|
||
stCapRect.u32Width = 1280;
|
||
stCapRect.u32Height = 720;
|
||
break;
|
||
|
||
case SAMPLE_VI_MODE_BT1120_1080P:
|
||
stCapRect.u32Width = 1920;
|
||
stCapRect.u32Height = 1080;
|
||
break;
|
||
|
||
default:
|
||
stCapRect.u32Width = 1920;
|
||
stCapRect.u32Height = 1080;
|
||
break;
|
||
}
|
||
|
||
stTargetSize.u32Width = stCapRect.u32Width;
|
||
stTargetSize.u32Height = stCapRect.u32Height;
|
||
|
||
s32Ret = SAMPLE_COMM_VI_StartChn(ViChn, &stCapRect, &stTargetSize, pstViConfig);
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
SAMPLE_COMM_ISP_Stop();
|
||
return HI_FAILURE;
|
||
}
|
||
}
|
||
|
||
return s32Ret;
|
||
}
|
||
|
||
/*****************************************************************************
|
||
* function : stop vi accroding to product type
|
||
*****************************************************************************/
|
||
HI_S32 SAMPLE_COMM_VI_StopBT656(SAMPLE_VI_MODE_E enViMode)
|
||
{
|
||
VI_DEV ViDev;
|
||
VI_CHN ViChn;
|
||
HI_S32 i;
|
||
HI_S32 s32Ret;
|
||
SAMPLE_VI_PARAM_S stViParam;
|
||
|
||
/*** get parameter from Sample_Vi_Mode ***/
|
||
s32Ret = SAMPLE_COMM_VI_Mode2Param(enViMode, &stViParam);
|
||
if (HI_SUCCESS !=s32Ret)
|
||
{
|
||
SAMPLE_PRT("SAMPLE_COMM_VI_Mode2Param failed!\n");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
/*** Stop VI Chn ***/
|
||
for(i=0;i<stViParam.s32ViChnCnt;i++)
|
||
{
|
||
/* Stop vi phy-chn */
|
||
ViChn = i * stViParam.s32ViChnInterval;
|
||
s32Ret = HI_MPI_VI_DisableChn(ViChn);
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
SAMPLE_PRT("SAMPLE_COMM_VI_StopChn failed with %#x\n",s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
}
|
||
|
||
/*** Stop VI Dev ***/
|
||
for(i=0; i<stViParam.s32ViDevCnt; i++)
|
||
{
|
||
ViDev = i * stViParam.s32ViDevInterval;
|
||
s32Ret = HI_MPI_VI_DisableDev(ViDev);
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
SAMPLE_PRT("SAMPLE_COMM_VI_StopDev failed with %#x\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
}
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
/*****************************************************************************
|
||
* function : Vi chn bind vpss group
|
||
*****************************************************************************/
|
||
HI_S32 SAMPLE_COMM_VI_BindVpss(SAMPLE_VI_MODE_E enViMode)
|
||
{
|
||
HI_S32 j, s32Ret;
|
||
VPSS_GRP VpssGrp;
|
||
MPP_CHN_S stSrcChn;
|
||
MPP_CHN_S stDestChn;
|
||
SAMPLE_VI_PARAM_S stViParam;
|
||
VI_CHN ViChn;
|
||
|
||
s32Ret = SAMPLE_COMM_VI_Mode2Param(enViMode, &stViParam);
|
||
if (HI_SUCCESS !=s32Ret)
|
||
{
|
||
SAMPLE_PRT("SAMPLE_COMM_VI_Mode2Param failed!\n");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
VpssGrp = 0;
|
||
printf("vi chn count is %d\r\n",stViParam.s32ViChnCnt);
|
||
for (j = 0; j < stViParam.s32ViChnCnt; j++)
|
||
{
|
||
ViChn = j * stViParam.s32ViChnInterval;
|
||
|
||
stSrcChn.enModId = HI_ID_VIU;
|
||
stSrcChn.s32DevId = 0;
|
||
stSrcChn.s32ChnId = ViChn;
|
||
|
||
stDestChn.enModId = HI_ID_VPSS;
|
||
stDestChn.s32DevId = VpssGrp;
|
||
stDestChn.s32ChnId = 0;
|
||
|
||
s32Ret = HI_MPI_SYS_Bind(&stSrcChn, &stDestChn);
|
||
if (s32Ret != HI_SUCCESS)
|
||
{
|
||
SAMPLE_PRT("failed with %#x!\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
VpssGrp ++;
|
||
}
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
HI_BOOL IsSensorInput(SAMPLE_VI_MODE_E enViMode)
|
||
{
|
||
HI_BOOL bRet = HI_TRUE;
|
||
|
||
switch(enViMode)
|
||
{
|
||
case SAMPLE_VI_MODE_1_D1:
|
||
case SAMPLE_VI_MODE_BT1120_1080P:
|
||
case SAMPLE_VI_MODE_BT1120_720P:
|
||
bRet = HI_FALSE;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
return bRet;
|
||
}
|
||
|
||
|
||
HI_S32 SAMPLE_COMM_VI_BindVenc(SAMPLE_VI_MODE_E enViMode)
|
||
{
|
||
HI_S32 j, s32Ret;
|
||
VENC_GRP VencGrp;
|
||
MPP_CHN_S stSrcChn;
|
||
MPP_CHN_S stDestChn;
|
||
SAMPLE_VI_PARAM_S stViParam;
|
||
VI_CHN ViChn;
|
||
|
||
s32Ret = SAMPLE_COMM_VI_Mode2Param(enViMode, &stViParam);
|
||
if (HI_SUCCESS !=s32Ret)
|
||
{
|
||
SAMPLE_PRT("SAMPLE_COMM_VI_Mode2Param failed!\n");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
VencGrp = 0;
|
||
for (j=0; j<stViParam.s32ViChnCnt; j++)
|
||
{
|
||
ViChn = j * stViParam.s32ViChnInterval;
|
||
|
||
stSrcChn.enModId = HI_ID_VIU;
|
||
stSrcChn.s32DevId = 0;
|
||
stSrcChn.s32ChnId = ViChn;
|
||
|
||
stDestChn.enModId = HI_ID_GROUP;
|
||
stDestChn.s32DevId = VencGrp;
|
||
stDestChn.s32ChnId = 0;
|
||
|
||
s32Ret = HI_MPI_SYS_Bind(&stSrcChn, &stDestChn);
|
||
if (s32Ret != HI_SUCCESS)
|
||
{
|
||
SAMPLE_PRT("failed with %#x!\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
VencGrp ++;
|
||
}
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
HI_S32 SAMPLE_COMM_VI_StartMIPI_BT1120(SAMPLE_VI_MODE_E enViMode)
|
||
{
|
||
HI_S32 fd;
|
||
combo_dev_attr_t *pstcomboDevAttr = NULL;
|
||
|
||
fd = open("/dev/hi_mipi", O_RDWR);
|
||
if (fd < 0)
|
||
{
|
||
printf("warning: open hi_mipi dev failed\n");
|
||
return -1;
|
||
}
|
||
|
||
if( (enViMode == SAMPLE_VI_MODE_BT1120_720P)
|
||
||(enViMode == SAMPLE_VI_MODE_BT1120_1080P) )
|
||
{
|
||
pstcomboDevAttr = &MIPI_BT1120_ATTR;
|
||
}
|
||
else
|
||
{
|
||
}
|
||
|
||
if (NULL == pstcomboDevAttr)
|
||
{
|
||
printf("Func %s() Line[%d], unsupported enViMode: %d\n", __FUNCTION__, __LINE__, enViMode);
|
||
close(fd);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
if (ioctl(fd, HI_MIPI_SET_DEV_ATTR, pstcomboDevAttr))
|
||
{
|
||
printf("set mipi attr failed\n");
|
||
close(fd);
|
||
return HI_FAILURE;
|
||
}
|
||
close(fd);
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
|
||
|
||
HI_S32 SAMPLE_COMM_VI_SetMipiAttr(SAMPLE_VI_CONFIG_S* pstViConfig)
|
||
{
|
||
HI_S32 fd;
|
||
combo_dev_attr_t *pstcomboDevAttr = NULL;
|
||
|
||
/* mipi reset unrest */
|
||
fd = open("/dev/hi_mipi", O_RDWR);
|
||
if (fd < 0)
|
||
{
|
||
printf("warning: open hi_mipi dev failed\n");
|
||
return -1;
|
||
}
|
||
printf("=============SAMPLE_COMM_VI_SetMipiAttr enWDRMode: %d\n", pstViConfig->enWDRMode);
|
||
|
||
if ( pstViConfig->enViMode == APTINA_AR0230_HISPI_1080P_30FPS )
|
||
{
|
||
pstcomboDevAttr = &HISPI_4lane_SENSOR_AR0230_12BIT_ATTR;
|
||
}
|
||
|
||
if ( (pstViConfig->enViMode == APTINA_9M034_DC_720P_30FPS)
|
||
|| (pstViConfig->enViMode == APTINA_AR0130_DC_720P_30FPS)
|
||
|| (pstViConfig->enViMode == SONY_IMX122_DC_1080P_30FPS)
|
||
|| (pstViConfig->enViMode == SONY_IMX122_DC_720P_30FPS) )
|
||
{
|
||
pstcomboDevAttr = &MIPI_CMOS3V3_ATTR;
|
||
}
|
||
|
||
if (NULL == pstcomboDevAttr)
|
||
{
|
||
printf("Func %s() Line[%d], unsupported enViMode: %d\n", __FUNCTION__, __LINE__, pstViConfig->enViMode);
|
||
close(fd);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
if (ioctl(fd, HI_MIPI_SET_DEV_ATTR, pstcomboDevAttr))
|
||
{
|
||
printf("set mipi attr failed\n");
|
||
close(fd);
|
||
return -1;
|
||
}
|
||
close(fd);
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
|
||
HI_S32 SAMPLE_COMM_VI_StartIspAndVi(SAMPLE_VI_CONFIG_S* pstViConfig)
|
||
{
|
||
HI_S32 i, s32Ret = HI_SUCCESS;
|
||
VI_DEV ViDev;
|
||
VI_CHN ViChn;
|
||
HI_U32 u32DevNum = 1;
|
||
HI_U32 u32ChnNum = 1;
|
||
SIZE_S stTargetSize;
|
||
RECT_S stCapRect;
|
||
SAMPLE_VI_MODE_E enViMode;
|
||
|
||
if(!pstViConfig)
|
||
{
|
||
SAMPLE_PRT("%s: null ptr\n", __FUNCTION__);
|
||
return HI_FAILURE;
|
||
}
|
||
enViMode = pstViConfig->enViMode;
|
||
|
||
/******************************************
|
||
step 1: mipi configure
|
||
******************************************/
|
||
s32Ret = SAMPLE_COMM_VI_StartMIPI(pstViConfig);
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
SAMPLE_PRT("%s: MIPI init failed!\n", __FUNCTION__);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
/******************************************
|
||
step 2: configure sensor and ISP (include WDR mode).
|
||
note: you can jump over this step, if you do not use Hi3516A interal isp.
|
||
******************************************/
|
||
s32Ret = SAMPLE_COMM_ISP_Init(pstViConfig->enWDRMode);
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
SAMPLE_PRT("%s: Sensor init failed!\n", __FUNCTION__);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
/******************************************
|
||
step 3: run isp thread
|
||
note: you can jump over this step, if you do not use Hi3516A interal isp.
|
||
******************************************/
|
||
s32Ret = SAMPLE_COMM_ISP_Run();
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
SAMPLE_PRT("%s: ISP init failed!\n", __FUNCTION__);
|
||
/* disable videv */
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
/******************************************************
|
||
step 4 : config & start vicap dev
|
||
******************************************************/
|
||
for (i = 0; i < u32DevNum; i++)
|
||
{
|
||
ViDev = i;
|
||
s32Ret = SAMPLE_COMM_VI_StartDev(ViDev, enViMode);
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
SAMPLE_PRT("%s: start vi dev[%d] failed!\n", __FUNCTION__, i);
|
||
return HI_FAILURE;
|
||
}
|
||
}
|
||
|
||
/******************************************************
|
||
* Step 5: config & start vicap chn (max 1)
|
||
******************************************************/
|
||
for (i = 0; i < u32ChnNum; i++)
|
||
{
|
||
ViChn = i;
|
||
|
||
stCapRect.s32X = 0;
|
||
stCapRect.s32Y = 0;
|
||
switch (enViMode)
|
||
{
|
||
case APTINA_9M034_DC_720P_30FPS:
|
||
case APTINA_AR0130_DC_720P_30FPS:
|
||
case SONY_IMX122_DC_720P_30FPS:
|
||
stCapRect.u32Width = 1280;
|
||
stCapRect.u32Height = 720;
|
||
break;
|
||
|
||
case SONY_IMX122_DC_1080P_30FPS:
|
||
case APTINA_AR0230_HISPI_1080P_30FPS:
|
||
stCapRect.u32Width = 1920;
|
||
stCapRect.u32Height = 1080;
|
||
break;
|
||
|
||
default:
|
||
stCapRect.u32Width = 1920;
|
||
stCapRect.u32Height = 1080;
|
||
break;
|
||
}
|
||
|
||
stTargetSize.u32Width = stCapRect.u32Width;
|
||
stTargetSize.u32Height = stCapRect.u32Height;
|
||
|
||
s32Ret = SAMPLE_COMM_VI_StartChn(ViChn, &stCapRect, &stTargetSize, pstViConfig);
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
SAMPLE_COMM_ISP_Stop();
|
||
return HI_FAILURE;
|
||
}
|
||
}
|
||
|
||
return s32Ret;
|
||
}
|
||
|
||
HI_S32 SAMPLE_COMM_VI_StopIsp(SAMPLE_VI_CONFIG_S* pstViConfig)
|
||
{
|
||
VI_DEV ViDev;
|
||
VI_CHN ViChn;
|
||
HI_S32 i;
|
||
HI_S32 s32Ret;
|
||
HI_U32 u32DevNum = 1;
|
||
HI_U32 u32ChnNum = 1;
|
||
|
||
if(!pstViConfig)
|
||
{
|
||
SAMPLE_PRT("%s: null ptr\n", __FUNCTION__);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
/*** Stop VI Chn ***/
|
||
for(i=0;i < u32ChnNum; i++)
|
||
{
|
||
/* Stop vi phy-chn */
|
||
ViChn = i;
|
||
s32Ret = HI_MPI_VI_DisableChn(ViChn);
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
SAMPLE_PRT("HI_MPI_VI_DisableChn failed with %#x\n",s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
}
|
||
|
||
/*** Stop VI Dev ***/
|
||
for(i=0; i < u32DevNum; i++)
|
||
{
|
||
ViDev = i;
|
||
s32Ret = HI_MPI_VI_DisableDev(ViDev);
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
SAMPLE_PRT("HI_MPI_VI_DisableDev failed with %#x\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
}
|
||
|
||
SAMPLE_COMM_ISP_Stop();
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
HI_S32 SAMPLE_COMM_VI_StartVi(SAMPLE_VI_CONFIG_S* pstViConfig)
|
||
{
|
||
HI_S32 s32Ret = HI_SUCCESS;
|
||
SAMPLE_VI_MODE_E enViMode;
|
||
|
||
if(!pstViConfig)
|
||
{
|
||
SAMPLE_PRT("%s: null ptr\n", __FUNCTION__);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
enViMode = pstViConfig->enViMode;
|
||
if(!IsSensorInput(enViMode))
|
||
{
|
||
s32Ret = SAMPLE_COMM_VI_StartBT656(pstViConfig);
|
||
}
|
||
else
|
||
{
|
||
s32Ret = SAMPLE_COMM_VI_StartIspAndVi(pstViConfig);
|
||
}
|
||
|
||
|
||
return s32Ret;
|
||
}
|
||
|
||
HI_S32 SAMPLE_COMM_VI_StopVi(SAMPLE_VI_CONFIG_S* pstViConfig)
|
||
{
|
||
HI_S32 s32Ret = HI_SUCCESS;
|
||
SAMPLE_VI_MODE_E enViMode;
|
||
|
||
if(!pstViConfig)
|
||
{
|
||
SAMPLE_PRT("%s: null ptr\n", __FUNCTION__);
|
||
return HI_FAILURE;
|
||
}
|
||
enViMode = pstViConfig->enViMode;
|
||
|
||
if(!IsSensorInput(enViMode))
|
||
{
|
||
s32Ret = SAMPLE_COMM_VI_StopBT656(enViMode);
|
||
}
|
||
else
|
||
{
|
||
s32Ret = SAMPLE_COMM_VI_StopIsp(pstViConfig);
|
||
}
|
||
|
||
return s32Ret;
|
||
}
|
||
|
||
HI_S32 SAMPLE_COMM_VI_SwitchResParam( SAMPLE_VI_CONFIG_S* pstViConfig,
|
||
ISP_PUB_ATTR_S *pstPubAttr,
|
||
RECT_S *pstCapRect )
|
||
{
|
||
CHECK_NULL_PTR(pstViConfig);
|
||
CHECK_NULL_PTR(pstPubAttr);
|
||
CHECK_NULL_PTR(pstCapRect);
|
||
if (SONY_IMX122_DC_1080P_30FPS == pstViConfig->enViMode)
|
||
{
|
||
pstViConfig->enViMode = SONY_IMX122_DC_720P_30FPS;
|
||
pstPubAttr->stWndRect.u32Width = 1280;
|
||
pstPubAttr->stWndRect.u32Height = 720;
|
||
pstPubAttr->f32FrameRate = 30;
|
||
|
||
pstCapRect->s32X = 0;
|
||
pstCapRect->s32Y = 0;
|
||
pstCapRect->u32Width = 1280;
|
||
pstCapRect->u32Height = 720;
|
||
}
|
||
else if (SONY_IMX122_DC_720P_30FPS == pstViConfig->enViMode)
|
||
{
|
||
pstViConfig->enViMode = SONY_IMX122_DC_1080P_30FPS;
|
||
pstPubAttr->stWndRect.u32Width = 1920;
|
||
pstPubAttr->stWndRect.u32Height = 1080;
|
||
pstPubAttr->f32FrameRate = 30;
|
||
|
||
pstCapRect->s32X = 0;
|
||
pstCapRect->s32Y = 0;
|
||
pstCapRect->u32Width = 1920;
|
||
pstCapRect->u32Height = 1080;
|
||
}
|
||
else
|
||
{
|
||
SAMPLE_PRT("This sensor type is not surpport!");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
/*****************************************************************************
|
||
* function : Vi chn unbind vpss group
|
||
*****************************************************************************/
|
||
HI_S32 SAMPLE_COMM_VI_UnBindVpss(SAMPLE_VI_MODE_E enViMode)
|
||
{
|
||
HI_S32 i, j, s32Ret;
|
||
VPSS_GRP VpssGrp;
|
||
MPP_CHN_S stSrcChn;
|
||
MPP_CHN_S stDestChn;
|
||
SAMPLE_VI_PARAM_S stViParam;
|
||
VI_DEV ViDev;
|
||
VI_CHN ViChn;
|
||
|
||
s32Ret = SAMPLE_COMM_VI_Mode2Param(enViMode, &stViParam);
|
||
if (HI_SUCCESS !=s32Ret)
|
||
{
|
||
SAMPLE_PRT("SAMPLE_COMM_VI_Mode2Param failed!\n");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
VpssGrp = 0;
|
||
for (i=0; i<stViParam.s32ViDevCnt; i++)
|
||
{
|
||
ViDev = i * stViParam.s32ViDevInterval;
|
||
|
||
for (j=0; j<stViParam.s32ViChnCnt; j++)
|
||
{
|
||
ViChn = j * stViParam.s32ViChnInterval;
|
||
|
||
stSrcChn.enModId = HI_ID_VIU;
|
||
stSrcChn.s32DevId = ViDev;
|
||
stSrcChn.s32ChnId = ViChn;
|
||
|
||
stDestChn.enModId = HI_ID_VPSS;
|
||
stDestChn.s32DevId = VpssGrp;
|
||
stDestChn.s32ChnId = 0;
|
||
|
||
s32Ret = HI_MPI_SYS_UnBind(&stSrcChn, &stDestChn);
|
||
if (s32Ret != HI_SUCCESS)
|
||
{
|
||
SAMPLE_PRT("failed with %#x!\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
VpssGrp ++;
|
||
}
|
||
}
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
|
||
HI_S32 SAMPLE_COMM_VI_UnBindVenc(SAMPLE_VI_MODE_E enViMode)
|
||
{
|
||
HI_S32 i, j, s32Ret;
|
||
VENC_GRP VencGrp;
|
||
MPP_CHN_S stSrcChn;
|
||
MPP_CHN_S stDestChn;
|
||
SAMPLE_VI_PARAM_S stViParam;
|
||
VI_DEV ViDev;
|
||
VI_CHN ViChn;
|
||
|
||
s32Ret = SAMPLE_COMM_VI_Mode2Param(enViMode, &stViParam);
|
||
if (HI_SUCCESS !=s32Ret)
|
||
{
|
||
SAMPLE_PRT("SAMPLE_COMM_VI_Mode2Param failed!\n");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
VencGrp = 0;
|
||
for (i=0; i<stViParam.s32ViDevCnt; i++)
|
||
{
|
||
ViDev = i * stViParam.s32ViDevInterval;
|
||
|
||
for (j=0; j<stViParam.s32ViChnCnt; j++)
|
||
{
|
||
ViChn = j * stViParam.s32ViChnInterval;
|
||
|
||
stSrcChn.enModId = HI_ID_VIU;
|
||
stSrcChn.s32DevId = ViDev;
|
||
stSrcChn.s32ChnId = ViChn;
|
||
|
||
stDestChn.enModId = HI_ID_GROUP;
|
||
stDestChn.s32DevId = VencGrp;
|
||
stDestChn.s32ChnId = 0;
|
||
|
||
s32Ret = HI_MPI_SYS_UnBind(&stSrcChn, &stDestChn);
|
||
if (s32Ret != HI_SUCCESS)
|
||
{
|
||
SAMPLE_PRT("failed with %#x!\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
VencGrp ++;
|
||
}
|
||
}
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
* function : read frame
|
||
******************************************************************************/
|
||
HI_VOID SAMPLE_COMM_VI_ReadFrame(FILE * fp, HI_U8 * pY, HI_U8 * pU, HI_U8 * pV, HI_U32 width, HI_U32 height, HI_U32 stride, HI_U32 stride2)
|
||
{
|
||
HI_U8 * pDst;
|
||
|
||
HI_U32 u32Row;
|
||
|
||
pDst = pY;
|
||
for ( u32Row = 0; u32Row < height; u32Row++ )
|
||
{
|
||
fread( pDst, width, 1, fp );
|
||
pDst += stride;
|
||
}
|
||
|
||
pDst = pU;
|
||
for ( u32Row = 0; u32Row < height/2; u32Row++ )
|
||
{
|
||
fread( pDst, width/2, 1, fp );
|
||
pDst += stride2;
|
||
}
|
||
|
||
pDst = pV;
|
||
for ( u32Row = 0; u32Row < height/2; u32Row++ )
|
||
{
|
||
fread( pDst, width/2, 1, fp );
|
||
pDst += stride2;
|
||
}
|
||
}
|
||
|
||
/******************************************************************************
|
||
* function : Plan to Semi
|
||
******************************************************************************/
|
||
HI_S32 SAMPLE_COMM_VI_PlanToSemi(HI_U8 *pY, HI_S32 yStride,
|
||
HI_U8 *pU, HI_S32 uStride,
|
||
HI_U8 *pV, HI_S32 vStride,
|
||
HI_S32 picWidth, HI_S32 picHeight)
|
||
{
|
||
HI_S32 i;
|
||
HI_U8* pTmpU, *ptu;
|
||
HI_U8* pTmpV, *ptv;
|
||
HI_S32 s32HafW = uStride >>1 ;
|
||
HI_S32 s32HafH = picHeight >>1 ;
|
||
HI_S32 s32Size = s32HafW*s32HafH;
|
||
|
||
pTmpU = malloc( s32Size );
|
||
if (NULL == pTmpU)
|
||
{
|
||
printf("Func: %s() Line[%d], malloc failed\n", __FUNCTION__, __LINE__);
|
||
return HI_FAILURE;
|
||
}
|
||
pTmpV = malloc( s32Size );
|
||
if (NULL == pTmpV)
|
||
{
|
||
printf("Func: %s() Line[%d], malloc failed\n", __FUNCTION__, __LINE__);
|
||
return HI_FAILURE;
|
||
}
|
||
ptu = pTmpU;
|
||
ptv = pTmpV;
|
||
|
||
memcpy(pTmpU,pU,s32Size);
|
||
memcpy(pTmpV,pV,s32Size);
|
||
|
||
for(i = 0;i<s32Size>>1;i++)
|
||
{
|
||
*pU++ = *pTmpV++;
|
||
*pU++ = *pTmpU++;
|
||
|
||
}
|
||
for(i = 0;i<s32Size>>1;i++)
|
||
{
|
||
*pV++ = *pTmpV++;
|
||
*pV++ = *pTmpU++;
|
||
}
|
||
|
||
free( ptu );
|
||
free( ptv );
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
int SAMPLE_COMM_VI_ExitMpp( int s32poolId)
|
||
{
|
||
if(s32poolId<0)
|
||
{
|
||
if (HI_MPI_SYS_Exit())
|
||
{
|
||
printf("sys exit fail\n");
|
||
return -1;
|
||
}
|
||
|
||
if (HI_MPI_VB_Exit())
|
||
{
|
||
printf("vb exit fail\n");
|
||
return -1;
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
|
||
/******************************************************************************
|
||
* function : Get from YUV
|
||
******************************************************************************/
|
||
HI_S32 SAMPLE_COMM_VI_GetVFrameFromYUV(FILE *pYUVFile, HI_U32 u32Width, HI_U32 u32Height,HI_U32 u32Stride, VIDEO_FRAME_INFO_S *pstVFrameInfo)
|
||
{
|
||
HI_U32 u32LStride;
|
||
HI_U32 u32CStride;
|
||
HI_U32 u32LumaSize;
|
||
HI_U32 u32ChrmSize;
|
||
HI_U32 u32Size;
|
||
VB_BLK VbBlk;
|
||
HI_U32 u32PhyAddr;
|
||
HI_U8 *pVirAddr;
|
||
|
||
u32LStride = u32Stride;
|
||
u32CStride = u32Stride;
|
||
|
||
u32LumaSize = (u32LStride * u32Height);
|
||
u32ChrmSize = (u32CStride * u32Height) >> 2;/* YUV 420 */
|
||
u32Size = u32LumaSize + (u32ChrmSize << 1);
|
||
|
||
/* alloc video buffer block ---------------------------------------------------------- */
|
||
VbBlk = HI_MPI_VB_GetBlock(VB_INVALID_POOLID, u32Size, NULL);
|
||
if (VB_INVALID_HANDLE == VbBlk)
|
||
{
|
||
SAMPLE_PRT("HI_MPI_VB_GetBlock err! size:%d\n",u32Size);
|
||
return -1;
|
||
}
|
||
u32PhyAddr = HI_MPI_VB_Handle2PhysAddr(VbBlk);
|
||
if (0 == u32PhyAddr)
|
||
{
|
||
return -1;
|
||
}
|
||
|
||
pVirAddr = (HI_U8 *) HI_MPI_SYS_Mmap(u32PhyAddr, u32Size);
|
||
if (NULL == pVirAddr)
|
||
{
|
||
return -1;
|
||
}
|
||
|
||
pstVFrameInfo->u32PoolId = HI_MPI_VB_Handle2PoolId(VbBlk);
|
||
if (VB_INVALID_POOLID == pstVFrameInfo->u32PoolId)
|
||
{
|
||
return -1;
|
||
}
|
||
SAMPLE_PRT("pool id :%d, phyAddr:%x,virAddr:%x\n" ,pstVFrameInfo->u32PoolId,u32PhyAddr,(int)pVirAddr);
|
||
|
||
pstVFrameInfo->stVFrame.u32PhyAddr[0] = u32PhyAddr;
|
||
pstVFrameInfo->stVFrame.u32PhyAddr[1] = pstVFrameInfo->stVFrame.u32PhyAddr[0] + u32LumaSize;
|
||
pstVFrameInfo->stVFrame.u32PhyAddr[2] = pstVFrameInfo->stVFrame.u32PhyAddr[1] + u32ChrmSize;
|
||
|
||
pstVFrameInfo->stVFrame.pVirAddr[0] = pVirAddr;
|
||
pstVFrameInfo->stVFrame.pVirAddr[1] = pstVFrameInfo->stVFrame.pVirAddr[0] + u32LumaSize;
|
||
pstVFrameInfo->stVFrame.pVirAddr[2] = pstVFrameInfo->stVFrame.pVirAddr[1] + u32ChrmSize;
|
||
|
||
pstVFrameInfo->stVFrame.u32Width = u32Width;
|
||
pstVFrameInfo->stVFrame.u32Height = u32Height;
|
||
pstVFrameInfo->stVFrame.u32Stride[0] = u32LStride;
|
||
pstVFrameInfo->stVFrame.u32Stride[1] = u32CStride;
|
||
pstVFrameInfo->stVFrame.u32Stride[2] = u32CStride;
|
||
pstVFrameInfo->stVFrame.enPixelFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
|
||
pstVFrameInfo->stVFrame.u32Field = VIDEO_FIELD_INTERLACED;/* Intelaced D1,otherwise VIDEO_FIELD_FRAME */
|
||
|
||
/* read Y U V data from file to the addr ----------------------------------------------*/
|
||
SAMPLE_COMM_VI_ReadFrame(pYUVFile, pstVFrameInfo->stVFrame.pVirAddr[0],
|
||
pstVFrameInfo->stVFrame.pVirAddr[1], pstVFrameInfo->stVFrame.pVirAddr[2],
|
||
pstVFrameInfo->stVFrame.u32Width, pstVFrameInfo->stVFrame.u32Height,
|
||
pstVFrameInfo->stVFrame.u32Stride[0], pstVFrameInfo->stVFrame.u32Stride[1] >> 1 );
|
||
|
||
/* convert planar YUV420 to sem-planar YUV420 -----------------------------------------*/
|
||
SAMPLE_COMM_VI_PlanToSemi(pstVFrameInfo->stVFrame.pVirAddr[0], pstVFrameInfo->stVFrame.u32Stride[0],
|
||
pstVFrameInfo->stVFrame.pVirAddr[1], pstVFrameInfo->stVFrame.u32Stride[1],
|
||
pstVFrameInfo->stVFrame.pVirAddr[2], pstVFrameInfo->stVFrame.u32Stride[1],
|
||
pstVFrameInfo->stVFrame.u32Width, pstVFrameInfo->stVFrame.u32Height);
|
||
|
||
HI_MPI_SYS_Mmap(u32PhyAddr, u32Size);
|
||
return 0;
|
||
}
|
||
|
||
HI_S32 SAMPLE_COMM_VI_ChangeCapSize(VI_CHN ViChn, HI_U32 u32CapWidth, HI_U32 u32CapHeight,HI_U32 u32Width, HI_U32 u32Height)
|
||
{
|
||
VI_CHN_ATTR_S stChnAttr;
|
||
HI_S32 S32Ret = HI_SUCCESS;
|
||
S32Ret = HI_MPI_VI_GetChnAttr(ViChn, &stChnAttr);
|
||
if(HI_SUCCESS!= S32Ret)
|
||
{
|
||
SAMPLE_PRT( "HI_MPI_VI_GetChnAttr failed\n");
|
||
}
|
||
stChnAttr.stCapRect.u32Width = u32CapWidth;
|
||
stChnAttr.stCapRect.u32Height = u32CapHeight;
|
||
stChnAttr.stDestSize.u32Width = u32Width;
|
||
stChnAttr.stDestSize.u32Height = u32Height;
|
||
|
||
S32Ret = HI_MPI_VI_SetChnAttr(ViChn, &stChnAttr);
|
||
if(HI_SUCCESS!= S32Ret)
|
||
{
|
||
SAMPLE_PRT( "HI_MPI_VI_SetChnAttr failed\n");
|
||
}
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
HI_S32 SAMPLE_COMM_VI_GetVBFromPool(HI_U32 u32Width,
|
||
HI_U32 u32Height,
|
||
HI_U32 u32Stride,
|
||
VIDEO_FIELD_E u32Field,
|
||
SAMPLE_VI_FRAME_INFO_S *pstVMstFrameInfo)
|
||
{
|
||
HI_U32 u32CStride;
|
||
HI_U32 u32LumaSize;
|
||
HI_U32 u32ChrmSize;
|
||
HI_U32 u32Size;
|
||
VB_BLK VbBlk;
|
||
HI_U32 u32PhyAddr;
|
||
HI_VOID *pVirAddr = NULL;
|
||
VIDEO_FRAME_INFO_S *pstVFrameInfo = &pstVMstFrameInfo->stVideoFrame;
|
||
|
||
u32CStride = u32Width;
|
||
u32LumaSize = u32Stride * u32Height;
|
||
if (PIXEL_FORMAT_YUV_SEMIPLANAR_422 == pstVFrameInfo->stVFrame.enPixelFormat)
|
||
{
|
||
u32ChrmSize = (u32CStride * u32Height) >> 1;/* YUV 422 */
|
||
}
|
||
else if ((PIXEL_FORMAT_RGB_BAYER == pstVFrameInfo->stVFrame.enPixelFormat)
|
||
||(PIXEL_FORMAT_RGB_BAYER_12BPP == pstVFrameInfo->stVFrame.enPixelFormat)
|
||
||(PIXEL_FORMAT_RGB_BAYER_10BPP == pstVFrameInfo->stVFrame.enPixelFormat)
|
||
||(PIXEL_FORMAT_RGB_BAYER_8BPP == pstVFrameInfo->stVFrame.enPixelFormat))
|
||
{
|
||
u32ChrmSize = 0;
|
||
}
|
||
else
|
||
{
|
||
u32ChrmSize = (u32CStride * u32Height) >> 2;/* YUV 420 */
|
||
}
|
||
u32Size = u32LumaSize + (u32ChrmSize << 1);
|
||
|
||
printf("===============u32Size: %d\n", u32Size);
|
||
pstVMstFrameInfo->u32FrmSize = u32Size;
|
||
/* alloc video buffer block ---------------------------------------------------------- */
|
||
VbBlk = HI_MPI_VB_GetBlock(VB_INVALID_POOLID, u32Size, HI_NULL);
|
||
if (VB_INVALID_HANDLE == VbBlk)
|
||
{
|
||
printf("HI_MPI_VB_GetBlock err! size:%d\n",u32Size);
|
||
return HI_FAILURE;
|
||
}
|
||
pstVMstFrameInfo->VbBlk = VbBlk;
|
||
|
||
printf("VbBlk: 0x%x\n", VbBlk);
|
||
|
||
u32PhyAddr = HI_MPI_VB_Handle2PhysAddr(VbBlk);
|
||
if (0 == u32PhyAddr)
|
||
{
|
||
printf("HI_MPI_VB_Handle2PhysAddr err!\n");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
pstVFrameInfo->u32PoolId = HI_MPI_VB_Handle2PoolId(VbBlk);
|
||
if (VB_INVALID_POOLID == pstVFrameInfo->u32PoolId)
|
||
{
|
||
SAMPLE_COMM_VI_ExitMpp(pstVFrameInfo->u32PoolId);
|
||
return -1;
|
||
}
|
||
|
||
pstVFrameInfo->stVFrame.u32PhyAddr[0] = u32PhyAddr;
|
||
pstVFrameInfo->stVFrame.u32PhyAddr[1] = pstVFrameInfo->stVFrame.u32PhyAddr[0] + u32LumaSize;
|
||
pstVFrameInfo->stVFrame.u32PhyAddr[2] = pstVFrameInfo->stVFrame.u32PhyAddr[1] + u32ChrmSize;
|
||
|
||
pstVFrameInfo->stVFrame.pVirAddr[0] = pVirAddr;
|
||
pstVFrameInfo->stVFrame.pVirAddr[1] = pstVFrameInfo->stVFrame.pVirAddr[0] + u32LumaSize;
|
||
pstVFrameInfo->stVFrame.pVirAddr[2] = pstVFrameInfo->stVFrame.pVirAddr[1] + u32ChrmSize;
|
||
|
||
pstVFrameInfo->stVFrame.u32Width = u32Width;
|
||
pstVFrameInfo->stVFrame.u32Height = u32Height;
|
||
pstVFrameInfo->stVFrame.u32Stride[0] = u32Stride;
|
||
pstVFrameInfo->stVFrame.u32Stride[1] = u32Stride;
|
||
pstVFrameInfo->stVFrame.u32Stride[2] = u32Stride;
|
||
pstVFrameInfo->stVFrame.u32Field = u32Field;
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
|
||
|
||
void SAMPLE_COMM_VI_SaveFpnData(ISP_FPN_FRAME_INFO_S *pVBuf,
|
||
HI_U32 u32FpnMode,
|
||
HI_U32 u32Nbit,
|
||
FILE *pfd)
|
||
{
|
||
HI_U8* pU8VBufVirt_Y;
|
||
HI_U32 phy_addr,size;
|
||
HI_U8* pUserPageAddr[2];
|
||
HI_BOOL bCompress;
|
||
|
||
size = (pVBuf->stFpnFrame.stVFrame.u32Stride[0]) * (pVBuf->stFpnFrame.stVFrame.u32Height);
|
||
printf("pVBuf->u32Stride[0]: %d, size: %d\n", pVBuf->stFpnFrame.stVFrame.u32Stride[0], size);
|
||
phy_addr = pVBuf->stFpnFrame.stVFrame.u32PhyAddr[0];
|
||
|
||
pUserPageAddr[0] = (HI_U8 *) HI_MPI_SYS_Mmap(phy_addr, size);
|
||
if (NULL == pUserPageAddr[0])
|
||
{
|
||
printf("HI_MPI_SYS_Mmap null\n");
|
||
return;
|
||
}
|
||
|
||
pU8VBufVirt_Y = (HI_U8*)pUserPageAddr[0];
|
||
|
||
/* save Y ----------------------------------------------------------------*/
|
||
fprintf(stderr, "saving......Raw data......u32Stride[0]: %d, width: %d, height: %d\n"
|
||
, pVBuf->stFpnFrame.stVFrame.u32Stride[0]
|
||
, pVBuf->stFpnFrame.stVFrame.u32Width
|
||
, pVBuf->stFpnFrame.stVFrame.u32Height);
|
||
//fprintf(stderr, "phy Addr: 0x%x\n", pVBuf->stFpnFrame.stVFrame.u32PhyAddr[0]);
|
||
fflush(stderr);
|
||
|
||
fwrite(pU8VBufVirt_Y, pVBuf->u32FrmSize, 1, pfd);
|
||
|
||
/* save offset */
|
||
fwrite(&pVBuf->u32Offset, 4, 1, pfd);
|
||
|
||
/* save compress flag */
|
||
bCompress = (COMPRESS_MODE_LINE == pVBuf->stFpnFrame.stVFrame.enCompressMode);
|
||
fwrite(&bCompress, 4, 1, pfd);
|
||
|
||
/* save fpn frame size */
|
||
fwrite(&pVBuf->u32FrmSize, 4, 1, pfd);
|
||
|
||
/* save ISO */
|
||
fwrite(&pVBuf->u32Iso, 4, 1, pfd);
|
||
fflush(pfd);
|
||
|
||
//fprintf(stderr, "done u32TimeRef: %d!\n", pVBuf->stFpnFrame.stVFrame.u32TimeRef);
|
||
fflush(stderr);
|
||
|
||
HI_MPI_SYS_Munmap(pUserPageAddr[0], size);
|
||
}
|
||
|
||
|
||
HI_S32 SAMPLE_COMM_VI_ReleaseVBToPool(SAMPLE_VI_FRAME_INFO_S *pstVMstFrameInfo)
|
||
{
|
||
HI_S32 s32Ret = HI_SUCCESS;
|
||
|
||
s32Ret = HI_MPI_VB_ReleaseBlock(pstVMstFrameInfo->VbBlk);
|
||
return s32Ret;
|
||
}
|
||
|
||
|
||
HI_S32 SAMPLE_COMM_VI_FPN_CALIBRATE_CONFIG(const char* fpn_file, /* fpn file name */
|
||
ISP_FPN_TYPE_E enFpnType, /* line/frame */
|
||
PIXEL_FORMAT_E enPixelFormat,
|
||
COMPRESS_MODE_E enCompressMode,
|
||
HI_U32 u32FrmNum,
|
||
HI_U32 u32Threshold)
|
||
{
|
||
VI_CHN ViChn = 0;
|
||
VI_CHN_ATTR_S stTempChnAttr;
|
||
ISP_FPN_CALIBRATE_ATTR_S stFpnCalAttr;
|
||
HI_U32 u32Stride;
|
||
SAMPLE_VI_FRAME_INFO_S stVMstFrame = {0};
|
||
HI_U32 u32Height;
|
||
HI_S32 s32Ret = HI_SUCCESS;
|
||
|
||
ISP_DEV IspDev = 0;
|
||
FILE* pFile;
|
||
char fileName[256] = {0};
|
||
|
||
s32Ret = HI_MPI_VI_GetChnAttr(ViChn, &stTempChnAttr);
|
||
if(HI_SUCCESS != s32Ret)
|
||
{
|
||
printf("get vi chn attr failed!");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
/* alloc 16bit/pixel memory */
|
||
u32Stride = ALIGN_BACK(stTempChnAttr.stCapRect.u32Width * 2, 16);
|
||
printf("u32Stride: %d\n", u32Stride);
|
||
stVMstFrame.stVideoFrame.stVFrame.enPixelFormat = enPixelFormat;
|
||
stVMstFrame.stVideoFrame.stVFrame.enCompressMode = COMPRESS_MODE_NONE;
|
||
|
||
u32Height = stTempChnAttr.stCapRect.u32Height;
|
||
|
||
if (ISP_FPN_TYPE_LINE == enFpnType)
|
||
{
|
||
u32Height = 1;
|
||
}
|
||
|
||
s32Ret = SAMPLE_COMM_VI_GetVBFromPool(stTempChnAttr.stCapRect.u32Width,
|
||
u32Height,
|
||
u32Stride,
|
||
VIDEO_FIELD_FRAME,
|
||
&stVMstFrame);
|
||
if(HI_SUCCESS != s32Ret)
|
||
{
|
||
printf("alloc mem failed!");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
printf("==========let isp fly ====================\n");
|
||
|
||
s32Ret = HI_MPI_VI_SetChnAttr(ViChn, &stTempChnAttr);
|
||
if(HI_SUCCESS != s32Ret)
|
||
{
|
||
printf("set vi chn attr failed!");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
s32Ret = HI_MPI_VI_EnableChn(ViChn);
|
||
if(HI_SUCCESS != s32Ret)
|
||
{
|
||
printf("enable vi chn failed!");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
printf("\n please turn off camera aperture!\n");
|
||
VI_PAUSE();
|
||
printf("\nhit any key ,start calibrate!\n");
|
||
VI_PAUSE();
|
||
|
||
s32Ret = HI_MPI_VI_DisableChn(ViChn);
|
||
if(HI_SUCCESS != s32Ret)
|
||
{
|
||
printf("disable vi chn failed!");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
stFpnCalAttr.u32FrameNum = u32FrmNum;
|
||
stFpnCalAttr.u32Threshold = u32Threshold;
|
||
stFpnCalAttr.enFpnType = enFpnType;
|
||
memcpy(&stFpnCalAttr.stFpnCaliFrame.stFpnFrame,
|
||
&stVMstFrame.stVideoFrame,
|
||
sizeof(VIDEO_FRAME_INFO_S));
|
||
|
||
stFpnCalAttr.stFpnCaliFrame.stFpnFrame.stVFrame.enCompressMode = enCompressMode;
|
||
|
||
stFpnCalAttr.stFpnCaliFrame.u32Offset = 0;
|
||
|
||
s32Ret = HI_MPI_ISP_FPNCalibrate(IspDev, &stFpnCalAttr);
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
printf("HI_MPI_ISP_FPNCalibrate err: 0x%x\n", s32Ret);
|
||
return s32Ret;
|
||
}
|
||
//printf("out stVMstFrame.stVideoFrame.stVFrame.u32Stride[0]: %d\n", stVMstFrame.stVideoFrame.stVFrame.u32Stride[0]);
|
||
/* save RAW data */
|
||
snprintf(fileName, sizeof(fileName), "./%s_%d_%d_%dbit.raw", fpn_file, stTempChnAttr.stDestSize.u32Width,
|
||
stTempChnAttr.stDestSize.u32Height,16);
|
||
printf("\nafter calibrate, offset =0x%x,ISO = %d\n",stFpnCalAttr.stFpnCaliFrame.u32Offset,
|
||
stFpnCalAttr.stFpnCaliFrame.u32Iso);
|
||
|
||
s32Ret = HI_MPI_VI_EnableChn(ViChn);
|
||
if(HI_SUCCESS != s32Ret)
|
||
{
|
||
printf("enable vi chn failed!");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
printf("\nhit any key,save dark frame file: %s!\n", fileName);
|
||
VI_PAUSE();
|
||
|
||
pFile = fopen(fileName, "wb");
|
||
if (NULL == pFile)
|
||
{
|
||
printf("open file %s err!\n",fileName);
|
||
return -1;
|
||
}
|
||
else
|
||
{
|
||
HI_U32 u32FpnBitWidth = 10;
|
||
|
||
SAMPLE_COMM_VI_SaveFpnData(&stFpnCalAttr.stFpnCaliFrame, enFpnType, u32FpnBitWidth, pFile);
|
||
fclose(pFile);
|
||
}
|
||
printf("\nsaved dark frame£¡\n");
|
||
|
||
s32Ret = SAMPLE_COMM_VI_ReleaseVBToPool(&stVMstFrame);
|
||
if (HI_SUCCESS != s32Ret)
|
||
{
|
||
printf("SAMPLE_COMM_VI_ReleaseVBToPool err: 0x%x\n", s32Ret);
|
||
}
|
||
|
||
printf("\nhit any key,start read dark frame\n");
|
||
VI_PAUSE();
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
HI_VOID SAMPLE_COMM_VI_ReadOneFpnFrame(FILE * fp,
|
||
HI_U8 *pY,
|
||
HI_U32 width, HI_U32 height,
|
||
HI_U32 stride,
|
||
PIXEL_FORMAT_E enPixelFormat,
|
||
HI_U32 *pu32Offset,
|
||
HI_U32 *pu32FrmSize,
|
||
COMPRESS_MODE_E *penCompressMode,
|
||
HI_U32 *pu32Iso)
|
||
{
|
||
HI_U8* pDst;
|
||
HI_U32 u32FrmSize;
|
||
HI_BOOL bCompress;
|
||
HI_S32 s32Ret;
|
||
|
||
/*****************************************************************
|
||
raw file storage layout:
|
||
///////////////////////////////////////////////////
|
||
|-------------------------------------------------|
|
||
|-------------------------------------------------|
|
||
|-------------------------------------------------|
|
||
|-------------------------------------------------|
|
||
|-------------------------------------------------|
|
||
|-------------------------------------------------|
|
||
|-------------------|------|------|------|--------|
|
||
offset comp size u32iso
|
||
****************************************************************/
|
||
|
||
/* seek end of file */
|
||
s32Ret = fseek(fp, -4, SEEK_END);
|
||
if (0 != s32Ret)
|
||
{
|
||
printf("Func: %s(), line: [%d], get iso failed: %s\n", __FUNCTION__, __LINE__, strerror(errno));
|
||
return;
|
||
}
|
||
/* get calibrate ISO */
|
||
fread(pu32Iso, 4, 1, fp);
|
||
|
||
/* get fpn frame size */
|
||
s32Ret = fseek(fp, -8, SEEK_END);
|
||
if (0 != s32Ret)
|
||
{
|
||
printf("Func: %s(), line: [%d], get frame size failed: %s\n", __FUNCTION__, __LINE__, strerror(errno));
|
||
return;
|
||
}
|
||
fread(&u32FrmSize, 4, 1, fp);
|
||
*pu32FrmSize = u32FrmSize;
|
||
|
||
/* get fpn frame compress flag */
|
||
s32Ret = fseek(fp, -12, SEEK_END);
|
||
if (0 != s32Ret)
|
||
{
|
||
printf("Func: %s(), line: [%d], get compress flag failed: %s\n", __FUNCTION__, __LINE__, strerror(errno));
|
||
return;
|
||
}
|
||
fread(&bCompress, 4, 1, fp);
|
||
|
||
if (bCompress)
|
||
{
|
||
*penCompressMode = COMPRESS_MODE_LINE;
|
||
}
|
||
else
|
||
{
|
||
*penCompressMode = COMPRESS_MODE_NONE;
|
||
}
|
||
|
||
/* get fpn offset */
|
||
s32Ret = fseek(fp, -16, SEEK_END);
|
||
if (0 != s32Ret)
|
||
{
|
||
printf("Func: %s(), line: [%d], get fpn offset failed: %s\n", __FUNCTION__, __LINE__, strerror(errno));
|
||
return;
|
||
}
|
||
fread(pu32Offset, 4, 1, fp);
|
||
|
||
/* back to begin of file */
|
||
fseek(fp, 0L, SEEK_SET);
|
||
pDst = pY;
|
||
fread(pDst, 1, u32FrmSize, fp);
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
HI_S32 SAMPLE_COMM_VI_GetFPNFrame_FromRaw(FILE *pRawFile,
|
||
HI_U32 u32Width, HI_U32 u32Height,
|
||
SAMPLE_VI_FRAME_INFO_S *pstVMstFrameInfo,
|
||
HI_U32 *pu32Offset,
|
||
HI_U32 *pu32Iso)
|
||
{
|
||
HI_U32 u32LStride;
|
||
HI_U32 u32CStride;
|
||
HI_U32 u32LumaSize = 0;
|
||
HI_U32 u32ChrmSize = 0;
|
||
HI_U32 u32Size;
|
||
VB_BLK VbBlk;
|
||
HI_U32 u32PhyAddr;
|
||
HI_U8 *pVirAddr;
|
||
HI_U32 u32Stride;
|
||
HI_S32 s32Ret;
|
||
VIDEO_FRAME_INFO_S *pstVFrameInfo = &pstVMstFrameInfo->stVideoFrame;
|
||
COMPRESS_MODE_E enCompressMode = COMPRESS_MODE_NONE;
|
||
|
||
if (PIXEL_FORMAT_RGB_BAYER == pstVFrameInfo->stVFrame.enPixelFormat)
|
||
{
|
||
u32Stride = ALIGN_BACK(u32Width*2, 16);
|
||
}
|
||
else if (PIXEL_FORMAT_RGB_BAYER_10BPP == pstVFrameInfo->stVFrame.enPixelFormat)
|
||
{
|
||
u32Stride = (u32Width * 10 + 127) / 128 * 128 / 8;
|
||
}
|
||
else if (PIXEL_FORMAT_RGB_BAYER_8BPP == pstVFrameInfo->stVFrame.enPixelFormat)
|
||
{
|
||
u32Stride = (u32Width * 8 + 127) / 128 * 128 / 8;
|
||
}
|
||
else
|
||
{
|
||
printf("Func: %s() Line[%d], unsupported pixel format: %d\n",
|
||
__FUNCTION__, __LINE__, pstVFrameInfo->stVFrame.enPixelFormat);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
u32LStride = u32Stride;
|
||
u32CStride = u32Stride;
|
||
|
||
////////////////////////////////////////////////////////
|
||
/* seek end of file */
|
||
s32Ret = fseek(pRawFile, -8, SEEK_END);
|
||
if (0 != s32Ret)
|
||
{
|
||
printf("Func: %s(), line: [%d], get frame size failed: %s\n", __FUNCTION__, __LINE__, strerror(errno));
|
||
return HI_FAILURE;
|
||
}
|
||
/* get fpn frame size */
|
||
fread(&u32Size, 1, 4, pRawFile);
|
||
/* back to begin of file */
|
||
fseek(pRawFile, 0L, SEEK_SET);
|
||
////////////////////////////////////////////////////////
|
||
|
||
//printf("frm_size: %d\n", u32Size);
|
||
|
||
/* alloc video buffer block ---------------------------------------------------------- */
|
||
VbBlk = HI_MPI_VB_GetBlock(VB_INVALID_POOLID, u32Size, HI_NULL);
|
||
if (VB_INVALID_HANDLE == VbBlk)
|
||
|
||
{
|
||
printf("HI_MPI_VB_GetBlock err! size:%d\n",u32Size);
|
||
SAMPLE_COMM_VI_ExitMpp(VbBlk);
|
||
return HI_FAILURE;
|
||
}
|
||
pstVMstFrameInfo->VbBlk = VbBlk;
|
||
|
||
u32PhyAddr = HI_MPI_VB_Handle2PhysAddr(VbBlk);
|
||
if (0 == u32PhyAddr)
|
||
{
|
||
printf("HI_MPI_VB_Handle2PhysAddr err!\n");
|
||
SAMPLE_COMM_VI_ExitMpp(u32PhyAddr);
|
||
return HI_FAILURE;
|
||
}
|
||
pVirAddr = (HI_U8 *) HI_MPI_SYS_Mmap(u32PhyAddr, u32Size);
|
||
if (NULL == pVirAddr)
|
||
{
|
||
printf("HI_MPI_SYS_Mmap err!\n");
|
||
SAMPLE_COMM_VI_ExitMpp((HI_S32)pVirAddr);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
pstVFrameInfo->u32PoolId = HI_MPI_VB_Handle2PoolId(VbBlk);
|
||
if (VB_INVALID_POOLID == pstVFrameInfo->u32PoolId)
|
||
{
|
||
SAMPLE_COMM_VI_ExitMpp(pstVFrameInfo->u32PoolId);
|
||
return -1;
|
||
}
|
||
|
||
pstVFrameInfo->stVFrame.u32PhyAddr[0] = u32PhyAddr;
|
||
pstVFrameInfo->stVFrame.u32PhyAddr[1] = pstVFrameInfo->stVFrame.u32PhyAddr[0] + u32LumaSize;
|
||
pstVFrameInfo->stVFrame.u32PhyAddr[2] = pstVFrameInfo->stVFrame.u32PhyAddr[1] + u32ChrmSize;
|
||
|
||
pstVFrameInfo->stVFrame.pVirAddr[0] = pVirAddr;
|
||
pstVFrameInfo->stVFrame.pVirAddr[1] = pstVFrameInfo->stVFrame.pVirAddr[0] + u32LumaSize;
|
||
pstVFrameInfo->stVFrame.pVirAddr[2] = pstVFrameInfo->stVFrame.pVirAddr[1] + u32ChrmSize;
|
||
|
||
pstVFrameInfo->stVFrame.u32Width = u32Width;
|
||
pstVFrameInfo->stVFrame.u32Height = u32Height;
|
||
pstVFrameInfo->stVFrame.u32Stride[0] = u32LStride;
|
||
pstVFrameInfo->stVFrame.u32Stride[1] = u32CStride;
|
||
pstVFrameInfo->stVFrame.u32Stride[2] = u32CStride;
|
||
pstVFrameInfo->stVFrame.u32Field = VIDEO_FIELD_FRAME;
|
||
|
||
if(1 == u32Height)
|
||
{
|
||
SAMPLE_COMM_VI_ReadOneFpnFrame(pRawFile, pstVFrameInfo->stVFrame.pVirAddr[0],
|
||
pstVFrameInfo->stVFrame.u32Width,
|
||
1,
|
||
pstVFrameInfo->stVFrame.u32Stride[0],
|
||
pstVFrameInfo->stVFrame.enPixelFormat,
|
||
pu32Offset,
|
||
&pstVMstFrameInfo->u32FrmSize,
|
||
&enCompressMode,
|
||
pu32Iso);
|
||
}
|
||
else
|
||
{
|
||
SAMPLE_COMM_VI_ReadOneFpnFrame(pRawFile, pstVFrameInfo->stVFrame.pVirAddr[0],
|
||
pstVFrameInfo->stVFrame.u32Width,
|
||
pstVFrameInfo->stVFrame.u32Height,
|
||
pstVFrameInfo->stVFrame.u32Stride[0],
|
||
pstVFrameInfo->stVFrame.enPixelFormat,
|
||
pu32Offset,
|
||
&pstVMstFrameInfo->u32FrmSize,
|
||
&enCompressMode,
|
||
pu32Iso);
|
||
}
|
||
|
||
pstVFrameInfo->stVFrame.enCompressMode = enCompressMode;
|
||
//printf("pstVFrameInfo->stVFrame.enCompressMode: %d\n", pstVFrameInfo->stVFrame.enCompressMode);
|
||
|
||
HI_MPI_SYS_Munmap(pVirAddr, u32Size);
|
||
return 0;
|
||
}
|
||
|
||
|
||
|
||
HI_S32 SAMPLE_COMM_VI_ReadOneRawFile(const char* file_name,
|
||
HI_U32 u32Width, HI_U32 u32Height,
|
||
SAMPLE_VI_FRAME_INFO_S *pstVMstFrameInfo,
|
||
HI_U32 *u32Offset,
|
||
HI_U32 *pu32Iso)
|
||
{
|
||
FILE *pfd;
|
||
HI_S32 s32Ret = HI_SUCCESS;
|
||
|
||
/* open YUV file */
|
||
printf("open dark frame file: %s. \n", file_name);
|
||
pfd = fopen(file_name, "rb");
|
||
if (!pfd)
|
||
{
|
||
printf("open file -> %s fail \n", file_name);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
/* read frame information from YUV file */
|
||
s32Ret = SAMPLE_COMM_VI_GetFPNFrame_FromRaw(pfd, u32Width, u32Height, pstVMstFrameInfo, u32Offset, pu32Iso);
|
||
|
||
fclose(pfd);
|
||
return s32Ret;
|
||
}
|
||
|
||
|
||
HI_S32 SAMPLE_COMM_VI_CORRECTION_CONFIG(const char* fpn_file, /* fpn file name */
|
||
ISP_FPN_TYPE_E enFpnType, /* line/frame */
|
||
ISP_OP_TYPE_E enOpType, /* auto/manual */
|
||
HI_U32 u32Strength, /* strength */
|
||
PIXEL_FORMAT_E enPixelFormat)
|
||
{
|
||
VI_CHN ViChn = 0;
|
||
VI_CHN_ATTR_S stTempChnAttr;
|
||
ISP_FPN_ATTR_S stFPNAttr;
|
||
SAMPLE_VI_FRAME_INFO_S stVMstFrame = {0};
|
||
ISP_DEV IspDev = 0;
|
||
ISP_FPN_FRAME_INFO_S *pstFpnFrmInfo;
|
||
HI_S32 s32Ret = HI_SUCCESS;
|
||
HI_U32 u32Iso;
|
||
|
||
s32Ret = HI_MPI_VI_GetChnAttr(ViChn, &stTempChnAttr);
|
||
if(HI_SUCCESS != s32Ret)
|
||
{
|
||
printf("get vi chn attr failed!");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
stVMstFrame.stVideoFrame.stVFrame.enPixelFormat = enPixelFormat;
|
||
stVMstFrame.stVideoFrame.stVFrame.enCompressMode = COMPRESS_MODE_NONE;
|
||
pstFpnFrmInfo = &stFPNAttr.stFpnFrmInfo;
|
||
|
||
s32Ret = SAMPLE_COMM_VI_ReadOneRawFile(fpn_file,
|
||
stTempChnAttr.stDestSize.u32Width,
|
||
stTempChnAttr.stDestSize.u32Height,
|
||
&stVMstFrame,
|
||
&pstFpnFrmInfo->u32Offset,
|
||
&u32Iso);
|
||
|
||
if(HI_SUCCESS != s32Ret)
|
||
{
|
||
printf("read raw file failed!");
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
pstFpnFrmInfo->u32FrmSize = stVMstFrame.u32FrmSize;
|
||
memcpy(&pstFpnFrmInfo->stFpnFrame,
|
||
&stVMstFrame.stVideoFrame,
|
||
sizeof(VIDEO_FRAME_INFO_S));
|
||
|
||
stFPNAttr.bEnable = HI_TRUE;
|
||
stFPNAttr.enOpType = enOpType;
|
||
|
||
printf("\nread u32Offset = 0x%x, u32iso = %d\n", stFPNAttr.stFpnFrmInfo.u32Offset ,u32Iso);
|
||
printf("hit any key,start correction\n");
|
||
VI_PAUSE();
|
||
|
||
memcpy(&stFPNAttr.stFpnFrmInfo.stFpnFrame,
|
||
&stVMstFrame.stVideoFrame,
|
||
sizeof(VIDEO_FRAME_INFO_S));
|
||
stFPNAttr.enFpnType = enFpnType;
|
||
stFPNAttr.stFpnFrmInfo.u32Iso = u32Iso;
|
||
stFPNAttr.stManual.u32Strength = u32Strength;
|
||
|
||
s32Ret = HI_MPI_ISP_SetFPNAttr(IspDev, &stFPNAttr);
|
||
if(HI_SUCCESS != s32Ret)
|
||
{
|
||
printf("fpn correction fail 0x%x\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
VI_PAUSE();
|
||
|
||
s32Ret = SAMPLE_COMM_VI_ReleaseVBToPool(&stVMstFrame);
|
||
if(HI_SUCCESS != s32Ret)
|
||
{
|
||
printf("SAMPLE_COMM_VI_ReleaseVBToPool fail 0x%x\n", s32Ret);
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
return HI_SUCCESS;
|
||
}
|
||
|
||
/******************************************************************************
|
||
* funciton : Get enSize by diffrent sensor
|
||
******************************************************************************/
|
||
HI_S32 SAMPLE_COMM_VI_GetSizeBySensor(PIC_SIZE_E *penSize)
|
||
{
|
||
HI_S32 s32Ret = HI_SUCCESS;
|
||
SAMPLE_VI_MODE_E enMode = SENSOR_TYPE;
|
||
|
||
if (!penSize)
|
||
{
|
||
return HI_FAILURE;
|
||
}
|
||
|
||
switch (enMode)
|
||
{
|
||
case APTINA_AR0130_DC_720P_30FPS:
|
||
case APTINA_9M034_DC_720P_30FPS:
|
||
case SONY_IMX122_DC_720P_30FPS:
|
||
*penSize = PIC_HD720;
|
||
break;
|
||
case APTINA_AR0230_HISPI_1080P_30FPS:
|
||
case SONY_IMX122_DC_1080P_30FPS:
|
||
*penSize = PIC_HD1080;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
return s32Ret;
|
||
}
|
||
|
||
|
||
|
||
#ifdef __cplusplus
|
||
#if __cplusplus
|
||
}
|
||
#endif
|
||
#endif /* End of #ifdef __cplusplus */
|