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:
- 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.
- 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. - 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.
-
Link del modulo ( Bind )
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:
-
Un gruppo genera un gruppo che genera un collegamento da framesource all’encoder. .
-
Due canali sono registrati nel gruppo encoder, quindi il Gruppo Encoder ha due prodotti: H264 e JPEG. .
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:
- Si consiglia di effettuare tutte le operazioni di collegamento durante l’inizializzazione del sistema. .
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.