Programado gvidas IMP
La dokumentado de APIs povas esti vidata ĉi tie:
IMP ( Ingenic Media Platform ) ( Vidu imp_system.h )
bazaj konceptoj
La programado T20 / T21 baziĝas sur la sekvaj konceptoj:
- Aparato ( = Device )
La aparato kompletigas funkcion. Ekzemploj:- Framesource : kompletigu la eligon de videodatenoj.
- Encoder : kompletigu la videokodigon aŭ bildkodigan funkcion.
- Grupo ( = Group )
La grupo estas la plej malgranda datum-eniga unuo. Aparato povas havi plurajn grupojn kaj ĉiu grupo povas ricevi nur unu datuman enigan kanalon. La grupo povas havi plurajn rezultojn.
La grupo ankaŭ estas ujo por specifaj “ funkcioj “. Vidu la klarigon en la kanala sekcio por pliaj detaloj. - Eligo ( = Output )
La eligo estas la plej malgranda datuma eliga unuo por grupo.
La kanalo kutime rilatas al unu sola funkcia unuo.
Ekzemple:-
Por la kodilo, kanalo kompletigas la H264 aŭ koda funkcio JPEG.
-
Por IVS, kanalo kompletigas la funkcion de specifa algoritmo kaj la specifaj algoritmaj tipaj parametroj estas specifitaj dum kreado de la kanalo
-
Por OSD, estas regiono simila al Channel, regiono estas specifa supermetita areo, kiu povas esti pinto ( bildo ) kovrilo ( okludo ), ktp.
-
Por FrameSource, kanalo produktas originalan bildon kaj la kanalon FrameSource estas fakte grupo
La kanalo, kiel funkcia unuo, kutime estu konservita en la grupo ( krom FrameSource ) ricevi datumojn.
La nombro de kanaloj, kiuj povas esti registritaj de la grupo de diversaj aparatoj, estas ankaŭ malsama.
-
Modulo-ligilo ( Bind )
Post kiam du grupoj estas ligitaj per Bind, datumoj de la fonta grupo aŭtomate sendos al la celloko.
Ekde la grupo estas la plej malgranda datuma eniga unuo kaj la eligo estas la plej malgranda datuma eliga unuo, la deviceID, groupID kaj outputID srcCell en la du parametroj de IMP_System_Bind (IMPCell * srcCell, IMPCell * dstCell) estas validaj.
Dum dstCell estas nur valida por deviceID kaj groupID, outputID ne havas sencon kiel enirejo de datumoj.
Ekzemplo 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");
Rezulto:
-
realiĝas grupo, kiu generas ligon de FrameSource al Encoder.
-
Du kanaloj estas registritaj en Encoder Group, do Encoder Group havas du produktojn: H264 kaj JPEG.
Ekzemplo 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");
Apliki estas tipa apliko Bind : du-kanala kodo.
Notoj:
- Estas rekomendite, ke ĉiuj ligaj operacioj estas faritaj kiam inicializado de la sistemo.
Funkcioj
int IMP_System_Init (void )
Komenco de la sistemo IMP.
int IMP_System_Exit (void)
Post voki ĉi tiun funkcion, la tuta memoro kaj handles IMP estos publikigitaj, kaj la aparataro-unuo estos fermita.
int64_t IMP_System_GetTimeStamp (void)
Akiru la tempokampon de la sistemo IMP en mikrosekundoj.
Reveno: tempo en mikrosekundoj.
int IMP_System_RebaseTimeStamp (bases int64_t)
Difini la sistemon Timestamp IMP en mikrosekundoj.
Reveno: 0 se sukcesas.
uint32_t IMP_System_ReadReg32 (uint32_t u32Addr)
Legu la valoron de 32-bita registro.
void IMP_System_WriteReg32 (uint32 t regaddr, valoro uint32 t)
Skribu la valoron en la 32-bita registro.
Noto: Bonvolu telefoni al ĉi tiu API zorge kaj kontroli la signifon de la registro, alie ĝi povas kaŭzi sistemajn erarojn.
int IMP System GetVersion (IMPVersion * pstVersion)
Akiru la numeron de la sistemo IMP.
const char * IMP sistemo GetCPUInfo (void)
Akiru informojn pri la CPU-modelo.
Noto: La revenvaloro estas ĉeno de CPU-modelo, ekzemple, por T10 ekzistas “T10”kaj “T10-Lite”.
int IMP sistemo (
Ligo inter fonta ĉelo kaj celloko.
Noto 1: Laŭ la konceptoj de Aparato, Grupo kaj Eligo, ĉiu aparato povas havi plurajn grupojn, kaj ĉiu grupo povas havi plurajn elirojn, Grupo estas uzata kiel Aparata eniga interfaco, kaj Eliro estas uzata kiel Aparata produkta interfaco. Tial la ligo fakte konektas certan eliron de la eliga aparato al certa Grupo de la eniga aparato.
Noto 2: Post sukcesa ligo, la datumoj generitaj de srcCell ( eligo ) estos aŭtomate transdonitaj al la celloko ( Grupo ).
int IMP sistemo (
Malgrupigu la fontajn kaj cellokojn.
int IMP sistemo (
Rekuperas informojn de la fonta ĉelo rilate al la celloko.