Atenção: esta página foi traduzida automaticamente. Se puder, você deve lê-lo em um destes idiomas:

Guia de programação IMP

A documentação da APIs pode ser vista aqui:

IMP ( Ingenic Media Platform ) ( ver imp_system.h )

Conceitos Básicos

O programa T20 / T21 é baseado nos seguintes conceitos:

  1. Dispositivo ( = Device )
    O dispositivo conclui a função. Exemplos:
    • Framesource : complete a saída de clipes de vídeo.
    • Encoder : Complete o código de vídeo ou a função de código de imagem.
  2. Grupo ( = Group )
    O grupo é a menor unidade de entrada de dados. Um dispositivo pode ter vários grupos e cada grupo pode receber apenas um canal de entrada de dados. O grupo pode ter vários resultados.
    O grupo também é um recipiente para funções específicas “ “. Veja a explicação na seção Canal para mais detalhes.
  3. Eligo ( = Output )
    A saída é a menor unidade de saída de dados por grupo.
    O canal é geralmente relacionado a uma única unidade funcional.
    Por exemplo:
    • Para o codel, o canal conclui a função H264 ou código JPEG.

    • Para IVS, um canal conclui a função de um algoritmo específico e os parâmetros típicos de algoritmo específicos são especificados durante a criação do canal

    • Para OSD, há uma região semelhante a Channel, uma região é uma área supermetada específica que pode ser um top ( imagem ) capa ( oclusão ), etc.

    • Para FrameSource, um canal produz uma imagem original e o canal FrameSource é realmente um grupo

    O canal, como uma unidade funcional, geralmente ser preservada no grupo (, exceto FrameSource ) recebe dados.

    O número de canais que podem ser gravados pelo grupo de vários dispositivos também é diferente.

Depois que dois grupos estão vinculados por Bind, os dados do grupo de origem enviarão automaticamente para o destino.
Como o grupo é a menor unidade de entrada de dados e a saída é a menor unidade de saída de dados, o deviceID, groupID e outputID srcCell nos dois parâmetros de IMP_System_Bind (IMPCell * srcCell, IMPCell * dstCell) são válidos.

Enquanto dstCell é válido apenas para deviceID e groupID, outputID não faz sentido como entrada de dados.

Exemplo 1:

IMPCell fs_chn0 = {DEV_ID_FS, 0, 0};    // FrameSource deviceID: DEV_ID_FS groupID: 0 outputID: 0
IMPCell enc_grp0 = {DEV_ID_ENC, 0, 0}; // ENC deviceID: DEV_ID_ENC groupID : 0 outputID: 0, où le troisième paramètre de enc_grp0 n'a pas de sens. 
int ret = IMP_System_Bind (& fs_chn0, & enc_grp0);
if(ret <0>)
  printf ("Bind FrameSource Channel0 and Encoder Group0 failed \ n");

Resultado:

Exemplo 2:

// flux de données principal
IMPCell fs_chn0 = {DEV_ID_FS, 0, 0};
IMPCell osd_grp0 = {DEV_ID_OSD, 0, 0};
IMPCell enc_grp0 = {DEV_ID_ENC, 0, 0};
int ret = IMP_System_Bind(&fs_chn0, &osd_grp0);
if (ret < 0)
    printf("Bind FrameSource Channel0 and OSD Group0 failed\n");

int ret = IMP_System_Bind(&osd_grp0, &enc_grp0);
if (ret < 0)
    printf("Bind OSD Group0 and Encoder Group0 failed\n");

// flux de données lié 
IMPCell fs_chn1_output0 = {DEV_ID_FS, 1, 0};
IMPCell ivs_grp0 = {DEV_ID_IVS, 0, 0};
IMPCell osd_grp1 = {DEV_ID_OSD, 1, 0};
IMPCell enc_grp1 = {DEV_ID_ENC, 1, 0};

int ret = IMP_System_Bind(&fs_chn1_output0, &ivs_grp0);
if (ret < 0)
    printf("Bind FrameSource Channel1 and IVS Group0 failed\n");

int ret = IMP_System_Bind(&ivs_grp0, &osd_grp1);
if (ret < 0)
    printf("Bind IVS Group0 and OSD Group1 failed\n");

int ret = IMP_System_Bind(&osd_grp1, &enc_grp1);
if (ret < 0)
    printf("Bind OSD Group1 and Encoder Group1 failed\n");

Aplicar é um aplicativo típico Bind : código de dois canais.

Notas:

Funções

int IMP_System_Init (void )

Início do sistema IMP.

Início do sistema int IMP_System_Exit (void). _

Depois de chamar essa função, toda a memória e handles IMP será lançada e a unidade de hardware será fechada.

Depois de chamar essa função, toda a memória e int64_t IMP_System_GetTimeStamp (void) _ será lançada e a unidade de hardware será fechada. (

Obtenha o campo de temporização do sistema IMP em microssegundos.
Return: Hora em microeconds.

Obtenha o campo de temporização do sistema int IMP_System_RebaseTimeStamp (bases int64_t) em microssegundos. _ Return: Hora em microeconds. (

Defina o sistema Timestamp IMP em microssegundos.
Return: 0 se for bem sucedido.

Defina o sistema Timestamp uint32_t IMP_System_ReadReg32 (uint32_t u32Addr) em microssegundos. _ Return: 0 se for bem sucedido. _

Leia o valor de um registro de 32 bits.

void IMP_System_WriteReg32 (uint32 t regaddr, valor uint32 t)

Escreva o valor no registro de 32 bits.

Nota: Por favor, chame esta API com cuidado e verifique o significado do registro, caso contrário, pode causar erros de sistema.

int IMP System GetVersion (IMPVersion * pstVersion)

Obtenha o sistema do sistema IMP.

const char * IMP System GetCPUInfo (void)

Obtenha informações sobre o modelo de CPU.
Nota: O valor de retorno é uma string do modelo da CPU, por exemplo, para T10 há “T10”e “T10-Lite”.

int IMP System (

Link entre a célula de origem e o destino.

Nota 1: De acordo com os conceitos de Dispositivo, Grupo e Saída, cada dispositivo pode ter vários grupos, e cada grupo pode ter várias saídas, Grupo é usado como interface de entrada do dispositivo e Saída é usado como interface de produto do dispositivo. Portanto, o link realmente conecta uma determinada saída do dispositivo de saída a um determinado Grupo do dispositivo de entrada.

Nota 2: Após um link bem-sucedido, os dados gerados pelo srcCell ( Eligo ) serão automaticamente transferidos para o destino ( Grupo ).

int IMP System (

Desagrupe as origens e destinos.

int IMP System (

Recupera informações da célula de origem relacionadas ao destino.