Vollständige technische Kapitel von Rockchip RGA IM2D API V2.2.7 (82 chinesische und 79 englische Seiten). Für ArmSoM müssen RGA-Version des Board-SoC, SDK/BSP, passende librga-/Kerneltreiber und Speicher-/Formatgrenzen geprüft werden. Unterstützung aller Funktionen auf allen Boards wird nicht behauptet. Keine einheitliche Kernelversion ist angegeben; Kapitel 2 enthält Treiberkompatibilität. Keine ArmSoM-Hardwarevalidierung wurde durchgeführt. Leistungswerte sind theoretische Herstellerangaben; Beispiele und Logs keine ArmSoM-Messungen.
Quellunklarheiten bleiben erhalten: impyramind/impyramid und imfilp/imflip; imcvtcolorTask wird als Verschiebung beschrieben; §5.3.12 nennt IM_ALPHA_BLEND_DST, §3.15 SRC_OVER. Die OSD-Tabelle ordnet interne/externe Steuerung EXTERNAL/INTERNAL zu, offenbar entgegen den Namen. Schreibweisen bule, RK_FORMA_A8, RK1103B, RK1108 erfordern SDK-Prüfung. Die Hardwaretabelle ist rechts abgeschnitten: sichtbares 3 (by pa… für RGA3 bleibt ohne erratene Ergänzung erhalten.
1. Übersicht
RGA (Raster Graphic Acceleration Unit) ist ein unabhängiger 2D-Hardwarebeschleuniger für Punkt-/Linienzeichnung, Skalierung, Rotation, bitBlt und Alpha-Blending.
1.1 Auslegungsspezifikationen
| Version | Codename | Chip | Quelle min | Quelle max | Ziel min | Ziel max | Funktion | Pixels/Cycle |
|---|---|---|---|---|---|---|---|---|
| RGA1 | Pagani | RK3066 | 2x2 | 8192x8192 | 2x2 | 2048x2048 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/2~8 Skalierung Alpha-Mischung Farbschlüssel Farbfüllung ROP IOMMU(32bit) |
1 |
| RGA1 | Jaguar Plus |
RK3188 | 2x2 | 8192x8192 | 2x2 | 2048x2048 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/2~8 Skalierung Alpha-Mischung Farbschlüssel Farbfüllung ROP IOMMU(32bit) |
1 |
| RGA1 | Beetles | RK2926/2928 | 2x2 | 8192x8192 | 2x2 | 2048x2048 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/2~8 Skalierung Alpha-Mischung Farbschlüssel Farbfüllung ROP IOMMU(32bit) |
1 |
| RGA1 | Beetles Plus |
RK3026/3028 | 2x2 | 8192x8192 | 2x2 | 2048x2048 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/2~8 Skalierung Alpha-Mischung Farbschlüssel Farbfüllung ROP IOMMU(32bit) |
1 |
| RGA1_plus | Audi | RK3128 | 2x2 | 8192x8192 | 2x2 | 2048x2048 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/2~8 Skalierung Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette IOMMU(32bit) |
1 |
| RGA1_plus | Granite | Sofia 3gr | 2x2 | 8192x8192 | 2x2 | 2048x2048 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/2~8 Skalierung Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette IOMMU(32bit) |
1 |
| RGA2 | Lincoln | RK3288/3288w | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/16~16 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette ROP IOMMU(32bit) |
2 |
| RGA2 | Capricorn | RK3190 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/16~16 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette ROP IOMMU(32bit) |
2 |
| RGA2- Lite0 |
Maybach | RK3368 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/8~8 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette ROP IOMMU(32bit) |
2 |
| RGA2- Lite0 |
BMW | RK3366 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/8~8 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette ROP IOMMU(32bit) |
2 |
| Version | Codename | Chip | Quelle min | Quelle max | Ziel min | Ziel max | Funktion | Pixels/Cycle |
|---|---|---|---|---|---|---|---|---|
| RGA2- Lite1 |
Benz | RK3228 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/8~8 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette IOMMU(32bit) |
2 |
| RGA2- Lite1 |
Infiniti | RK3228H | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/8~8 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette IOMMU(32bit) |
2 |
| RGA2- Lite1 |
Gemini | RK3326 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/8~8 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette IOMMU(32bit) |
2 |
| RGA2- Lite1 |
Lion | RK1808 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/8~8 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette IOMMU(32bit) |
2 |
| RGA2- Lite2 |
Libra | RK3506 | 2x2 | 1280x8192 | 2x2 | 1280x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/16~16 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette Guassion-Unschärfe (Quellschreibweise) alpha-8bit |
2 |
| RGA2- Lite3 |
Pather | RK1103B | 2x2 | 2880x8192 | 2x2 | 2880x8192 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/16~16 Skalierung Vergrößerung(bilinear) Verkleinerung(bilinear/Mittelwert) Farbfüllung |
2 |
| RGA2- Enhance |
Mclaren | RK3399 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/16~16 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette ROP(nicht verfügbar für RV1108/RV1109/RK3566) NN-Quantisierung(nicht verfügbar für RK3399/RV1108) osd (nur RV1106/RV1103/RK3562/RK3528) Mosaik(nur RV1106/RV1103/RK3562/RK3528) IOMMU(32bit, RK3528/RK3562ist 40bit,nicht verfügbar für RV1106/1103) |
2 |
| RGA2- Enhance |
Mercury | RK1108 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/16~16 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette ROP(nicht verfügbar für RV1108/RV1109/RK3566) NN-Quantisierung(nicht verfügbar für RK3399/RV1108) osd (nur RV1106/RV1103/RK3562/RK3528) Mosaik(nur RV1106/RV1103/RK3562/RK3528) IOMMU(32bit, RK3528/RK3562ist 40bit,nicht verfügbar für RV1106/1103) |
2 |
| RGA2- Enhance |
Puma | RV1126/RV1109 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/16~16 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette ROP(nicht verfügbar für RV1108/RV1109/RK3566) NN-Quantisierung(nicht verfügbar für RK3399/RV1108) osd (nur RV1106/RV1103/RK3562/RK3528) Mosaik(nur RV1106/RV1103/RK3562/RK3528) IOMMU(32bit, RK3528/RK3562ist 40bit,nicht verfügbar für RV1106/1103) |
2 |
| RGA2- Enhance |
skylarkV2 | RK3566/RK3568 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/16~16 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette ROP(nicht verfügbar für RV1108/RV1109/RK3566) NN-Quantisierung(nicht verfügbar für RK3399/RV1108) osd (nur RV1106/RV1103/RK3562/RK3528) Mosaik(nur RV1106/RV1103/RK3562/RK3528) IOMMU(32bit, RK3528/RK3562ist 40bit,nicht verfügbar für RV1106/1103) |
2 |
| RGA2- Enhance |
Orion | RK3588 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/16~16 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette ROP(nicht verfügbar für RV1108/RV1109/RK3566) NN-Quantisierung(nicht verfügbar für RK3399/RV1108) osd (nur RV1106/RV1103/RK3562/RK3528) Mosaik(nur RV1106/RV1103/RK3562/RK3528) IOMMU(32bit, RK3528/RK3562ist 40bit,nicht verfügbar für RV1106/1103) |
2 |
| RGA2- Enhance |
Otter | RV1106/1103 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/16~16 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette ROP(nicht verfügbar für RV1108/RV1109/RK3566) NN-Quantisierung(nicht verfügbar für RK3399/RV1108) osd (nur RV1106/RV1103/RK3562/RK3528) Mosaik(nur RV1106/RV1103/RK3562/RK3528) IOMMU(32bit, RK3528/RK3562ist 40bit,nicht verfügbar für RV1106/1103) |
2 |
| RGA2- Enhance |
Bull | RK3528 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/16~16 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette ROP(nicht verfügbar für RV1108/RV1109/RK3566) NN-Quantisierung(nicht verfügbar für RK3399/RV1108) osd (nur RV1106/RV1103/RK3562/RK3528) Mosaik(nur RV1106/RV1103/RK3562/RK3528) IOMMU(32bit, RK3528/RK3562ist 40bit,nicht verfügbar für RV1106/1103) |
2 |
| RGA2- Enhance |
Snipe | RK3562 | 2x2 | 8192x8192 | 2x2 | 4096x4096 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/16~16 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette ROP(nicht verfügbar für RV1108/RV1109/RK3566) NN-Quantisierung(nicht verfügbar für RK3399/RV1108) osd (nur RV1106/RV1103/RK3562/RK3528) Mosaik(nur RV1106/RV1103/RK3562/RK3528) IOMMU(32bit, RK3528/RK3562ist 40bit,nicht verfügbar für RV1106/1103) |
2 |
| Version | Codename | Chip | Quelle min | Quelle max | Ziel min | Ziel max | Funktion | Pixels/Cycle |
|---|---|---|---|---|---|---|---|---|
| RGA2-Pro | Heron | RK3576 | 2x2 | 8192x8192 | 2x2 | 8192x8192 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/16~16 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(bilinear/Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette ROP osd Mosaik(nur RK3576) ARGB5551-Alpha-Bitmap rkfbc64x4 Eingang(nur RK3576) afbc32x8 Eingang(Splitmodus, nur RK3576) tile4x4(RV1126B nur Eingang) IOMMU(40bit) |
2 |
| RGA2-Pro | Swan | RV1126B | 2x2 | 8192x8192 | 2x2 | 8192x8192 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/16~16 Skalierung Vergrößerung(bilinear/bikubisch) Verkleinerung(bilinear/Mittelwert) Alpha-Mischung Farbschlüssel Farbfüllung Farbpalette ROP osd Mosaik(nur RK3576) ARGB5551-Alpha-Bitmap rkfbc64x4 Eingang(nur RK3576) afbc32x8 Eingang(Splitmodus, nur RK3576) tile4x4(RV1126B nur Eingang) IOMMU(40bit) |
2 |
| RGA3 | Orion | RK3588 | 68x2 | 8176x8176 | 68x2 | 8128x8128 | 90/180/270-Drehung X/Y-Spiegelung Zuschnitt 1/8~8 Skalierung Vergrößerung(bikubisch) Verkleinerung(Mittelwert) Alpha-Mischung Farbschlüssel afbc16x16 IOMMU(40bit) |
3 (by pa…; 2 (scale) |
Hinweis:
1) Die Pixelanzahl pro Takt ist theoretisch. Die tatsächliche Leistung hängt von Bandbreite, Hardwaretakt und weiteren Faktoren ab; die Tabelle dient nur als Referenz.
2) Zusätzlich zur minimalen Eingangsauflösung müssen x, y, width und height des tatsächlichen Operationsrechtecks jedes Kanals mindestens 2 sein.
3) Der adressierbare Speicher hängt von der IOMMU-Breite ab. Beispielsweise kann RGA mit 32-Bit-IOMMU nur physischen Speicher im Bereich 0–4G adressieren.
1.2 Unterstützte Bildformate
Pixelformatkonvertierung: BT.601/BT.709/BT.2020 (BT.2020 nur mit RGA3). Dithering.
| Version | Codename | Chip | Eingangsdatenformat | Ausgangsdatenformat |
|---|---|---|---|---|
| RGA1 | Pagani | RK3066 | RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_BPP1 RK_FORMAT_BPP2 RK_FORMAT_BPP4 RK_FORMAT_BPP8 |
RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP (nur für Unschärfe/Schärfe) RK_FORMAT_YCrCb_420_SP (nur für Unschärfe/Schärfe) RK_FORMAT_YCbCr_422_SP (nur für Unschärfe/Schärfe) RK_FORMAT_YCrCb_422_SP (nur für Unschärfe/Schärfe) RK_FORMAT_YCbCr_420_P (nur für Unschärfe/Schärfe) RK_FORMAT_YCrCb_420_P (nur für Unschärfe/Schärfe) RK_FORMAT_YCbCr_422_P (nur für Unschärfe/Schärfe) RK_FORMAT_YCrCb_422_P (nur für Unschärfe/Schärfe) |
| Jaguar Plus |
RK3188 | |||
| Beetles | RK2926/2928 | |||
| Beetles Plus |
RK3026/3028 |
| Version | Codename | Chip | Eingangsdatenformat | Ausgangsdatenformat |
|---|---|---|---|---|
| RGA1_plus | Audi | RK3128 | RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_BPP1 RK_FORMAT_BPP2 RK_FORMAT_BPP4 RK_FORMAT_BPP8 |
RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP (nur für normales Bitblt ohne Alpha) RK_FORMAT_YCrCb_420_SP (nur für normales Bitblt ohne Alpha) RK_FORMAT_YCbCr_422_SP (nur für normales Bitblt ohne Alpha) RK_FORMAT_YCrCb_422_SP (nur für normales Bitblt ohne Alpha) RK_FORMAT_YCbCr_420_P (nur für normales Bitblt ohne Alpha) RK_FORMAT_YCrCb_420_P (nur für normales Bitblt ohne Alpha) RK_FORMAT_YCbCr_422_P (nur für normales Bitblt ohne Alpha) RK_FORMAT_YCrCb_422_P (nur für normales Bitblt ohne Alpha) |
| Granite | Sofia 3gr |
| Version | Codename | Chip | Eingangsdatenformat | Ausgangsdatenformat |
|---|---|---|---|---|
| RGA2 | Lincoln | RK3288/3288w | RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_BPP1 (nur für Farbpalette) RK_FORMAT_BPP2 (nur für Farbpalette) RK_FORMAT_BPP4 (nur für Farbpalette) RK_FORMAT_BPP8 (nur für Farbpalette) |
RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P |
| Capricorn | RK3190 |
| Version | Codename | Chip | Eingangsdatenformat | Ausgangsdatenformat |
|---|---|---|---|---|
| RGA2-Lite0 | Maybach | RK3368 | RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_BPP1 (nur für Farbpalette) RK_FORMAT_BPP2 (nur für Farbpalette) RK_FORMAT_BPP4 (nur für Farbpalette) RK_FORMAT_BPP8 (nur für Farbpalette) |
RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P |
| BMW | RK3366 |
| Version | Codename | Chip | Eingangsdatenformat | Ausgangsdatenformat |
|---|---|---|---|---|
| RGA2-Lite1 | Benz | RK3228 | RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_RGBA_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_YCbCr_420_SP_10B RK_FORMAT_YCrCb_420_SP_10B RK_FORMAT_YCbCr_422_SP_10B RK_FORMAT_YCrCb_422_SP_10B RK_FORMAT_BPP1 (nur für Farbpalette) RK_FORMAT_BPP2 (nur für Farbpalette) RK_FORMAT_BPP4 (nur für Farbpalette) RK_FORMAT_BPP8 (nur für Farbpalette) |
RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P |
| Infiniti | RK3228H | |||
| Gemini | RK3326 | |||
| Lion | RK1808 |
| Version | Codename | Chip | Eingangsdatenformat | Ausgangsdatenformat |
|---|---|---|---|---|
| RGA2-Lite2 | Libra | RK3506 | RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_YUYV_422 RK_FORMAT_YVYU_422 RK_FORMAT_UYVY_422 RK_FORMAT_VYUY_422 RK_FORMAT_YCbCr_400 RK_FORMAT_YCbCr_420_SP_10B RK_FORMAT_YCrCb_420_SP_10B RK_FORMAT_YCbCr_422_SP_10B RK_FORMAT_YCrCb_422_SP_10B RK_FORMAT_A8 RK_FORMAT_BPP1 (nur für Farbpalette) RK_FORMAT_BPP2 (nur für Farbpalette) RK_FORMAT_BPP4 (nur für Farbpalette) RK_FORMAT_BPP8 (nur für Farbpalette) |
RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_YUYV_422 RK_FORMAT_YVYU_422 RK_FORMAT_UYVY_422 RK_FORMAT_VYUY_422 RK_FORMAT_YCbCr_400 RK_FORMAT_Y4 |
| Version | Codename | Chip | Eingangsdatenformat | Ausgangsdatenformat |
|---|---|---|---|---|
| RGA2-Lite2 | Pather | RV1103B | RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_YUYV_422 RK_FORMAT_YVYU_422 RK_FORMAT_UYVY_422 RK_FORMAT_VYUY_422 RK_FORMAT_YCbCr_400 |
RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_YUYV_422 RK_FORMAT_YVYU_422 RK_FORMAT_UYVY_422 RK_FORMAT_VYUY_422 RK_FORMAT_YCbCr_400 |
| Version | Codename | Chip | Eingangsdatenformat | Ausgangsdatenformat |
|---|---|---|---|---|
| RGA2- Enhance |
Mclaren | RK3399 | RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_YCbCr_420_SP_10B RK_FORMAT_YCrCb_420_SP_10B RK_FORMAT_YCbCr_422_SP_10B RK_FORMAT_YCrCb_422_SP_10B RK_FORMAT_BPP1 (nur für Farbpalette) RK_FORMAT_BPP2 (nur für Farbpalette) RK_FORMAT_BPP4 (nur für Farbpalette) RK_FORMAT_BPP8 (nur für Farbpalette) |
RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_YUYV_422 RK_FORMAT_YVYU_422 RK_FORMAT_UYVY_422 RK_FORMAT_VYUY_422 |
| Mercury | RK1108 |
| Version | Codename | Chip | Eingangsdatenformat | Ausgangsdatenformat |
|---|---|---|---|---|
| Puma | RV1126/ RV1109 |
RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_YUYV_422 RK_FORMAT_YVYU_422 RK_FORMAT_UYVY_422 RK_FORMAT_VYUY_422 RK_FORMAT_YCbCr_400 RK_FORMAT_YCbCr_420_SP_10B RK_FORMAT_YCrCb_420_SP_10B RK_FORMAT_YCbCr_422_SP_10B RK_FORMAT_YCrCb_422_SP_10B RK_FORMAT_BPP1 (nur für Farbpalette) RK_FORMAT_BPP2 (nur für Farbpalette) RK_FORMAT_BPP4 (nur für Farbpalette) RK_FORMAT_BPP8 (nur für Farbpalette) |
RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_YUYV_422 RK_FORMAT_YVYU_422 RK_FORMAT_UYVY_422 RK_FORMAT_VYUY_422 RK_FORMAT_YCbCr_400 RK_FORMAT_Y4 |
|
| skylarkV2 | RK3566/RK3568 | |||
| Orion | RK3588 | |||
| Otter | RV1106/1103 | |||
| Bull | RK3528 | |||
| Snipe | RK3562 |
| Version | Codename | Chip | Eingangsdatenformat | Ausgangsdatenformat |
|---|---|---|---|---|
| RGA2-Pro | Heron | RK3576 | RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_444_SP RK_FORMAT_YCrCb_444_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_YUYV_422 RK_FORMAT_YVYU_422 RK_FORMAT_UYVY_422 RK_FORMAT_VYUY_422 RK_FORMAT_YCbCr_400 RK_FORMAT_YCbCr_420_SP_10B RK_FORMAT_YCrCb_420_SP_10B RK_FORMAT_YCbCr_422_SP_10B RK_FORMAT_YCrCb_422_SP_10B RK_FORMA_A8 (nur src für Alpha-Mischung) RK_FORMAT_BPP1 (nur für Farbpalette) RK_FORMAT_BPP2 (nur für Farbpalette) RK_FORMAT_BPP4 (nur für Farbpalette) RK_FORMAT_BPP8 (nur für Farbpalette) |
RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_444_SP RK_FORMAT_YCrCb_444_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_YUYV_422 RK_FORMAT_YVYU_422 RK_FORMAT_UYVY_422 RK_FORMAT_VYUY_422 RK_FORMAT_YCbCr_400 RK_FORMAT_Y4 (nur RK3576) RK_FORMAT_Y8 (nur RK3576) |
| Swan | RV1126B |
| Version | Codename | Chip | Eingangsdatenformat | Ausgangsdatenformat |
|---|---|---|---|---|
| RGA3 | Orion | RK3588 | RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YUYV_422 RK_FORMAT_YVYU_422 RK_FORMAT_UYVY_422 RK_FORMAT_VYUY_422 RK_FORMAT_YCbCr_420_SP_10B RK_FORMAT_YCrCb_420_SP_10B RK_FORMAT_YCbCr_422_SP_10B RK_FORMAT_YCrCb_422_SP_10B |
RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YUYV_422 RK_FORMAT_YVYU_422 RK_FORMAT_UYVY_422 RK_FORMAT_VYUY_422 RK_FORMAT_YCbCr_420_SP_10B RK_FORMAT_YCrCb_420_SP_10B RK_FORMAT_YCbCr_422_SP_10B RK_FORMAT_YCrCb_422_SP_10B |
Hinweis:
1) RK_FORMAT_YCbCr_400 verwendet nur den Y-Kanal von YUV, meist für 256 (2^8) Graustufen. Bei RGB/YUV-Konvertierung ist die Farbraumeinstellung zu beachten. Für alle 256 Graustufen bei der Konvertierung full range konfigurieren.
2) RK_FORMAT_Y4 verwendet nur den Y-Kanal von YUV und dithert auf 4 Bit, meist für 16 (2^4) Graustufen. Es gelten dieselben Farbraumhinweise wie für RK_FORMAT_YCbCr_400. RK_FORMAT_Y8 ähnelt RK_FORMAT_Y4 und hat ebenfalls nur 4 gültige Bits: die oberen vier enthalten gültige Daten, die unteren vier nicht.
1.3 Bildformatausrichtung
| Version | Byte_stride | Format | Ausrichtung |
|---|---|---|---|
| RGA1 RGA1-Plus |
4 | RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 |
Keine Ausrichtungsanforderung für width stride. |
| RK_FORMAT_RGBA_4444 RK_FORMAT_BGRA_4444 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_RGBA_5551 RK_FORMAT_BGRA_5551 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 |
width stride muss auf 2 ausgerichtet sein. | ||
| RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 |
width stride muss auf 4 ausgerichtet sein. | ||
| RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P |
width stride muss auf 4 ausgerichtet sein; x_offset, y_offset, width, height, height stride muss auf 2 ausgerichtet sein. |
| RGA2 RGA2-Lite0 RGA2-Lite1 RGA2-Lite2 RGA2-Lite3 RGA2- Enhance RGA2-Pro |
4 | RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 |
Keine Ausrichtungsanforderung für width stride. |
|---|---|---|---|
| RK_FORMAT_RGBA_4444 RK_FORMAT_BGRA_4444 RK_FORMAT_ARGB_4444 RK_FORMAT_ABGR_4444 RK_FORMAT_RGBA_5551 RK_FORMAT_BGRA_5551 RK_FORMAT_ARGB_5551 RK_FORMAT_ABGR_5551 RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 |
width stride muss auf 2 ausgerichtet sein. | ||
| RK_FORMAT_YUYV_422 RK_FORMAT_YVYU_422 RK_FORMAT_UYVY_422 RK_FORMAT_VYUY_422 RK_FORMAT_YUYV_420 RK_FORMAT_YVYU_420 RK_FORMAT_UYVY_420 RK_FORMAT_VYUY_420 |
width stride muss auf 2 ausgerichtet sein; x_offset, y_offset, width, height, height stride muss auf 2 ausgerichtet sein. | ||
| RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 RK_FORMAT_A8 |
width stride muss auf 4 ausgerichtet sein. | ||
| RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP RK_FORMAT_YCbCr_444_SP RK_FORMAT_YCrCb_444_SP RK_FORMAT_YCbCr_420_P RK_FORMAT_YCrCb_420_P RK_FORMAT_YCbCr_422_P RK_FORMAT_YCrCb_422_P RK_FORMAT_YCbCr_400 RK_FORMAT_Y4 RK_FORMAT_Y8 |
width stride muss auf 4 ausgerichtet sein; x_offset, y_offset, width, height, height stride muss auf 2 ausgerichtet sein. | ||
| RK_FORMAT_YCbCr_420_SP_10B RK_FORMAT_YCrCb_420_SP_10B RK_FORMAT_YCbCr_422_SP_10B RK_FORMAT_YCrCb_422_SP_10B |
width stride muss auf 16 ausgerichtet sein; x_offset, y_offset muss auf 64 ausgerichtet sein; width, height, height stride muss auf 2 ausgerichtet sein. |
| RGA3 | 16 | RK_FORMAT_RGBA_8888 RK_FORMAT_BGRA_8888 RK_FORMAT_ARGB_8888 RK_FORMAT_ABGR_8888 RK_FORMAT_RGBX_8888 RK_FORMAT_BGRX_8888 RK_FORMAT_XRGB_8888 RK_FORMAT_XBGR_8888 |
width stride muss auf 4 ausgerichtet sein. |
|---|---|---|---|
| RK_FORMAT_RGB_565 RK_FORMAT_BGR_565 |
width stride muss auf 8 ausgerichtet sein. | ||
| RK_FORMAT_YUYV_422 RK_FORMAT_YVYU_422 RK_FORMAT_UYVY_422 RK_FORMAT_VYUY_422 |
width stride muss auf 8 ausgerichtet sein; x_offset, y_offset, width, height, height stride muss auf 2 ausgerichtet sein. | ||
| RK_FORMAT_RGB_888 RK_FORMAT_BGR_888 |
width stride muss auf 16 ausgerichtet sein. | ||
| RK_FORMAT_YCbCr_420_SP RK_FORMAT_YCrCb_420_SP RK_FORMAT_YCbCr_422_SP RK_FORMAT_YCrCb_422_SP |
width stride muss auf 16 ausgerichtet sein; x_offset, y_offset, width, height, height stride muss auf 2 ausgerichtet sein. | ||
| RK_FORMAT_YCbCr_420_SP_10B RK_FORMAT_YCrCb_420_SP_10B RK_FORMAT_YCbCr_422_SP_10B RK_FORMAT_YCrCb_422_SP_10B |
width stride muss auf 64 ausgerichtet sein; x_offset, y_offset muss auf 4 ausgerichtet sein; width, height, height stride muss auf 2 ausgerichtet sein. | ||
| FBC mode | Zusätzlich zur obigen Formatausrichtung: width stride, height stride muss auf 16 ausgerichtet sein. | ||
| TILE8*8 mode | Zusätzlich zur obigen Formatausrichtung: width, height muss auf 8 ausgerichtet sein; Eingangskanal width stride, height stride muss auf 16 ausgerichtet sein. |
Hinweis:
1) Ausrichtungsformel: lcm(bpp, byte_stride * 8) / pixel_stride.
2) Enthält eine Plattform mehrere Hardwareversionen, setzt librga die strengsten Ausrichtungsanforderungen durch, um die Hardwareauslastung zu gewährleisten.
2. Versionen
Die RGA-Bibliothek librga.so aktualisiert ihre Version nach Regeln für neue Funktionen, Kompatibilität und Fehlerkorrekturen. Mehrere Abfragemethoden helfen bei der Entscheidung, ob die Bibliothek zur Umgebung passt. Einzelheiten zu Änderungen stehen in CHANGLOG.md im Quellwurzelverzeichnis.
2.1 librga-API-Version
2.1.1 Versionsformat und Erhöhungsregeln
2.1.1.1 Versionsformat
major.minor.revision_[build]
Beispiel:
1.0.0_[0]
2.1.1.2 Erhöhungsregeln
| Name | Regel |
|---|---|
| major | Hauptversion: nicht abwärtskompatible Releases. |
| minor | Nebenversion: abwärtskompatible funktionale API-Erweiterungen. |
| revision | Revision: abwärtskompatible Funktionsergänzungen oder kritische Fehlerkorrekturen. |
| build | Buildversion: abwärtskompatible Fehlerkorrekturen. |
2.1.2 Version abfragen
2.1.2.1 Abfrage mit strings
Beispiel für 64-Bit-Android R:
:/# strings vendor/lib64/librga.so |grep rga_api |grep version
rga_api version 1.0.0_[0]
2.1.2.2 Logausgabe
Beim ersten RGA-API-Aufruf jedes Prozesses wird die Version protokolliert.
rockchiprga: rga_api version 1.0.0_[0]
2.1.2.3 API-Abfrage
Die folgende API fragt Code-, Build- und RGA-Hardwareversion ab. Details stehen im Abschnitt zu Anwendungsschnittstellen.
querystring(RGA_VERSION);
Zeichenfolgenformat:
RGA_api version : v1.0.0_[0]
RGA version : RGA_2_Enhance
2.1.2.4 Eigenschaftsabfrage
Eigenschaftsabfragen werden nur unter Android unterstützt und sind erst wirksam, nachdem ein Prozess RGA aufgerufen und die Eigenschaft gesetzt hat.
:/# getprop |grep rga
[vendor.rga_api.version]: [1.0.0_[0]]
2.2 Treiberversion
librga greift über den Treiber auf RGA zu. Die Treiberversion muss von der verwendeten librga-Version unterstützt werden.
2.2.1 Versionsformat und Erhöhungsregeln
2.2.1.1 Versionsformat
<driver_name>: v major.minor.revision
Beispiele:
RGA2 Device Driver: v2.1.0
RGA multicore Device Driver: v1.2.23
2.2.1.2 Erhöhungsregeln
| Name | Regel |
|---|---|
| major | Hauptversion: nicht abwärtskompatible Releases. |
| minor | Nebenversion: abwärtskompatible funktionale API-Erweiterungen. |
| revision | Revision: abwärtskompatible Funktionsergänzungen oder kritische Fehlerkorrekturen. |
2.2.2 Version abfragen
2.2.2.1 Bootlog-Abfrage
Nach dem Start die RGA-Treiberinitialisierung mit folgendem Befehl abfragen. Manche älteren Treiber geben keine Version aus; die Methode funktioniert daher nicht mit allen Versionen.
dmesg |grep rga
Beispiel:
[ 2.382393] rga3_core0 fdb60000.rga: Adding to iommu group 2
[ 2.382651] rga: rga3_core0, irq = 33, match scheduler
[ 2.383058] rga: rga3_core0 hardware loaded successfully, hw_version:3.0.76831.
[ 2.383121] rga: rga3_core0 probe successfully
[ 2.383687] rga3_core1 fdb70000.rga: Adding to iommu group 3
[ 2.383917] rga: rga3_core1, irq = 34, match scheduler
[ 2.384313] rga: rga3_core1 hardware loaded successfully, hw_version:3.0.76831.
[ 2.384412] rga: rga3_core1 probe successfully
[ 2.384893] rga: rga2, irq = 35, match scheduler
[ 2.385238] rga: rga2 hardware loaded successfully, hw_version:3.2.63318.
[ 2.385257] rga: rga2 probe successfully
[ 2.385455] rga_iommu: IOMMU binding successfully, default mapping core[0x1]
[ 2.385586] rga: Module initialized. v1.2.23
Hier ist v1.2.23 die Treiberversion.
2.2.2.2 Debugknoten-Abfrage
Die Version lässt sich über Debug-Knoten des Treibers abfragen. Fehlen die folgenden Knoten, unterstützt der laufende Treiber diese Abfrage nicht. Für einen Kernel mit der normalerweise aktivierten Option CONFIG_ROCKCHIP_RGA_DEBUG_FS:
cat /sys/kernel/debug/rkrga/driver_version
Für einen Kernel mit aktivierter ROCKCHIP_RGA_PROC_FS:
cat /proc/rkrga/driver_version
cat /sys/kernel/debug/rkrga/driver_version
RGA multicore Device Driver: v1.2.23
RGA multicore Device Driver bezeichnet den Treibernamen, v1.2.23 die Version 1.2.23. Es läuft somit RGA multicore Device Driver Version 1.2.23 (meist multi_rga driver genannt).
cat /sys/kernel/debug/rkrga/driver_version
RGA2 Device Driver: v2.1.0
RGA2 Device Driver bezeichnet den Treibernamen, v2.1.0 die Version 2.1.0. Es läuft somit RGA2 Device Driver Version 2.1.0 (meist rga2 driver genannt).
2.3 Versionsbeziehungen
Vor der Verwendung von RGA die Kompatibilität der Laufzeitumgebung prüfen. Die folgende Tabelle zeigt gängige Zuordnungen von librga- und Treiberversionen.
| librga-Version | Zugehöriger Treiber | Hardwareunterstützung |
|---|---|---|
| Ohne Versionsnummer | Treiber im zugehörigen SDK | RGA1、RGA2 |
| 1.0.0 ~ 1.3.2 | RGA Device Driver(kernel - 4.4 oder neuer) RGA2 Device Driver(ohne Versionsnummer oder v2.1.0) |
RGA1、RGA2 |
| > 1.4.0 | RGA multicore Device Driver(v1.2.0 oder neuer) | RGA2、RGA3 |
| > 1.9.0 | RGA Device Driver(kernel-4.4 oder neuer) RGA2 Device Driver(ohne Versionsnummer und v2.1.0) RGA multicore Device Driver(v1.2.0 oder neuer) |
RGA1、RGA2、RGA3 |
3. Anwendungsschnittstellen
Die RGA-Unterstützungsbibliothek heißt librga.so. Sie konfiguriert struct rga_info für 2D-Operationen und kapselt häufige Funktionen in einer benutzerfreundlicheren API. Die Definitionen orientieren sich an OpenCV/MATLAB, um den Lernaufwand zu verringern. RGA query liefert Hardwareversion, maximale Ein-/Ausgabeauflösungen und Formate zur Behandlung von Kompatibilitätsunterschieden. Vor der Verarbeitung befüllt wrapbuffer_T struct rga_buffer_t mit Pufferinformationen einschließlich Auflösung und Format. improcess führt kombinierte Operationen anhand vordefinierter usage-Flags aus. Nicht in einem Durchlauf ausführbare Operationen können als RGA-Job zusammengefasst und gemeinsam zur sequenziellen Treiberausführung eingereicht werden.
3.1 Übersicht
Diese Bibliothek stellt folgende APIs bereit. Asynchroner Modus wird nur von der C++-Implementierung unterstützt.
querystring: Hardwareversion und unterstützte Funktionen des RGA im aktuellen SoC als String abfragen.imcheckHeader: Unterschiede zwischen aktueller Header- und librga-Version prüfen.importbuffer_T: Externen Speicher (dma_fd, virtuelle oder physische Adresse) in den RGA-Treiber importieren, damit Hardware schnell auf physisch zusammenhängenden oder nicht zusammenhängenden Speicher zugreifen kann.releasebuffer_handle: Treiberreferenzen und Abbildungen externer Puffer aufheben.wrapbuffer_handle: Einen Bildpuffer schnell in rga_buffer_t kapseln.imbeginJob: Einen RGA-Bildverarbeitungsjob erstellen.imendJob: Einen RGA-Job übermitteln und ausführen.imcancelJob: Einen RGA-Job abbrechen und löschen.imcopy: RGA für schnelle Bildkopie aufrufen.imcopyTask: Schnelle Bildkopie zu einem RGA-Bildjob hinzufügen.imresize: RGA für schnelle Bildskalierung aufrufen.imresizeTask: Schnelle Bildskalierung zu einem RGA-Bildjob hinzufügen.impyramind: RGA für schnelle Bildpyramidenverarbeitung (Quellschreibweise) aufrufen.imcrop: RGA für schnelle Bildzuschnitt aufrufen.imcropTask: Schnelle Bildzuschnitt zu einem RGA-Bildjob hinzufügen.imtranslate: RGA für schnelle Bildverschiebung aufrufen.imtranslateTask: Schnelle Bildverschiebung zu einem RGA-Bildjob hinzufügen.imcvtcolor: RGA für schnelle Bildformatkonvertierung aufrufen.imcvtcolorTask: Schnelle Bildformatkonvertierung zu einem RGA-Bildjob hinzufügen.imrotate: RGA für schnelle Bildrotation aufrufen.imrotateTask: Schnelle Bildrotation zu einem RGA-Bildjob hinzufügen.imflip: RGA für schnelle Bildspiegelung aufrufen.imflipTask: Schnelle Bildspiegelung zu einem RGA-Bildjob hinzufügen.imblend: RGA für schnelle Zweikanalkomposition aufrufen.imblendTask: Schnelle Zweikanalkomposition zu einem RGA-Bildjob hinzufügen.imcomposite: RGA für schnelle Dreikanalkomposition aufrufen.-
imcompositeTask: Schnelle Dreikanalkomposition zu einem RGA-Bildjob hinzufügen. imcolorkey: RGA für schnelle Farbschlüsselverarbeitung aufrufen.imcolorkeyTask: Schnelle Farbschlüsselverarbeitung zu einem RGA-Bildjob hinzufügen.imosd: RGA für schnelle OSD-Textüberlagerung aufrufen.imosdTask: Schnelle OSD-Textüberlagerung zu einem RGA-Bildjob hinzufügen.imquantize: RGA für schnelle NN-Vorverarbeitung (Quantisierung) aufrufen.imquantizeTask: Schnelle NN-Vorverarbeitung (Quantisierung) zu einem RGA-Bildjob hinzufügen.imrop: RGA für schnelle Rasteroperationen aufrufen.imropTask: Schnelle Rasteroperationen zu einem RGA-Bildjob hinzufügen.imfill: RGA für schnelle Bildfüllung aufrufen.imfillTask: Schnelle Bildfüllung zu einem RGA-Bildjob hinzufügen.imfillArray: RGA für schnelle mehrfache Bildfüllung aufrufen.imfillTaskArray: Schnelle mehrfache Bildfüllung zu einem RGA-Bildjob hinzufügen.imrectangle: RGA für schnelle gleichmäßige Rechteckrahmen aufrufen.imrectangleTask: Schnelle gleichmäßige Rechteckrahmen zu einem RGA-Bildjob hinzufügen.imrectangleArray: RGA für schnelle mehrere gleichmäßige Rechteckrahmen aufrufen.imrectangleTaskArray: Schnelle mehrere gleichmäßige Rechteckrahmen zu einem RGA-Bildjob hinzufügen.immakeBorder: RGA für schnelle Rechteckrahmen aufrufen.immosaic: RGA für schnelle Mosaikmaskierung aufrufen.immosaicTask: Schnelle Mosaikmaskierung zu einem RGA-Bildjob hinzufügen.immosaicArray: RGA für schnelle Mosaikmaskierung aufrufen.immosaicTaskArray: Schnelle Mosaikmaskierung zu einem RGA-Bildjob hinzufügen.improcess: RGA für schnelle kombinierte Bildverarbeitung aufrufen.improcessTask: Schnelle kombinierte Bildverarbeitung zu einem RGA-Bildjob hinzufügen.imcheck: Parametergültigkeit und Hardwareunterstützung prüfen.imsync: Abschluss im asynchronen Modus synchronisieren.imconfig: Standardeinstellungen zum aktuellen Threadkontext hinzufügen.
Die API-Unterstützung in unterschiedlichen Umgebungen folgt:
| Eintrag | API | Unterstützte Sprachen | Unterstützte Systeme | librga | RGA2 Treiber |
Multi_RGA Treiber |
|---|---|---|---|---|---|---|
| allgemeine API |
querystring | C++/C | Android / Linux / QNX / RT- thread |
√ | / | / |
| imcheckHeader | C++ | Android / Linux / QNX / RT- thread |
≥1.9.0 | / | / | |
| imcheck | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| imStrError | C++/C | Android / Linux / QNX / RT- thread |
√ | / | / | |
| imsync | C++/C | Android / Linux | ≥1.6.0 | × | √ | |
| imconfig | C++/C | Android / Linux | ≥1.6.0 | × | √ | |
| Puffer-API | importbuffer_virtualaddr | C++/C | Android / Linux | ≥1.7.2 | × | √ |
| importbuffer_physicaladdr | C++/C | Android / Linux | ≥1.7.2 | × | √ | |
| importbuffer_fd | C++/C | Android / Linux | ≥1.7.2 | × | √ | |
| releasebuffer_handle | C++/C | Android / Linux | ≥1.7.2 | × | √ | |
| wrapbuffer_handle | C++/C | Android / Linux | ≥1.7.2 | / | / | |
| wrapbuffer_virtualaddr | C++/C | Android / Linux / QNX / RT- thread |
√ | / | / | |
| wrapbuffer_physicaladdr | C++/C | Android / Linux / QNX / RT- thread |
√ | / | / | |
| wrapbuffer_fd | C++/C | Android / Linux / QNX / RT- thread |
√ | / | / |
| Eintrag | API | Unterstützte Sprachen | Unterstützte Systeme | librga | RGA2 Treiber |
Multi_RGA Treiber |
|---|---|---|---|---|---|---|
| imcopy | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| imresize | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| impyramind | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| imcrop | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| imtranslate | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| imcvtcolor | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| imrotate | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| imflip | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| imblend | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| imcomposite | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| imcolorkey | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| imosd | C++/C | Android / Linux / QNX / RT- thread |
≥1.8.0 | × | √ | |
| imquantize | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| imrop | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| imfill | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| imfillArray | C++/C | Android / Linux | ≥1.9.0 | × | √ | |
| imrectangle | C++/C | Android / Linux | ≥1.9.0 | × | √ |
| Eintrag | API | Unterstützte Sprachen | Unterstützte Systeme | librga | RGA2 Treiber |
Multi_RGA Treiber |
|---|---|---|---|---|---|---|
| imrectangleArray | C++/C | Android / Linux | ≥1.9.0 | × | √ | |
| immakeBorder | C++/C | Android / Linux | ≥1.9.0 | × | √ | |
| imMosaik | C++/C | Android / Linux / QNX / RT- thread |
≥1.8.0 | × | √ | |
| imMosaikArray | C++/C | Android / Linux | ≥1.9.0 | × | √ | |
| improcess | C++/C | Android / Linux / QNX / RT- thread |
√ | √ | √ | |
| Taskverarbeitungs- API |
imbeginJob | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 |
| imendJob | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imcancelJob | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imcopyTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imresizeTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imcropTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imtranslateTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imcvtcolorTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imrotateTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imflipTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imblendTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imcompositeTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imcolorkeyTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imosdTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imquantizeTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imropTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imfillTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imfillTaskArray | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imrectangleTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imrectangleTaskArray | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imMosaikTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imMosaikTaskArray | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| imMosaikTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 | |
| improcessTask | C++ | Android / Linux | ≥1.9.0 | × | ≥1.2.25 |
| Eintrag | API | Unterstützte Sprachen | Unterstützte Systeme | librga | RGA2 Treiber |
Multi_RGA Treiber |
|---|---|---|---|---|---|---|
| erweiterte API | importbuffer_GraphicBuffer | C++ | Android | √ | / | / |
| importbuffer_GraphicBuffer_handle | C++ | Android | √ | / | / | |
| importbuffer_AHardwareBuffer | C++ | Android | √ | / | / | |
| wrapbuffer_GraphicBuffer | C++ | Android | √ | / | / | |
| wrapbuffer_handle(GraphicBuffer handle) |
C++ | Android | √ | / | / | |
| wrapbuffer_AHardwareBuffer | C++ | Android | √ | / | / |
Legende: √ unterstützt; × nicht unterstützt; / nicht zutreffend.
3.2 RGA-Version und Unterstützung abfragen
3.2.1 querystring
const char* querystring(int name);
RGA-Grundinformationen sowie unterstützte Auflösungen und Formate abfragen.
| Parameter | Beschreibung |
|---|---|
| name | RGA_VENDOR - Herstellerinformationen RGA_VERSION - Versionsinformationen RGA_MAX_INPUT - maximale Eingangsauflösung RGA_MAX_OUTPUT - maximale Ausgangsauflösung RGA_BYTE_STRIDE - unterstützte Stride-Ausrichtung RGA_SCALE_LIMIT - unterstützte Skalierungsfaktoren RGA_INPUT_FORMAT - unterstützte Eingangsformate RGA_OUTPUT_FORMAT - unterstützte Ausgangsformate RGA_EXPECTED - erwartete Leistung RGA_ALL - sämtliche Informationen ausgeben |
Gibt einen String mit RGA-Eigenschaften zurück.
3.3 Headerversion prüfen
3.3.1 imcheckHeader
IM_API IM_STATUS imcheckHeader(im_api_version_t header_version = RGA_CURRENT_API_HEADER_VERSION);
Unterschiede zwischen verwendeter Header- und librga-Version prüfen.
| Parameter | Beschreibung |
|---|---|
| header_version | Headerversion; normalerweise RGA_CURRENT_API_HEADER_VERSION verwenden. |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.4 Bildpuffervorverarbeitung
3.4.1 importbuffer_T
Für von RGA zu verarbeitenden externen Speicher bildet importbuffer_T die physischen Pufferadressen im Treiber ab und ermittelt die zugehörigen Adressinformationen für spätere stabile und schnelle RGA-Aufrufe.
| Parameter(T) | Datentyp | Beschreibung |
|---|---|---|
| virtuelle Adresse | void * | Virtuelle Bildpufferadresse |
| physische Adresse | uint64_t | Zusammenhängende physische Bildpufferadresse |
| fd | int | DMA-Bildpuffer-Dateideskriptor |
| GraphicBuffer handle |
buffer_handle_t | Bildpufferhandle mit Adresse, Dateideskriptor, Auflösung und Format |
| GraphicBuffer | GraphicBuffer | Android-Grafikpuffer |
| AHardwareBuffer | AHardwareBuffer | Speicherblöcke, auf die verschiedene Hardwarekomponenten im System zugreifen können. https://developer.android.com/ndk/reference/group/a-hardware-buffer |
Die Leistung hängt vom Puffertyp ab: physical address > fd > virtual address. Im Allgemeinen wird fd empfohlen.
IM_API rga_buffer_handle_t importbuffer_fd(int fd, int size);
IM_API rga_buffer_handle_t importbuffer_virtualaddr(void *va, int size);
IM_API rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, int size);
| Parameter | Beschreibung |
|---|---|
| fd/va/pa | [erforderlich] externer Puffer |
| size | [erforderlich] Speichergröße |
IM_API rga_buffer_handle_t importbuffer_fd(int fd, int width, int height, int format);
IM_API rga_buffer_handle_t importbuffer_virtualaddr(void *va, int width, int height, int format);
IM_API rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, int width, int height, int format);
| Parameter | Beschreibung |
|---|---|
| fd/va/pa | [erforderlich] externer Puffer |
| width | [erforderlich] Pixelbreiten-Stride des Bildpuffers |
| height | [erforderlich] Pixelhöhen-Stride des Bildpuffers |
| format | [erforderlich] Pixelformat des Bildpuffers |
IM_API rga_buffer_handle_t importbuffer_fd(int fd, im_handle_param_t *param);
IM_API rga_buffer_handle_t importbuffer_virtualaddr(void *va, im_handle_param_t *param);
IM_API rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, im_handle_param_t *param);
| Parameter | Beschreibung |
|---|---|
| fd/va/pa | [erforderlich] externer Puffer |
| param | [erforderlich] PufferParameter konfigurieren |
IM_API rga_buffer_handle_t importbuffer_GraphicBuffer_handle(buffer_handle_t hnd);
IM_API rga_buffer_handle_t importbuffer_GraphicBuffer(sp<GraphicBuffer> buf);
IM_API rga_buffer_handle_t importbuffer_AHardwareBuffer(AHardwareBuffer *buf);
| Parameter | Beschreibung |
|---|---|
| hnd/buf | [erforderlich] externer Puffer |
Gibt ein Speicherhandle rga_buffer_handle_t zurück.
3.4.2 releasebuffer_handle
Nach der RGA-Verarbeitung externen Speichers releasebuffer_handle mit dessen handle aufrufen, um Pufferzuordnung und -bindung sowie die entsprechenden Treiberressourcen freizugeben.
IM_API IM_STATUS releasebuffer_handle(rga_buffer_handle_t handle);
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.4.3 wrapbuffer_handle
IM2D-Parameter für Quell- und Zielbilder unterstützen mehrere Typen und beschreiben Speicher, Format, Breite und Höhe. Vor der Bildoperation wandelt wrapbuffer_handle diese Angaben in die gemeinsame Struktur rga_buffer_t für die Benutzer-API um.
rga_buffer_t wrapbuffer_handle(rga_buffer_handle_t handle,
int width,
int height,
int format,
int wstride = width,
int hstride = height);
| Parameter | Beschreibung |
|---|---|
| handle | [erforderlich] RGA-Pufferhandle |
| width | [erforderlich] Pixelbreite des zu verarbeitenden Bildes |
| height | [erforderlich] Pixelhöhe des zu verarbeitenden Bildes |
| format | [erforderlich] Pixelformat |
| wtride | [optional] Pixelbreiten-Stride des Bildes |
| hstride | [optional] Pixelbreiten-Stride des Bildes |
Gibt rga_buffer_t zur Bildbeschreibung zurück.
3.5 Bildjob erstellen
3.5.1 imbeginJob
IM_API im_job_handle_t imbeginJob(uint64_t flags = 0);
Einen RGA-Bildverarbeitungsjob erstellen und dessen Handle zurückgeben. job_handle dient zum Hinzufügen/Entfernen von Operationen und zum Einreichen/Ausführen des Jobs.
| Parameter | Beschreibung |
|---|---|
| flags | [optional] Jobflags |
Gibt ein Jobhandle im_job_handle_t zurück.
3.6 Bildjob übermitteln
3.6.1 imendJob
IM_API IM_STATUS imendJob(im_job_handle_t job_handle,
int sync_mode = IM_SYNC,
int acquire_fence_fd = 0,
int *release_fence_fd = NULL);
Einen erstellten RGA-Bildverarbeitungsjob einreichen und ausführen. Nach Abschluss werden seine Ressourcen automatisch gelöscht.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| sync_mode | [optional] auf Operationsabschluss warten |
| acquire_fence_fd | [optional] im asynchronen Modus den Job nach Warten auf das acquire_fence-Signal ausführen |
| release_fence_fd | [optional] im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.7 Bildjob abbrechen
3.7.1 imcancelJob
IM_API IM_STATUS imcancelJob(im_job_handle_t job_handle);
Einen erstellten RGA-Bildverarbeitungsjob abbrechen und löschen.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.8 Bildkopie
3.8.1 imcopy
IM_STATUS imcopy(const rga_buffer_t src,
rga_buffer_t dst,
int sync = 1,
int *release_fence_fd = NULL);
Ein Bild einmalig schnell vom src-Kanalpuffer in den dst-Kanalpuffer kopieren.
| Parameter | Beschreibung |
|---|---|
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.8.2 imcopyTask
IM_API IM_STATUS imcopyTask(im_job_handle_t job_handle,
const rga_buffer_t src,
rga_buffer_t dst);
Über job_handle eine Operation für Bildkopie zum angegebenen Job hinzufügen. Verwendung wie bei imcopy.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.9 Skalierung und Bildpyramiden
3.9.1 imresize
IM_STATUS imresize(const rga_buffer_t src,
rga_buffer_t dst,
double fx = 0,
double fy = 0,
int interpolation = INTER_LINEAR,
int sync = 1,
int *release_fence_fd = NULL);
Die Zielabmessungen über dst oder das gewünschte Verhältnis über fx/fy festlegen. Werden beide konfiguriert, haben die aus fx/fy berechneten Abmessungen Vorrang.
Nur RGA1/RGA1 plus unterstützen eine konfigurierbare interpolation; bei anderer Hardware den Skalierungsalgorithmus im TRM nachsehen. Mit fx/fy werden Abmessungen von Formaten mit Ausrichtungsanforderungen, etwa YUV, nach unten ausgerichtet. Das kann das erwartete Skalierungsergebnis verändern.
| Parameter | Beschreibung |
|---|---|
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild; Größe dsize (falls nicht null), sonst aus src.size(), fx und fy berechnet; dst hat denselben Typ wie src. |
| fx | [optional] horizontaler Skalierungsfaktor; bei 0 berechnet als: fx = (double) dst.width / src.width |
| fy | [optional] vertikaler Skalierungsfaktor; bei 0 berechnet als: fy = (double) dst.height / src.height |
| interpolation | [optional] Interpolationsmethode: INTER_NEAREST - Nächster-Nachbar-Interpolation INTER_LINEAR - bilineare Interpolation (Standard) INTER_CUBIC - bikubische Interpolation über eine 4x4-Pixel-Nachbarschaft |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.9.2 impyramid
IM_STATUS impyramid (const rga_buffer_t src,
rga_buffer_t dst,
IM_SCALE direction)
Pyramidenskalierung: abhängig von direction Breite und Höhe gemeinsam halbieren oder verdoppeln.
| Parameter | Beschreibung |
|---|---|
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild; |
| direction | [erforderlich] Skalierungsmodus IM_UP_SCALE —— Vergrößern IM_DOWN_SCALE —— Verkleinern |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.9.3 imresizeTask
IM_API IM_STATUS imresizeTask(im_job_handle_t job_handle,
const rga_buffer_t src,
rga_buffer_t dst,
double fx = 0,
double fy = 0,
int interpolation = 0);
Über job_handle eine Operation für Bildskalierung zum angegebenen Job hinzufügen. Verwendung wie bei imresize.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild; Größe dsize (falls nicht null), sonst aus src.size(), fx und fy berechnet; dst hat denselben Typ wie src. |
| fx | [optional] horizontaler Skalierungsfaktor; bei 0 berechnet als: fx = (double) dst.width / src.width |
| fy | [optional] vertikaler Skalierungsfaktor; bei 0 berechnet als: fy = (double) dst.height / src.height |
| interpolation | [optional] Interpolationsmethode: INTER_NEAREST - Nächster-Nachbar-Interpolation INTER_LINEAR - bilineare Interpolation (Standard) INTER_CUBIC - bikubische Interpolation über eine 4x4-Pixel-Nachbarschaft |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.10 Bildzuschnitt
3.10.1 imcrop
IM_STATUS imcrop(const rga_buffer_t src,
rga_buffer_t dst,
im_rect rect,
int sync = 1,
int *release_fence_fd = NULL);
Das Bild auf den durch Rect angegebenen Bereich und dessen Größe zuschneiden.
| Parameter | Beschreibung |
|---|---|
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| rect | [erforderlich] Zuschnittbereich x - x-Koordinate links oben y - y-Koordinate links oben width - Bereichsbreite height - Bereichshöhe |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.10.2 imcropTask
IM_API IM_STATUS imcropTask(im_job_handle_t job_handle,
const rga_buffer_t src,
rga_buffer_t dst,
im_rect rect);
Über job_handle eine Operation für Bildzuschnitt zum angegebenen Job hinzufügen. Verwendung wie bei imcrop.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| rect | [erforderlich] Zuschnittbereich x - x-Koordinate links oben y - y-Koordinate links oben width - Bereichsbreite height - Bereichshöhe |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.11 Bildverschiebung
3.11.1 imtranslate
IM_STATUS imtranslate(const rga_buffer_t src,
rga_buffer_t dst,
int x,
int y,
int sync = 1,
int *release_fence_fd = NULL);
Das Bild zu (x, y) verschieben. src und dst müssen gleiche Breite und Höhe besitzen; überstehende Teile werden abgeschnitten.
| Parameter | Beschreibung |
|---|---|
| src | [erforderlich]Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| x | [erforderlich] horizontale Verschiebung |
| y | [erforderlich] vertikale Verschiebung |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.11.2 imtranslateTask
IM_API IM_STATUS imtranslateTask(im_job_handle_t job_handle,
const rga_buffer_t src,
rga_buffer_t dst,
int x,
int y);
Über job_handle eine Operation für Bildverschiebung zum angegebenen Job hinzufügen. Verwendung wie bei imtranslate.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| src | [erforderlich]Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| x | [erforderlich] horizontale Verschiebung |
| y | [erforderlich] vertikale Verschiebung |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.12 Bildformatkonvertierung
3.12.1 imcvtcolor
IM_STATUS imcvtcolor(rga_buffer_t src,
rga_buffer_t dst,
int sfmt,
int dfmt,
int mode = IM_COLOR_SPACE_DEFAULT,
int sync = 1,
int *release_fence_fd = NULL);
Das Bildformat konvertieren. Die Unterstützung hängt vom SoC ab; siehe Formatübersicht. Formate über rga_buffer_t oder getrennt über sfmt/dfmt festlegen. Bei YUV/RGB-Farbraumkonvertierung wählt mode den Farbraum; Standard ist BT.601 limited range.
| Parameter | Beschreibung |
|---|---|
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| sfmt | [optional] Quellbildformat |
| dfmt | [optional] Zielbildformat |
| Mode | [optional] Farbraummodus: IM_YUV_TO_RGB_BT601_LIMIT IM_YUV_TO_RGB_BT601_FULL IM_YUV_TO_RGB_BT709_LIMIT IM_RGB_TO_YUV_BT601_LIMIT IM_RGB_TO_YUV_BT601_FULL IM_RGB_TO_YUV_BT709_LIMIT |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.12.2 imcvtcolorTask
IM_API IM_STATUS imcvtcolorTask(im_job_handle_t job_handle,
rga_buffer_t src,
rga_buffer_t dst,
int sfmt,
int dfmt,
int mode = IM_COLOR_SPACE_DEFAULT);
Über job_handle eine Operation für Bildverschiebung (Quellwortlaut) zum angegebenen Job hinzufügen. Verwendung wie bei imcvtcolor.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| sfmt | [optional] Quellbildformat |
| dfmt | [optional] Zielbildformat |
| Mode | [optional] Farbraummodus: IM_YUV_TO_RGB_BT601_LIMIT IM_YUV_TO_RGB_BT601_FULL IM_YUV_TO_RGB_BT709_LIMIT IM_RGB_TO_YUV_BT601_LIMIT IM_RGB_TO_YUV_BT601_FULL IM_RGB_TO_YUV_BT709_LIMIT |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.13 Bildrotation
3.13.1 imrotate
IM_STATUS imrotate(const rga_buffer_t src,
rga_buffer_t dst,
int rotation,
int sync = 1,
int *release_fence_fd = NULL);
Bilder um 90, 180 oder 270 Grad drehen.
| Parameter | Beschreibung |
|---|---|
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| rotation | [erforderlich] Drehwinkel: IM_HAL_TRANSFORM_ROT_90 IM_HAL_TRANSFORM_ROT_180 IM_HAL_TRANSFORM_ROT_270 |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.13.2 imrotateTask
IM_API IM_STATUS imrotateTask(im_job_handle_t job_handle,
const rga_buffer_t src,
rga_buffer_t dst,
int rotation);
Über job_handle eine Operation für Bildrotation zum angegebenen Job hinzufügen. Verwendung wie bei imrotate.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| rotation | [erforderlich] Drehwinkel: IM_HAL_TRANSFORM_ROT_90 IM_HAL_TRANSFORM_ROT_180 IM_HAL_TRANSFORM_ROT_270 |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.14 Bildspiegelung
3.14.1 imfilp
IM_STATUS imflip (const rga_buffer_t src,
rga_buffer_t dst,
int mode,
int sync = 1,
int *release_fence_fd = NULL);
Bilder horizontal oder vertikal spiegeln.
| Parameter | Beschreibung |
|---|---|
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| mode | [erforderlich] Spiegelmodus: IM_HAL_TRANSFORM_FLIP_H_V IM_HAL_TRANSFORM_FLIP_H IM_HAL_TRANSFORM_FLIP_V |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.14.2 imflipTask
IM_API IM_STATUS imflipTask(im_job_handle_t job_handle,
const rga_buffer_t src,
rga_buffer_t dst,
int mode);
Über job_handle eine Operation für Bildspiegelung zum angegebenen Job hinzufügen. Verwendung wie bei imflip.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| mode | [erforderlich] Spiegelmodus: IM_HAL_TRANSFORM_FLIP_H_V IM_HAL_TRANSFORM_FLIP_H IM_HAL_TRANSFORM_FLIP_V |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.15 Bildkomposition
3.15.1 imblend/imcomposite
IM_STATUS imblend(const rga_buffer_t fg_image,
rga_buffer_t bg_image,
int mode = IM_ALPHA_BLEND_SRC_OVER,
int sync = 1,
int *release_fence_fd = NULL);
Die Zweikanalkomposition verwendet A+B -> B: Vordergrund srcA und Hintergrund dst werden nach dem eingestellten Alpha-Modell gemischt, das Ergebnis geht an dst. Ohne Konfiguration gilt src-over.
IM_STATUS imcomposite(const rga_buffer_t fg_image,
const rga_buffer_t bg_image,
rga_buffer_t output_image,
int mode = IM_ALPHA_BLEND_SRC_OVER,
int sync = 1,
int *release_fence_fd = NULL);
Die RGA-Dreikanalkomposition verwendet A+B -> C: Vordergrund srcA und Hintergrund srcB werden nach dem konfigurierten Modell alphagemischt, das Ergebnis wird in dst geschrieben. Standard ist src-over. In beiden Kompositionsarten wählt mode das Porter-Duff-Modell. Definitionen:
- S: Quell-/Vordergrundbild.
- D: Ziel-/Hintergrundbild.
- R: Ergebnis.
- c: RGB-Farbkomponenten von RGBA. Porter-Duff verwendet vormultiplizierte Farben: Originalfarbe mal Alpha. Falls noch nicht vormultipliziert, Xc = Xc * Xa ausführen.
- a: Alpha-/Transparenzkomponente von RGBA.
- f: Faktor für Farbe oder Alpha.
Die Kernformeln berechnen Ergebnisfarbe = Quellfarbe × Quellfaktor + Zielfarbe × Zielfaktor; Ergebnisalpha wird entsprechend berechnet. RGA unterstützt folgende Modelle:
Rc = Sc * Sf + Dc * Df;
Ra = Sa * Sf + Da * Df;
SRC:
Sf = 1, Df = 0;
[Rc,Ra] = [Sc,Sa];
DST:
Sf = 0, Df = 1;
[Rc,Ra] = [Dc,Da];
SRC_OVER:
Sf = 1, Df = (1 - Sa);
[Rc,Ra] = [ Sc + (1 - Sa) * Dc, Sa + (1 - Sa) * Da ];
DST_OVER:
Sf = (1 - Da), Df = 1;
[Rc,Ra] = [ Sc * (1 - Da) + Dc, Sa * (1 - Da) + Da ] ;
Komposition zwischen YUV-Bildern wird nicht unterstützt. dst bei imblend und srcB bei imcomposite dürfen kein YUV verwenden.
| Parameter | Beschreibung |
|---|---|
| fg_image | [erforderlich] Vordergrundbild |
| bg_image | [erforderlich] Hintergrundbild; bei A+B->B zugleich Ausgabebild. |
| output_image | [erforderlich] Ausgabezielbild. |
| mode | [optional] Mischmodus: IM_ALPHA_BLEND_SRC —— SRC-Modus IM_ALPHA_BLEND_DST —— DST-Modus IM_ALPHA_BLEND_SRC_OVER —— SRC-OVER-Modus IM_ALPHA_BLEND_DST_OVER —— DST-OVER-Modus IM_ALPHA_BLEND_PRE_MUL —— Vormultiplikation aktivieren: dieses Flag mit den anderen Modusflags per OR verknüpfen und mode zuweisen. |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.15.2 imblendTask/imcompositeTask
IM_API IM_STATUS imblendTask(im_job_handle_t job_handle,
const rga_buffer_t fg_image,
rga_buffer_t bg_image,
int mode = IM_ALPHA_BLEND_SRC_OVER);
Über job_handle eine A+B -> B-Komposition zum Job hinzufügen. Verwendung wie imblend; Standardmischmodus ist src-over.
IM_API IM_STATUS imcompositeTask(im_job_handle_t job_handle,
const rga_buffer_t fg_image,
const rga_buffer_t bg_image,
rga_buffer_t output_image,
int mode = IM_ALPHA_BLEND_SRC_OVER);
Über job_handle eine A+B -> C-Komposition hinzufügen. Verwendung wie imcomposite; Standard ist src-over. YUV-zu-YUV-Komposition wird nicht unterstützt: dst bei imblend und srcB bei imcomposite dürfen kein YUV verwenden.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| fg_image | [erforderlich] Vordergrundbild |
| bg_image | [erforderlich] Hintergrundbild; bei A+B->B zugleich Ausgabebild. |
| output_image | [erforderlich] Ausgabezielbild. |
| mode | [optional] Mischmodus: IM_ALPHA_BLEND_SRC —— SRC-Modus IM_ALPHA_BLEND_DST —— DST-Modus IM_ALPHA_BLEND_SRC_OVER —— SRC-OVER-Modus IM_ALPHA_BLEND_DST_OVER —— DST-OVER-Modus IM_ALPHA_BLEND_PRE_MUL —— Vormultiplikation aktivieren: dieses Flag mit den anderen Modusflags per OR verknüpfen und mode zuweisen. |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.16 Farbschlüssel
3.16.1 imcolorkey
IM_STATUS imcolorkey(const rga_buffer_t src,
rga_buffer_t dst,
im_colorkey_range range,
int mode = IM_ALPHA_COLORKEY_NORMAL,
int sync = 1,
int *release_fence_fd = NULL);
Color Key setzt bei der Vorverarbeitung die Alpha-Komponente der Quellpixel auf null, deren nichttransparente Farbwerte die Schlüsselbedingung erfüllen. Anschließend wird die Quelle mit dem Ziel alphagemischt. Die Filterung gilt nur für den festgelegten Farbbereich in src; das Ergebnis wird auf dst gelegt. IM_ALPHA_COLORKEY_NORMAL löscht Alpha innerhalb des Bereichs, IM_ALPHA_COLORKEY_INVERTED außerhalb. Standard ist IM_ALPHA_COLORKEY_NORMAL.
| Parameter | Bereich | Beschreibung |
|---|---|---|
| max | 0x0 ~ 0xFFFFFFFF | Maximaler zu entfernender Schlüsselfarbwert in ABGR-Reihenfolge |
| min | 0x0 ~ 0xFFFFFFFF | Minimaler zu entfernender Schlüsselfarbwert in ABGR-Reihenfolge |
| Parameter | Beschreibung |
|---|---|
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| range | [erforderlich] Zielfarbbereich typedef struct im_colorkey_range { int max; int min; } im_colorkey_value; |
| Mode | [erforderlich] Farbschlüsselmodus: IM_ALPHA_COLORKEY_NORMAL IM_ALPHA_COLORKEY_INVERTED |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.16.2 imcolorkeyTask
IM_API IM_STATUS imcolorkeyTask(im_job_handle_t job_handle,
const rga_buffer_t fg_image,
rga_buffer_t bg_image,
im_colorkey_range range,
int mode = IM_ALPHA_COLORKEY_NORMAL);
Über job_handle Color Key zum Job hinzufügen. Verwendung wie imcolorkey; Standardmodus ist IM_ALPHA_COLORKEY_NORMAL.
| Parameter | Bereich | Beschreibung |
|---|---|---|
| max | 0x0 ~ 0xFFFFFFFF | Maximaler zu entfernender Schlüsselfarbwert in ABGR-Reihenfolge |
| min | 0x0 ~ 0xFFFFFFFF | Minimaler zu entfernender Schlüsselfarbwert in ABGR-Reihenfolge |
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| range | [erforderlich] Zielfarbbereich typedef struct im_colorkey_range { int max; int min; } im_colorkey_value; |
| Mode | [erforderlich] Farbschlüsselmodus: IM_ALPHA_COLORKEY_NORMAL IM_ALPHA_COLORKEY_INVERTED |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.17 OSD-Textüberlagerung
3.17.1 imosd
IM_API IM_STATUS imosd(const rga_buffer_t osd,
const rga_buffer_t bg_image,
const im_rect osd_rect,
im_osd_t *osd_config,
int sync = 1,
int *release_fence_fd = NULL);
OSD (On-Screen Display) legt Text über Videobilder und unterstützt Helligkeitsstatistik des Textes sowie automatische Farbinvertierung.
| Parameter | Beschreibung |
|---|---|
| OSD | [erforderlich] OSD-Blockbild |
| bg_image | [erforderlich] Ausgabebild |
| osd_rect | [erforderlich] Bildbereich für OSD |
| osd_config | [erforderlich] OSD-Funktionskonfiguration |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.17.2 imosdTask
IM_API IM_STATUS imosdTask(im_job_handle_t job_handle,
const rga_buffer_t osd,
const rga_buffer_t bg_image,
const im_rect osd_rect,
im_osd_t *osd_config);
Über job_handle OSD-Verarbeitung zum angegebenen Job hinzufügen. Verwendung wie imosd.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| OSD | [erforderlich] OSD-Blockbild |
| dst | [erforderlich] Ausgabebild |
| osd_rect | [erforderlich] Bildbereich für OSD |
| osd_config | [erforderlich] OSD-Funktionskonfiguration |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.18 NN-Vorverarbeitung (Quantisierung)
3.18.1 imquantize
IM_STATUS imquantize(const rga_buffer_t src,
rga_buffer_t dst,
rga_nn_t nn_info,
int sync = 1,
int *release_fence_fd = NULL);
Derzeit nur auf RV1126 / RV1109 unterstützt. Bei der NN-Vorverarbeitung können offset und scale für jeden der drei RGB-Kanäle getrennt eingestellt werden. Formel:
dst = 【(src + offset) * scale 】
Parameterbereiche:
| Parameter | Bereich | Beschreibung |
|---|---|---|
| scale | 0 ~ 3.99 | 10 Bit: die oberen 2 Bit bilden den Ganzzahlteil, die unteren 8 den Bruchteil. |
| offset | -255 ~ 255 | 9 Bit: das höchste Bit ist das Vorzeichen; die unteren codieren einen Offset von 0–255. |
| Parameter | Beschreibung |
|---|---|
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| nn_info | [erforderlich] rga_nn_t konfiguriert offset und Skalierung getrennt für jeden RGB-Kanal typedef struct rga_nn { int nn_flag; int Skalierung_r; int Skalierung_g; int Skalierung_b; int offset_r; int offset_g; int offset_b; } rga_nn_t; |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.18.2 imquantizeTask
IM_API IM_STATUS imquantizeTask(im_job_handle_t job_handle,
const rga_buffer_t src,
rga_buffer_t dst,
im_nn_t nn_info);
Über job_handle Bildquantisierung zum angegebenen Job hinzufügen. Verwendung wie imquantize.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| nn_info | [erforderlich] rga_nn_t konfiguriert offset und Skalierung getrennt für jeden RGB-Kanal typedef struct rga_nn { int nn_flag; int Skalierung_r; int Skalierung_g; int Skalierung_b; int offset_r; int offset_g; int offset_b; } rga_nn_t; |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.19 Rasteroperationen (ROP)
3.19.1 imrop
IM_STATUS imrop(const rga_buffer_t src,
rga_buffer_t dst,
int rop_code,
int sync = 1,
int *release_fence_fd = NULL);
Eine ROP-Operation auf zwei Bildern ausführen.
| Parameter | Beschreibung |
|---|---|
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| rop_code | [erforderlich] ROP-Codemodus IM_ROP_AND : dst = dst AND src; IM_ROP_OR : dst = dst OR src IM_ROP_NOT_DST : dst = NOT dst IM_ROP_NOT_SRC : dst = NOT src IM_ROP_XOR : dst = dst XOR src IM_ROP_NOT_XOR : dst = NOT (dst XOR src) |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.19.2 imropTask
IM_API IM_STATUS imropTask(im_job_handle_t job_handle,
const rga_buffer_t src,
rga_buffer_t dst,
int rop_code);
Über job_handle ROP-Bildverarbeitung zum angegebenen Job hinzufügen. Verwendung wie imrop.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| src | [erforderlich] Eingangsbild |
| dst | [erforderlich] Ausgabebild |
| rop_code | [erforderlich] ROP-Codemodus IM_ROP_AND : dst = dst AND src; IM_ROP_OR : dst = dst OR src IM_ROP_NOT_DST : dst = NOT dst IM_ROP_NOT_SRC : dst = NOT src IM_ROP_XOR : dst = dst XOR src IM_ROP_NOT_XOR : dst = NOT (dst XOR src) |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.20 Farbfüllung und Rahmenzeichnung
3.20.1 imfill
IM_STATUS imfill(rga_buffer_t dst,
im_rect rect,
int color,
int sync = 1,
int *release_fence_fd = NULL);
Den angegebenen Bereich rect mit Farbe füllen. color gibt RGBA an, von hohen zu niedrigen Bits A, B, G, R; beispielsweise Rot: color = 0x000000ff. Breite und Höhe von rect müssen jeweils mindestens 2 sein.
| Parameter | Beschreibung |
|---|---|
| dst | [erforderlich] Zielbild |
| rect | [erforderlich] mit angegebener Farbe zu füllender Bildbereich Breite und Höhe von rect müssen mindestens 2 sein |
| color | [erforderlich] Füllfarbe |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.20.2 imfillArray
IM_API IM_STATUS imfillArray(rga_buffer_t dst,
im_rect *rect_array,
int array_size,
uint32_t color,
int sync = 1,
int *release_fence_fd = NULL);
Mehrere Bildbereiche nacheinander mit Farbe füllen. color gibt RGBA an, von hohen zu niedrigen Bits A, B, G, R; beispielsweise Rot: color = 0x000000ff. Breite und Höhe von rect müssen jeweils mindestens 2 sein.
| Parameter | Beschreibung |
|---|---|
| dst | [erforderlich] Zielbild |
| rect_array | [erforderlich] array_ptr der mit angegebener Farbe zu füllenden Bereiche Breite und Höhe von rect müssen mindestens 2 sein |
| array_size | [erforderlich] Größe der Bereichsarrays. |
| color | [erforderlich] Füllfarbe |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.20.3 imfillTask
IM_API IM_STATUS imfillTask(im_job_handle_t job_handle,
rga_buffer_t dst,
im_rect rect,
uint32_t color);
Über job_handle Bildfüllung zum Job hinzufügen. Verwendung wie imfill. Breite und Höhe von rect müssen jeweils mindestens 2 sein.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| dst | [erforderlich] Zielbild |
| rect | [erforderlich] mit angegebener Farbe zu füllender Bildbereich Breite und Höhe von rect müssen mindestens 2 sein |
| color | [erforderlich] Füllfarbe |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.20.4 imfillTaskArray
IM_API IM_STATUS imfillTaskArray(im_job_handle_t job_handle,
rga_buffer_t dst,
im_rect *rect_array,
int array_size,
uint32_t color);
Über job_handle Farbfüllung mehrerer Bereiche zum Job hinzufügen. Verwendung wie imfillArray. Breite und Höhe von rect müssen jeweils mindestens 2 sein.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| dst | [erforderlich] Zielbild |
| rect_array | [erforderlich] array_ptr der mit angegebener Farbe zu füllenden Bereiche Breite und Höhe von rect müssen mindestens 2 sein |
| array_size | [erforderlich] Größe der Bereichsarrays. |
| color | [erforderlich] Füllfarbe |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.20.5 imrectangle
IM_API IM_STATUS imrectangle(rga_buffer_t dst,
im_rect rect,
uint32_t color,
int thickness,
int sync = 1,
int *release_fence_fd = NULL);
Mit color einen Rahmen der Stärke thickness um rect zeichnen, das den äußeren Rand angibt. Bei negativem thickness wird ein ausgefülltes Rechteck erzeugt. color gibt RGBA an, von hohen zu niedrigen Bits A, B, G, R; beispielsweise Rot: color = 0x000000ff. Breite und Höhe von rect müssen jeweils mindestens 2 sein.
| Parameter | Beschreibung |
|---|---|
| dst | [erforderlich] Zielbild |
| rect | [erforderlich] mit angegebener Farbe zu füllender Bildbereich Breite und Höhe von rect müssen mindestens 2 sein |
| color | [erforderlich] Füllfarbe |
| thickness | [erforderlich] Linienstärke des Rechtecks. Negative Werte wie -1 bedeuten, dass ein ausgefülltes Rechteck gezeichnet wird. |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.20.6 imrectangleArray
IM_API IM_STATUS imrectangleArray(rga_buffer_t dst,
im_rect *rect_array,
int array_size,
uint32_t color,
int thickness,
int sync = 1,
int *release_fence_fd = NULL);
Nacheinander mit color Rahmen der Stärke thickness um mehrere rect-Bereiche zeichnen, die die äußeren Ränder angeben. Bei negativem thickness werden ausgefüllte Rechtecke erzeugt. color gibt RGBA an, von hohen zu niedrigen Bits A, B, G, R; beispielsweise Rot: color = 0x000000ff. Breite und Höhe von rect müssen jeweils mindestens 2 sein.
| Parameter | Beschreibung |
|---|---|
| dst | [erforderlich] Zielbild |
| rect_array | [erforderlich] array_ptr der mit angegebener Farbe zu füllenden Bereiche Breite und Höhe von rect müssen mindestens 2 sein |
| array_size | [erforderlich] Größe der Bereichsarrays. |
| color | [erforderlich] Füllfarbe |
| thickness | [erforderlich] Linienstärke des Rechtecks. Negative Werte wie -1 bedeuten, dass ein ausgefülltes Rechteck gezeichnet wird. |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.20.7 imrectangleTask
IM_API IM_STATUS imrectangleTask(im_job_handle_t job_handle,
rga_buffer_t dst,
im_rect rect,
uint32_t color,
int thickness);
Über job_handle rechteckige Bildrahmen zum Job hinzufügen. Verwendung wie imrectangle. Breite und Höhe von rect müssen jeweils mindestens 2 sein.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| dst | [erforderlich] Zielbild |
| rect | [erforderlich] mit angegebener Farbe zu füllender Bildbereich Breite und Höhe von rect müssen mindestens 2 sein |
| color | [erforderlich] Füllfarbe |
| thickness | [erforderlich] Linienstärke des Rechtecks. Negative Werte wie -1 bedeuten, dass ein ausgefülltes Rechteck gezeichnet wird. |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.20.8 imrectangleTaskArray
IM_API IM_STATUS imrectangleTaskArray(im_job_handle_t job_handle,
rga_buffer_t dst,
im_rect *rect_array,
int array_size,
uint32_t color,
int thickness);
Über job_handle mehrere rechteckige Bildrahmen zum Job hinzufügen. Verwendung wie imrectangleArray. Breite und Höhe von rect müssen jeweils mindestens 2 sein.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| dst | [erforderlich] Zielbild |
| rect_array | [erforderlich] array_ptr der mit angegebener Farbe zu füllenden Bereiche Breite und Höhe von rect müssen mindestens 2 sein |
| array_size | [erforderlich] Größe der Bereichsarrays. |
| color | [erforderlich] Füllfarbe |
| thickness | [erforderlich] Linienstärke des Rechtecks. Negative Werte wie -1 bedeuten, dass ein ausgefülltes Rechteck gezeichnet wird. |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.20.9 immakeBorder
IM_API IM_STATUS immakeBorder(rga_buffer_t src,
rga_buffer_t dst,
int top,
int bottom,
int left,
int right,
int border_type,
int value = 0,
int sync = 1,
int acquir_fence_fd = -1,
int *release_fence_fd = NULL);
Dem Eingangsbild Ränder mit top/bottom/left/right Pixeln hinzufügen und das Ergebnis in den Zielpuffer schreiben. Jeder Wert top/bottom/left/right muss mindestens 2 betragen.
| Parameter | Beschreibung |
|---|---|
| src | [erforderlich] Eingangsquellbild |
| dst | [erforderlich] Ausgabezielbild |
| top | [erforderlich] Anzahl oberer Pixel |
| bottom | [erforderlich] Anzahl unterer Pixel |
| left | [erforderlich] Anzahl linker Pixel |
| right | [erforderlich] Anzahl rechter Pixel |
| border_type | [erforderlich] Rahmentyp IM_BORDER_CONSTANT // iiiiii abcdefgh iiiiiii mit angegebenem Wert ‘i’ IM_BORDER_REFLECT //fedcba abcdefgh hgfedcb IM_BORDER_WRAP //cdefgh abcdefgh abcdefg |
| value | [optional] Pixelfüllwert des Rahmens |
| sync | [optional] auf Operationsabschluss warten |
| acquire_fence_fd | [erforderlich] im asynchronen Modus den Job nach Warten auf das acquire_fence-Signal ausführen |
| release_fence_fd | [erforderlich] im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.21 Bildmosaik
3.21.1 immosaic
IM_API IM_STATUS immosaic(const rga_buffer_t image,
im_rect rect,
int mosaic_mode,
int sync = 1,
int *release_fence_fd = NULL);
Den angegebenen Bildbereich mit einer Mosaikmaske abdecken.
| Parameter | Beschreibung |
|---|---|
| image | [erforderlich] Zielbild |
| rect | [erforderlich] Bildbereich für Mosaik |
| Mosaik_mode | [erforderlich] Mosaikmodus einstellen IM_MOSAIC_8 IM_MOSAIC_16 IM_MOSAIC_32 IM_MOSAIC_64 IM_MOSAIC_128 |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.21.2 immosaicArray
IM_API IM_STATUS immosaicArray(const rga_buffer_t image,
im_rect *rect_array,
int array_size,
int mosaic_mode,
int sync = 1,
int *release_fence_fd = NULL);
Mehrere Bildbereiche nacheinander mit Mosaikmasken abdecken.
| Parameter | Beschreibung |
|---|---|
| image | [erforderlich] Zielbild |
| rect_array | [erforderlich] array_ptr der Mosaikbereiche |
| array_size | [erforderlich] Größe der Bereichsarrays. |
| Mosaik_mode | [erforderlich] Mosaikmodus einstellen IM_MOSAIC_8 IM_MOSAIC_16 IM_MOSAIC_32 IM_MOSAIC_64 IM_MOSAIC_128 |
| sync | [optional] auf Operationsabschluss warten |
| release_fence_fd | [optional]im asynchronen Modus als Parameter von imsync() verwendet |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.21.3 immosaicTask
IM_API IM_STATUS immosaicTask(im_job_handle_t job_handle,
const rga_buffer_t image,
im_rect rect,
int mosaic_mode);
Über job_handle Mosaikmaskierung zum angegebenen Job hinzufügen. Verwendung wie immosaic.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| image | [erforderlich] Zielbild |
| rect | [erforderlich] Bildbereich für Mosaik |
| Mosaik_mode | [erforderlich] Mosaikmodus einstellen IM_MOSAIC_8 IM_MOSAIC_16 IM_MOSAIC_32 IM_MOSAIC_64 IM_MOSAIC_128 |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.21.4 immosaicTaskArray
IM_API IM_STATUS immosaicTaskArray(im_job_handle_t job_handle,
const rga_buffer_t image,
im_rect *rect_array,
int array_size,
int mosaic_mode);
Über job_handle Mosaikmaskierung mehrerer Bildbereiche zum angegebenen Job hinzufügen. Verwendung wie immosaicArray.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| image | [erforderlich] Zielbild |
| rect_array | [erforderlich] array_ptr der Mosaikbereiche |
| array_size | [erforderlich] Größe der Bereichsarrays. |
| Mosaik_mode | [erforderlich] Mosaikmodus einstellen IM_MOSAIC_8 IM_MOSAIC_16 IM_MOSAIC_32 IM_MOSAIC_64 IM_MOSAIC_128 |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.22 Bildverarbeitung
3.22.1 improcess
IM_STATUS improcess(rga_buffer_t src,
rga_buffer_t dst,
rga_buffer_t pat,
im_rect srect,
im_rect drect,
im_rect prect,
int acquire_fence_fd,
int *release_fence_fd,
im_opt_t *opt,
int usage);
Funktion für kombinierte RGA-Bildoperationen. Die anderen APIs bauen darauf auf; improcess ermöglicht komplexere Kombinationen. Bildoperationen werden über usage konfiguriert, das wie folgt definiert ist:
typedef enum {
/* Rotation */
IM_HAL_TRANSFORM_ROT_90 = 1 << 0,
IM_HAL_TRANSFORM_ROT_180 = 1 << 1,
IM_HAL_TRANSFORM_ROT_270 = 1 << 2,
IM_HAL_TRANSFORM_FLIP_H = 1 << 3,
IM_HAL_TRANSFORM_FLIP_V = 1 << 4,
IM_HAL_TRANSFORM_FLIP_H_V = 1 << 5,
IM_HAL_TRANSFORM_MASK = 0x3f,
/*
* Blend
* Additional blend usage, can be used with both source and target configs.
* If none of the below is set, the default "SRC over DST" is applied.
*/
IM_ALPHA_BLEND_SRC_OVER = 1 << 6, /* Default, Porter-Duff "SRC over DST" */
IM_ALPHA_BLEND_SRC = 1 << 7, /* Porter-Duff "SRC" */
IM_ALPHA_BLEND_DST = 1 << 8, /* Porter-Duff "DST" */
IM_ALPHA_BLEND_SRC_IN = 1 << 9, /* Porter-Duff "SRC in DST" */
IM_ALPHA_BLEND_DST_IN = 1 << 10, /* Porter-Duff "DST in SRC" */
IM_ALPHA_BLEND_SRC_OUT = 1 << 11, /* Porter-Duff "SRC out DST" */
IM_ALPHA_BLEND_DST_OUT = 1 << 12, /* Porter-Duff "DST out SRC" */
IM_ALPHA_BLEND_DST_OVER = 1 << 13, /* Porter-Duff "DST over SRC" */
IM_ALPHA_BLEND_SRC_ATOP = 1 << 14, /* Porter-Duff "SRC ATOP" */
IM_ALPHA_BLEND_DST_ATOP = 1 << 15, /* Porter-Duff "DST ATOP" */
IM_ALPHA_BLEND_XOR = 1 << 16, /* Xor */
IM_ALPHA_BLEND_MASK = 0x1ffc0,
IM_ALPHA_COLORKEY_NORMAL = 1 << 17,
IM_ALPHA_COLORKEY_INVERTED = 1 << 18,
IM_ALPHA_COLORKEY_MASK = 0x60000,
IM_SYNC = 1 << 19,
IM_ASYNC = 1 << 26,
IM_CROP = 1 << 20, /* Unused */
IM_COLOR_FILL = 1 << 21,
IM_COLOR_PALETTE = 1 << 22,
IM_NN_QUANTIZE = 1 << 23,
IM_ROP = 1 << 24,
IM_ALPHA_BLEND_PRE_MUL = 1 << 25,
} IM_USAGE;
| Parameter | Beschreibung |
|---|---|
| src | [erforderlich] Eingangsbild A |
| dst | [erforderlich] Ausgabebild |
| pat | [erforderlich] Eingangsbild B |
| srect | [erforderlich] src-Zuschnittbereich |
| drect | [erforderlich] dst-Zuschnittbereich |
| prect | [erforderlich] pat-Zuschnittbereich |
| acquire_fence_fd | [erforderlich] im asynchronen Modus den Job nach Warten auf das acquire_fence-Signal ausführen |
| release_fence_fd | [erforderlich] im asynchronen Modus als Parameter von imsync() verwendet |
| opt | [erforderlich] Operationsoptionen typedef struct im_opt { int color; im_colorkey_range colorkey_range; im_nn_t nn; int rop_code; int priority; int core; } im_opt_t; |
| usage | [erforderlich] Bildoperationsverwendung |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.22.2 improcessTask
IM_API IM_STATUS improcessTask(im_job_handle_t job_handle,
rga_buffer_t src,
rga_buffer_t dst,
rga_buffer_t pat,
im_rect srect,
im_rect drect,
im_rect prect,
im_opt_t *opt_ptr,
int usage);
Über job_handle kombinierte Bildverarbeitung zum angegebenen Job hinzufügen. Verwendung wie improcess.
| Parameter | Beschreibung |
|---|---|
| job_handle | [erforderlich] Jobhandle |
| src | [erforderlich] Eingangsbild A |
| dst | [erforderlich] Ausgabebild |
| pat | [erforderlich] Eingangsbild B |
| srect | [erforderlich] src-Zuschnittbereich |
| drect | [erforderlich] dst-Zuschnittbereich |
| prect | [erforderlich] pat-Zuschnittbereich |
| acquire_fence_fd | [erforderlich] im asynchronen Modus den Job nach Warten auf das acquire_fence-Signal ausführen |
| release_fence_fd | [erforderlich] im asynchronen Modus als Parameter von imsync() verwendet |
| opt | [erforderlich] Operationsoptionen typedef struct im_opt { int color; im_colorkey_range colorkey_range; im_nn_t nn; int rop_code; int priority; int core; } im_opt_t; |
| usage | [erforderlich] Bildoperationsverwendung |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.23 Parameterprüfung
3.23.1 imcheck
IM_API IM_STATUS imcheck(const rga_buffer_t src, const rga_buffer_t dst,
const im_rect src_rect, const im_rect dst_rect,
const int mode_usage);
IM_API IM_STATUS imcheck_composite(const rga_buffer_t src, const rga_buffer_t dst, const rga_buffer_t pat,
const im_rect src_rect, const im_rect dst_rect, const im_rect pat_rect,
const int mode_usage);
Nach der Konfiguration der RGA-Jobparameter prüft diese Schnittstelle deren Gültigkeit und Unterstützung durch die aktuelle Hardware.
Diese Schnittstelle nur während Entwicklung und Fehlersuche verwenden, um Leistungseinbußen durch wiederholte Prüfungen zu vermeiden.
| Parameter | Beschreibung |
|---|---|
| src | [erforderlich] Eingangsbild A |
| dst | [erforderlich] Ausgabebild |
| pat | [optional] Eingangsbild B |
| srect | [erforderlich] src-Zuschnittbereich |
| drect | [erforderlich] dst-Zuschnittbereich |
| prect | [optional] pat-Zuschnittbereich |
| usage | [optional] Bildoperationsverwendung |
Gibt bei Erfolg IM_STATUS_NOERROR zurück, andernfalls einen negativen Fehlercode.
3.24 Synchronisierung
3.24.1 imsync
IM_STATUS imsync(int fence_fd);
Im asynchronen Modus diese Schnittstelle mit dem zurückgegebenen release_fence_fd aufrufen, um auf den Abschluss zu warten. sync = 0 aktiviert bei anderen APIs asynchrone Aufrufe, ähnlich OpenGL glFlush. Ein anschließendes imsync entspricht der Wirkung von glFinish.
| Parameter | Beschreibung |
|---|---|
| fence_fd | [erforderlich] fence_fd zum Warten |
Gibt bei Erfolg IM_STATUS_SUCCESS zurück, andernfalls einen negativen Fehlercode.
3.25 Threadkontext-Konfiguration
3.25.1 imconfig
IM_STATUS imconfig(IM_CONFIG_NAME name, uint64_t value);
Den Kontext des aktuellen Threads über verschiedene Konfigurationsnamen einstellen. Er liefert die Thread-Standardwerte und hat niedrigere Priorität als Schnittstellenargumente. Ohne explizite Parameterkonfiguration gelten die Kontextwerte; andernfalls hat für diesen Aufruf das übergebene Argument Vorrang.
| Parameter | Beschreibung |
|---|---|
| name | [erforderlich] Kontextkonfigurationsname: IM_CONFIG_SCHEDULER_CORE —— Taskverarbeitungskern wählen IM_CONFIG_PRIORITY —— Taskpriorität IM_CHECK_CONFIG —— Validierung aktivieren |
| value | [erforderlich] Konfigurationswert IM_CONFIG_SCHEDULER_CORE : IM_SCHEDULER_RGA3_CORE0 IM_SCHEDULER_RGA3_CORE1 IM_SCHEDULER_RGA2_CORE0 IM_SCHEDULER_RGA3_DEFAULT IM_SCHEDULER_RGA2_DEFAULT IM_CONFIG_PRIORITY: 0 ~ 6 IM_CHECK_CONFIG: TRUE FALSE |
priority und core sind Einstellungen mit sehr weitreichenden Rechten. Fehlbedienung kann Systemabstürze oder Deadlocks verursachen. Nur zur Entwicklung und Fehlersuche verwenden; von einer Konfiguration im Produktbetrieb wird dringend abgeraten. Bei Erfolg wird IM_STATUS_SUCCESS zurückgegeben, sonst ein negativer Fehlercode.
4. Datenstrukturen
Dieses Kapitel beschreibt die Datenstrukturen der Anwendungsschnittstellen im Detail.
4.1 Übersicht
| Datenstruktur | Beschreibung |
|---|---|
| rga_buffer_t | Bildpufferinformationen |
| im_rect | Tatsächlicher Bildoperationsbereich |
| im_opt_t | Bildoperationsoptionen |
| im_job_handle_t | RGA-Jobhandle |
| rga_buffer_handle_t | Bildpufferhandle des RGA-Treibers |
| im_handle_param_t | Eigenschaften des zu importierenden Bildpuffers |
| im_context_t | Standardkontext des aktuellen Threads |
| im_nn_t | NN-Vorverarbeitungsparameter |
| im_colorkey_range | Farbschlüsselbereich |
4.2 Detailbeschreibungen
4.2.1 rga_buffer_t
Bildpufferinformationen eines Kanals.
Pfad: im2d_api/im2d_type.h. Definition:
typedef struct {
void* vir_addr; /* virtual address */
void* phy_addr; /* physical address */
int fd; /* shared fd */
rga_buffer_handle_t handle; /* buffer handle */
int width; /* width */
int height; /* height */
int wstride; /* wstride */
int hstride; /* hstride */
int format; /* format */
int color_space_mode; /* color_space_mode */
int global_alpha; /* global_alpha */
int rd_mode;
} rga_buffer_t;
| Memberparameter | Beschreibung |
|---|---|
| vir_addr | Virtuelle Bildpufferadresse. |
| phy_addr | Zusammenhängende physische Bildpufferadresse. |
| fd | DMA-Bildpuffer-Dateideskriptor. |
| handle | Speicherhandle des in RGA importierten Bildpuffers. |
| width | Breite des tatsächlichen Operationsbereichs in Pixeln. |
| height | Höhe des tatsächlichen Operationsbereichs in Pixeln. |
| wstride | Bildbreiten-Stride in Pixeln. |
| hstride | Bildhöhen-Stride in Pixeln. |
| format | Bildformat. |
| color_space_mode | Bildfarbraum. |
| global_alpha | Globales Alpha. |
| rd_mode | Lesemodus des aktuellen Kanals. |
Hinweise: Zur Bildpufferbeschreibung nur eines von vir_addr, phy_addr, fd oder handle wählen. Bei mehreren Zuweisungen wird genau eines nach Standardpriorität verwendet: handle > phy_addr > fd > vir_addr.
4.2.2 im_rect
Tatsächlicher Operationsbereich eines Kanals.
Pfad: im2d_api/im2d_type.h. Definition:
typedef struct {
int x; /* upper-left x */
int y; /* upper-left y */
int width; /* width */
int height; /* height */
} im_rect;
| Memberparameter | Beschreibung |
|---|---|
| x | Anfangskoordinate x des tatsächlichen Operationsbereichs in Pixeln. |
| y | Anfangskoordinate y des tatsächlichen Operationsbereichs in Pixeln. |
| width | Breite des tatsächlichen Operationsbereichs in Pixeln. |
| height | Höhe des tatsächlichen Operationsbereichs in Pixeln. |
Der Operationsbereich darf die Bildgröße nicht überschreiten: (x + width) <= wstride und (y + height) <= hstride.
4.2.3 im_opt_t
Bildoperationsoptionen des aktuellen Tasks.
Pfad: im2d_api/im2d_type.h. Definition:
typedef struct im_opt {
im_api_version_t version DEFAULT_INITIALIZER(RGA_CURRENT_API_HEADER_VERSION);
int color; /* color, used by color fill */
im_colorkey_range colorkey_range; /* range value of color key */
im_nn_t nn;
int rop_code;
int priority;
int core;
int mosaic_mode;
im_osd_t osd_config;
im_intr_config_t intr_config;
char reserve[128];
} im_opt_t;
| Memberparameter | Beschreibung |
|---|---|
| version | Aktuelle Headerversion |
| color | Bildfüllfarbe. |
| colorkey_range | Farbschlüsselbereichskonfiguration. |
| nn | NN-Vorverarbeitung (Quantisierung). |
| rop_code | ROP-Opcode-Konfiguration. |
| priority | Priorität des aktuellen Tasks. |
| core | Hardwarekern des aktuellen Tasks. |
| Mosaik_mode | Mosaikmodus. |
| osd_config | Invertierungs-/Statistikkonfiguration der OSD-Textüberlagerung. |
| intr_config | Frühinterruptmodus. |
| reserve | Reserviert. |
priority und core sind Einstellungen mit sehr weitreichenden Rechten. Fehlbedienung kann Systemabstürze oder Deadlocks verursachen. Nur zur Entwicklung und Fehlersuche verwenden; von einer Konfiguration im Produktbetrieb wird dringend abgeraten.
4.2.4 im_job_handle_t
RGA-Jobhandle zur Identifikation des aktuell konfigurierten Jobs.
Pfad: im2d_api/im2d_type.h. Definition:
typedef uint32_t im_job_handle_t;
Schlägt die Konfiguration fehl, das aktuelle Jobhandle mit imcancelJob freigeben, um Speicherlecks zu vermeiden.
4.2.5 rga_buffer_handle_t
Bildpufferhandle des RGA-Treibers.
Pfad: im2d_api/im2d_type.h. Definition:
typedef int rga_buffer_handle_t;
Nach der Speichernutzung mit releasebuffer_handle freigeben, um Speicherlecks zu vermeiden.
4.2.6 im_handle_param_t
Beschreibungsparameter des zu importierenden Bildpuffers.
Pfad: im2d_api/im2d_type.h. Definition:
typedef struct im_handle_param {
uint32_t width;
uint32_t height;
uint32_t format;
} im_handle_param_t;
| Memberparameter | Beschreibung |
|---|---|
| width_stride | Horizontaler Stride des importierten Puffers in Pixeln. |
| height_stride | Vertikaler Stride des importierten Puffers in Pixeln. |
| format | Format des zu importierenden Bildpuffers. |
Diese Struktur beschreibt die Größe des zugewiesenen Puffers. Ist die tatsächliche Zuweisung kleiner als konfiguriert, schlägt importbuffer_T fehl.
4.2.7 im_nn_t
Parameter der NN-Vorverarbeitung (Quantisierung).
Pfad: im2d_api/im2d_type.h. Definition:
typedef struct im_nn {
int scale_r; /* scaling factor on R channal */
int scale_g; /* scaling factor on G channal */
int scale_b; /* scaling factor on B channal */
int offset_r; /* offset on R channal */
int offset_g; /* offset on G channal */
int offset_b; /* offset on B channal */
} im_nn_t;
| Memberparameter | Beschreibung |
|---|---|
| scale_r | Skalierungsfaktor des roten Kanals. |
| scale_g | Skalierungsfaktor des grünen Kanals. |
| scale_b | Skalierungsfaktor des blauen Kanals. |
| offset_r | Offset des roten Kanals. |
| offset_g | Offset des grünen Kanals. |
| offset_b | Offset des blauen Kanals. |
Hinweise: keine.
4.2.8 im_colorkey_range
Farbschlüsselbereich.
Pfad: im2d_api/im2d_type.h. Definition:
typedef struct {
int max; /* The Maximum value of the color key */
int min; /* The minimum value of the color key */
} im_colorkey_range;
| Memberparameter | Beschreibung |
|---|---|
| max | Maximaler Farbschlüsselwert. |
| min | Minimaler Farbschlüsselwert. |
Hinweise: keine.
4.2.9 im_osd_block_t
OSD-Textblock-Beschreibungskonfiguration.
Pfad: im2d_api/im2d_type.h. Definition:
typedef struct im_osd_block {
int width_mode; // normal or different
// IM_OSD_BLOCK_MODE_NORMAL
// IM_OSD_BLOCK_MODE_DIFFERENT
union {
int width; // normal_mode block width
int width_index; // different_mode block width index in RAM
};
int block_count; // block count
int background_config; // background config is bright or dark
// IM_OSD_BACKGROUND_DEFAULT_BRIGHT
// IM_OSD_BACKGROUND_DEFAULT_DARK
int direction; // osd block direction
// IM_OSD_MODE_HORIZONTAL
// IM_OSD_MODE_VERTICAL
int color_mode; // using src1 color or config color
// IM_OSD_COLOR_PIXEL
// IM_OSD_COLOR_EXTERNAL
im_color_t normal_color; // config color: normal
im_color_t invert_color; // config color: invert
} im_osd_block_t;
| Memberparameter | Beschreibung |
|---|---|
| width_mode | Blockbreitenmodus: Gleiche Breiten: IM_OSD_BLOCK_MODE_NORMAL. Unterschiedliche: IM_OSD_BLOCK_MODE_DIFFERENT. |
| width/width_index | width: gibt im Modus gleicher Blockbreiten die OSD-Blockbreite des aktuellen Tasks an. width_index: bezeichnet im Modus unterschiedlicher Blockbreiten den Index der verwendeten Breitentabelle im internen RAM. |
| block_count | Anzahl Textblöcke |
| background_config | Texthintergrundhelligkeit: Schwarz auf Weiß: IM_OSD_BACKGROUND_DEFAULT_BRIGHT. Weiß auf Schwarz: IM_OSD_BACKGROUND_DEFAULT_DARK. |
| direction | OSD-Richtung: Vertikal: IM_OSD_MODE_VERTICAL. Horizontal: IM_OSD_MODE_HORIZONTAL. |
| color_mode | OSD-Blockfarbmodus: Pixelfarbe: IM_OSD_COLOR_PIXEL. Externe Farbe: IM_OSD_COLOR_EXTERNAL. |
| normal_color | Extern vorgegebene Textblockfarbe im normalen, nicht invertierten Zustand. |
| invert_color | Extern vorgegebene Textblockfarbe bei Invertierung. |
Hinweise: keine.
4.2.10 im_osd_invert_factor_t
Konfiguration der OSD-Farbinvertierungsformel.
Pfad: im2d_api/im2d_type.h. Definition:
typedef struct im_osd_invert_factor {
uint8_t alpha_max;
uint8_t alpha_min;
uint8_t yg_max;
uint8_t yg_min;
uint8_t crb_max;
uint8_t crb_min;
} im_osd_invert_factor_t;
Formel: MAX(channel_min_factor, channel_max_factor - channel_value). Hinweise: keine.
4.2.11 im_osd_invert_t
OSD-Farbinvertierungskonfiguration.
Pfad: im2d_api/im2d_type.h. Definition:
typedef struct im_osd_invert {
int invert_channel; // invert channel config:
// IM_OSD_INVERT_CHANNEL_NONE
// IM_OSD_INVERT_CHANNEL_Y_G
// IM_OSD_INVERT_CHANNEL_C_RB
// IM_OSD_INVERT_CHANNEL_ALPHA
// IM_OSD_INVERT_CHANNEL_COLOR
// IM_OSD_INVERT_CHANNEL_BOTH
int flags_mode; // use external or inertnal RAM invert flags
// IM_OSD_FLAGS_EXTERNAL
// IM_OSD_FLAGS_INTERNAL
int flags_index; // flags index when using internal RAM invert flags
uint64_t invert_flags; // external invert flags
uint64_t current_flags; // current flags
int invert_mode; // invert use swap or factor
// IM_OSD_INVERT_USE_FACTOR
// IM_OSD_INVERT_USE_SWAP
im_osd_invert_factor_t factor;
int threash;
} im_osd_invert_t;
| Memberparameter | Beschreibung |
|---|---|
| invert_channel | Invertierte Kanäle: Standardmäßig keiner: IM_OSD_INVERT_CHANNEL_NONE. Y/G: IM_OSD_INVERT_CHANNEL_Y_G. C(UV)/RB: IM_OSD_INVERT_CHANNEL_C_RB. Alpha: IM_OSD_INVERT_CHANNEL_ALPHA. Farbe: IM_OSD_INVERT_CHANNEL_COLOR, also (IM_OSD_INVERT_CHANNEL_Y_G | IM_OSD_INVERT_CHANNEL_C_RB). Alle: IM_OSD_INVERT_CHANNEL_BOTH, also (IM_OSD_INVERT_CHANNEL_COLOR | IM_OSD_INVERT_CHANNEL_ALPHA). |
| flags_mode | Invertierungssteuerung (Zuordnung der Quelle): Intern: IM_OSD_FLAGS_EXTERNAL, mit im internen RAM ermittelten Flags. Extern: IM_OSD_FLAGS_INTERNAL, mit externer Vorgabe. |
| flags_index | Index der aktuell verwendeten Invertierungssteuerflag-Tabelle im internen RAM. |
| invert_flags | Extern vorgegebene 64-Bit-Invertierungstabelle. |
| current_flags | Vom aktuellen Task ermittelte 64-Bit-Invertierungstabelle; nach Taskabschluss lesen. |
| invert_mode | Invertierungsmodus: Eigene Formel: IM_OSD_INVERT_USE_FACTOR. Standard: IM_OSD_INVERT_USE_SWAP; U und V bei YUV bzw. R und B bei RGB vertauschen. |
| factor | Farbinvertierungsformel. |
| threash | Invertierungsschwelle. |
Hinweise: keine.
4.2.12 im_osd_bpp2_t
Konfiguration der OSD-BPP2-zu-RGB-Formatabbildung.
Pfad: im2d_api/im2d_type.h. Definition:
typedef struct im_osd_bpp2 {
uint8_t ac_swap; // ac swap flag
// 0: CA
// 1: AC
uint8_t endian_swap; // rgba2bpp endian swap
// 0: Big endian
// 1: Little endian
im_color_t color0;
im_color_t color1;
} im_osd_bpp2_t;
| Memberparameter | Beschreibung |
|---|---|
| ac_swap | AC-Anordnungsmodus. |
| endian_swap | Byte-Reihenfolge. |
| color0 | Zugeordnete Farbe für color = 0. |
| color1 | Zugeordnete Farbe für color = 1. |
Hinweise: keine.
4.2.13 im_osd_t
OSD-Funktionskonfiguration.
Pfad: im2d_api/im2d_type.h. Definition:
typedef struct im_osd {
int osd_mode; // osd mode: statistics or auto_invert
im_osd_block_t block_parm; // osd block info config
im_osd_invert_t invert_config;
im_osd_bpp2_t bpp2_info;
} im_osd_t;
| Memberparameter | Beschreibung |
|---|---|
| osd_mode | OSD-Modus: Statistik: IM_OSD_MODE_STATISTICS. Invertierung: IM_OSD_MODE_AUTO_INVERT. |
| block_parm | OSD-Blockparameter. |
| invert_config | Farbinvertierungskonfiguration. |
| bpp2_info | bpp2-rgb-Formatkonfiguration. |
Hinweise: keine.
5. Testfälle und Fehlersuche
Das Ausführen des Demos und die Analyse seines Quellcodes erleichtern das schnelle Verständnis und die Nutzung der oben beschriebenen Schnittstellen.
5.1 Testdateien
Die binären Ein-/Ausgabedateien vorab vorbereiten. Die RGBA8888-Quellbilder unter /sample/sample_file können direkt verwendet werden. Auf Android-Geräten die Quellen unter /data/, auf Linux-Geräten unter /usr/data ablegen. Dateinamensregeln:
in%dw%d-h%d-%s.bin
out%dw%d-h%d-%s.bin
⽰例:
1280×720 RGBA8888的输⼊图像: in0w1280-h720-rgba8888.bin
1280×720 RGBA8888的输出图像: out0w1280-h720-rgba8888.bin
Parameterbedeutung: Eingabedateien verwenden in, Ausgabedateien out. Das erste %d ist der Dateiindex, normalerweise 0, zur Unterscheidung gleicher Formate und Abmessungen. Das zweite %d ist die Breite, normalerweise die virtuelle Breite, das dritte die Höhe, normalerweise die virtuelle Höhe. Das vierte %s ist der Formatname. Häufige vordefinierte Testformate folgen; weitere Formatstrings stehen in rgaUtils.cpp.
| format(Android) | format(Linux) | name |
|---|---|---|
| HAL_PIXEL_FORMAT_RGB_565 | RK_FORMAT_RGB_565 | “rgb565” |
| HAL_PIXEL_FORMAT_RGB_888 | RK_FORMAT_RGB_888 | “rgb888” |
| HAL_PIXEL_FORMAT_RGBA_8888 | RK_FORMAT_RGBA_8888 | “rgba8888” |
| HAL_PIXEL_FORMAT_RGBX_8888 | RK_FORMAT_RGBX_8888 | “rgbx8888” |
| HAL_PIXEL_FORMAT_BGRA_8888 | RK_FORMAT_BGRA_8888 | “bgra8888” |
| HAL_PIXEL_FORMAT_YCrCb_420_SP | RK_FORMAT_YCrCb_420_SP | “crcb420sp” |
| HAL_PIXEL_FORMAT_YCrCb_NV12 | RK_FORMAT_YCbCr_420_SP | “nv12” |
| HAL_PIXEL_FORMAT_YCrCb_NV12_VIDEO | / | “nv12” |
| HAL_PIXEL_FORMAT_YCrCb_NV12_10 | RK_FORMAT_YCbCr_420_SP_10B | “nv12_10” |
Die Standardeingabe ist 1280x720 RGBA8888. in0w1280-h720-rgba8888.bin unter /data oder /usr/data vorbereiten. Für Komposition wird dort zusätzlich in1w1280-h720-rgba8888.bin benötigt.
5.2 Fehlersuche
Das Demo gibt folgende Logs aus (Bildkopiebeispiel). Android-Log:
# rgaImDemo --copy
librga:RGA_GET_VERSION:3.02,3.020000 //RGA版本
ctx=0x7ba35c1520,ctx->rgaFd=3 //RGA上下⽂
Start selecting mode
im2d copy .. //RGA运⾏模式
GraphicBuffer check ok
GraphicBuffer check ok
lock buffer ok
open file ok //src⽂件的状态,如果/data/⽬录下没有对应⽂件这⾥会报错
unlock buffer ok
lock buffer ok
unlock buffer ok
copying .... successfully //标志运⾏成功
open /data/out0w1280-h720-rgba8888.bin and write ok //输出⽂件名以及⽬录
Linux-Log:
# rgaImDemo --copy
librga:RGA_GET_VERSION:3.02,3.020000 //RGA版本
ctx=0x2b070,ctx->rgaFd=3 //RGA上下⽂
Rga built version:version:1.00
Start selecting mode
im2d copy .. //RGA运⾏模式
open file //src⽂件的状态,如果/usr/data/⽬录下没有对应⽂件这⾥会报错
copying .... Run successfully //标志运⾏成功
open /usr/data/out0w1280-h720-rgba8888.bin and write ok //输出⽂件名以及⽬录
Für ausführlichere RGA-Logs unter Android die Konfigurationsausgabe über vendor.rga.log aktivieren (sys.rga.log unter Android 8 und älter):
setprop vendor.rga.log 1 打开RGA log打印
logcat -s librga 开启并过滤log打印
setprop vendor.rga.log 0 关闭RGA log打印
Unter Linux __DEBUG in core/NormalRgaContext.h auf 1 setzen und neu kompilieren.
#ifdef LINUX
-#define __DEBUG 0
+#define __DEBUG 1
Typische Logs folgen. Sie können zur Analyse durch zuständige RK-Ingenieure in RedMine hochgeladen werden. Android-Log:
D librga : <<<<-------- print rgaLog -------->>>>
D librga : src->hnd = 0x0 , dst->hnd = 0x0
D librga : srcFd = 11 , phyAddr = 0x0 , virAddr = 0x0
D librga : dstFd = 15 , phyAddr = 0x0 , virAddr = 0x0
D librga : srcBuf = 0x0 , dstBuf = 0x0
D librga : blend = 0 , perpixelAlpha = 1
D librga : scaleMode = 0 , stretch = 0;
D librga : rgaVersion = 3.020000 , ditherEn =0
D librga : srcMmuFlag = 1 , dstMmuFlag = 1 , rotateMode = 0
D librga : <<<<-------- rgaReg -------->>>>
D librga : render_mode=0 rotate_mode=0
D librga : src:[b,0,e1000],x-y[0,0],w-h[1280,720],vw-vh[1280,720],f=0
D librga : dst:[f,0,e1000],x-y[0,0],w-h[1280,720],vw-vh[1280,720],f=0
D librga : pat:[0,0,0],x-y[0,0],w-h[0,0],vw-vh[0,0],f=0
D librga : ROP:[0,0,0],LUT[0]
D librga : color:[0,0,0,0,0]
D librga : MMU:[1,0,80000521]
D librga : mode[0,0,0,0]
Linux-Log:
render_mode=0 rotate_mode=0
src:[0,a681a008,a68fb008],x-y[0,0],w-h[1280,720],vw-vh[1280,720],f=0
dst:[0,a6495008,a6576008],x-y[0,0],w-h[1280,720],vw-vh[1280,720],f=0
pat:[0,0,0],x-y[0,0],w-h[0,0],vw-vh[0,0],f=0
ROP:[0,0,0],LUT[0]
color:[0,0,0,0,0]
MMU:[1,0,80000521]
mode[0,0,0,0,0]
gr_color_x [0, 0, 0]
gr_color_x [0, 0, 0]
5.3 Testfälle
Die Tests liegen unter sample/im2d_api_demo im librga-Quellbaum. Die Demo-Konfiguration kann angepasst werden; beim ersten Lauf die Standardwerte verwenden. Die Kompilierung ist plattformabhängig: Android unterstützt mm; unter Linux entsteht beim CMake-Build von librga.so im selben Verzeichnis die Testdatei. Das kompilierte Programm per adb übertragen, Ausführungsrechte setzen, ausführen und die Logs prüfen. Kontrollieren, ob die Ausgabedatei den Erwartungen entspricht.
5.3.1 Bildpuffer zuweisen
Das Demo stellt Graphicbuffer und AHardwareBuffer für die RGA-Komposition bereit; die Auswahl erfolgt über USE_AHARDWAREBUFFER.
⽬录:librga/samples/im2d_api_demo/Android.mk
(line +15)
ifeq (1,$(strip $(shell expr $(PLATFORM_SDK_VERSION) \> 25)))
/*USE_AHARDWAREBUFFER为1则使⽤AHardwareBuffer,为0使⽤Graphicbuffer*/
LOCAL_CFLAGS += -DUSE_AHARDWAREBUFFER=1
endif
5.3.1.1 Graphicbuffer
Drei Funktionen initialisieren hauptsächlich Graphicbuffer, füllen/leeren den Puffer und befüllen rga_buffer_t.
/*传⼊src/dst的宽、⾼、图像格式,初始化Graphicbuffer*/
src_buf = GraphicBuffer_Init(SRC_WIDTH, SRC_HEIGHT, SRC_FORMAT);
dst_buf = GraphicBuffer_Init(DST_WIDTH, DST_HEIGHT, DST_FORMAT);
/*通过枚举值FILL_BUFF/EMPTY_BUFF,执⾏填充/清空Graphicbuffer*/
GraphicBuffer_Fill(src_buf, FILL_BUFF, 0);
if(MODE == MODE_BLEND)
GraphicBuffer_Fill(dst_buf, FILL_BUFF, 1);
else
GraphicBuffer_Fill(dst_buf, EMPTY_BUFF, 1);
/*填充rga_buffer_t结构体:src、dst*/
src = wrapbuffer_GraphicBuffer(src_buf);
dst = wrapbuffer_GraphicBuffer(dst_buf);
5.3.1.2 AHardwareBuffer
Drei Funktionen initialisieren hauptsächlich AHardwareBuffer, füllen/leeren den Puffer und befüllen rga_buffer_t.
/*传⼊src/dst的宽、⾼、图像格式,初始化AHardwareBuffer*/
AHardwareBuffer_Init(SRC_WIDTH, SRC_HEIGHT, SRC_FORMAT, &src_buf);
AHardwareBuffer_Init(DST_WIDTH, DST_HEIGHT, DST_FORMAT, &dst_buf);
/*通过枚举值FILL_BUFF/EMPTY_BUFF,执⾏填充/清空AHardwareBuffer*/
AHardwareBuffer_Fill(&src_buf, FILL_BUFF, 0);
if(MODE == MODE_BLEND)
AHardwareBuffer_Fill(&dst_buf, FILL_BUFF, 1);
else
AHardwareBuffer_Fill(&dst_buf, EMPTY_BUFF, 1);
/*填充rga_buffer_t结构体:src、dst*/
src = wrapbuffer_AHardwareBuffer(src_buf);
dst = wrapbuffer_AHardwareBuffer(dst_buf);
5.3.2 Hilfe anzeigen
Mit folgendem Befehl die Testhilfe abrufen.
rgaImDemo -h
rgaImDemo --help
rgaImDemo
Nach erfolgreicher Ausführung das Demo entsprechend der angezeigten Hilfe verwenden:
rk3399_Android10:/ # rgaImDemo
librga:RGA_GET_VERSION:3.02,3.020000
ctx=0x7864d7c520,ctx->rgaFd=3
=============================================================================================
usage: rgaImDemo [--help/-h] [--while/-w=(time)] [--querystring/--querystring=<options>]
[--copy] [--resize=<up/down>] [--crop] [--rotate=90/180/270]
[--flip=H/V] [--translate] [--blend] [--cvtcolor]
[--fill=blue/green/red]
--help/-h Call help
--while/w Set the loop mode. Users can set the number of cycles by themselves.
--querystring You can print the version or support information corresponding to the current version
of RGA according to the options.
If there is no input options, all versions and support information of the current
version of RGA will be printed.
<options>:
vendor Print vendor information.
version Print RGA version, and librga/im2d_api version.
maxinput Print max input resolution.
maxoutput Print max output resolution.
scalelimit Print scale limit.
inputformat Print supported input formats.
outputformat Print supported output formats.
expected Print expected performance.
all Print all information.
--copy Copy the image by RGA.The default is 720p to 720p.
--resize resize the image by RGA.You can choose to up(720p->1080p) or down(720p->480p).
--crop Crop the image by RGA.By default, a picture of 300*300 size is cropped from (100,100).
--rotate Rotate the image by RGA.You can choose to rotate 90/180/270 degrees.
--flip Flip the image by RGA.You can choice of horizontal flip or vertical flip.
--translate Translate the image by RGA.Default translation (300,300).
--blend Blend the image by RGA.Default, Porter-Duff 'SRC over DST'.
--cvtcolor Modify the image format and color space by RGA.The default is RGBA8888 to NV12.
--fill Fill the image by RGA to blue, green, red, when you set the option to the corresponding
color.
=============================================================================================
Die gesamte Argumentverarbeitung befindet sich in /librga/demo/im2d_api_demo/args.cpp.
5.3.3 Demo wiederholt ausführen
Mit folgendem Befehl das Demo wiederholt ausführen. Die Schleifenanweisung muss vor allen Argumenten stehen. Die Wiederholungszahl ist int; das Standardintervall beträgt 200ms.
rgaImDemo -w6 --copy
rgaImDemo --while=6 --copy
5.3.4 RGA-Version und Unterstützung abfragen
Mit folgendem Befehl Versions- und Unterstützungsinformationen abrufen:
rgaImDemo --querystring
rgaImDemo --querystring=<options>
Dieser Befehl akzeptiert Optionen; ohne Optionen gilt =all. Verfügbare Optionen:
options:
=vendor 打印⼚商信息
=version 打印版本信息
=maxinput 打印⽀持的最⼤输⼊分辨率
=maxoutput 打印⽀持的最⼤输出分辨率
=scalelimit 打印⽀持的缩放倍数
=inputformat 打印⽀持的输⼊格式
=outputformat 打印⽀持的输出格式
=expected 打印预期性能
=all 打印所有信息
5.3.4.1 Codeanalyse
Die Argumente von main() bestimmen die ausgegebenen Informationen.
/*将main()传参转化为QUERYSTRING_INFO枚举值*/
IM_INFO = (QUERYSTRING_INFO)parm_data[MODE_QUERYSTRING];
/*打印querystring()返回的字符串,即所需要的信息*/
printf("\n%s\n", querystring(IM_INFO));
5.3.5 Bildskalierung
Mit folgendem Befehl Bildskalierung testen.
rgaImDemo --resize=up
rgaImDemo --resize=down
Diese Funktion benötigt eine Option. Verfügbare Optionen:
options:
=up 图像分辨率放⼤⾄1920x1080
=down 图像分辨率缩⼩⾄720x480
5.3.5.1 Codeanalyse
Das Argument up/down von main() wählt Vergrößerung oder Verkleinerung. Den Puffer dafür neu initialisieren und leeren, rga_buffer_t befüllen und die endgültigen src-/dst-Bildbeschreibungen an imresize() übergeben.
switch(parm_data[MODE_RESIZE])
{
/*放⼤图像*/
case IM_UP_SCALE :
/*重新初始化Graphicbuffer为分辨率1920x1080对应⼤⼩*/
dst_buf = GraphicBuffer_Init(1920, 1080, DST_FORMAT);
/*清空buffer*/
GraphicBuffer_Fill(dst_buf, EMPTY_BUFF, 1);
/*重新填充存储dst数据的rga_buffer_t结构体*/
dst = wrapbuffer_GraphicBuffer(dst_buf);
break;
case IM_DOWN_SCALE :
/*重新初始化Graphicbuffer为分辨率1920x1080对应⼤⼩*/
dst_buf = GraphicBuffer_Init(720, 480, DST_FORMAT);
/*清空buffer*/
GraphicBuffer_Fill(dst_buf, EMPTY_BUFF, 1);
/*重新填充存储dst数据的rga_buffer_t结构体*/
dst = wrapbuffer_GraphicBuffer(dst_buf);
break;
}
/*将rga_buffer_t格式的结构体src、dst传⼊imresize()*/
STATUS = imresize(src, dst);
/*根据返回的IM_STATUS枚举值打印运⾏状态*/
printf("resizing .... %s\n", imStrError(STATUS));
5.3.6 Bildzuschnitt
Mit folgendem Befehl Bildzuschnitt testen.
rgaImDemo --crop
Keine Optionen verfügbar. Standardmäßig wird der Bereich LT(100,100), RT(400,100), LB(100,400), RB(400,400) zugeschnitten.
5.3.6.1 Codeanalyse
Die Zuschnittmaße im im_rect für das src-Rechteck setzen und die rga_buffer_t-Strukturen für src und dst an imcrop() übergeben.
/*这⾥通过x、y确定裁剪顶点的坐标,width、height确定裁剪区域⼤⼩*/
src_rect.x = 100;
src_rect.y = 100;
src_rect.width = 300;
src_rect.height = 300;
/*将im_rect格式的结构体src_rect与rga_buffer_t格式的结构体src、dst传⼊imcrop()*/
STATUS = imcrop(src, dst, src_rect);
/*根据返回的IM_STATUS枚举值打印运⾏状态*/
printf("cropping .... %s\n", imStrError(STATUS));
5.3.7 Bildrotation
Mit folgendem Befehl Bildrotation testen.
rgaImDemo --rotate=90
rgaImDemo --rotate=180
rgaImDemo --rotate=270
Diese Funktion benötigt eine Option. Verfügbare Optionen:
options:
=90 图像旋转90° ,输出图像分辨率宽⾼交换
=180 图像旋转180°,输出图像分辨率不变
=270 图像旋转270°,输出图像分辨率宽⾼交换
5.3.7.1 Codeanalyse
Das main()-Argument 90/180/270 wählt den Drehwinkel. In einen IM_USAGE-Enumerationswert umwandeln und zusammen mit den rga_buffer_t-Strukturen für src und dst an imrotate() übergeben.
/*将main()传参转化为IM_USAGE枚举值*/
ROTATE = (IM_USAGE)parm_data[MODE_ROTATE];
/*将标识旋转⻆度的IM_USAGE枚举值与rga_buffer_t格式的结构体src、dst⼀同传⼊imrotate()*/
STATUS = imrotate(src, dst, ROTATE);
/*根据返回的IM_STATUS枚举值打印运⾏状态*/
printf("rotating .... %s\n", imStrError(STATUS));
5.3.8 Bildspiegelung
Mit folgendem Befehl Bildspiegelung testen.
rgaImDemo --flip=H
rgaImDemo --flip=V
Diese Funktion benötigt eine Option. Verfügbare Optionen:
options:
=H 图像⽔平镜像翻转
=V 图像垂直镜像翻转
5.3.8.1 Codeanalyse
Das main()-Argument H/V wählt die Spiegelrichtung. In einen IM_USAGE-Wert umwandeln und zusammen mit den rga_buffer_t-Strukturen für src und dst an imflip() übergeben.
/*将main()传参转化为IM_USAGE枚举值*/
FLIP = (IM_USAGE)parm_data[MODE_FLIP];
/*将标识镜像反转⽅向的IM_USAGE枚举值与rga_buffer_t格式的结构体src、dst⼀同传⼊imflip()*/
STATUS = imflip(src, dst, FLIP);
/*根据返回的IM_STATUS枚举值打印运⾏状态*/
printf("flipping .... %s\n", imStrError(STATUS));
5.3.9 Farbfüllung
Mit folgendem Befehl Farbfüllung testen.
rgaImDemo --fill=blue
rgaImDemo --fill=green
rgaImDemo --fill=red
Eine Option ist erforderlich. Der Standardfüllbereich ist LT(100,100), RT(400,100), LB(100,400), RB(400,400). Verfügbare Optionen:
options:
=blue 图像颜⾊填充为蓝⾊
=green 图像颜⾊填充为绿⾊
=red 图像颜⾊填充为红⾊
5.3.9.1 Codeanalyse
Das main()-Argument (bule/green/red, Schreibweise der Quelle) wählt die Füllfarbe. Die Füllmaße im im_rect für dst setzen, das Argument in einen hexadezimalen Farbwert umwandeln und zusammen mit der dst-Struktur rga_buffer_t an imfill() übergeben.
/*将main()传参转化为对应颜⾊的16进制数*/
COLOR = parm_data[MODE_FILL];
/*这⾥通过x、y确定裁剪顶点的坐标,width、height确定填充颜⾊区域⼤⼩*/
dst_rect.x = 100;
dst_rect.y = 100;
dst_rect.width = 300;
dst_rect.height = 300;
/*将im_rect格式的结构体dst_rect、对应颜⾊的16进制数与rga_buffer_t格式的结构体src、dst⼀同传⼊imfill()*/
STATUS = imfill(dst, dst_rect, COLOR);
/*根据返回的IM_STATUS枚举值打印运⾏状态*/
printf("filling .... %s\n", imStrError(STATUS));
5.3.10 Bildverschiebung
Mit folgendem Befehl Bildverschiebung testen.
rgaImDemo --translate
Keine Optionen verfügbar. Der linke obere Eckpunkt wird standardmäßig nach (300,300) verschoben: 300 Pixel nach rechts und 300 nach unten.
5.3.10.1 Codeanalyse
Die Verschiebungswerte im im_rect für das src-Rechteck setzen und die rga_buffer_t-Strukturen für src und dst an imtranslate() übergeben.
/*这⾥通过x、y确定平移后图像的顶点的坐标*/
src_rect.x = 300;
src_rect.y = 300;
/*将im_rect格式的结构体src_rect与rga_buffer_t格式的结构体src、dst⼀同传⼊imtranslate()*/
STATUS = imtranslate(src, dst, src_rect.x, src_rect.y);
/*根据返回的IM_STATUS枚举值打印运⾏状态*/
printf("translating .... %s\n", imStrError(STATUS));
5.3.11 Bildkopie
Mit folgendem Befehl Bildkopie testen.
rgaImDemo --copy
Keine Optionen verfügbar. Standardmäßig wird ein 1280x720-RGBA8888-Bild kopiert.
5.3.11.1 Codeanalyse
Die rga_buffer_t-Strukturen mit den Bilddaten von src und dst an imcopy() übergeben.
/*rga_buffer_t格式的结构体src、dst传⼊imcopy()*/
STATUS = imcopy(src, dst);
/*根据返回的IM_STATUS枚举值打印运⾏状态*/
printf("copying .... %s\n", imStrError(STATUS));
5.3.12 Bildkomposition
Mit folgendem Befehl Bildkomposition testen.
rgaImDemo --blend
Keine Optionen verfügbar. Die Quelle nennt IM_ALPHA_BLEND_DST als Standardkompositionsmodus.
5.3.12.1 Codeanalyse
Die rga_buffer_t-Strukturen mit den Bilddaten von src und dst an imblend() übergeben.
/*rga_buffer_t格式的结构体src、dst传⼊imblend()*/
STATUS = imblend(src, dst);
/*根据返回的IM_STATUS枚举值打印运⾏状态*/
printf("blending .... %s\n", imStrError(STATUS));
5.3.13 Bildformatkonvertierung
Mit folgendem Befehl Bildformatkonvertierung testen.
rgaImDemo --cvtcolor
Keine Optionen verfügbar. Standardmäßig wird ein 1280x720-Bild von RGBA8888 nach NV12 konvertiert.
5.3.13.1 Codeanalyse
Die benötigten Formate in den format-Feldern von rga_buffer_t setzen und die src-/dst-Bildstrukturen an imcvtcolor() übergeben.
/*将转换前后的格式赋值给对应的rga_buffer_t结构体的成员变量format*/
src.format = HAL_PIXEL_FORMAT_RGBA_8888;
dst.format = HAL_PIXEL_FORMAT_YCrCb_NV12;
/*将需要转换的格式与rga_buffer_t格式的结构体src、dst⼀同传⼊imcvtcolor()*/
STATUS = imcvtcolor(src, dst, src.format, dst.format);
/*根据返回的IM_STATUS枚举值打印运⾏状态*/
printf("cvtcolor .... %s\n", imStrError(STATUS));
Quellenvergleich: ebenfalls als V2.2.7 bezeichnetes englisches Original
Die folgenden abweichenden Definitionen der englischen Quelle dienen der Nachvollziehbarkeit, nicht dem Vermischen mit vorherigem Code. Mit tatsächlichen SDK-Headern, librga und Treiberversionen abgleichen. Die englische Quelle enthält weder die fünf OSD-Strukturen der chinesischen §§4.2.9–4.2.13 noch die erweiterten im_opt_t-Felder; diese sind oben vollständig ergänzt.
§3.20.1 imfill: Englisch verwendet buf, Standardfarbe 0x00000000 und kein release_fence_fd; Chinesisch dst, obligatorisches color und zusätzliches release_fence_fd.
IM_STATUS imfill(rga_buffer_t buf,
im_rect rect,
int color = 0x00000000,
int sync = 1);
§4.2.3 im_opt_t: die kürzere englische Struktur enthält die chinesischen Felder version, mosaic_mode, osd_config, intr_config und reserve nicht.
typedef struct im_opt {
int color; /* color, used by color fill */
im_colorkey_range colorkey_range; /* range value of color key */
im_nn_t nn;
int rop_code;
int priority;
int core;
} im_opt_t;
§4.2.6 im_handle_param_t: Englisch verwendet rga_memory_parm mit width_stride/height_stride, Chinesisch im_handle_param mit width/height. Die englische Parametertabelle verwendet ebenfalls width_stride/height_stride. Keine ABI-Gleichheit unterstellen.
typedef struct rga_memory_parm im_handle_param_t;
struct rga_memory_parm {
uint32_t width_stride;
uint32_t height_stride;
uint32_t format;
};
§3.8.1 imcopy: das englische Original enthält eine zusätzliche schließende Klammer nach sync = 1. Unten bleibt dies als Quellproblem erhalten; oben steht die chinesische Signatur.
IM_STATUS imcopy(const rga_buffer_t src,
rga_buffer_t dst,
int sync = 1),
int *release_fence_fd = NULL);
§3.15.1 imblend: Englisches srcA/dst entspricht chinesischem fg_image/bg_image; die Parameternamen unterscheiden sich.
IM_STATUS imblend(const rga_buffer_t srcA,
rga_buffer_t dst,
int mode = IM_ALPHA_BLEND_SRC_OVER,
int sync = 1,
int *release_fence_fd = NULL);
§3.15.1 imcomposite: Englisches srcA/srcB/dst entspricht chinesischem fg_image/bg_image/output_image.
IM_STATUS imcomposite(const rga_buffer_t srcA,
const rga_buffer_t srcB,
rga_buffer_t dst,
int mode = IM_ALPHA_BLEND_SRC_OVER,
int sync = 1,
int *release_fence_fd = NULL);
