Prefacio:
multimedia Hass procesamiento de plataforma (MPP) se divide en: una entrada de vídeo (VI), un procesamiento de vídeo (VPSS), un codificador de vídeo (VENC), un decodificador de vídeo (VDEC), salida de vídeo (VO), Video Detección Análisis (VDA), el audio de entrada (AI), una salida de audio (AO), el codificador de audio (AENC), un decodificador de audio (ADEC), gestión de área (de la región) módulos. presentado aquí módulo de entrada de vídeo (VI). VI y está estrechamente relacionada con AD, modo de salida de AD debe corresponder a la Hass VI, AD para corregir la salida transmitida al dispositivo Hisi, es necesario entender las características del propio uso ADC. Además flujo de la operación VI se puede dividir en:
- 0. Obtener los parámetros por defecto
- 1. Analizar el número de chip de ADC
- 2. Obtener la corriente que se ha insertado a través de la información de resolución de la cámara IOC_VDEC_GET_INPUT_VIDEO_FMT
- 3. Calcular el tamaño de la memoria
- 4. mpp de iniciación del sistema
- 5. Iniciar el equipo ADC
- 6. función de inicio VI
- 7. Set VI relación de unión de canales
- 8. Establecer unión de VI y VPSS
Descripción:
configuración de la tarjeta de desarrollo:
Hisi: Hi3521A
el AD: NVP6134C una
cámara: 720p, 1080p
espectáculo: bus HDMI, pantalla 1080P
(A) Características básicas:
(1) NVP6134
Formatos de entrada
- 4CH Conexiones de vídeo de entrada
: CVBS / El cometa
.: Universal 1M y 2M 3/4 / 5M del NRT.
Los formatos de salida
- BT.656 en la salida / BT.1120. 4: 2: 2 bytes intercalación el formato with37.125 / 74,25 / 148,5 / 297MHz
- soportar el formato de sincronización independiente BT.601 (el CLK / H, SYNC-V / 8'bitDATA)
apoyar el Puerto de salida de las conexiones de vídeo * 2, la salida de cada puerto de conexiones de vídeo FormatSelectable
un máximo de entrada 6134NVP chip de punto de datos de soporte 4, dos de 8 bits puerto de salida se puede seleccionar con control individual, que se puede mezclar como un puerto de 16-bit.
(2) Hisi VI
viruta Hi3521A BT.1120 tiene dos interfaces, cada interfaz seguido BT.1120 VI correspondiente a dos dispositivos, es decir, un primer puerto correspondiente a la VI Dev0 BT.1120 y la Dev1, el segundo puerto correspondiente al disp2 BT.1120 y VI Dev3.4 un 1/2/4 VI dispositivos D1,960H apoyar entrada multi modo (BT.656 protocolo), y de 2 vías modo multi 720P. 4 soportes de dispositivos 720P / 1080P entrada HD 1 (Protocolo BT.1120) En este caso, la misma interfaz BT1120 otro Dev no disponible, es decir Dev0, DEV1 solamente puede disponible; DEV2, dev3 sólo puede utilizar una .
Solía aquí es el modo BT.656, es decir, cuatro dev puede ser utilizado solo, puede soportar el modo de 1/2/4 D1,960H compuesta de entrada (BT.656 protocolo), y de 2 vías 720P modo compuesto.
(B) de entrada adaptativo
Adaptado de entrada está realmente conectado a los canales de entrada y la resolución real de la cámara de la cámara para aplicar bloque de memoria, y así sucesivamente para ajustar el modo de entrada.
Para llevar a cabo la entrada de adaptación IOC_VDEC_GET_INPUT_VIDEO_FMT puede adquirir una resolución de entrada de vídeo, el número de información de entrada como la cabeza de la cámara.
El miembro operativo mecanismo real es:
typedef struct _nvp6134_input_videofmt
{
unsigned int inputvideofmt[16];
unsigned int getvideofmt[16];
unsigned int geteqstage[16];
unsigned int getacpdata[16][8];
}nvp6134_input_videofmt;
Consulta la cámara en unos y resolución grandes se puede lograr:
int Check_NVP6134_VideoInputFMT(void)
{
int fd = -1;
int i = 0;
int l_s32Ret = 0;
nvp6134_input_videofmt stInputFMT;
bzero(&stInputFMT,sizeof(nvp6134_input_videofmt));
fd = open(NVP6134_FILE, O_RDWR);
if (fd < 0)
{
printf("[%s:%d] open nvp6134 (%s) fail\n", __func__, __LINE__, NVP6134_FILE);
return -1;
}
l_s32Ret = ioctl(fd, IOC_VDEC_GET_INPUT_VIDEO_FMT, &stInputFMT);
if(l_s32Ret < 0)
{
printf("[%s,%d][l_s32Ret:%d]\n",__FILE__,__LINE__,l_s32Ret);
}
close(fd);
for(i=0;i<16;i++)
{
printf("i=%d videofmt =0x%x \n",i,stInputFMT.getvideofmt[i]);
printf("i=%d inputvideofmt=0x%x \n\n",i,stInputFMT.inputvideofmt[i]);
}
return 0;
}
Getvideofmt relación resolución correspondencia puede ver la función de conducir NVP6134
unsigned char nvp6134_vfmt_convert(unsigned char vdsts, unsigned char g_ck_fmt)
/*nvp6134b视频模式值转换*/
unsigned char nvp6134_vfmt_convert(unsigned char vdsts, unsigned char g_ck_fmt)
{
unsigned int ret;
switch(vdsts)
{
case 0x00: ret = 0x01; break; //cvbs ntsc
case 0x10: ret = 0x02; break; //cvbs pal
case 0x20: ret = 0x04; break; //720p ntsc
case 0x21: ret = 0x08; break; //720p pal
case 0x22: ret = 0x51; break; //720P@RT ntsc
case 0x23: ret = 0x52; break; //720P@RT pal
case 0x30: ret = 0x40; break; //1080p ntsc
case 0x31: ret = 0x80; break; //1080p pal
....
case 0x01:
case 0x02:
if((g_ck_fmt>>4) == 0x02) ret = 0x91; //AHD @ 3M RT-30P
else ret = 0x92; //AHD @ 3M RT-25P
break;
default:
case 0xFF: ret = 0x00; break; //not detects
}
return ret;
}
Realizar funciones tales como dar lo anterior:
/hi3520/app # ./nvp_6134_input_fmt_check
i=0 videofmt =0x0
i=0 inputvideofmt=0x0
i=1 videofmt =0x0
i=1 inputvideofmt=0x0
i=2 videofmt =0x0
i=2 inputvideofmt=0x0
i=3 videofmt =0x12
i=3 inputvideofmt=0x0
....
Puede conocer la cuarta entradas de una cámara es la 720P. A continuación, vaya a seguir un camino de entrada de la cámara 720P para inicializar el MPP Hisi
(C) el flujo de operación básica
0. Obtener los parámetros por defecto
Esto no es necesario, excepto como un parámetro por defecto cuando no se detecta la cámara.
1. Analizar el número de chip de ADC
NVP6134 sólo admiten un máximo datos de la cámara de cuatro entradas, pero puede soportar la cámara de entrada HI3521A 16, se puede utilizar simultáneamente como las patatas fritas siguen teniendo una pluralidad de entrada de datos de ADC. Hass equipos para el máximo apoyo debe ser capaz de entrar en los cuatro NVP6134.
2. Obtener resolución de entrada y la cámara
Obtener actual ha sido insertado a través de IOC_VDEC_GET_INPUT_VIDEO_FMT información resolución de la cámara, es decir, el contenido de (B) descrito anteriormente de entrada adaptado
3. Calcular el tamaño de la memoria
Se puede utilizar directamente para calcular la interfaz oficial SAMPLE_COMM_SYS_CalcPicVbBlkSize
4. mpp de iniciación del sistema
Puede llamar directamente SAMPLE_COMM_SYS_Init inicialización de interfaz.
5. Iniciar el equipo ADC
Debe tenerse en cuenta: ADC debe ser proporcionada aquí corresponde Hisi VI siguiente conjunto, de lo contrario los datos no se pueden transmitir normalmente.
Estoy aquí es proporcionar bidireccional puerto de salida 2 NVP6134 multiplexación, cada uno correspondiente a dos canales de puerto de salida de datos, un total de cuatro de datos, conjunto como sigue:
case SAMPLE_VI_MODE_6134_960H_720P_2MUX:
{
SAMPLE_PRT("SAMPLE_VI_MODE_6134_960H_720P_2MUX!!!\n");
for(i=0;i<chip_cnt*4;i++)
{
schnmode.ch = i;
schnmode.vformat = video_mode;
schnmode.chmode = NVP6134_VI_720P_2530;
ioctl(fd, IOC_VDEC_SET_CHNMODE, &schnmode);
}
for(i=0;i<chip_cnt;i++)
{
optmode.chipsel = i;
optmode.portsel = 2;
optmode.portmode = NVP6134_OUTMODE_2MUX_HD;
optmode.chid = 0;
ioctl(fd, IOC_VDEC_SET_OUTPORTMODE, &optmode);
optmode.portsel = 1;
optmode.portmode = NVP6134_OUTMODE_2MUX_HD;
optmode.chid = 1;
ioctl(fd, IOC_VDEC_SET_OUTPORTMODE, &optmode);
}
SAMPLE_PRT("[%s:%d] SET OK!!!\n", __func__, __LINE__);
break;
}
análisis de la estructura:
/**
* Argurments :
* portsel(port select->6134b[1,2],6134[0,1,2,3],6134C[1,2];)
* portmode(port mode select[1mux,2mux,4mux]),
* chid(channel id, 1mux[0,1,2,3], 2mux[0,1], 4mux[0])
**/
typedef struct _nvp6134_opt_mode
{
unsigned char chipsel;
unsigned char portsel;
unsigned char portmode;
unsigned char chid;
}nvp6134_opt_mode;
6. función de inicio VI
Aquí está el diseño y el uso dev1 Dev0, dos modos de multiplexado
case SAMPLE_VI_MODE_8_720P:
case SAMPLE_VI_MODE_16_720P:
case SAMPLE_VI_MODE_8_1080P:
case SAMPLE_VI_MODE_4_1080P:
case SAMPLE_VI_MODE_2_720P:
memcpy(&stViDevAttr,&DEV_ATTR_6114_720P_2MUX_BASE,sizeof(stViDevAttr));
SAMPLE_COMM_VI_SetMask(ViDev,&stViDevAttr);
break;
default:
SAMPLE_PRT("vi input type[%d] is invalid!\n", enViMode);
return HI_FAILURE;
atributos del dispositivo son los siguientes:
VI_DEV_ATTR_S DEV_ATTR_6114_720P_2MUX_BASE =
{
/*接口模式*/
VI_MODE_BT656,
/*1、2、4路工作模式*/
VI_WORK_MODE_2Multiplex,
/* r_mask g_mask b_mask*/
{0xFF000000, 0x0},
/* 双沿输入时必须设置 */
VI_CLK_EDGE_SINGLE_UP,
/*AdChnId*/
{-1, -1, -1, -1},
/*enDataSeq, 仅支持YUV格式*/
VI_INPUT_DATA_YVYU,
/*同步信息,对应reg手册的如下配置, --bt1120时序无效*/
{
/*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,
/*timing信息,对应reg手册的如下配置*/
/*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*/
VI_PATH_BYPASS,
/*输入数据类型*/
VI_DATA_TYPE_YUV
};
7. Set VI relación de unión de canales
El diseño es:
- Los canales 0, respectivamente, unidos a la Dev0 WAY0, y WAY1,
- Los canales 2, 3, respectivamente, unidos a la dev1 WAY0, y WAY1,
El código se implementa como:
for(i=0,ViChn=0; i<stViParam.s32ViDevCnt; i++)
{
for(j=0;j<stViParam.s32ViChnCnt/2;j++,ViChn++)
{
s32Ret = HI_MPI_VI_GetChnBind(ViChn, &stChnBindAttr);
stChnBindAttr.ViDev=i;
stChnBindAttr.ViWay = ViChn%2;
if (HI_ERR_VI_FAILED_NOTBIND == s32Ret)
{
s32Ret = HI_MPI_VI_BindChn(ViChn, &stChnBindAttr);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("call HI_MPI_VI_BindChn failed with %#x\n", s32Ret);
return HI_FAILURE;
}
}
s32Ret = SAMPLE_COMM_VI_StartChn(ViChn, &stCapRect, &stTargetSize, enViMode, VI_CHN_SET_NORMAL);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("call SAMPLE_COMM_VI_StarChn failed with %#x\n", s32Ret);
return HI_FAILURE;
}
}
}
8. Encienda VPSS y VI están obligados a VPSS
/******************************************
step 4: start vpss and vi bind vpss
******************************************/
s32Ret = SAMPLE_COMM_SYS_GetPicSize(enNorm, PIC_HD720, &stSize);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n");
goto END_4_720P_1;
}
memset(&stGrpAttr,0,sizeof(VPSS_GRP_ATTR_S));
stGrpAttr.u32MaxW = stSize.u32Width;
stGrpAttr.u32MaxH = stSize.u32Height;
stGrpAttr.bNrEn = HI_TRUE;
stGrpAttr.enDieMode = VPSS_DIE_MODE_NODIE;
stGrpAttr.enPixFmt = SAMPLE_PIXEL_FORMAT;
s32Ret = SAMPLE_COMM_VPSS_Start(s32VpssGrpCnt, &stSize, VPSS_MAX_CHN_NUM, &stGrpAttr);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Start Vpss failed!\n");
goto END_4_720P_1;
}
s32Ret = SAMPLE_COMM_VI_BindVpss(enViMode);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("Vi bind Vpss failed!\n");
goto END_4_720P_2;
}
Los resultados:
Después de la inicialización adecuada y propiedades de unión son los siguientes:
/hi3520/app # cat /proc/umap/vi
[VIU] Version: [Hi3521A_MPP_V1.0.3.1 B010 Release], Build Time: [Apr 18 2016, 12:08:26]
-----MODULE PARAM--------------------------------------------------------------
detect_err_frame drop_err_frame stop_int_level max_cas_gap
10 0 0 28000
-----VI DEV ATTR---------------------------------------------------------------
Dev IntfM WkM ComMsk0 ComMsk1 CLKM AD0 AD1 AD2 AD3 Seq DPath DType DRev
0 BT656 2Mux ff 0 UP -1 -1 -1 -1 UYVY ByPass YUV N
1 BT656 2Mux ff00 0 UP -1 -1 -1 -1 UYVY ByPass YUV N
-----VI HIGH DEV ATTR---------------------------------------------------------------
Dev InputM WkM ComMsk0 ComMsk1 AD0 AD1 AD2 AD3 Seq CombM CompM ClkM Fix FldP DPath DType DRev
-----VI PHYCHN ATTR------------------------------------------------------------
PhyChn CapX CapY CapW CapH DstW DstH CapSel ScanM SkipM Mirror Flip IntEn PixFom SrcRat DstRat
0 0 0 1280 720 1280 720 both P SKIPNON N N Y sp420 -1 -1
1 0 0 1280 720 1280 720 both P SKIPNON N N Y sp420 -1 -1
2 0 0 1280 720 1280 720 both P SKIPNON N N Y sp420 -1 -1
3 0 0 1280 720 1280 720 both P SKIPNON N N Y sp420 -1 -1
-----VI PHYCHN MINOR ATTR------------------------------------------------------------
PhyChn CapX CapY CapW CapH DstW DstH CapSel ScanM Mirror Flip PixFom MixCap DwScal SrcRat DstRat
-----VI PHYCHN STATUS 1----------------------------------------------------------
PhyChn BindDev Way IntCnt VbFail LosInt TopLos BotLos BufCnt IntT SendT Field Stride
0 0 0 353 0 3 0 2 2 58 24 frm 1280
1 0 1 352 0 3 0 2 2 27 11 frm 1280
2 1 0 352 0 3 0 2 2 34 13 frm 1280
3 1 1 352 0 3 0 2 2 26 11 frm 1280
-----VI PHYCHN STATUS 2---------------------------------------------------------
PhyChn MaxIntT IntGapT MaxGapT OverCnt LIntCnt ThrCnt AutoDis CasAutD TmgErr ccErrN IntRat
0 58 40009 40021 0 0 1 0 0 0 3 24
1 47 40001 40010 0 0 1 0 0 0 3 25
2 52 40026 40026 0 0 1 0 0 0 3 24
3 55 40004 40086 0 0 1 0 0 0 3 24
-----VI CHN STATUS-------------------------------------------------------------
ViChn bEnUsrP FrmTime FrmRate SendCnt SwLost Depth
0 N 40010 25 350 0 0
1 N 40000 25 349 0 0
2 N 40025 25 349 0 0
3 N 40004 25 349 0 0
-----VI CHN CALL VGS STATUS 1-------------------------------------------------
ViChn UsrBgnNOk UsrCancel UsrEndOk UsrCbOk CvrBgnNOk CvrCancel CvrEndOk CvrCbOk
-----VI CHN CALL VGS STATUS 2-------------------------------------------------
ViChn OsdBgnNOk OsdCancel OsdEndOk OsdCbOk ScaleNOk SclCancel SclEndOk SclCbOk
/hi3520/app #
Se proporciona 4 salidas, el acceso de una cámara siguientes efectos:
Mostrar un poco sucio, que se verá, ja, ja ~
Este capítulo de la ingeniería de medición de frecuencia "Catálogo de prefacio" para obtener la dirección proporcionada
El primer artículo de esta columna "Catálogo de prefacio," listas de la columna completa de directorio, leído por fin directorio para ayudar a su comprensión.