Bu sayfada, Extended View System (EVS) ile Camera2 arasındaki farklar açıklanmaktadır. Ayrıca, Camera2 uygulamanızı nasıl ayarlayacağınız da açıklanmaktadır.
Kamerayı açma ve kapatma
EVS
openCamera
, cihazı açma ve tek bir akışı yapılandırma işlemlerini birleştirir.
Camera2
Camera2 ile bir cihazı açmak ve kapatmak için:
Aşağıdaki modlardan birini seçin:
Exclusive modunda, Native Development Kit (NDK) üzerinde
CameraManager.openCamera
(Java) veyaACameraManager_openCamera
kullanın.Paylaşılan modda
openSharedCamera
veyaACameraManager_openSharedCamera
tuşunu kullanın. Kamera paylaşımını etkinleştirdiğinizde paylaşılan oturum yapılandırması sağlayın.
Akışları yapılandırmak için ilgili çıkış yüzeyleriyle bir yakalama oturumu oluşturun. Örneğin,
CameraDevice.createCaptureSession()
(Java) veyaACameraDevice_createCaptureSession()
(NDK) ile ImageReader veya SurfaceView'dan.Camera2, eşzamanlı birden fazla yayını destekler. Önizleme, kayıt ve görüntü işleme gibi amaçlar için birden fazla akış oluşturun. Akışlar, paralel işlem hatları gibi çalışarak kameradan gelen ham kareleri sırayla işler.
Kamera cihazını kapatmak için
CameraDevice.close()
(Java) veyaACameraDevice_close()
(NDK) kullanın.
Aşağıdaki örnek kod snippet'lerini inceleyin:
Java
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
manager.openCamera(cameraId, new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull CameraDevice camera) {
// Camera opened, now create session
}
@Override
public void onDisconnected(@NonNull CameraDevice camera) {}
@Override
public void onError(@NonNull CameraDevice camera, int error) {}
}, handler);
} catch (CameraAccessException e) {
// Handle exception
}
NDK
ACameraManager *cameraManager = ACameraManager_create();
ACameraDevice *cameraDevice = nullptr;
camera_status_t status = ACameraManager_openCamera(
cameraManager, cameraId, &deviceStateCallbacks, &cameraDevice);
Kamera verilerini yayınlama
Bu bölümde, kamera verilerinin nasıl yayınlanacağı açıklanmaktadır.
EVS
EVS'de:
- Yayını başlatmak için
startVideoStream
simgesini kullanın. - Yayını durdurmak için
stopVideoStream
simgesini kullanın.
Camera2
Camera2'de:
Önizlemeye uygun bir
CaptureRequest
oluşturun, Java'daTEMPLATE_PREVIEW
ileCameraDevice.createCaptureRequest()
'ı veya NDK'daACameraDevice_createCaptureRequest()
'ı kullanın.Sürekli akış isteğini gönderin,
CameraCaptureSession.setSingleRepeatingRequest
(Java) veyaACameraCaptureSession_setRepeatingRequestV2
(NDK) kullanın.Yayını durdurmak için
CameraCaptureSession.stopRepeating
(Java) veyaACameraCaptureSession_stopRepeating
(NDK) kullanın.
Arabellek yönetimi
EVS'de
setMaxFramesInFlight
daha önce arabellek sayısını kontrol ediyordu. Bu sayı, yayın ortasında değiştirilebiliyordu. Kamera yayını başladığında EVS, her görüntü karesi için bir arabellek kimliği sağladı. Bu kimlik, bellekteki aynı donanım arabellek adresiyle ilişkiliydi.Camera2'de, bir
AImageReader
veyaImageReader
için maksimum resim sayısı, bir oturum başlatıldığındaAImageReader_new
veyaImageReader.newInstance
ile ayarlanır. Bu, oturum başladıktan sonra dinamik olarak değiştirilemez. Her kare için arabellek kimliği almak üzere istemciler,Image
nesnesinden alınan donanım arabellek adresini benzersiz bir tanımlayıcıyla ilişkilendiren bir harita tutabilir.
Yayınları duraklatma ve devam ettirme
EVS,
pauseVideoStream
veresumeVideoStream
özelliklerini kullanır.Camera2'nin doğrudan eşdeğeri yoktur. Bunun yerine:
- Duraklat,
stopRepeating
kullan - Devam ettirmek için
setSingleRepeatingRequest
seçeneğini kullanın.
- Duraklat,
Kamera parametreleri
EVS, kamera yakalama isteği parametresini değiştirmek için
setIntParameter
gibi yöntemler kullanır.Camera2'de parametreleri değiştirmek için
CaptureRequest
oluşturucu için set API'sini çağırın ve ardından gönderin.
Aşağıdaki kod örneklerini inceleyin:
Java
CaptureRequest.Builder builder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
builder.set(CaptureRequest.CONTROL_EFFECT_MODE, CaptureRequest.CONTROL_EFFECT_MODE_MONO);
// Submit this request
NDK
ACaptureRequest_setEntry_i32(captureRequest, ACAMERA_CONTROL_EFFECT_MODE, 1, &effectMode);
Mantıksal kameralar
EVS: Surround View gibi mantıksal kameralar için EVS Yöneticisi, ilişkili tüm fiziksel kameraları açar, video akışlarını başlatır ve tutarlı bir görüntü dizisi sağlar.
Camera2: Camera2 ile benzer işlevsellik gerektiğinde uygulamaların mantıksal kameraları yönetmesi gerekir. Bunun için şunları yapmanız gerekir:
- Mantıksal bir kamerayla ilişkili fiziksel alt kameraları tanımlayın.
- Gerekli olan her fiziksel kamerayı açın.
- Her kamerada yayın başlatın.
- Gerekirse kareleri senkronize edin. Bu işlem, donanım düzeyinde senkronizasyon için en iyi şekilde HAL'de gerçekleştirilir.
Geçişi kolaylaştırmak için mevcut EVS müşterilerine bir uyumluluk kitaplığı (shim katmanı) sağlayacağız. Amaç, Camera2 API'lerini kodda minimum değişiklikle desteklemektir.
İzinler
EVS
Erişim, ayrıcalıklı benzersiz tanımlayıcılarla (UID) sınırlıdır. Örneğin,
AID_AUTOMOTIVE_EVS
. Desteği sonlandırılan izinler arasında
android.car.permission.USE_CAR_EVS_CAMERA
yer alır.
Camera2
Camera2 için android.permission.CAMERA
gerekir. Özel durumlar için:
android.permission.SYSTEM_CAMERA
: Üçüncü taraf uygulamalarından gizlenen kameralara erişmek için. AyrıcaCAMERA
izni de gerekir. Daha fazla bilgi için Sistem kameraları başlıklı makaleye bakın.android.permission.CAMERA_HEADLESS_SYSTEM_USER
:User 0
üzerinden erişime izin verir. Bu, kullanıcı geçişlerinde çalışması gereken arka görüş kameraları gibi hizmetler için çok önemlidir. Önceden verilmiş bir KAMERA izni gerektirir.android.permission.CAMERA_PRIVACY_ALLOWLIST
: OEM'lerin, kullanıcı tarafından kontrol edilen kamera gizliliği açma/kapatma düğmesinden belirli güvenlik açısından kritik uygulamaları muaf tutmasına olanak tanır.
Güvenlik açısından kritik öneme sahip kamera uygulamaları, Sürüş için Tasarım'da sağlanan Google'ın yerleşik ön izin politikalarına uymalıdır.
Birincil ve ikincil istemciler
Paylaşılan kamera erişimi için:
EVS, parametreleri değiştirme yetkisine sahip olan birincil istemciyi yönetmek için açık API'ler
setPrimaryClient
veforcePrimaryClient
sunuyordu.Kamera, paylaşılan modda açıldığında (Android 16 ve sonraki sürümlerde) Camera2, kameraya erişen istemcinin önceliği birincil istemciyi belirler. En yüksek önceliğe sahip istemci (genellikle ön plandaki uygulama), yakalama isteği parametrelerini değiştirebilir. Birincil durumu zorlamak için doğrudan API'ler kullanılmaz. Birincil durum, çerçeve tarafından yönetilir.
Sistem kameraları
Bir kamera cihazının yalnızca sistem veya 1. taraf uygulamaları tarafından erişilmesini kısıtlamak için
bu cihazın Kamera HAL'sinde ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA
özelliğini bildirin. Müşterilerin bu kamera cihazına bağlanmanın yanı sıra android.permission.SYSTEM_CAMERA
'a da sahip olması gerekir.android.permission.CAMERA
CarEVSManager ve CarEVSService
API erişimi için Java uygulamaları, CarEVSManager
yerine standart android.hardware.camera2.CameraManager
öğesini kullanmalıdır.
Arka görüş kamerası için CarEVSService
içindeki GEAR_SELECTION
VHAL özelliğini izleyen ve bir etkinlik başlatan mantık, OEM'e ait bir uygulamaya taşınmalıdır. Bu uygulama:
GEAR_SELECTION
VHAL özelliğini izler.- Geri vitese geçildiğinde arka görüş kamerası etkinliğini başlatır.
- Kamera feed'ini göstermek için Camera2 API'lerini kullanır.
Arka görünüm kamerasının tutarlı ve engelsiz bir şekilde gösterilmesi için, özellikle kullanıcı geçişleri sırasında veya diğer uygulamalar önizlemeyi kapatabileceğinde, Camera2 ile arka görünüm kamerası işlevini uygularken aşağıdaki yönergeleri uygulamanızı öneririz:
Arka görüş kamerasını sistem kamerası olarak işaretleyin.
Kameraya erişen hizmeti veya uygulamayı
User 0
kullanarakCAMERA_HEADLESS_SYSTEM_USER
izniyle çalıştırın.Uygulamayı Kamera Gizliliği İzin Verilenler Listesi'ne ekleyin.
Ekran oluşturma
EVS ekranı ve otomotiv ekranı hizmeti.
Bu işlevlerin desteği sonlandırılmıştır.
Camera2
Surface,
android.hardware.display.DisplayManager
ve
android.view.Display
ile standart Android oluşturma yöntemlerini kullanın.
Kameranın erken gösterilmesinin gerektiği senaryolarda Camera2 ImageReader, donanım arabelleğine doğrudan erişim sağlayabilir. Böylece, oluşturma için mevcut DRM tabanlı ekran uygulamalarıyla entegre edebilirsiniz.
Bu erken kamera erişimine yalnızca AID_AUTOMOTIVE_EVS_UID
sahibi ayrıcalıklı müşteriler izin verilir ve bu erişim, aracın dış kısmında bulunan sistem kameralarıyla sınırlıdır.
Emülatör HAL'si (EVS sahte HAL'si)
EVS Mock HAL'nin desteğini sonlandırmayı planlıyoruz. Bunun yerine, OEM'ler Camera2
emulated camera HAL'ı, hardware/google/camera/devices/EmulatedCamera/
kullanmalıdır.
Bu HAL, aşağıdakileri destekleyecek şekilde geliştirilecektir:
- Yapılandırılabilir kamera sayısı.
- Renk çubuğu test desenleri.
- Video dosyası emülasyonu.
Bu HAL'yi derlemeye dahil etmek için:
# In device.mk
PRODUCT_SOONG_NAMESPACES += hardware/google/camera/devices/EmulatedCamera
PRODUCT_PACKAGES += com.google.emulated.camera.provider.hal
cameraserver
uygulamasının Emulated Camera HAL hizmetiyle etkileşime girmesine izin vermek için uygun güvenlik açısından geliştirilmiş Linux (SELinux) politikaları da gereklidir.
V4L2 UVC Camera HAL
EVS V4L2 HAL'nin desteğini sonlandırmayı planlıyoruz. USB kameralar (UVC) için Camera2 harici kamera desteğini kullanın. Daha fazla bilgi için Harici USB Kameralar başlıklı makaleyi inceleyin.
Kameraya erken erişim
EVS kamerasına erişim, AID_AUTOMOTIVE_EVS
UID'si olan ayrıcalıklı istemcilerle sınırlıydı. Android başlatma işlemi tamamlanmadan önce kamera erişimi için UID AID_AUTOMOTIVE_EVS
olarak kalmalıdır. Ancak erken kamera erişimi, aracın dış kısmında bulunan sistem kameralarıyla sınırlıdır.
Ultrasonik API'ler
EVS Ultrasonics API'lerinin desteğini sonlandırmayı planlıyoruz. Bunun yerine, ultrasonik sensör algılamaları için Android 15'te kullanıma sunulan bu VHAL özelliklerini kullanın.
Özellik | Tür | Tanım |
---|---|---|
ULTRASONICS_SENSOR_POSITION |
Statik | {<x>, <y>, <z>}
Sensörün AAOS sensör koordinat çerçevesine göre ilişkili eksen boyunca konumunu temsil eden her değer milimetre cinsindendir. |
ULTRASONICS_SENSOR_ORIENTATION |
Statik | {<qw>, <qx>, <qy>, <qz>}
Bu, AAOS sensör koordinat çerçevesine göre sensörün hangi kuaterniyon dönüşüdür: $$w+xi+yj+zk$$ |
ULTRASONICS_SENSOR_FIELD_OF_VIEW |
Statik | {<horizontal>, <vertical>}
Sensörün yatay ve dikey görüş alanı (derece cinsinden). |
ULTRASONICS_SENSOR_DETECTION_RANGE |
Statik | {<minimum>, <maximum>}
Sensörün algılama aralığı (milimetre cinsinden). |
ULTRASONICS_SENSOR_DETECTION_RANGES |
Statik | {<range_min_1>, <range_max_1>, <range_min_2>,
<range_max_2>}
Milimetre cinsinden, dahil olmak üzere, sensörün desteklenen algılama aralıkları dizisi. |
ULTRASONICS_SENSOR_DETECTION_RANGES |
Sürekli | {<distance>, <distance_error>}
Sensörün ölçtüğü mesafe ve mesafe hatası (milimetre cinsinden). Yalnızca bir aralık destekleniyorsa bu, algılanan aralıktaki minimum mesafedir. |