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:
- 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.
- 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. - 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.
-
Link do módulo ( Bind )
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:
-
Um grupo gera um grupo que gera um link da Framesource ao codificador.
-
Dois canais são registrados no Grupo Encoder, então o Grupo Encoder tem dois produtos: H264 e JPEG.
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:
- Recomenda-se que todas as operações de link sejam feitas ao inicializar o sistema.
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.