Strukturreferenz für „camera_info“
#include <
camera_common.h
>
Datenfelder |
|
int | facing |
int | Ausrichtung |
uint32_t | device_version |
const camera_metadata_t * | static_camera_characteristics |
int | resource_cost |
char ** | conflicting_devices |
size_t | conflicting_devices_length |
Detaillierte Beschreibung
Definition in Zeile 161 der Datei camera_common.h .
Felddokumentation
char** conflicting_devices |
Ein Array von Kamerageräte-IDs, die als nullterminierte Strings dargestellt werden und andere Geräte angeben, die nicht gleichzeitig geöffnet werden können, während dieses Kameragerät verwendet wird.
In diesem Feld wird angegeben, ob dieses Kameragerät aus mehreren anderen Kameras besteht oder anderweitig Hardwareabhängigkeiten hat, die eine gleichzeitige Nutzung verhindern. Wenn keine Abhängigkeiten vorhanden sind, wird in diesem Feld möglicherweise „NULL“ zurückgegeben.
Der Kameradienst öffnet nie gleichzeitig eines der Geräte in dieser Liste, während dieses Kameragerät geöffnet ist.
Die Strings, auf die in diesem Feld verwiesen wird, werden vom Kameradienst nicht bereinigt und müssen vorhanden sein, solange das Gerät angeschlossen ist.
Versionsinformationen (basierend auf „camera_module_t.common.module_api_version“):
CAMERA_MODULE_API_VERSION_2_3 oder niedriger:
Ungültig. Kann als NULL angenommen werden. Dieses Feld darf nicht gelesen werden.
CAMERA_MODULE_API_VERSION_2_4 oder höher:
Immer gültig.
Definition in Zeile 404 der Datei camera_common.h .
size_t conflicting_devices_length |
Die Länge des Arrays, das im Feld „conflicting_devices“ angegeben ist.
Versionsinformationen (basierend auf „camera_module_t.common.module_api_version“):
CAMERA_MODULE_API_VERSION_2_3 oder niedriger:
Ungültig. Kann als 0 angenommen werden. Dieses Feld darf nicht gelesen werden.
CAMERA_MODULE_API_VERSION_2_4 oder höher:
Immer gültig.
Definition in Zeile 419 der Datei camera_common.h .
uint32_t device_version |
Der Wert von „camera_device_t.common.version“.
Versionsinformationen (basierend auf „camera_module_t.common.module_api_version“):
CAMERA_MODULE_API_VERSION_1_0:
Ungültig. Es wird davon ausgegangen, dass dies CAMERA_DEVICE_API_VERSION_1_0 ist. Dieses Feld darf nicht gelesen werden.
CAMERA_MODULE_API_VERSION_2_0 oder höher:
Immer gültig
Definition in Zeile 219 der Datei camera_common.h .
int |
Die Richtung, in die die Kamera zeigt. Definitionen für nach vorne gerichtete Kameras finden Sie unter system/core/include/system/camera.h.
Versionsinformationen (basierend auf „camera_module_t.common.module_api_version“):
CAMERA_MODULE_API_VERSION_2_3 oder niedriger:
Sie sollte CAMERA_FACING_BACK oder CAMERA_FACING_FRONT lauten.
CAMERA_MODULE_API_VERSION_2_4 oder höher:
Sie sollte CAMERA_FACING_BACK, CAMERA_FACING_FRONT oder CAMERA_FACING_EXTERNAL lauten.
Definition in Zeile 177 der Datei camera_common.h .
int-Ausrichtung |
Die Ausrichtung des Kamerabilds. Der Wert ist der Winkel, um den das Kamerabild im Uhrzeigersinn gedreht werden muss, damit es in seiner natürlichen Ausrichtung auf dem Display korrekt angezeigt wird. Er sollte 0, 90, 180 oder 270 sein.
Angenommen, ein Gerät hat ein besonders hohes Display. Der Sensor der Rückkamera ist im Querformat montiert. Sie sehen auf den Bildschirm. Wenn die Oberseite des Kamerasensors in der natürlichen Ausrichtung mit dem rechten Rand des Displays ausgerichtet ist, sollte der Wert 90 sein. Wenn die Oberseite eines Kamerasensors auf der Vorderseite mit der rechten Seite des Displays ausgerichtet ist, sollte der Wert 270 sein.
Versionsinformationen (basierend auf „camera_module_t.common.module_api_version“):
CAMERA_MODULE_API_VERSION_2_3 oder niedriger:
Gültig für alle Versionen von camera_module .
CAMERA_MODULE_API_VERSION_2_4 oder höher:
Gültig, wenn die Kamera auf CAMERA_FACING_BACK oder CAMERA_FACING_FRONT gerichtet ist. Ungültig, wenn die Kamera auf CAMERA_FACING_EXTERNAL gerichtet ist.
Definition in Zeile 202 der Datei camera_common.h .
int resource_cost |
Die Gesamtressourcenkosten für die Verwendung dieser Kamera, dargestellt als Ganzzahl im Bereich [0, 100], wobei 100 die Gesamtnutzung der freigegebenen Ressource darstellt, die das limitierende Nadelöhr des Kamera-Subsystems ist. Dies kann eine sehr grobe Schätzung sein und dient dem Kameradienst als Hinweis, wann mehreren Anwendungen das gleichzeitige Öffnen verschiedener Kameras, die vom Kameradienst beworben werden, untersagt werden soll.
Der Kameradienst muss in der Lage sein, eine beliebige Kombination von Kamerageräten, die von der HAL freigegeben werden, gleichzeitig zu öffnen und zu verwenden, wobei die Summe der Ressourcenkosten dieser Kameras <= 100 ist. Bei der Ermittlung der Kosten wird davon ausgegangen, dass jedes Kameragerät mit der maximal ressourcenintensiven Framerate und Streamgröße konfiguriert und betrieben wird, die in den Konfigurationseinstellungen für dieses Gerät über die Kamerametadaten verfügbar sind.
Der Kameradienst versucht möglicherweise weiterhin, gleichzeitig Kombinationen von Kamerageräten zu öffnen, deren Gesamtressourcenkosten über 100 liegen. Das kann gelingen oder scheitern. Wenn dies erfolgreich ist, sollten Konfigurationskombinationen, die aufgrund von Ressourceneinschränkungen durch mehrere geöffnete Geräte nicht unterstützt werden, bei den Konfigurationsaufrufen fehlschlagen. Wenn die Gesamtressourcenkosten <= 100 sind, sollte das Öffnen und Konfigurieren für alle Streamkonfigurationseinstellungen oder anderen Gerätefunktionen, die normalerweise für ein Gerät erfolgreich sind, wenn es das einzige geöffnete Kameragerät ist, nie fehlschlagen.
Anhand dieses Felds wird ermittelt, ob Hintergrundanwendungen dieses Kameragerät verwenden dürfen, während andere Anwendungen andere Kamerageräte verwenden. Hinweis: Der Kameradienst erlaubt niemals, dass mehrere Anwendungen gleichzeitig dasselbe Kameragerät öffnen.
Beispiele für Anwendungsfälle:
Beispiel: 1: Kamera – Gerät 0 = Rückkamera, Gerät 1 = Frontkamera
- Die Verwendung beider Kameras führt aufgrund der begrenzten Internetanbieterbandbreite zu einer deutlichen Verlangsamung der Framerate.
Konfiguration:
Kameragerät 0 – resource_cost = 51 conflicting_devices = null Kameragerät 1 – resource_cost = 51 conflicting_devices = null
Ergebnis:
Da die Summe der Ressourcenkosten über 100 liegt, darf keine App mit niedrigerer Priorität das jeweilige Gerät öffnen, wenn eine App mit höherer Priorität eines der Geräte geöffnet hat. Wenn eine Anwendung mit niedrigerer Priorität ein Gerät verwendet, das eine Anwendung mit höherer Priorität anschließend öffnen möchte, muss die Anwendung mit niedrigerer Priorität die Verbindung zum Gerät trennen.
Wenn die Anwendung mit der höchsten Priorität ausgewählt wird, wird möglicherweise versucht, beide Geräte zu öffnen, da diese Geräte in den Feldern „conflicting_devices“ nicht als konfliktreich aufgeführt sind. Die Verwendung dieser Geräte kann jedoch bei den Aufrufen „open“ oder „configure“ fehlschlagen.
Beispiel: 2: Kameragerät 0 = linke Rückkamera, Kameragerät 1 = rechte Rückkamera, Kameragerät 2 = kombinierte Stereokamera, die sowohl den rechten als auch den linken Rückkamerasensor von Geräten 0 und 1 verwendet, Kameragerät 3 = Frontkamera
- Aufgrund von Hardwareeinschränkungen können bis zu zwei Kameras gleichzeitig geöffnet sein. Die kombinierte Stereokamera darf niemals gleichzeitig mit einem der beiden Rückkamerageräte (Gerät 0, 1) verwendet werden und benötigt in der Regel zu viel Bandbreite, um gleichzeitig mit der Frontkamera (Gerät 3) verwendet zu werden.
Konfiguration:
Kameragerät 0 – resource_cost = 50 conflicting_devices = { 2 } Kameragerät 1 – resource_cost = 50 conflicting_devices = { 2 } Kameragerät 2 – resource_cost = 100 conflicting_devices = { 0, 1 } Kameragerät 3 – resource_cost = 50 conflicting_devices = null
Ergebnis:
Anhand der Felder „conflicting_devices“ stellt der Kameradienst sicher, dass die folgenden Kombinationen von geöffneten Geräten niemals zulässig sind: { 1, 2 }, { 0, 2 }.
Wenn eine App mit hoher Priorität im Vordergrund das Kameragerät 0 verwendet, darf eine App im Hintergrund das Kameragerät 1 oder 3 öffnen. Sie muss die Verbindung jedoch wieder trennen, wenn die App im Vordergrund ein anderes Gerät geöffnet hat.
Die App mit der höchsten Priorität versucht möglicherweise weiterhin, die Geräte 0, 2 und 3 gleichzeitig zu öffnen. Die HAL schlägt jedoch möglicherweise fehl, wenn sie versucht, diese Kombination zu öffnen oder zu konfigurieren.
Beispiel: 3: Kameragerät 0 = Rückkamera, Kameragerät 1 = Frontkamera, Kameragerät 2 = Energiespar-Frontkamera, die denselben Sensor wie Gerät 1 verwendet, aber nur Bildstreamauflösungen anzeigt, die im Energiesparmodus verwendet werden können
-
Die gleichzeitige Verwendung beider Frontkameras (Gerät 1, 2) ist aufgrund eines gemeinsamen physischen Sensors nicht möglich. Die Verwendung der Rückkamera und der „High-Power“-Frontkamera (Gerät 1) ist bei einigen Streamkonfigurationen aufgrund von Hardwareeinschränkungen möglicherweise nicht möglich. Die Option „Low-Power“-Frontkamera kann jedoch immer verwendet werden, da sie über spezielle Hardware verfügt.
Konfiguration:
Kameragerät 0 – resource_cost = 100 conflicting_devices = null Kameragerät 1 – resource_cost = 100 conflicting_devices = { 2 } Kameragerät 2 – resource_cost = 0 conflicting_devices = { 1 } Ergebnis:
Anhand der Felder „conflicting_devices“ stellt der Kameradienst sicher, dass die folgenden offenen Geräte niemals zulässig sind: { 1, 2 }.
Basierend auf den „resource_cost“-Feldern darf nur die Anwendung mit der höchsten Priorität versuchen, sowohl Gerät 0 als auch Gerät 1 gleichzeitig zu öffnen. Wenn ein Gerät 1 oder 2 von einer Anwendung mit höherer Priorität nicht verwendet wird, kann eine Hintergrundanwendung mit niedrigerer Priorität Gerät 2 öffnen. Sie muss die Verbindung jedoch trennen, wenn ein Gerät 1 oder 2 anschließend von einer Anwendung mit höherer Priorität geöffnet wird.
Versionsinformationen (basierend auf „camera_module_t.common.module_api_version“):
CAMERA_MODULE_API_VERSION_2_3 oder niedriger:
Ungültig. Kann als 100 angenommen werden. Dieses Feld darf nicht gelesen werden.
CAMERA_MODULE_API_VERSION_2_4 oder höher:
Immer gültig.
Definition in Zeile 376 der Datei camera_common.h .
const camera_metadata_t * static_camera_characteristics |
Die festen Eigenschaften der Kamera, einschließlich aller statischen Kamerametadaten, die in system/media/camera/docs/docs.html angegeben sind. Dies sollte ein sortierter Metadaten-Puffer sein, der vom Aufrufer nicht geändert oder freigegeben werden darf. Der Verweis sollte während der gesamten Lebensdauer des Kameramoduls gültig bleiben. Die Werte dürfen sich nicht ändern, nachdem sie von „get_camera_info()“ zurückgegeben wurden.
Versionsinformationen (basierend auf „camera_module_t.common.module_api_version“):
CAMERA_MODULE_API_VERSION_1_0:
Ungültig. Zusätzliche Merkmale sind nicht verfügbar. Dieses Feld darf nicht gelesen werden.
CAMERA_MODULE_API_VERSION_2_0 oder höher:
Gültig, wenn device_version >= CAMERA_DEVICE_API_VERSION_2_0. Andernfalls nicht lesen.
Definition in Zeile 241 der Datei camera_common.h .
Die Dokumentation für diese Struktur wurde aus der folgenden Datei generiert:
- hardware/libhardware/include/hardware/ camera_common.h