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 bir 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'daCameraDevice.createCaptureRequest()
ileTEMPLATE_PREVIEW
'ı 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çtı, video akışlarını başlattı ve tutarlı bir görüntü dizisi sağladı.
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
Bu bölümde, izinlerdeki değişiklikler açıklanmaktadır.
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. İstemcilerde android.permission.CAMERA
'ye ek olarak android.permission.SYSTEM_CAMERA
bulunmalı ve bu kamera cihazına bağlı olmalıdır.
Arka görüş kamerası
EVS
EVS, daha önce Android başlatılmadan önce kamera erişimini etkinleştiriyordu. Bu, arka görüş kamerası gibi özellikler için kritik bir olaydır. Araç OEM'leri, Federal Motorlu Taşıt Güvenliği Standardı (FMVSS), No. 111 Arka Görünürlük'te belirtilen düzenlemelere uygunluk ve sertifikalandırmadan sorumludur. Ayrıca, araç OEM'leri diğer arka görüş kamerası yönetmeliklerine de uymalıdır.
Uyumluluk; donanıma, HAL uygulamasına ve genel sistem entegrasyonuna bağlıdır. Referans platformda Android başlatıldıktan sonra EVS'nin çalışır duruma gelmesi ve kamera erişimi vermesi genellikle dört ila altı saniye sürer.
Camera2
AID_AUTOMOTIVE_EVS UID
ile tanımlanan ayrıcalıklı bir istemci, Android başlatma işlemi tamamlanmadan önce kamera erişimi için Camera2 API'lerini kullanabilir. Bu erken erişim, aracın dış kısmındaki sistem kameralarıyla sınırlıdır. Camera2, erken kamera erişimi için EVS ile aynı performans TPG'lerini karşılar. Bu erişim genellikle Android başlatıldıktan sonraki dört ila altı saniye içinde kullanılabilir.
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 engelleyebileceği zamanlarda) Camera2 ile arka görünüm kamerasını uygularken aşağıdaki yönergeleri uygulamanızı öneririz:
Üçüncü taraf uygulamalarının erişimini kısıtlamak için arka görüş kamerasını Sistem Kamerası olarak belirleyin.
CAMERA_HEADLESS_SYSTEM_USER iznini kullanmak için kameraya erişen hizmeti veya uygulamayı
User 0
olarak çalıştırın. Bu, ön planda kullanıcı değiştirme işlemi yapılsa bile kesintisiz kamera yayını sağlar.Kullanıcı tarafından kontrol edilen kamera gizliliği açma/kapatma düğmesi etkin olsa bile kamera erişimi vermek için uygulamayı Kamera Gizliliği İzin Verilenler Listesi'ne ekleyin.
CarEVSManager ve CarEVSService
CarEVSManager daha önce Java uygulamalarına kamera erişimi sağlıyordu. Camera2'ye geçişle birlikte bu özelliğin yerini standard android.hardware.camera2.CameraManager
alacak.
CarEVSService
özelliğini kullanımdan kaldırmayı planlıyoruz. Bu özellik, GEAR_SELECTION VHAL
mülkünü izleyen ve OEM tarafından belirtilen bir arka görüş kamerası etkinliğini başlatmak için kullanılan isteğe bağlı bir hizmettir. Bu özelliği kullanan OEM'ler, ilişkili mantığı OEM'e ait bir uygulamaya geçirmelidir.
GEAR_SELECTION VHAL
özelliğini izleyin.- Geri vites etkinleştirildiğinde arka görüş kamerası etkinliğini başlatır.
- Kamera akışını göstermek için Camera2 API'lerini kullanın.
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'ı kullanmalıdır. hardware/google/camera/devices/EmulatedCamera/
,
Bu HAL'da şunları desteklemeyi planlıyoruz:
- 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.
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>}
Milimetre cinsinden, sensörün AAOS sensör koordinat çerçevesine göre ilişkili eksen boyunca konumunu temsil eden her değer. |
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. |