Dieser Artikel bewahrt den vollständigen technischen Hauptteil (PDF-Seiten 5–46) der 46-seitigen englischen Quelle V1.1.0 mit vollständigen chinesischen, russischen und deutschen Übersetzungen. Ein entsprechendes chinesisches PDF wurde nicht bereitgestellt. Alle Sprachfassungen verwenden die 14 Originalabbildungen aus dem englischen PDF; darin bereits vorhandene chinesische Oberflächenbeschriftungen bleiben erhalten. Code, Kommentare, APIs, Parameter, Registerwerte und Beispielkonstanten bewahren den Quelltext; Bildunterschriften und Fließtext sind lokalisiert.
Der Produktumfang und die Betriebssystemunterstützung der Quelle werden nachfolgend wiedergegeben. Sie dokumentieren den Stand der Quelle und bestätigen nicht die Kompatibilität aller aktuellen Versionen. Dies ist eine Plattformreferenz für ArmSoM: Prüfen Sie tatsächliches Board, RK3588, Sensor/VCM, ISP30, SDK/BSP, AIQ und Kernelversion. Es wurde keine Hardwarevalidierung auf ArmSoM durchgeführt. Übertragen Sie die Beschreibung gemischter RK-/eigener Bibliotheken nicht auf ungeprüfte Versionen. Belichtung, Verstärkung, Fokus und Motorsteuerung können Bildaufnahme oder Hardwarezustand verändern; es wurden weder Code noch Gerätekonfigurationen oder Motorbewegungen ausgeführt.
Hinweise zur Quelle: Wiederholte Schnittstellenbeschreibungen und Überschriften, gemischte uapi-/uapi2-Namen, ein ISP32-Querverweis, zwei beschädigte Tabellenbeschreibungen und widersprüchliche Fensterparameter bleiben erhalten und sind dokumentiert. Der Code ist ein Quellbeispiel ohne Garantie der Kompilierbarkeit. Siehe die redaktionellen Prüfnotizen.
| SoC | Kernel |
|---|---|
| RK3588 | Linux 5.10 |
| SoC | BuildRoot | Debian | Yocto | Android |
|---|---|---|---|---|
| RK3588 | Y | N | N | Y |
Quellen- und Anpassungshinweise: Redaktionelle Prüfnotizen. ArmSoM · Rockchip Linux
1 Überblick
Dieses Dokument erläutert vor allem die Implementierung von 3A-Bibliotheken und führt durch die Entwicklung eigener 3A-Algorithmusbibliotheken.
Die 3A-Algorithmusbibliothek hängt von AIQ ab. AIQ enthält bereits die 3A-Algorithmusbibliothek von RK, die standardmäßig aktiviert ist. Bei Bedarf können Benutzer nach diesem Dokument eigene 3A-Bibliotheken implementieren.
1.1 Entwurfsprinzip
Das grundlegende Entwurfsprinzip zeigt folgende Abbildung:

Technische Abbildung aus der englischen Quelle, PDF-S. 5.
Die 3A-Bibliothek wird bei der ISP-Bibliothek registriert. Die 3A-Bibliothek von RK ist bereits implizit registriert und muss vom Benutzer nicht ausdrücklich registriert werden.
Nach der Registrierung empfängt die ISP-Bibliothek die 3A-Statistiken vom Treiber und ruft die Schnittstelle der 3A-Bibliothek auf, um neue 3A-Parameter zu erhalten. Anschließend übergibt sie diese Parameter an den Treiber.
1.2 Dateiorganisation
Die Dateiorganisation zeigt folgende Abbildung:

Technische Abbildung aus der englischen Quelle, PDF-S. 6.
Die ISP-Firmware gliedert sich in die Anwendungsschicht librkaiq.so und die Treiberschicht mit ISP- und Peripherietreibern, einschließlich Sensor, VCM und Blitzlicht.
librkaiq.so enthält zahlreiche Algorithmusbibliotheken, etwa für 3A und HDR. Diese liegen als statische Bibliotheken vor und werden schließlich zu librkaiq.so gelinkt. Außer für die 3A-Bibliotheken librkaiq_ae/awb/af.a, deren Quellcode nicht bereitgestellt wird, ist der Quellcode der übrigen Basisbibliotheken offen.
Die Algorithmusbibliotheken sämtlicher vom Framework unterstützten Module können kundeneigene Algorithmen verwenden. Abgesehen von der anzupassenden 3A-Bibliothek können jedoch normalerweise die von RK bereitgestellten Standardbibliotheken eingesetzt werden.
1.3 Entwicklungsmodi
Die folgenden drei Entwicklungsmodi werden unterstützt:
Die 3A-Bibliothek verwendet die RK-Bibliothek. Dabei stehen die 3A-Bibliotheks-APIs von RK zur Verfügung, darunter rk_aiq_user_api2_ae.h, rk_aiq_user_api2_af.h und rk_aiq_user_api2_awb.h.
Die 3A-Bibliothek verwendet teilweise die RK-Bibliothek und teilweise eine eigene Bibliothek. Beispielsweise kann AE eine eigene Bibliothek verwenden, während AWB die RK-Bibliothek nutzt.
Eigene 3A-Bibliothek und RK-Bibliothek werden gleichzeitig verwendet. Läuft beispielsweise eine eigene AE-Bibliothek zusammen mit der RK-Bibliothek, wird zuerst RK AE und anschließend die eigene AE-Bibliothek ausgeführt. Deren Ergebnis überschreibt das RK-AE-Ergebnis. Dieser Modus vereinfacht die Entwicklung: Die eigene Bibliothek muss nicht alle vom AIQ-Framework benötigten Ergebnisse liefern; einen Teil kann RK AE bereitstellen.
1.4 Softwareabläufe
1.4.1 Grundablauf
Der RK-3A-Algorithmus muss nicht ausdrücklich registriert werden, da dies implizit im AIQ-Framework geschieht. Die Registrierung eines eigenen 3A-Algorithmus wird am Beispiel von AE durch folgenden Pseudocode veranschaulicht:
// Initialize the usage scenario, not required, defaults to normal, day, which is used to select scene parameters in the JSON IQ file
if (work_mode == RK_AIQ_WORKING_MODE_NORMAL)
ret = rk_aiq_uapi2_sysctl_preInit_scene(sns_entity_name, "normal",
"day");
else
ret = rk_aiq_uapi2_sysctl_preInit_scene(sns_entity_name, "hdr", "day");
// Depending on whether the usage pattern is surround view or single camera, initialize Group Ctx or AIQ ctx
if (!group_mode)
ctx->aiq_ctx = rk_aiq_uapi2_sysctl_init(sns_entity_name, ctx->iqpath,
NULL, NULL);
else {
rk_aiq_camgroup_instance_cfg_t camgroup_cfg;
memset(&camgroup_cfg, 0, sizeof(camgroup_cfg));
camgroup_cfg.sns_num = 1;
camgroup_cfg.sns_num++;
camgroup_cfg.sns_ent_nm_array[0] = sns_entity_name;
camgroup_cfg.sns_ent_nm_array[1] = sns_entity_name2;
camgroup_cfg.config_file_dir = ctx->iqpath;
camgroup_cfg.overlap_map_file = "srcOverlapMap.bin";
ctx->camgroup_ctx = rk_aiq_uapi2_camgroup_create(&camgroup_cfg);
}
// If you need to register a custom AE algorithm, register a custom AE callback
rk_aiq_customeAe_cbs_t cbs = {
.pfn_ae_init = custom_ae_init,
.pfn_ae_run = custom_ae_run,
.pfn_ae_ctrl = custom_ae_ctrl,
.pfn_ae_exit = custom_ae_exit,
};
rk_aiq_uapi2_customAE_register((const rk_aiq_sys_ctx_t*)(ctx->camgroup_ctx),
&cbs);
// If you need to run a third-party AE algorithm, enable the custom AE algorithm. Third-party AE library registration interface, single camera and surround view shared.
//In the current AIQ version, both the default RK algorithm and the third-party algorithm will run, and if necessary, you can call rk_aiq_uapi2_sysctl_enableAxlib to force off RK AE.
rk_aiq_uapi2_customAE_enable((const rk_aiq_sys_ctx_t*)(ctx->camgroup_ctx),
true);
// Prepare the ISP pipeline and configure initialization parameters such as ISP and Sensor
// If necessary, you can call the module API before prepare to modify the module initialization parameters, otherwise the initialization parameters are specified by the IQ file, or are specified by hard code in AIQ, or the chip reset value
if (!group_mode) {
rk_aiq_uapi2_sysctl_prepare(ctx->aiq_ctx, ctx->width, ctx->height,
work_mode);
rk_aiq_uapi2_sysctl_start(ctx->aiq_ctx );
} else {
rk_aiq_uapi2_camgroup_prepare(ctx->camgroup_ctx, work_mode);
ret = rk_aiq_uapi2_camgroup_start(ctx->camgroup_ctx);
}
// Turn on the VI data flow and note that no AIQ library interfaces are called in this section.
start_capturing(ctx);
......
// AIQ internal thread loop work: obtain 3A statistics from the driver, call each algorithm library to calculate new ISP parameters, sensor parameters, etc., and issue new parameters to ISP drivers and sensor drivers.
// This procedure calls the API to set parameters for each algorithm module
......
// Stop the data flow first on exit
stop_capturing(ctx);
// Stop AIQ ctx or Group ctx
if (!group_mode)
rk_aiq_uapi2_sysctl_stop(ctx->aiq_ctx, false);
else
rk_aiq_uapi2_camgroup_stop(ctx->camgroup_ctx);
// Anti-register third-party AEs
rk_aiq_uapi2_customAE_unRegister(ctx->aiq_ctx);
// Deinitialize AIQ ctx or Group ctx
if (!group_mode)
rk_aiq_uapi2_sysctl_deinit(ctx->aiq_ctx);
else
rk_aiq_uapi2_camgroup_destroy(ctx->camgroup_ctx);
1.4.2 Interne Abläufe
Die internen Abläufe von AIQ zeigt folgende Abbildung:

Technische Abbildung aus der englischen Quelle, PDF-S. 9.
Thread zum Abrufen der Statistiken: Er liest fortlaufend 3A-Statistiken vom ISP-Treiber und sendet sie an den 3A-Berechnungsthread.
3A-Berechnungsthread: Nach Empfang der Statistiken ruft er die Modulalgorithmen einschließlich Drittanbieter-Callbacks auf, berechnet neue Parameter und sendet diese an den Thread zur ISP-Parametereinstellung und den SOF-Thread.
Thread zur ISP-Parametereinstellung: Nach Empfang einer neuen Einstellungsanforderung übermittelt er die Parameter zum geeigneten Zeitpunkt an den ISP-Treiber.
SOF-Thread: Dieser Thread reagiert auf das Frame-Start-Ereignis des Sensors. Er empfängt neue Belichtungseinstellungen und übergibt die neuen Belichtungsparameter aus der Warteschlange an den Sensortreiber.
2 Entwicklerleitfaden
2.1 AE-Algorithmus registrieren
Der Registrierungsablauf umfasst Registrierung, Aktivierung und Abmeldung des Algorithmus. Die Registrierung erfolgt durch Aufruf von rk_aiq_uapi_customAE_register, die Aktivierung über rk_aiq_uapi_customAE_enable und die Abmeldung durch Aufruf von rk_aiq_uapi_customAE_unRegister.
2.1.1 rk_aiq_uapi2_customAE_register
【Beschreibung】 AE-Algorithmusbibliothek registrieren
【Syntax】
XCamReturn
rk_aiq_uapi2_customAE_register(const rk_aiq_sys_ctx_t* ctx,
rk_aiq_customeAe_cbs_t* cbs)
【Parameter】
| Parametername | Beschreibung | Eingabe/Ausgabe |
|---|---|---|
| ctx | AIQ-Kontextzeiger für Einzelkamera- und Surround-View-Anwendungen | Eingabe |
| cbs | Callback-Funktionszeiger |
【Rückgabewert】
| Rückgabewert | Beschreibung |
|---|---|
| 0 | Erfolgreich |
| Ungleich 0 | Fehler; siehe Fehlercodetabelle |
2.1.2 rk_aiq_uapi2_customAE_enable
【Beschreibung】 AE-Algorithmusbibliothek registrieren
【Syntax】
XCamReturn
rk_aiq_uapi2_customAE_enable(const rk_aiq_sys_ctx_t* ctx, bool enable);
【Parameter】
| Parametername | Beschreibung | Eingabe/Ausgabe |
|---|---|---|
| ctx | AIQ-Kontextzeiger für Einzelkamera- und Surround-View-Anwendungen | Eingabe |
| enable | Aktivierungsbit des AE-Algorithmus | Eingabe |
【Rückgabewert】
| Rückgabewert | Beschreibung |
|---|---|
| 0 | Erfolgreich |
| Ungleich 0 | Fehler; siehe Fehlercodetabelle |
2.1.3 rk_aiq_uapi2_customAE_unRegister
【Beschreibung】 AE-Algorithmusbibliothek registrieren
【Syntax】
XCamReturn
rk_aiq_uapi2_customAE_unRegister(const rk_aiq_sys_ctx_t* ctx);
【Parameter】
| Parametername | Beschreibung | Eingabe/Ausgabe |
|---|---|---|
| ctx | AIQ-Kontextzeiger für Einzelkamera- und Surround-View-Anwendungen | Eingabe |
【Rückgabewert】
| Rückgabewert | Beschreibung |
|---|---|
| 0 | Erfolgreich |
| Ungleich 0 | Fehler; siehe Fehlercodetabelle |
2.1.4 Callback-Funktionen und Datentypen
In der selbst entwickelten AE-Bibliothek müssen folgende Callback-Funktionen implementiert werden:
rk_aiq_customeAe_cbs_t cbs = {
.pfn_ae_init = custom_ae_init,
.pfn_ae_run = custom_ae_run,
.pfn_ae_ctrl = custom_ae_ctrl,
.pfn_ae_exit = custom_ae_exit,
};
| Mitgliedsname | Beschreibung |
|---|---|
| pfn_ae_init | Funktionszeiger des Callbacks zur Initialisierung von AE |
| pfn_ae_run | Funktionszeiger des Callbacks zur Ausführung von AE |
| pfn_ae_ctrl | Zeiger auf den Callback zur Steuerung des internen AE-Zustands; dieser Parameter ist derzeit nicht wirksam. |
| pfn_ae_exit | Funktionszeiger des Callbacks zur Freigabe von AE |
2.1.4.1 custom_ae_init
【Beschreibung】 AE-Algorithmusbibliothek initialisieren
【Syntax】
int32_t custom_ae_init(void* ctx);
【Parameter】
| Parametername | Beschreibung | Eingabe/Ausgabe |
|---|---|---|
| ctx | AIQ-Kontextzeiger für Einzelkamera- und Surround-View-Anwendungen | Eingabe |
【Rückgabewert】
| Rückgabewert | Beschreibung |
|---|---|
| 0 | Erfolgreich |
| Ungleich 0 | Fehler; siehe Fehlercodetabelle |
2.1.4.2 custom_ae_run
【Beschreibung】 AE-Algorithmusbibliothek ausführen, um Belichtungszeit und Verstärkung des Sensors sowie die digitale ISP-Verstärkung zu berechnen und die Hardwarekonfigurationsparameter zu aktualisieren
【Syntax】
int32_t custom_ae_run(void* ctx, const rk_aiq_customAe_stats_t* pstAeInfo,
rk_aiq_customeAe_results_t* pstAeResult);
【Parameter】
| Parametername | Beschreibung | Eingabe/Ausgabe |
|---|---|---|
| ctx | AIQ-Kontextzeiger für Einzelkamera- und Surround-View-Anwendungen | Eingabe |
| pstAeInfo | Eingabezeiger auf Daten mit AE-Hardwarestatistiken und den dazu synchronisierten Belichtungsinformationen; Eingabe |
|
| pstAeResult | Ausgabezeiger auf das Algorithmusergebnis mit Sensor-Belichtungsparametern und aktualisierten Hardwarekonfigurationsparametern |
Ausgabe |
【Rückgabewert】
| Rückgabewert | Beschreibung |
|---|---|
| 0 | Erfolgreich |
| Ungleich 0 | Fehler; siehe Fehlercodetabelle |
2.1.4.3 custom_ae_ctrl
【Beschreibung】 Internen Zustand der Algorithmusbibliothek ändern; derzeit nicht verwendbar
【Syntax】
int32_t custom_ae_ctrl(void* ctx, uint32_t u32Cmd, void *pValue);
【Parameter】
| Parametername | Beschreibung | Eingabe/Ausgabe |
|---|---|---|
| ctx | AIQ-Kontextzeiger für Einzelkamera- und Surround-View-Anwendungen | Eingabe |
【Rückgabewert】
| Rückgabewert | Beschreibung |
|---|---|
| 0 | Erfolgreich |
| Ungleich 0 | Fehler; siehe Fehlercodetabelle |
2.1.4.4 custom_ae_exit
【Beschreibung】 AE-Algorithmusbibliothek abmelden
【Syntax】
int32_t custom_ae_exit(void* ctx);
【Parameter】
| Parametername | Beschreibung | Eingabe/Ausgabe |
|---|---|---|
| ctx | AIQ-Kontextzeiger für Einzelkamera- und Surround-View-Anwendungen | Eingabe |
【Rückgabewert】
| Rückgabewert | Beschreibung |
|---|---|
| 0 | Erfolgreich |
| Ungleich 0 | Fehler; siehe Fehlercodetabelle |
2.1.5 Eingabedatenparameter
【Beschreibung】
Die Eingabedatenparameter einer Drittanbieter-AE umfassen Bildhelligkeitsstatistiken und zugehörige Belichtungsparameter. Sie unterstützen Einzelkamera- und Surround-View-Anwendungen. 【Definition】
#define RK_AIQ_MAX_HDR_FRAME (3)
typedef struct rk_aiq_customAe_stats_s
{
//hw stats
Aec_Stat_Res_t rawae_stat[RK_AIQ_MAX_HDR_FRAME]; // before awb gain
Aec_Stat_Res_t extra; // after awb gain, lsc, TMO
//exposure
RkAiqExpParamComb_t linear_exp;
RkAiqExpParamComb_t hdr_exp[RK_AIQ_MAX_HDR_FRAME];
struct rk_aiq_customAe_stats_s* next; // for surround view(multiple cams)
} rk_aiq_customAe_stats_t;
【Mitglieder】
| Mitgliedsname | Beschreibung |
|---|---|
| rawae_stat[RK_AIQ_MAX_HDR_FRAME] | Vorgeschaltete Hardwarestatistiken auf Basis von RAW-Bildern; bis zu 3 RAW-Bilder können erfasst werden. Im linearen Belichtungsmodus ist nur rawae_stat [0] gültig. Im HDR-Belichtungsmodus stehen rawae_stat [0-2] für die Hardwarestatistiken kurzer, mittlerer und langer Bilder. |
| extra | Nachgeschaltete Hardwarestatistiken auf Basis von RAW-Bildern; im HDR-Modus Statistiken der zusammengeführten Bilder. |
| linear_exp | Belichtungsparameter im linearen Modus, synchron zu den Hardwarestatistiken |
| hdr_exp[RK_AIQ_MAX_HDR_FRAME] | Mit den Hardwarestatistiken synchronisierte HDR-Belichtungsparameter; 0~2 stehen für kurze, mittlere beziehungsweise lange Bilder. |
| next | Nur für Surround-View-Mehrkamera-Anwendungen gültig. Der Zeiger verweist auf die Eingabedatenparameter der nächsten Kamera; die entsprechenden Parametermitglieder sind bei allen Kameras gleich. |
【Beschreibung】
Die Eingabedatenparameter umfassen zwei Arten von Parametern: die Hardwarestatistiken des Bildes und die dazugehörigen Belichtungsparameter.
Die Eingabedatenparameter unterstützen Einzelkamera- und Surround-View-Mehrkamera-Anwendungen. Über den Zeiger next lassen sich die Eingabedaten mehrerer Kameras abrufen.
Der Datentyp der Bildhardwarestatistiken ist Aec_Stat_Res_t, derjenige der Belichtungsinformationen RkAiqExpParamComb_t. Einzelheiten enthält Rockchip_Development_Guide_ISP30.
RK_AIQ_MAX_HDR_FRAME gibt an, dass RK HDR mit bis zu 3 Bildern unterstützt.
2.1.6 Ausgabeparameter des Algorithmusergebnisses
【Beschreibung】
Die Ausgabeparameter einer Drittanbieter-AE umfassen Belichtungsparameter, Hardwareparameter usw. und unterstützen Einzelkamera- und Surround-View-Anwendungen.
【Definition】
#define RK_AIQ_MAX_HDR_FRAME (3)
typedef struct rk_aiq_i2c_data_s {
bool bValid;
unsigned int nNumRegs;
unsigned int* pRegAddr;
unsigned int* pRegValue;
unsigned int* pDelayFrames;
} rk_aiq_i2c_data_t;
typedef struct rk_aiq_customeAe_results_singel_s
{
//exposure result (including:reg value & real value)
RkAiqExpParamComb_t linear_exp;
RkAiqExpParamComb_t hdr_exp[RK_AIQ_MAX_HDR_FRAME];
rk_aiq_i2c_data_t exp_i2c_params;
//hw result
struct window meas_win;
unsigned char meas_weight[15 * 15];
struct rk_aiq_customeAe_results_singel_s* next; // for surround view(multiple
cams)
} rk_aiq_customeAe_results_single_t;
typedef struct rk_aiq_customeAe_results_s
{
//exposure result (including:reg value & real value)
RkAiqExpParamComb_t linear_exp;
RkAiqExpParamComb_t hdr_exp[RK_AIQ_MAX_HDR_FRAME];
rk_aiq_i2c_data_t exp_i2c_params;
//hw result
struct window meas_win;
unsigned char meas_weight[15 * 15];
RkAiqIrisParamComb_t Iris;
uint32_t frame_length_lines;
bool is_longfrm_mode;
struct rk_aiq_customeAe_results_singel_s* next; // for surround view(multiple
cams)
} rk_aiq_customeAe_results_t;
【Mitglieder】
| Mitglied | Untergeordnete Mitglieder | Beschreibung |
|---|---|---|
| linear_exp | exp_real_params exp_sensor_params |
Belichtungsparameter im linearen Modus mit tatsächlichem Belichtungswert (exp_real_params) und Registerwert im RK-Format (exp_sensor_params) |
| hdr_exp[RK_AIQ_MAX_HDR_FRAME] | exp_real_params exp_sensor_params |
HDR-Belichtungsparameter mit tatsächlichem Belichtungswert (exp_real_params) und Registerwert im RK-Format (exp_sensor_params). 0~2 bezeichnen die Belichtungsparameter kurzer, mittlerer und langer Bilder. Bei HDR2-Zusammenführung sind die Elemente 0 und 1 gültig, bei HDR3 die Elemente 0-2. |
| exp_i2c_params | bValid nNumRegs pRegAddr pRegValue pDelayFrames |
Bei bValid=true werden die I2C-Registerwerte über exp_i2c_params gesetzt. Bei bValid=false werden die Registerwertparameter im RK-Format aus linear_exp beziehungsweise hdr_exp zum Setzen der Register verwendet. |
| frame_length_lines | VTS-Wert des Sensors, der mit der Bildrateneinstellung zusammenhängt | |
| is_longfrm_mode | Aktivierung des Langbildmodus: true aktiviert, false deaktiviert ihn. Dieser Parameter ist nur im HDR-Modus gültig. |
|
| Iris | PIris DCIris | Blendeneinstellungen, einschließlich P- und DC-Blendenparametern |
| meas_win | h_offs v_offs h_size v_size |
Bereich des Hardwarestatistikfensters. h/v_offs bezeichnet den horizontalen/vertikalen Versatz der linken oberen Fensterecke gegenüber der linken oberen Ecke des lichtempfindlichen Bereichs. h/v_size bezeichnet die horizontale beziehungsweise vertikale Fenstergröße. |
| meas_weight | Gewichtungsparameter der Hardwarestatistik: 15X15 Gewichte mit Wertebereich 0~32 | |
| next | Außerhalb von Surround View muss der Zeiger leer sein. Sollen in einer Surround-View-Anwendung mehrere Kameras dasselbe Algorithmusergebnis verwenden, bleibt er ebenfalls leer: Nur die Mitglieder in rk_aiq_customeAe_results_t werden gesetzt, und alle Kameras verwenden dieses Ergebnis. Benötigen die Kameras unterschiedliche Ergebnisse, muss Speicher für den Zeiger next reserviert und das Algorithmusergebnis der nächsten Kamera ergänzt werden. |
【Hinweise】
Die Algorithmusergebnisse unterstützen Einzelkamera- und Surround-View-Mehrkamera-Anwendungen. Bei Surround View können gemeinsame oder mehrere unterschiedliche Algorithmusergebnisse verwendet werden.
meas_win beschreibt den Fensterbereich der AE-Hardwarestatistik. Hardwarestatistiken wie Kachelhelligkeit und Histogramm werden auf Basis dieses Bereichs ermittelt. Bei HDR-Mehrfachbelichtung ist das Statistikfenster standardmäßig für alle Bilder gleich.
meas_weight ist der für gewichtete Histogrammstatistiken benötigte Gewichtungsparameter. Er entspricht im Allgemeinen der Softwaregewichtung zur Berechnung des gewichteten Mittelwerts der Kachelhelligkeit.
Beim Einstellen der Belichtung müssen tatsächlicher Belichtungswert und zugehöriger Registerwert konfiguriert werden. Der tatsächliche Wert umfasst Belichtungszeit in Sekunden, Belichtungsverstärkung als Faktor und DCG-Zustand (0:LCG, 1:HCG) für andere Algorithmusmodule. Der Belichtungsregisterwert wird an den Sensor übergeben und unterstützt RK- sowie Drittanbieterformate.
Für Belichtungsregisterwerte werden RK- und Drittanbieterformate unterstützt. Registerwerte im RK-Format muss der Kunde nicht setzen; sie werden intern aus dem tatsächlichen Belichtungswert umgerechnet. Dafür muss bValid in exp_i2c_params false sein. Drittanbieterformate erfordern das Setzen der benötigten Registerwerte und Adressen durch den Benutzer sowie bValid=true in exp_i2c_params.
Sollen bei Surround View alle Kameras dieselben Belichtungs- und Hardwarewerte verwenden, setzen Sie nur die Parameter in rk_aiq_customeAe_results_t; next bleibt leer. Benötigt jede Kamera andere Werte, setzen Sie die Ergebnisse der Reihe nach und reservieren Sie Speicher, sodass next auf das Ergebnis der nächsten Kamera verweist. Beachten Sie die Unterschiede zwischen rk_aiq_customeAe_results_t und rk_aiq_customeAe_results_single_t: Erstere Struktur enthält zusätzliche Ergebnisparameter, die gemeinsam gelten und standardmäßig für alle Kameras auf denselben Wert gesetzt werden.
Der Datentyp der Bildhardwarestatistik ist Aec_Stat_Res_t, derjenige der RK-Belichtungsinformationen RkAiqExpParamComb_t und derjenige der RK-Blendenparameter RkAiqIrisParamComb_t. Einzelheiten enthält Rockchip_Development_Guide_ISP30.
2.2 AWB-Algorithmus registrieren
Der RK-AWB-Algorithmus implementiert die Registrierungsfunktion rk_aiq_uapi_customAWB_register. Der Benutzer registriert damit seinen eigenen AWB-Algorithmus beim ISP. Das Beispiel entspricht der Registrierung der AE-Algorithmusbibliothek. Aktiviert wird der eigene AWB-Algorithmus über rk_aiq_uapi_customAWB_enable.
Hinweis: Für eine reibungslose Portierung wird empfohlen, Folgendes zu lesen:
(1) Folgende Inhalte aus „Rockchip_Color_Optimization_Guide“:
(a) Abschnitt „2 AWB/2.1 Function Description“ zur Funktionsbeschreibung sowie das AWB-Ablaufdiagramm.
(b) AWB-Ablaufdiagramm zur Weißpunkterkennung im Abschnitt „2 AWB/2.2 White Spot Detection Process for Key Parameters/Hardware“.
(2) Abschnitt „Statistics / Data Types / rk_aiq_isp_awb_stats2_v3x_t“ in Rockchip_Development_Guide_ISP30.
2.2.1 API
2.2.1.1 rk_aiq_uapi_customAWB_register
【Beschreibung】 Eigenen AWB-Algorithmus registrieren.
【Syntax】
XCamReturn
rk_aiq_uapi_customAWB_register(const rk_aiq_sys_ctx_t* ctx,
rk_aiq_customeAwb_cbs_t* cbs);
【Parameter】
| Parametername | Beschreibung | Eingabe/Ausgabe |
|---|---|---|
| ctx | AIQ-Kontextzeiger | Eingabe |
| cbs | Beim ISP registrierter Callback des eigenen AWB-Algorithmus; siehe die nachfolgende Strukturbeschreibung rk_aiq_customeAwb_cbs_t. Eingabe |
【Rückgabewert】
| Rückgabewert | Beschreibung |
|---|---|
| 0 | Erfolgreich |
| Ungleich 0 | Fehler; siehe Fehlercodetabelle |
【Hinweis】
Zuerst muss rk_aiq_uapi_sysctl_init aufgerufen werden, um den AIQ-Kontextzeiger ctx zu initialisieren.
【Voraussetzungen】
Headerdatei: rk_aiq_user_api_custom_awb.h
Bibliotheksdatei: librkaiq.so
2.2.1.2 rk_aiq_uapi_customAWB_enable
【Beschreibung】 Eigenen AWB-Algorithmus aktivieren.
【Syntax】
XCamReturn
rk_aiq_uapi_customAWB_enable(const rk_aiq_sys_ctx_t* ctx, bool enable);
【Parameter】
| Parametername | Beschreibung | Eingabe/Ausgabe |
|---|---|---|
| ctx | AIQ-Kontextzeiger | Eingabe |
| enable | Aktivierungsschalter für eigene AWB: Wert: true / false; Standard: false |
Eingabe |
【Rückgabewert】
| Rückgabewert | Beschreibung |
|---|---|
| 0 | Erfolgreich |
| Ungleich 0 | Fehler; siehe Fehlercodetabelle |
【Hinweis】
Nach abgeschlossener Registrierung des eigenen AWB-Algorithmus durch rk_aiq_uapi_customAWB_register aufrufen.
【Voraussetzungen】
Headerdatei: rk_aiq_user_api_custom_awb.h
Bibliotheksdatei: librkaiq.so
2.2.1.3 rk_aiq_uapi_customAWB_unRegister
【Beschreibung】 Eigenen AWB-Algorithmus abmelden.
【Syntax】
XCamReturn
rk_aiq_uapi_customAWB_unRegister(const rk_aiq_sys_ctx_t* ctx);
【Parameter】
| Parametername | Beschreibung | Eingabe/Ausgabe |
|---|---|---|
| ctx | AIQ-Kontextzeiger | Eingabe |
【Rückgabewert】
| Rückgabewert | Beschreibung |
|---|---|
| 0 | Erfolgreich |
| Ungleich 0 | Fehler; siehe Fehlercodetabelle |
【Hinweis】
Nach abgeschlossener Registrierung des eigenen AWB-Algorithmus durch rk_aiq_uapi_customAWB_register aufrufen.
【Voraussetzungen】
Headerdatei: rk_aiq_user_api_custom_awb.h
Bibliotheksdatei: librkaiq.so
2.2.2 Datentypen
2.2.2.1 Bei der ISP-Bibliothek registrierter Callback
2.2.2.1.1 rk_aiq_customeAwb_cbs_t
【Beschreibung】 Definiert die Callback-Funktionen, die der eigene AWB-Algorithmus bei der ISP-Bibliothek registriert.
【Definition】
typedef struct rk_aiq_customeAwb_cbs_s
{
int32_t (*pfn_awb_init)(void* ctx);
int32_t (*pfn_awb_run)(void* ctx, const rk_aiq_customAwb_stats_t* pstAwbInfo,
rk_aiq_customeAwb_results_t* pstAwbResult);
int32_t (*pfn_awb_run)(void* ctx, uint32_t u32Cmd, void *pValue);
int32_t (*pfn_awb_exit)(void* ctx);
} rk_aiq_customeAwb_cbs_t;
【Mitglied】
| Mitgliedsname | Beschreibung |
|---|---|
| pfn_awb_init | Initialisierung; der erste Initialisierungsaufruf erfolgt durch AwbDemoPrepare. |
| pfn_awb_ctrl | Funktionszeiger zur Steuerung des internen Zustands der eigenen AWB; derzeit nicht unterstützt. |
| pfn_awb_run | Funktionszeiger zur Ausführung der eigenen AWB; siehe die Beschreibungen von rk_aiq_customAwb_stats_t und rk_aiq_customeAwb_results_t. Laut Quelle bezeichnet pstAwbResult==nullptr die Initialisierung, bei der pstAwbResult konfiguriert wird. Andernfalls ist die Berechnung von pstAwbResult aus den Statistiken pstAwbInfo zu implementieren. Bei Surround View mit identischen Einstellungen für alle Kameras gilt derselbe Ablauf. Andernfalls müssen pstAwbResult->next für die erste Kamera, pstAwbResult->next->next für die zweite Kamera usw. gesetzt werden. Hinweis: pstAwbResult gehört zu Kamera 0. |
| pfn_awb_exit | Reservierten Speicher usw. freigeben; Aufruf durch AwbDemoDestroyCtx. |
【Hinweis】
Die obigen Callbacks müssen in der eigenen AWB-Bibliothek implementiert werden.
Für die Implementierung von pfn_awb_run dient der Pseudocode in custom_awb_run in third_party_awb_algo.cpp als Referenz.
2.2.2.2 Statistiken
2.2.2.2.1 rk_aiq_customAwb_stats_t
【Beschreibung】 Definiert die Weißabgleich-Hardwarestatistiken, die der eigene AWB-Algorithmus erhält.
【Definition】
typedef struct rk_aiq_customAwb_stats_s
{
rk_aiq_awb_stat_wp_res_light_v201_t light[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM];
int WpNo2[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM];
rk_aiq_awb_stat_blk_res_v201_t blockResult[RK_AIQ_AWB_GRID_NUM_TOTAL];
rk_aiq_awb_stat_wp_res_light_v201_t multiwindowLightResult[4];
rk_aiq_awb_stat_wp_res_v201_t
excWpRangeResult[RK_AIQ_AWB_STAT_WP_RANGE_NUM_V201];
unsigned int WpNoHist[RK_AIQ_AWB_WP_HIST_BIN_NUM];
struct rk_aiq_customAwb_stats_s* next;
} rk_aiq_customAwb_stats_t;
【Mitglied】
| Mitgliedsname | Beschreibung |
|---|---|
| light | Weißpunktstatistiken verschiedener Lichtquellen im Hauptfenster; höchstens RK_AIQ_AWB_MAX_WHITEREGIONS_NUM Lichtquellen. |
| WpNo2 | Anzahl der Weißpunkte im Schnittbereich von XY- und UV-Domäne für verschiedene Lichtquellen im Hauptfenster, ohne Nachkommastellen. |
| blockResult | RGB-Akkumulation je Block; das Bild ist gleichmäßig in insgesamt 15x15 (RK_AIQ_AWB_GRID_NUM_TOTAL) Blöcke aufgeteilt. |
| multiwindowLightResult | Weißpunktstatistiken verschiedener Lichtquellen in mehreren Unterfenstern. Nur die ersten 4 Lichtquellen werden erfasst; durch Zeitmultiplex können alle erfasst werden. Höchstens 4 Unterfenster. |
| excWpRangeResult | Statistiken der Punkte innerhalb von excludeWpRange. Nur die ersten vier excludeWpRange-Bereiche werden erfasst; höchstens 4 Bereiche. |
| WpNoHist | Anzahl der Weißpunkte je Klasse des Weißpunkthistogramms, ohne Nachkommastellen. Ob der XY-Rahmen oder der Rahmen in XY erfasst wird, bestimmt xyRangeTypeForWpHist. Die mehrdeutige Beschreibung der Quelle bleibt erhalten. |
| next | Nur bei Surround-View-Mehrkamera-Anwendungen relevant; verweist auf die Weißabgleich-Hardwarestatistiken der nächsten Kamera. |
【Hinweis】
Einzelheiten zu den Mitgliedern stehen in „Statistics/Data Types“ von Rockchip_Development_Guide_ISP30 unter der Definition der Strukturmitglieder von rk_aiq_isp_awb_stats2_v3x_t.
2.2.2.3 Berechnungsergebnis
2.2.2.3.1 rk_aiq_customeAwb_results_t
【Beschreibung】 Definiert Konfigurationsparameter und Berechnungsergebnisse des eigenen AWB-Algorithmus.
【Definition】
typedef struct rk_aiq_customeAwb_results_s
{
bool IsConverged; true: converged; false: not converged
rk_aiq_wb_gain_t awb_gain_algo;
float awb_smooth_factor;
rk_aiq_customAwb_hw_cfg_t awbHwConfig;
rk_aiq_customeAwb_single_results_t *next;//defalut vaue is nullptr,which means all cameras with the same cfg;
} rk_aiq_customeAwb_results_t;
【Mitglied】
| Mitgliedsname | Beschreibung |
|---|---|
| IsConverged | Gibt an, ob der aktuelle AWBgain konvergiert ist: true konvergiert, false nicht konvergiert; Standard: false. Muss konfiguriert werden. |
| awb_gain_algo | Vom eigenen AWB-Algorithmus ermittelte Verstärkungen der Farbkanäle R, GR, GB, B. Standard: {1.0, 1.0, 1.0, 1.0}, keine Weißabgleichkorrektur. Muss konfiguriert werden. |
| awb_smooth_factor | Bildübergreifender Glättungsfaktor für CCM und LSC. Größere Werte verringern das Gewicht des aktuellen Bildes. Wertebereich: [0,1]; Standard: 0.5. Konfiguration kann entfallen. |
| awbHwConfig | Hardwarekonfigurationsparameter des eigenen AWB-Algorithmus. Die meisten Parameter sowie modulspezifische Parameter müssen korrekt gesetzt werden. Andere besitzen bereits Standardwerte und müssen nicht aktualisiert werden. Einzelheiten siehe rk_aiq_customAwb_hw_cfg_t weiter unten. |
| next | Außerhalb von Surround View nicht relevant. Sollen mehrere Kameras dasselbe Algorithmusergebnis verwenden, bleibt der Zeiger leer und alle verwenden das Ergebnis in rk_aiq_customeAwb_results_t. Werden unterschiedliche Mitgliedergebnisse von rk_aiq_customeAwb_single_results_t benötigt, muss Speicher für next reserviert und das Ergebnis der nächsten Kamera ergänzt werden. Die entsprechenden Mitglieder von next ersetzen dann diejenigen in rk_aiq_customeAwb_results_t. Die Definition von rk_aiq_customeAwb_single_results_t folgt unten. |
2.2.2.3.2 rk_aiq_customeAwb_single_results_t
【Beschreibung】 Definiert Konfigurationsparameter und Berechnungsergebnisse jeder Kamera im Surround-View-Modus des eigenen AWB-Algorithmus. Außerhalb von Surround View nicht relevant.
【Definition】
typedef struct rk_aiq_customeAwb_single_results_s
{
rk_aiq_wb_gain_t awb_gain_algo;//for each camera
rk_aiq_customAwb_single_hw_cfg_t awbHwConfig;//for each camera
struct rk_aiq_customeAwb_single_results_s *next;
} rk_aiq_customeAwb_single_results_t;
【Mitglied】
| Mitgliedsname | Beschreibung |
|---|---|
| awb_gain_algo | Gleiche Bedeutung wie awb_gain_algo in rk_aiq_customeAwb_results_s |
| awbHwConfig | Gleiche Bedeutung wie das gleichnamige Mitglied der Struktur awbHwConfig in rk_aiq_customeAwb_results_s |
| next | Laut Quelle unbenutzt; gleiche Bedeutung wie das dort „anext“ genannte Mitglied in rk_aiq_customeAwb_results_s. |
2.2.2.3.3 rk_aiq_wb_gain_t
Siehe die Strukturdefinition rk_aiq_wb_gain_t im Abschnitt „AWB/Function-Level API/Data Type“ von Rockchip_Development_Guide_ISP32; der ISP32-Querverweis der Quelle bleibt erhalten.
2.2.2.3.4 rk_aiq_customAwb_hw_cfg_t
【Beschreibung】 Definiert Hardwarekonfigurationsparameter des eigenen AWB-Algorithmus, darunter Haupt-/Mehrfachfensterkonfiguration und Auswahl des Statistikbildes.
【Definition】
typedef struct rk_aiq_customAwb_hw_cfg_s {
bool awbEnable;
bool lscBypEnable;
uint8_t frameChoose;
unsigned short windowSet[4];
unsigned char lightNum;
unsigned short maxR;
unsigned short minR;
unsigned short maxG;
unsigned short minG;
unsigned short maxB;
unsigned short minB;
unsigned short maxY;
unsigned short minY;
bool uvDetectionEnable;
rk_aiq_awb_uv_range_para_t uvRange_param[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM];
bool xyDetectionEnable;
rk_aiq_rgb2xy_para_t rgb2xy_param;
rk_aiq_awb_xy_range_para_t xyRange_param[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM];
bool threeDyuvEnable;
unsigned short threeDyuvIllu[RK_AIQ_AWB_YUV_LS_PARA_NUM];
short icrgb2RYuv_matrix[12];
rk_aiq_awb_rt3dyuv_range_para_t
ic3Dyuv2Range_param[RK_AIQ_AWB_YUV_LS_PARA_NUM];
bool multiwindow_en;
unsigned short multiwindow[RK_AIQ_AWB_MULTIWINDOW_NUM_V201][4];
} rk_aiq_customAwb_hw_cfg_t;
【Mitglied】
| Mitgliedsname | Beschreibung |
|---|---|
| awbEnable | Aktivierungsschalter der AWB-Statistik: true aktiviert, false deaktiviert; Standard: true. |
| lscBypEnable | LSC-Bypass im AWB-Statistikpfad: true aktiviert den Bypass ohne LSC; false verwendet LSC. Standard: false. |
| frameChoose | Eingabebild der AWB-Hardwarestatistik. Werte {0,1,2} bezeichnen kurze, mittlere und lange Bilder. Standard im linearen Modus: 0; im Modus mit hohem Dynamikumfang: 1. |
| windowSet | AWB-Hauptfenster: windowSet=[h_offset,v_offset,h_size,v_size], h horizontal, v vertikal. Wertebereich: [0x0, 0xfff]. h_size* v_size muss kleiner als 5120*2880 sein. Standard: {0, 0, RawWidth, RawHeight}, gesamtes Fenster. Ohne Fensteränderung ist keine Konfiguration erforderlich. |
| lightNum | Anzahl zu erfassender Lichtquellen; Wertebereich [0, 7], Standard 7. Entsprechend der bei der Kalibrierung verwendeten Anzahl konfigurieren; das Kalibrierwerkzeug gibt den Wert aus. |
| maxR | Obergrenze des R-Kanals für die Weißpunkterkennung bei RGB-Statistiken. Wertebereich: [0x0, 0xff]; Standard: 230. |
| minR | Untergrenze des R-Kanals für die Weißpunkterkennung bei RGB-Statistiken. Wertebereich: [0x0, 0xff]; Standard: 3. |
| maxG | Obergrenze des G-Kanals für die Weißpunkterkennung bei RGB-Statistiken. Wertebereich: [0x0, 0xff]; Standard: 230. |
| minG | Untergrenze des G-Kanals für die Weißpunkterkennung bei RGB-Statistiken. Wertebereich: [0x0, 0xff]; Standard: 3. |
| maxB | Obergrenze des B-Kanals für die Weißpunkterkennung bei RGB-Statistiken. Wertebereich: [0x0, 0xff]; Standard: 230. |
| minB | Untergrenze des B-Kanals für die Weißpunkterkennung bei RGB-Statistiken. Wertebereich: [0x0, 0xff]; Standard: 3. |
| maxY | Obergrenze des Y-Kanals für die Weißpunkterkennung bei RGB-Statistiken. Wertebereich: [0x0, 0xff]; Standard: 230. |
| minY | Untergrenze des Y-Kanals für die Weißpunkterkennung bei RGB-Statistiken. Wertebereich: [0x0, 0xff]; Standard: 3. |
| uvDetectionEnable | Weißpunkterkennung in der UV-Domäne: true aktiviert sie, sodass Punkte innerhalb des UV-Weißpunktbereichs als Weißpunkte gelten. Bei false gelten alle Punkte als Weißpunkte. Standard: true. |
| uvRange_param | Begrenzungsparameter des viereckigen UV-Weißpunktbereichs; bis zu 7 Lichtquellen. Modulspezifisch und bei uvDetectionEnable=ture korrekt zu konfigurieren; die Schreibweise „ture“ stammt aus der Quelle. Nicht festgelegte Parameter liefert das Kalibrierwerkzeug. Siehe rk_aiq_awb_uv_range_para_t. |
| xyDetectionEnable | Weißpunkterkennung in der XY-Domäne: true aktiviert sie, sodass Punkte innerhalb des XY-Weißpunktbereichs als Weißpunkte gelten. Bei false gelten alle Punkte als Weißpunkte. Standard: true. |
| rgb2xy_param | Modulspezifische Umrechnungsparameter von RGB nach XY. Bei xyDetectionEnable=true korrekt konfigurieren; nicht festgelegte Parameter liefert das Kalibrierwerkzeug. Siehe rk_aiq_rgb2xy_para_t. |
| xyRange_param | Begrenzungsparameter des viereckigen XY-Weißpunktbereichs; bis zu 7 Lichtquellen. Modulspezifisch und bei xyDetectionEnable=true korrekt zu konfigurieren. Nicht festgelegte Parameter liefert das Kalibrierwerkzeug. Siehe rk_aiq_awb_xy_range_para_t. |
| threeDyuvEnable | Weißpunkterkennung in der YUV-Domäne: true aktiviert, false deaktiviert. Standard: true. |
| threeDyuvIllu | Wertebereich [0, 7]. 7 deaktiviert die YUV-Weißpunkterkennung, sodass alle Punkte als Weißpunkte gelten. Andere Werte aktivieren die entsprechende Lichtquelle. Standard: {7, 7, 7, 7}. |
| icrgb2RYuv_matrix | Rotationsmatrixparameter von RGB nach YUV, modulspezifisch. Bei aktiviertem threeDyuvEnable und threeDyuvIllu ungleich 7 korrekt konfigurieren; die Quelle schreibt hierfür fehlerhaft „threeDyuvEnable and turethreeDyuvIllu“. Wertebereich letzte Spalte: [-2^12,2^12-1], übrige: [-2^9,2^9-1]. Parameter ohne Festkommaumsetzung sind über das Kalibrierwerkzeug erhältlich. |
| ic3Dyuv2Range_param | Modulspezifische Begrenzungsparameter der YUV-Weißpunkte. Bei aktiviertem threeDyuvEnable und threeDyuvIllu ungleich 7 korrekt konfigurieren; die Quelle schreibt „threeDyuvEnable and turethreeDyuvIllu“. Nicht festgelegte Parameter liefert das dort genannte Indexierungswerkzeug. Siehe rk_aiq_awb_rt3dyuv_range_para_t. |
| multiwindow_en | Aktivierungsschalter der AWB-Mehrfensterstatistik: true aktiviert, false deaktiviert; Standard: false. |
| multiwindow | AWB-Mehrfensterkonfiguration, höchstens 4 Fenster. multiwindow[i]=[h_offset,v_offset,h_size,v_size], h horizontal, v vertikal. Wertebereich: [0x0, 0xfff]. |
| excludeWpRange | Höchstens 7 Weißpunkt- oder Nichtweißpunktbereiche in UV oder XY. Die ersten 4 können als zusätzliche Weißpunktbereiche konfiguriert werden. Modulspezifisch; siehe rk_aiq_awb_exc_range_v201_t. |
| wpDiffWeiEnable | Aktivierung der helligkeitsabhängigen Weißpunktgewichtung: true aktiviert, false deaktiviert; Standard: false. |
| wpDiffwei_y | Helligkeitsintervalle des Weißpunkthistogramms mit insgesamt 9 Endpunkten. Wertebereich: [0x0, 0xff]. Benachbarte Intervalle von wpDiffwei_y müssen Zweierpotenzen sein. |
| wpDiffwei_w | Gewicht jedes Endpunkts von wpDiffwei_y. Wertebereich: [0, 31], 5 Nachkommastellen; Standard: 31. |
| xyRangeTypeForWpHist | Wählt den mittleren oder großen Bereich für das Weißpunkthelligkeitshistogramm. Werte: RK_AIQ_AWB_XY_TYPE_NORMAL_V201 für den mittleren Bereich oder RK_AIQ_AWB_XY_TYPE_BIG_V201 für den großen Bereich. Standard: RK_AIQ_AWB_XY_TYPE_NORMAL_V201. |
| blkWeightEn | Aktivierung der Blockgewichtung; die Quelle schreibt „rue“ für aktiviert, false für deaktiviert. Standard: false. |
| blkWeight | Blockgewicht: Wertebereich [0,63], 6 Nachkommastellen. |
| blkMeasureMode | Wählt, ob alle Punkte oder nur Weißpunkte eines Blocks erfasst werden. RK_AIQ_AWB_BLK_STAT_MODE_ALL_V201 erfasst alle Punkte; RK_AIQ_AWB_BLK_STAT_MODE_REALWP_V201 nur Weißpunkte. Standard: RK_AIQ_AWB_BLK_STAT_MODE_ALL_V201. |
| xyRangeTypeForBlkStatistics | Wählt mittleren oder großen Weißpunktbereich für die Blockstatistik; nur bei blkMeasureMode=RK_AIQ_AWB_BLK_STAT_MODE_REALWP_V201 relevant. RK_AIQ_AWB_XY_TYPE_NORMAL_V201 beziehungsweise RK_AIQ_AWB_XY_TYPE_BIG_V201 bezeichnen Normal- und Großbereich. Standard: RK_AIQ_AWB_XY_TYPE_NORMAL_V201. |
| illIdxForBlkStatistics | Wählt die Lichtquelle für die Weißpunktstatistik; nur bei blkMeasureMode=RK_AIQ_AWB_BLK_STAT_MODE_REALWP_V201 relevant. Zulässige Werte: {RK_AIQ_AWB_BLK_STAT_REALWP_ILL0, RK_AIQ_AWB_BLK_STAT_REALWP_ILL1,RK_AIQ_AWB_BLK_STAT_REALWP_ILL2,RK_AIQ_AWB_BLK_STAT_REALWP_ILL3, RK_AIQ_AWB_BLK_STAT_REALWP_ILL4,RK_AIQ_AWB_BLK_STAT_REALWP_ILL5, RK_AIQ_AWB_BLK_STAT_REALWP_ILL6, RK_AIQ_AWB_BLK_STAT_REALWP_ALL}. |
【Hinweis】
Die in der Quelle schwarz markierten Parameter können mit Standardwerten konfiguriert werden.
Für ein vertieftes Verständnis dieser Parameter siehe folgende Inhalte in Rockchip_Color_Optimization_Guide:
(a) Abschnitt „2 AWB/2.1 Function Description“ zur Funktionsbeschreibung sowie das AWB-Ablaufdiagramm.
(b) AWB-Ablaufdiagramm zur Weißpunkterkennung im Abschnitt „2 AWB/2.2 White Spot Detection Process for Key Parameters/Hardware“.
2.2.2.3.5 rk_aiq_customAwb_hw_cfg_t
【Beschreibung】 Definiert unterschiedliche Hardwarekonfigurationen der einzelnen Kameras im Surround-View-Modus; außerhalb von Surround View nicht relevant.
【Definition】
typedef struct rk_aiq_customAwb_single_hw_cfg_t {
unsigned short windowSet[4];
bool multiwindow_en;
unsigned short multiwindow[RK_AIQ_AWB_MULTIWINDOW_NUM_V201][4];
bool blkWeightEnable;
unsigned char blkWeight[RK_AIQ_AWB_GRID_NUM_TOTAL];
} rk_aiq_customAwb_single_hw_cfg_t;
【Mitglied】
| Mitgliedsname | Beschreibung |
|---|---|
| windowSet | Gleiche Bedeutung wie windowSet in rk_aiq_customAwb_hw_cfg_t |
| multiwindow_en | Gleiche Bedeutung wie multiwindow_en in rk_aiq_customAwb_hw_cfg_t |
| multiwindow | Gleiche Bedeutung wie multiwindow in rk_aiq_customAwb_hw_cfg_t |
| blkWeightEnable | Die Quelle enthält die beschädigte Beschreibung „Tongke_Ike_Kustomab_Hall_Cob_T-Bulkwertnabul meaning“; Bedeutung ungeklärt. |
| blkWeight | Die Quelle enthält die beschädigte Beschreibung „Tongke_Ike_Coustomab_Hall_Cove_Tur in Burkwaite meaning“; Bedeutung ungeklärt. |
2.2.2.3.6 rk_aiq_awb_uv_range_para_t
【Erläuterung】 Definiert Begrenzungsparameter des viereckigen UV-Weißpunktbereichs für den eigenen AWB-Algorithmus.

Technische Abbildung aus der englischen Quelle, PDF-S. 30.
【Definition】
typedef struct rk_aiq_awb_uv_range_para_s {
unsigned short pu_region[5];
unsigned short pv_region[5];
int slope_inv[4];
} rk_aiq_awb_uv_range_para_t;
【Mitglied】
| Mitgliedsname | Beschreibung |
|---|---|
| pu_region | U-Koordinaten des UV-Weißpunktbereichs als geschlossener Linienzug, z. B. [u0,u1,u2,u3,u0]. Wertebereich [0x0, 0x1ff], 1 Nachkommastelle. |
| pv_region | V-Koordinaten des UV-Weißpunktbereichs als geschlossener Linienzug, z. B. [v0,v1,v2,v3,v0]. Wertebereich [0x0, 0x1ff], 1 Nachkommastelle. |
| slope_inv | Kehrwerte der Steigungen der vier Seiten des UV-Weißpunktbereichs; 10 Nachkommastellen möglich. |
【Hinweis】
Festkomma- oder umgerechnete Parameter auf Grundlage des Abschnitts „AWB/UV domain white points detector“ in Rockchip_Color_Optimization_Guide_ISP30; sie werden vom Kalibrierwerkzeug geliefert.
Die modulspezifischen Parameter müssen bei uvDetectionEnable=ture korrekt konfiguriert werden; „ture“ ist die Schreibweise der Quelle.
2.2.2.3.7 rk_aiq_rgb2xy_para_t
【Erläuterung】 Definiert die Umrechnungsparameter von RGB nach XY für den eigenen AWB-Algorithmus.
【Definition】
typedef struct rk_aiq_rgb2xy_para_s {
unsigned short pseudoLuminanceWeight[3];
short rotationMat[9];
} rk_aiq_rgb2xy_para_t;
【Mitglied】
| Mitgliedsname | Beschreibung |
|---|---|
| pseudoLuminanceWeight | Umrechnungsparameter von RGB nach XY: [0, 2^12-1], 12 Nachkommastellen. |
| rotationMat | Umrechnungsparameter von RGB nach XY: [-2^14, 2^14-1], 12 Nachkommastellen. |
【Hinweis】
Die vom Kalibrierwerkzeug gelieferten Parameter werden anhand des Abschnitts „AWB/RGB2XY“ in Rockchip_Color_Optimization_Guide_ISP30 in Festkommadarstellung umgesetzt.
Die modulspezifischen Parameter müssen bei xyDetectionEnable=ture korrekt konfiguriert werden; „ture“ ist die Schreibweise der Quelle.
2.2.2.3.8 rk_aiq_awb_xy_range_para_t
【Erläuterung】 Definiert Begrenzungsparameter des viereckigen XY-Weißpunktbereichs für den eigenen AWB-Algorithmus.

Technische Abbildung aus der englischen Quelle, PDF-S. 31.
【Definition】
typedef struct rk_aiq_awb_xy_range_para_s {
int NorrangeX[2];
int NorrangeY[2];
int SperangeX[2];
int SperangeY[2];
int SmalrangeX[2];
int SmalrangeY[2];
} rk_aiq_awb_xy_range_para_t;
【Mitglied】
| Mitgliedsname | Beschreibung |
|---|---|
| NorrangeX | Horizontale Anfangs- und Endkoordinaten des XY-Weißpunktbereichs [x0,x1]. Wertebereich: [-2^13, 2^13-1], 10 Nachkommastellen. |
| NorrangeY | Vertikale Anfangs- und Endkoordinaten des XY-Weißpunktbereichs [y0,y1]. Wertebereich: [-2^13, 2^13-1], 10 Nachkommastellen. |
| SperangeX | Horizontale Anfangs- und Endkoordinaten des XY-Weißpunktbereichs [x0,x1]. Wertebereich: [-2^13, 2^13-1], 10 Nachkommastellen. |
| SperangeY | Vertikale Anfangs- und Endkoordinaten des XY-Weißpunktbereichs [y0,y1]. Wertebereich: [-2^13, 2^13-1], 10 Nachkommastellen. |
| SmalrangeX | Horizontale Anfangs- und Endkoordinaten des kleinen XY-Weißpunktbereichs [x0,x1]. In der aktuellen Version nicht unterstützt. Wertebereich: [-2^13, 2^13-1], 10 Nachkommastellen. |
| SmalrangeY | Vertikale Anfangs- und Endkoordinaten des kleinen XY-Weißpunktbereichs [y0,y1]. In der aktuellen Version nicht unterstützt. Wertebereich: [-2^13, 2^13-1], 10 Nachkommastellen. |
【Hinweise】
Festkommaparameter auf Grundlage des Abschnitts „AWB/XY domain white points detector“ in Rockchip_Color_Optimization_Guide_ISP30; sie werden vom Kalibrierwerkzeug geliefert.
Die modulspezifischen Parameter müssen bei xyDetectionEnable=ture korrekt konfiguriert werden; „ture“ ist die Schreibweise der Quelle.
2.2.2.3.9 rk_aiq_awb_rt3dyuv_range_para_t
【Erläuterung】 Definiert YUV-Weißpunktbegrenzungsparameter für den eigenen AWB-Algorithmus.
【Definition】
typedef struct rk_aiq_awb_rt3dyuv_range_para_s {
unsigned char thcurve_u[6];
unsigned short thcure_th[6];
unsigned short lineP1[3];
short vP1P2[3];
unsigned char disP1P2;
} rk_aiq_awb_rt3dyuv_range_para_t;
【Mitglied】
| Mitgliedsname | Beschreibung |
|---|---|
| thcurve_u | u-Komponente des stückweisen Linienzuges u-th. Wertebereich: [0x0, 0xff]. Die Differenz zweier benachbarter u-Komponenten muss eine Zweierpotenz sein. |
| thcure_th | th-Komponente des stückweisen Linienzuges u-th. Wertebereich: [0x0, 0xfff], 4 Nachkommastellen. Der Linienzug u-th muss monoton steigen. |
| lineP1 | Zur Berechnung des theoretischen Weißpunkts (y’,u0,v0) benötigte Parameter: Koordinaten von p1 in der YUV-Domäne. Wertebereich jeder Komponente: [0x0, 0xfff], 4 Nachkommastellen. |
| vP1P2 | Zur Berechnung des theoretischen Weißpunkts (y’,u0,v0) benötigte Parameter: Vektor von p1 nach p2 in der YUV-Domäne. Wertebereich jeder Komponente: [-2^12, 2^12-1], 4 Nachkommastellen. |
| disP1P2 | Der euklidische Abstand zwischen p1 und p2 beträgt 2^disP1P2. Wertebereich: [0,5]. |
【Hinweise】

Technische Abbildung aus der englischen Quelle, PDF-S. 33.
Festkomma- oder umgerechnete Parameter auf Grundlage des Abschnitts „AWB/YUV domain white points detector“ in Rockchip_Color_Optimization_Guide_ISP30; sie werden vom Kalibrierwerkzeug geliefert.
Die modulspezifischen Parameter müssen bei threeDyuvEnable=ture und threeDyuvIllu ungleich 7 korrekt konfiguriert werden; „ture“ ist die Schreibweise der Quelle.
2.2.2.3.10 rk_aiq_awb_exc_range_v201_t
【Erläuterung】 Definiert Begrenzungsparameter für ausgeschlossene oder zusätzliche Weißpunktbereiche in UV oder XY für den eigenen AWB-Algorithmus.
【Definition】
typedef struct rk_aiq_awb_exc_range_v201_s {
rk_aiq_awb_exc_range_domain_t domain;
bool excludeEnable[RK_AIQ_AWB_XY_TYPE_MAX_V201];
bool measureEnable;
int xu[2];
int yv[2];
} rk_aiq_awb_exc_range_v201_t;
【Mitglied】
| Mitgliedsname | Beschreibung |
|---|---|
| rk_aiq_awb_exc_range_domain_t | Wählt die Domäne für ausgeschlossene/zusätzliche Weißpunktbereiche. Zulässige Werte: RK_AIQ_AWB_EXC_RANGE_DOMAIN_UV oder RK_AIQ_AWB_EXC_RANGE_DOMAIN_XY für UV beziehungsweise XY. Die Quelle enthält an dieser Stelle die unklare Formulierung „UV AND selection“. |
| excludeEnable | Ausschlussbereich aktivieren: true aktiviert, false deaktiviert; Standard: true. |
| measureEnable | Gibt an, ob die Summe der Kanäle RGain und BGain im ausgeschlossenen/ zusätzlichen Bereich erfasst wird. true erfasst, false nicht; Standard: false. |
| xu | Horizontale Anfangs- und Endkoordinaten des ausgeschlossenen/zusätzlichen UV- oder XY-Weißpunktbereichs: xu = {x0,x1}. Wertebereich: -2^13, 2^13-1. |
| yv | Vertikale Anfangs- und Endkoordinaten des ausgeschlossenen/zusätzlichen UV- oder XY-Weißpunktbereichs: yv = {y0,y1}. Wertebereich: -2^13, 2^13-1. |
【Hinweise】
Höchstens 7 Fenster sind konfigurierbar; measureEnable darf jedoch nur bei den ersten 4 auf true gesetzt werden.
2.3 Eigene AF-Algorithmen entwickeln
Wird die RK-AF-Algorithmusbibliothek nicht verwendet, kann auf Basis der 3A-Statistikwerte ein eigener AF-Algorithmus entwickelt werden, beispielsweise für Zoom und Fokussierung.
Bei der Implementierung eines eigenen AF-Algorithmus:
1. Zuerst rk_aiq_user_api2_af_SetAttrib aufrufen, um die AF-Statistik zu konfigurieren.
2. Anschließend 3A-Statistikwerte mit rk_aiq_uapi_sysctl_get3AStatsBlk abrufen. Diese API blockiert und kehrt sofort zurück, sobald neue 3A-Statistikwerte vorliegen.
3. Der eigene AF-Algorithmus berechnet anhand dieser Werte die erforderlichen Ergebnisse und bewegt Zoom- und Fokusmotor.
4. Abschließend die erhaltenen 3A-Statistikwerte durch rk_aiq_uapi_sysctl_release3AStatsRef freigeben.
Den Gesamtablauf zeigt folgende Abbildung.

Technische Abbildung aus der englischen Quelle, PDF-S. 35.
2.3.1 AF-Statistikmodul

Technische Abbildung aus der englischen Quelle, PDF-S. 35.
Liefert der Sensor ein HDR-Bild, kann das AF-Modul das kurz, mittel oder lang belichtete HDR-Bild oder Daten des zusammengeführten HDR-Bildes als Eingabe für die AF-Statistik wählen.
Liefert der Sensor ein normales Bild, kann das AF-Modul das Sensoreingabebild oder das demosaizierte Bild als Eingabe der AF-Statistik wählen.
Unterstützt werden insgesamt zwei Fenster: Hauptfenster A und unabhängiges Fenster B.
Hauptfenster A enthält 15*15 Unterfenster. Es lässt sich mit vier Filtern V1/V2/H1/H2 konfigurieren und liefert die vier entsprechenden FV-Werte sowie Helligkeits- und Spitzlichtstatistiken.
Das unabhängige Fenster B berechnet den FV-Wert mit einem festen Operator und liefert einen FV-Wert, einen Helligkeitswert und einen Spitzlichtstatistikwert.
2.3.2 AF-Statistikfenster konfigurieren
Hauptfenster A und unabhängiges Fenster B unterstützen rechteckige Fenster. Konfigurierbar sind die Koordinaten der linken oberen Ecke sowie Breite und Höhe.

Technische Abbildung aus der englischen Quelle, PDF-S. 36.
2.3.3 Gamma
Gamma wandelt das RAW-Eingabebild des Sensors entsprechend der menschlichen Wahrnehmung natürlicher Helligkeit um. Die x-Koordinate von 0 bis 1023 wird wie folgt unterteilt: 16 16 16 16 32 32 32 32 64 64 64 128 128 128 128 128. Der Wertebereich der y-Koordinate beträgt 0 bis 1023.

Technische Abbildung aus der englischen Quelle, PDF-S. 36.
2.3.4 Fokusfilter
Für Hauptfenster A lassen sich vier Filter V1/V2/H1/H2 einstellen. Das unabhängige Fenster B verwendet feste Operatoren.
Die Frequenzbänder der Filter V1/V2/H1/H2 sind einstellbar; Filterentwurfswerkzeuge erzeugen die zugehörigen Registerwerte.

Technische Abbildung aus der englischen Quelle, PDF-S. 37.
2.3.5 Helligkeit und Spitzlichter
Hauptfenster A liefert Helligkeitsstatistiken und eine Zählung der Spitzlichter.
Lichtquellen beeinflussen den FV-Wert leicht. Bei unscharfem Fokus nimmt durch die Ausbreitung des Lichthofs der niederfrequente Bildanteil zu. Das Bild wird unscharf, während der FV-Wert steigen kann.
Üblicherweise wird dies mit einem Spitzlichtzähler behandelt: Bei Unschärfe wächst der Lichthof und damit die Zahl heller Spitzlichtpunkte. Bei scharfem Fokus ist diese Zahl am kleinsten.
2.3.6 Helligkeitsabhängige Verstärkung
Die LDG-Funktion kann den Einfluss von Lichtquellen ebenfalls reduzieren: Sie schwächt den FV-Wert entsprechend der Pixelhelligkeit ab und verringert ihn an hellen sowie zu dunklen Punkten.

Technische Abbildung aus der englischen Quelle, PDF-S. 38.
Liegt die Helligkeit innerhalb [ldg_xl, ldg_xh], beträgt die ausgegebene Verstärkung 1; der FV-Wert wird nicht abgeschwächt.
Liegt die Helligkeit innerhalb [0, ldg_xl], wird die Verstärkung entsprechend der Steigung ldg_kl abgeschwächt, jedoch nicht unter ldg_yl.
gain = 256 - ldg_kl*(ldg_xl - x)/256; gain = max(gain, ldg_yl);
Liegt die Helligkeit innerhalb [ldg_xh, 255], wird die Verstärkung entsprechend der Steigung ldg_kh abgeschwächt, jedoch nicht unter ldg_yh.
gain = 256 - ldg_kh*(x-ldg_xh)/256; gain = max(gain, ldg_yh);
Die horizontalen Kanäle H1/H2 teilen sich eine LDG-Kurve; die vertikalen Kanäle V1/V2 teilen sich eine weitere.
2.3.7 Fv-Schwelle
Ein berechneter Fv-Wert unterhalb der Fv-Schwelle wird in der endgültigen Ausgabe nicht berücksichtigt. Dies kann den Rauscheinfluss verringern.

Technische Abbildung aus der englischen Quelle, PDF-S. 39.
Die Fv-Schwelle gilt für den LDG-Ausgabewert nach der Filterung.
2.3.8 Fv-Berechnung
Der Fv-Wert unterstützt Betrags- und Quadratmodus. Im Quadratmodus wird Fv quadriert, wodurch sich der Anteil scharf fokussierter Positionen am FV-Wert erhöhen lässt.
Zur Vermeidung eines Überlaufs des endgültigen Fv-Ausgabewerts lassen sich im Hauptfenster vier Rechtsverschiebungswerte für v1/v2/h1/h2 und im unabhängigen Fenster zwei für fv/luma einstellen.
2.3.9 Fv-Ausgabe
Die Ausgabe von Hauptfenster A enthält v1/v2/h1/h2-Fv-Informationen für 1515 sowie luma/highlight-Informationen für 1515. Die Schreibweise „1515“ der Quelle bleibt erhalten; das zugehörige Raster zeigt 15×15.
Die räumliche Verteilung der Ausgabe von Hauptfenster A ist nachfolgend dargestellt.
Das unabhängige Fenster B gibt einen Fv-Wert, eine Helligkeitsinformation und eine Spitzlichtstatistik aus.

Technische Abbildung aus der englischen Quelle, PDF-S. 40.
Bearbeitbare Übertragung des FV-Rasters aus der Quelle:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
| 2 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
| 3 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
| 4 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
| 5 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
| 6 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
| 7 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
| 8 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
| 9 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
| 10 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
| 11 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
| 12 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
| 13 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
| 14 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
| 15 | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv | Fv |
2.3.10 Endgültigen FV-Wert berechnen
H1 und V1 können für die Grobsuche auf ein Tiefpassband, H2 und V2 für die Feinsuche auf ein Hochpassband eingestellt werden.
Die horizontale Filterausgabe H und die vertikale Filterausgabe V lassen sich gewichten:
FV = FvH * weight + FvV * (1-weight)
Die FV-Werte der einzelnen Blöcke können bei Bedarf ebenfalls unterschiedlich gewichtet werden.
2.3.11 AF-Statistik konfigurieren
Verwenden Sie zur Konfiguration rk_aiq_user_api2_af_SetAttrib.
XCamReturn
rk_aiq_user_api2_af_SetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, rk_aiq_af_attrib_t
attr);
| Parametername | Beschreibung | Eingabe/Ausgabe |
|---|---|---|
| sys_ctx | AIQ-Kontextzeiger | Eingabe |
| attr | Fokussierungsattribute | Eingabe |
rk_aiq_af_algo_meas_v30_t im Parameter rk_aiq_af_attrib_t wird nachfolgend beschrieben:
typedef struct {
unsigned char af_en;
unsigned char rawaf_sel;
unsigned char gamma_en;
unsigned char gaus_en;
unsigned char v1_fir_sel;
unsigned char hiir_en;
unsigned char viir_en;
unsigned char v1_fv_outmode; // 0 square, 1 absolute
unsigned char v2_fv_outmode; // 0 square, 1 absolute
unsigned char h1_fv_outmode; // 0 square, 1 absolute
unsigned char h2_fv_outmode; // 0 square, 1 absolute
unsigned char ldg_en;
unsigned char accu_8bit_mode; // fix to 1
unsigned char ae_mode;
unsigned char y_mode; // fix to 0
unsigned char line_en[RKAIQ_RAWAF_LINE_NUM];
unsigned char line_num[RKAIQ_RAWAF_LINE_NUM];
unsigned char window_num;
unsigned short wina_h_offs;
unsigned short wina_v_offs;
unsigned short wina_h_size;
unsigned short wina_v_size;
unsigned short winb_h_offs;
unsigned short winb_v_offs;
unsigned short winb_h_size;
unsigned short winb_v_size;
unsigned short gamma_y[RKAIQ_RAWAF_GAMMA_NUM];
// [old version param]
unsigned short thres;
unsigned char shift_sum_a;
unsigned char shift_sum_b;
unsigned char shift_y_a;
unsigned char shift_y_b;
/**********[Vertical IIR (v1 & v2)]************/
short v1_iir_coe[9];
short v1_fir_coe[3];
short v2_iir_coe[3];
short v2_fir_coe[3];
/**********[Horizontal IIR (h1 & h2)]************/
short h1_iir1_coe[6];
short h2_iir1_coe[6];
short h1_iir2_coe[6];
short h2_iir2_coe[6];
/**********[Focus value statistic param]**********/
// level depended gain
// input8 lumi, output8bit gain
unsigned char h_ldg_lumth[2]; //luminance thresh
unsigned char h_ldg_gain[2]; //gain for [minLum,maxLum]
unsigned short h_ldg_gslp[2]; //[slope_low,-slope_high]
unsigned char v_ldg_lumth[2];
unsigned char v_ldg_gain[2];
unsigned short v_ldg_gslp[2];
// coring
unsigned short v_fv_thresh;
unsigned short h_fv_thresh;
// left shift, more needed if outmode=square
unsigned char v1_fv_shift; //only for sel1
unsigned char v2_fv_shift;
unsigned char h1_fv_shift;
unsigned char h2_fv_shift;
/**********[High light]**********/
unsigned short highlit_thresh;
} rk_aiq_af_algo_meas_v30_t;
| Mitgliedsname | Beschreibung |
|---|---|
| af_en | AF-Statistikerfassung: 0 aus, 1 ein |
| rawaf_sel | Kanalwahl der AF-Statistik, Wertebereich 0-3. Im HDR-Modus Auswahl zwischen langem, mittlerem, kurzem und zusammengeführtem Bild. Üblicherweise verwendet AF das mittlere Bild. Ohne HDR auf 0, mit HDR auf 1 setzen. |
| gamma_en | Gamma-Modul: 0 aus, 1 ein |
| gaus_en | Fest auf 1 setzen |
| v1_fir_sel | Fest auf 1 setzen |
| hiir_en | Kanäle H1/H2: 0 aus, 1 ein |
| viir_en | Kanäle V1/V2: 0 aus, 1 ein. Bei aktiviertem gamma_en muss viir_en auf 1 stehen. |
| v1_fv_outmode | FV-Ausgabemodus des V1-Kanals: 0 Quadratmodus, 1 Betragsmodus |
| v2_fv_outmode | FV-Ausgabemodus des V2-Kanals: 0 Quadratmodus, 1 Betragsmodus |
| h1_fv_outmode | FV-Ausgabemodus des H1-Kanals: 0 Quadratmodus, 1 Betragsmodus |
| h2_fv_outmode | FV-Ausgabemodus des H2-Kanals: 0 Quadratmodus, 1 Betragsmodus |
| ldg_en | LDG-Funktion: 0 aus, 1 ein |
| accu_8bit_mode | Fest auf 1 setzen |
| ae_mode | Bei ae_mode=1 aktiviert RAWAF eine 15x15-Statistik der mittleren Helligkeit unter Mitnutzung der Logik des RAWAE_BIG-Moduls. |
| y_mode | Fest auf 0 setzen |
| line_en | Noch nicht wirksam |
| line_num | Noch nicht wirksam |
| window_num | Anzahl wirksamer Fenster: Bei 1 ist WinA (Hauptfenster) aktiv; bei 2 sind WinA und WinB (unabhängiges Fenster) aktiv. |
| wina_h_offs | Horizontale Koordinate des ersten Pixels links oben in Wina (Hauptfenster); muss mindestens 2 betragen. |
| wina_v_offs | Vertikale Koordinate des ersten Pixels links oben in WinA (Hauptfenster); muss mindestens 1 betragen. |
| wina_h_size | Breite von Wina; muss kleiner als Bildbreite -2-wina_h_offs und ein Vielfaches von 15 sein. |
| wina_v_size | Die Quelle nennt hier „Breite“ von Wina und fordert einen Wert kleiner als Bildbreite -2-wina_v_offs sowie ein Vielfaches von 15. Der Widerspruch zum vertikalen Parameternamen bleibt erhalten. |
| winb_h_offs | Horizontale Koordinate des ersten Pixels links oben in Winb (unabhängiges Fenster); muss mindestens 2 betragen. |
| winb_v_offs | Vertikale Koordinate des ersten Pixels links oben in Winb (unabhängiges Fenster); muss mindestens 1 betragen. |
| winb_h_size | Breite von winb; muss laut Quelle kleiner als Bildbreite -2-wina_h_offs sein. Der Verweis auf wina bleibt erhalten. |
| winb_v_size | Höhe von WinB; muss laut Quelle kleiner als Bildhöhe -2-wina_v_offs sein. Der Verweis auf wina bleibt erhalten. |
| gamma_y | y-Werte der Gammatabelle, Wertebereich 0-1023. Unterteilung der x-Koordinate von 0 bis 1023: 16 16 16 16 32 32 32 32 64 64 64 128 128 128 128 128 |
| thres | Liegt der berechnete fv-Wert darunter, wird er zur Rauschunterdrückung auf 0 gesetzt. Wertebereich: 0-0xFFFF. |
| shift_sum_a | Derzeit nicht verfügbar; kann fest auf 0 gesetzt werden |
| shift_sum_b | Rechtsverschiebung des fv-Werts von win b zur Vermeidung eines Überlaufs. Wertebereich: 0-7. |
| shift_y_a | Derzeit nicht verfügbar; kann fest auf 0 gesetzt werden |
| shift_y_b | Rechtsverschiebung des luma-Werts von win b zur Vermeidung eines Überlaufs. Wertebereich: 0-7. |
| v1_iir_coe[9] | 3X3-IIR-Koeffizienten des V1-Kanals gemäß Ausgabe des AF-Filterkoeffizientenwerkzeugs setzen. |
| v1_fir_coe[3] | 1x3-FIR-Koeffizienten des V1-Kanals gemäß Ausgabe des AF-Filterkoeffizientenwerkzeugs setzen. |
| v2_iir_coe[3] | 1x3-IIR-Koeffizienten des V2-Kanals gemäß Ausgabe des AF-Filterkoeffizientenwerkzeugs setzen. |
| v2_fir_coe[3] | 1x3-FIR-Koeffizienten des V2-Kanals gemäß Ausgabe des AF-Filterkoeffizientenwerkzeugs setzen. |
| h1_iir1_coe[6] | 1X6-IIR1-Koeffizienten des H1-Kanals gemäß Ausgabe des AF-Filterkoeffizientenwerkzeugs setzen. |
| h2_iir1_coe[6] | 1X6-IIR1-Koeffizienten des H2-Kanals gemäß Ausgabe des AF-Filterkoeffizientenwerkzeugs setzen. |
| h1_iir2_coe[6] | 1X6-IIR2-Koeffizienten des H1-Kanals gemäß Ausgabe des AF-Filterkoeffizientenwerkzeugs setzen. |
| h2_iir2_coe[6] | 1X6-IIR2-Koeffizienten des H2-Kanals gemäß Ausgabe des AF-Filterkoeffizientenwerkzeugs setzen. |
| h_ldg_lumth[2] | LDG-Helligkeitsschwelle für H1/H2: Index 0 für den linken dunklen Bereich, Index 1 für den rechten hellen Bereich. Wertebereich: 0~255. |
| h_ldg_gain[2] | Minimale LDG-Verstärkung für H1/H2: Index 0 für den linken dunklen Bereich, Index 1 für den rechten hellen Bereich. Wertebereich: 0~255. |
| h_ldg_gslp[2] | LDG-Steigung für H1/H2: Index 0 für den linken dunklen Bereich, Index 1 für den rechten hellen Bereich. Wertebereich: 0~65535. |
| v_ldg_lumth[2] | LDG-Helligkeitsschwelle für V1/V2: Index 0 für den linken dunklen Bereich, Index 1 für den rechten hellen Bereich. Wertebereich: 0~255. |
| v_ldg_gain[2] | Minimale LDG-Verstärkung für V1/V2: Index 0 für den linken dunklen Bereich, Index 1 für den rechten hellen Bereich. Wertebereich: 0~255. |
| v_ldg_gslp[2] | Laut Quelle minimale LDG-Verstärkung für V1/V2: Index 0 für den linken dunklen Bereich, Index 1 für den rechten hellen Bereich. Wertebereich: 0~255. Die vom Steigungsparameternamen abweichende Beschreibung bleibt erhalten. |
| v_fv_thresh | AF-Statistikschwelle für V1/V2: Kleinere berechnete fv-Werte werden zur Rauschunterdrückung auf 0 gesetzt. Wertebereich: 0-0x0FFF. |
| h_fv_thresh | AF-Statistikschwelle für H1/H2: Kleinere berechnete fv-Werte werden zur Rauschunterdrückung auf 0 gesetzt. Wertebereich: 0-0x0FFF. |
| v1_fv_shift | Rechtsverschiebung des fv-Werts im V1-Kanal zur Vermeidung eines Überlaufs. Wertebereich: 0-7. |
| v2_fv_shift | Rechtsverschiebung des fv-Werts im V2-Kanal zur Vermeidung eines Überlaufs. Wertebereich: 0-7. |
| h1_fv_shift | Rechtsverschiebung des fv-Werts im H1-Kanal zur Vermeidung eines Überlaufs. Wertebereich: 0-7. |
| h2_fv_shift | Rechtsverschiebung des fv-Werts im H2-Kanal zur Vermeidung eines Überlaufs. Wertebereich: 0-7. |
| highlit_thresh | Schwelle der Spitzlichtstatistik: Höhere Werte gelten als Spitzlichter und werden erfasst. Je Bereich wird nur deren Anzahl aufsummiert. Wertebereich: 0-0x0FFF. |
2.3.12 AF-Statistikwerte abrufen
Einzelheiten enthält der Abschnitt „Statistics“ in Rockchip_Development_Guide_ISP30.
rk_aiq_uapi_sysctl_get3AStatsBlk () / rk_aiq_uapi_sysctl_release3AStatsRef()
Die Struktur für AF-Statistikergebnisse heißt rk_aiq_af_algo_stat_v30_t.
2.3.13 Filterentwurfswerkzeuge verwenden
Siehe die Dokumentation des Filterentwurfswerkzeugs.
2.4 Codebeispiele als Referenz
Referenzcode für die Implementierung eigener 3A-Algorithmen finden Sie unter:
Verzeichnis: AIQ root/rkisp_demo/demo/
|——-ae_algo_demo // Referenzcode für AE-Algorithmen
|——-awb_algo_demo // Referenzcode für AWB-Algorithmen
|——-af_algo_demo // Referenzcode für AF-Algorithmen
