Nota: questa pagina è stata tradotta automaticamente. Se puoi, dovresti leggerlo in una di queste lingue:

Guida alla programmazione IMP

La documentazione di Apis può essere vista qui:

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

concetti basilari

Il programma T20 / T21 si basa sui seguenti concetti:

  1. Dispositivo ( = Device )
    Il dispositivo completa la funzione. Esempi:
    • Framesource : Completa l’uscita dei video clip.
    • Encoder : Completa il codice video o la funzione del codice immagine.
  2. Gruppo ( = Group )
    Il gruppo è la più piccola unità di ingresso dati. Un dispositivo può avere più gruppi e ciascun gruppo può ricevere un solo canale di ingresso dati. Il gruppo può avere diversi risultati. .
    Il gruppo è anche un contenitore per le funzioni specifiche “ “. Vedere la spiegazione nella sezione del canale per maggiori dettagli.
  3. Eligo ( = Output )
    L’uscita è l’unità di uscita dei dati più piccola per gruppo.
    Il canale è solitamente correlato a un’unica unità funzionale.
    Ad esempio:
    • Per il codice, il canale completa la funzione H264 o codice JPEG. .

    • Per IVS, un canale completa la funzione di un algoritmo specifico e gli specifici parametri tipici dell’algoritmo sono specificati durante la creazione del canale

    • Per OSD, c’è una regione simile a Channel, una regione è una specifica area superMetata che può essere un top ( immagine ) coperchio ( occlusione ), ecc. .

    • Per FrameSource, un canale produce un’immagine originale e il canale FrameSource è in realtà un gruppo

    Il canale, come unità funzionale, di solito viene conservato nel gruppo ( tranne FrameSource ) Ricevi dati. .

    Anche il numero di canali che possono essere registrati dal gruppo di vari dispositivi è diverso.

Dopo due gruppi sono collegati da Bind, i dati dal gruppo sorgente invieranno automaticamente alla destinazione.
Poiché il gruppo è l’unità di ingresso dei dati più piccola e l’uscita è la più piccola unità di uscita dei dati, deviceID, groupID e outputID srcCell nei due parametri di IMP_System_Bind (IMPCell * srcCell, IMPCell * dstCell) sono validi. .

Mentre dstCell è valido solo per deviceID e groupID, outputID non ha senso come l’ingresso dei dati. .

Esempio 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");

Risultato:

Esempio 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");

Applica è un’applicazione tipica Bind : codice a due canali. .

Note:

Funzioni

int IMP_System_Init (void ).

Inizio del sistema IMP. .

Inizio del sistema int IMP_System_Exit (void). _.

Dopo aver chiamato questa funzione, verrà rilasciata tutte le memoria e handles IMP e l’unità hardware sarà chiusa. .

Dopo aver chiamato questa funzione, verrà rilasciata tutte le memoria e int64_t IMP_System_GetTimeStamp (void) _ e l’unità hardware sarà chiusa. (.

Ottieni il campo Tempi del sistema IMP in microsecondi.
ritorno: tempo in microecondi. .

Ottieni il campo Tempi del sistema int IMP_System_RebaseTimeStamp (bases int64_t) in microsecondi. _ ritorno: tempo in microecondi. (.

Definire il sistema Timestamp IMP in microsecondi.
ritorno: 0 se ha successo. .

Definire il sistema Timestamp uint32_t IMP_System_ReadReg32 (uint32_t u32Addr) in microsecondi. _ ritorno: 0 se ha successo. _.

Leggi il valore di un registro a 32 bit.

void IMP_System_WriteReg32 (uint32 t regadddr, valore UINT32 t)

Scrivi il valore nel registro a 32 bit. .

Nota: chiama attentamente questa API e controlla il significato del registro, altrimenti potrebbe causare errori di sistema.

int IMP Sistema GetVersion (IMPVersion * pstVersion)

Ottieni il sistema del sistema IMP. .

const char * IMP Sistema GetCPUInfo (void)

Ottieni informazioni sul modello di CPU.
Nota: il valore restituito è una stringa del modello di CPU, ad esempio, per T10 sono presenti “T10”e “T10-Lite”.

int IMP Sistema (

Collegamento tra cella di origine e destinazione.

Nota 1: in base ai concetti di dispositivo, gruppo e output, ogni dispositivo può avere diversi gruppi e ogni gruppo può avere diverse uscite, il gruppo viene utilizzato come interfaccia di input del dispositivo e l’output viene utilizzato come interfaccia del prodotto del dispositivo. Pertanto il collegamento collega effettivamente una certa uscita del dispositivo di output a un certo Gruppo del dispositivo di input.

Nota 2: Dopo un collegamento di successo, i dati generati da srcCell ( Eligo ) verranno trasferiti automaticamente alla destinazione ( Gruppo ). .

int IMP Sistema (

Separa le origini e le destinazioni.

int IMP Sistema (

Recupera le informazioni dalla cella di origine relativa alla destinazione.