Hass Multimedia (MPP) Desarrollo (2) - Entrada de vídeo (VI)

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:

  1. Los canales 0, respectivamente, unidos a la Dev0 WAY0, y WAY1,
  2. 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.

 

 

 

 

Publicados 175 artículos originales · ganado elogios 262 · vistas 700 000 +

Supongo que te gusta

Origin blog.csdn.net/li_wen01/article/details/104429216
Recomendado
Clasificación