Rockchip · AI & Linux Hub

Kameras und Video

Eigene 3A-Algorithmen für Rockchip ISP30: AE-, AWB- und AF-APIs und Statistiken

Vollständige RK3588-/Linux-5.10-Referenz zur Registrierung eigener 3A-Algorithmen, AE/AWB-Callbacks und Strukturen sowie AF-Statistiken, Filtern und Quellbeispielen.

· ArmSoM-Redaktion · Rockchip-Quelldokumentation · 53 Min. Lesezeit

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

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

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

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

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

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

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

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

2.3.1 AF-Statistikmodul

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

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

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

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

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

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

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

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

Dieses Thema entdecken → · Lernpfade →