Bu sayfa, Camera HAL'leri, API'leri ve ilişkili Uyumluluk Testi Paketi (CTS) testlerindeki sürüm farklılıklarını ayrıntılı olarak açıklar. Ayrıca, Android 7.0'da kamera çerçevesini sağlamlaştırmak ve güvenceye almak için yapılan çeşitli mimari değişiklikleri, Android 8.0'da Treble'a geçişi ve satıcıların kamera uygulamalarında bu değişiklikleri desteklemek için yapmaları gereken güncellemeleri kapsar.
terminoloji
Bu sayfada aşağıdaki terimler kullanılmaktadır:
- Kamera API1
- Android 4.4 ve önceki sürümlerdeki cihazlarda,
android.hardware.Camerasınıfı aracılığıyla sunulan uygulama düzeyinde kamera çerçevesi.
- kamera API2
- Android 5.0 ve üzeri cihazlarda,
android.hardware.camera2paketi aracılığıyla sunulan uygulama düzeyinde kamera çerçevesi.
- kamera HAL
- SoC satıcıları tarafından uygulanan kamera modülü katmanı. Uygulama düzeyindeki genel çerçeveler, HAL kamerasının üzerine inşa edilmiştir.
- Kamera HAL3.1
- Android 4.4 ile piyasaya sürülen kamera cihazı HAL sürümü.
- Kamera HAL3.2
- Android 5.0 ile piyasaya sürülen kamera cihazı HAL'ın sürümü.
- Kamera API1 CTS
- Camera API1'in üzerinde çalışan kamera CTS testleri seti.
- Kamera API2 CTS
- Camera API2'nin üzerinde çalışan ek kamera CTS testleri seti.
- tiz
- Satıcı uygulamasını (silikon üreticileri tarafından yazılan cihaza özel, daha düşük seviyeli yazılım) yeni bir satıcı arayüzü aracılığıyla Android işletim sistemi çerçevesinden ayırır.
- HIDL
- Treble ile tanıtılan ve bir HAL ile kullanıcıları arasındaki arabirimi belirtmek için kullanılan HAL arabirim tanımlama dili .
- VTS
- Treble ile birlikte tanıtılan satıcı test paketi .
Kamera API'leri
Android, aşağıdaki kamera API'lerini içerir.
Kamera API1
Android 5.0, Camera API2'ye odaklanan yeni platform geliştirme nedeniyle aşamalı olarak kullanımdan kaldırılmaya devam eden Camera API1'i kullanımdan kaldırdı. Ancak, aşamalı olarak kullanımdan kaldırma süresi uzun olacak ve Android sürümleri, bir süreliğine Camera API1 uygulamalarını desteklemeye devam edecek. Spesifik olarak, aşağıdakiler için destek devam eder:
- Uygulamalar için kamera API1 arayüzleri. Camera API1'in üzerine inşa edilen kamera uygulamaları, daha düşük Android yayın sürümlerini çalıştıran cihazlarda olduğu gibi çalışmalıdır.
- Kamera HAL sürümleri. Camera HAL1.0 için destek içerir.
kamera API2
Camera API2 çerçevesi, verimli sıfır kopyalı seri çekim/akış akışları ve kare başına pozlama, kazanç, beyaz dengesi kazanımları, renk dönüştürme, gürültü giderme, keskinleştirme ve daha fazlasını içeren daha düşük seviyeli kamera kontrolünü uygulamaya sunar. Ayrıntılar için Google I/O videosuna genel bakışı izleyin .
Android 5.0 ve sonraki sürümleri, Camera API2'yi içerir; ancak, Android 5.0 ve sonraki sürümleri çalıştıran cihazlar, tüm Camera API2 özelliklerini desteklemeyebilir. Uygulamaların Camera API2 arabirimleri aracılığıyla sorgulayabileceği
android.info.supportedHardwareLevel özelliği, aşağıdaki destek düzeylerinden birini bildirir:
-
LEGACY: Bu cihazlar, Camera API1 arayüzleri aracılığıyla uygulamalara sunulan yeteneklerle yaklaşık olarak aynı yeteneklere sahip olan kamera API2 arayüzleri aracılığıyla uygulamalara yetenekler sunar. Eski çerçeve kodu, Camera API2 çağrılarını kavramsal olarak Camera API1 çağrılarına dönüştürür; eski cihazlar, kare başına kontroller gibi Camera API2 özelliklerini desteklemez.
-
LIMITED: Bu cihazlar bazı Camera API2 özelliklerini destekler (hepsini değil) ve Camera HAL 3.2 veya üstünü kullanmalıdır.
-
FULL: Bu cihazlar, Camera API2'nin tüm önemli özelliklerini destekler ve Camera HAL 3.2 veya sonraki sürümleri ve Android 5.0 veya sonraki sürümleri kullanmalıdır.
-
LEVEL_3: Bu cihazlar, ek çıktı akışı yapılandırmalarıyla birlikte YUV yeniden işlemeyi ve RAW görüntü yakalamayı destekler.
-
EXTERNAL: Bu cihazlar, bazı istisnalar dışında
LIMITEDcihazlara benzer; örneğin, bazı sensör veya lens bilgileri raporlanmayabilir veya daha az sabit kare hızlarına sahip olabilir. Bu seviye, USB web kameraları gibi harici kameralar için kullanılır.
Bireysel yetenekler, Camera API2 arayüzlerindeki
android.request.availableCapabilities özelliği aracılığıyla ortaya çıkar.
FULL cihazlar, diğerlerinin yanı sıra
MANUAL_SENSOR ve
MANUAL_POST_PROCESSING özelliklerini gerektirir.
RAW özelliği,
FULL cihazlar için bile isteğe bağlıdır.
LIMITED cihazlar, hiçbiri dahil olmak üzere bu özelliklerin herhangi bir alt kümesinin reklamını yapabilir. Ancak,
BACKWARD_COMPATIBLE yeteneği her zaman tanımlanmalıdır.
Cihazın desteklenen donanım düzeyi ve desteklediği belirli Camera API2 özellikleri, Google Play'in Camera API2 kamera uygulamalarını filtrelemesine izin vermek için aşağıdaki özellik işaretleri olarak mevcuttur.
-
android.hardware.camera.hardware_level.full
-
android.hardware.camera.capability.raw
-
android.hardware.camera.capability.manual_sensor
-
android.hardware.camera.capability.manual_post_processing
CTS gereksinimleri
Android 5.0 ve sonraki sürümleri çalıştıran cihazlar, Camera API1 CTS, Camera API2 CTS ve CTS Verifier kamera testlerini geçmelidir.
Camera HAL3.2 uygulamasına sahip olmayan ve tam Camera API2 arabirimlerini destekleyemeyen cihazlar yine de Camera API2 CTS testlerini geçmelidir. Ancak cihaz, Camera API2
LEGACY modunda (Kamera API2 çağrılarının kavramsal olarak Camera API1 çağrılarıyla eşlendiği) çalışır, bu nedenle Camera API1'in ötesindeki özellikler veya yeteneklerle ilgili tüm Camera API2 CTS testleri otomatik olarak atlanır.
Eski cihazlarda, yürütülen Camera API2 CTS testleri, yeni gereksinim olmaksızın mevcut genel Camera API1 arayüzlerini ve özelliklerini kullanır. Ortaya çıkan (ve bir Camera API2 CTS hatasına neden olan) hatalar, cihazın mevcut Camera HAL'inde zaten mevcut olan hatalardır ve bu nedenle mevcut Camera API1 uygulamaları tarafından bulunabilir. Bu türden pek çok hata beklemiyoruz (ancak, Camera API2 CTS testlerini geçmek için bu tür hataların düzeltilmesi gerekir).
VTS gereksinimleri
Birleştirilmiş HAL uygulamalarıyla Android 8.0 ve sonraki sürümleri çalıştıran cihazlar, Camera VTS testlerini geçmelidir.
Kamera çerçevesi sertleştirme
Medya ve kamera çerçevesi güvenliğini güçlendirmek için Android 7.0, kamera hizmetini medya sunucusundan çıkarır. Android 8.0 ile başlayarak, her bir ciltlenmiş Camera HAL, kamera hizmetinden ayrı bir işlemde çalışır. Satıcıların, kullanılan API ve HAL sürümlerine bağlı olarak kamera HAL'inde değişiklik yapmaları gerekebilir. Aşağıdaki bölümler, genel gereksinimlerin yanı sıra HAL1 ve HAL3 için AP1 ve AP2'deki mimari değişiklikleri detaylandırmaktadır.
API1 için mimari değişiklikler
API1 video kaydı, kamera ve video kodlayıcının aynı süreçte yaşadığını varsayabilir. API1 kullanırken:
- Kamera hizmetinin işlemler arasında arabellekleri iletmek için BufferQueue kullandığı HAL3, satıcı güncellemesi gerekli değildir.
- Video arabelleklerinde meta verilerin iletilmesini destekleyen HAL1, satıcıların
kMetadataBufferTypeNativeHandleSourcekullanmak için HAL'ı güncellemesi gerekir. (
kMetadataBufferTypeCameraSourceartık Android 7.0'da desteklenmemektedir.)
API2 için mimari değişiklikler
HAL1 veya HAL3 üzerindeki API2 için, BufferQueue arabellekleri geçirir, böylece bu yollar çalışmaya devam eder. API2 için Android 7.0 mimarisi:
- HAL1, kamera hizmetinin taşınmasından etkilenmez ve satıcı güncellemesi gerekmez.
- HAL3 etkilenir , ancak satıcı güncellemesi gerekmez:
Ek gereksinimler
Sertleştirme ortamı ve kamera çerçevesi güvenliği için yapılan mimari değişiklikler, aşağıdaki ek cihaz gereksinimlerini içerir.
- Genel. Cihazlar, yüksek hızlı video kaydı gibi zamana duyarlı kamera kullanım durumlarını etkileyebilecek olan IPC nedeniyle ek bant genişliği gerektirir. Satıcılar, 120/240 FPS yüksek hızlı video kaydı için
android.hardware.camera2.cts.PerformanceTestve Google Kamera uygulamasını çalıştırarak gerçek etkiyi ölçebilir. Cihazlar ayrıca yeni işlemi oluşturmak için az miktarda ek RAM gerektirir.
- Video arabelleklerinde meta verileri iletin ( yalnızca HAL1 ). HAL1, video arabelleklerinde gerçek YUV çerçeve verileri yerine meta verileri depolarsa, HAL, meta veri arabellek türü olarak
kMetadataBufferTypeNativeHandleSourcekullanmalı ve video arabelleklerinde
VideoNativeHandleMetadata. (
kMetadataBufferTypeCameraSourceartık Android 7.0'da desteklenmemektedir.)
VideoNativeHandleMetadataile kamera ve medya çerçeveleri, yerel tutamaçları düzgün bir şekilde serileştirerek ve seri durumdan çıkararak video arabelleklerini işlemler arasında geçirebilir.
- Arabellek tanıtıcı adresi her zaman aynı arabelleği saklamaz ( yalnızca HAL3 ). Her yakalama isteği için HAL3, arabellek tutamaçlarının adreslerini alır. Adresler, HAL arabelleği döndürdükten sonra başka bir arabellek tanıtıcısı depolayabileceğinden, HAL, arabellekleri tanımlamak için adresleri kullanamaz. Arabellekleri tanımlamak için arabellek tutamaçlarını kullanmak için HAL'ı güncellemeniz gerekir. Örneğin, HAL, arabellek tanıtıcısı A'yı depolayan bir arabellek tanıtıcı adresi A alır. HAL, arabellek tanıtıcı A'yı döndürdükten sonra, arabellek tanıtıcı adresi A, HAL'in bir sonraki aldığında arabellek tanıtıcısı B'yi depolayabilir.
- Cameraserver için SELinux politikalarını güncelleyin. Cihaza özel SELinux politikaları medya sunucusuna kamerayı çalıştırma izinleri veriyorsa, kamera sunucusuna uygun izinler vermek için SELinux politikalarını güncellemeniz gerekir. Medya sunucusunun SELinux ilkelerini kamera sunucusu için kopyalamayı önermiyoruz (medya sunucusu ve kamera sunucusu genellikle sistemde farklı kaynaklar gerektirdiğinden). Kamera sunucusu yalnızca kamera işlevlerini gerçekleştirmek için gereken izinlere sahip olmalı ve medya sunucusundaki kamerayla ilgili gereksiz izinler kaldırılmalıdır.
- Camera HAL ve kamera sunucusu arasındaki ayrım. Android 8.0 ve sonraki sürümler ayrıca, kamera sunucusundan farklı bir işlemde ciltlenmiş Camera HAL'ı ayırır. IPC, HIDL tanımlı arayüzlerden geçer.
doğrulama
Bir kamera içeren ve Android 7.0 çalıştıran tüm cihazlar için, Android 7.0 CTS çalıştırarak uygulamayı doğrulayın. Android 7.0, kamera hizmeti değişikliklerini doğrulayan yeni CTS testleri içermese de, yukarıda belirtilen güncellemeleri yapmadıysanız mevcut CTS testleri başarısız olur.
Bir kamera içeren ve Android 8.0 ve sonraki sürümlerini çalıştıran tüm cihazlar için VTS'yi çalıştırarak satıcı uygulamasını doğrulayın.
Kamera HAL sürüm geçmişi
Android Kamera HAL'ını değerlendirmek için kullanılabilecek testlerin listesi için, Kamera HAL Testi Kontrol Listesi'ne bakın.
Android 10
Android 10, aşağıdaki güncellemeleri sunar.
Kamera API'sı
- Fiziksel kamera kimliklerini gizleyerek fiziksel kameraların tek tek veya karşılık gelen mantıksal kameralar aracılığıyla kullanılmasına izin veren çoklu kamera geliştirmeleri. Bkz. Çoklu Kamera Desteği .
- Yeni bir oturum oluşturmanın performans yükü olmadan belirli bir oturum yapılandırmasının desteklenip desteklenmediğini kontrol etme yeteneği.
CameraDevicebakın.
- İstemciyi daha verimli ve performanslı hale getirmek için belirli bir kullanım durumu için önerilen akış yapılandırmalarını alma yeteneği.
getRecommendedStreamConfigurationMapbakın.
- Derinlik JPEG görüntü formatı desteği. Daha fazla ayrıntı için Dinamik Derinlik belirtimine bakın.
- HEIC Görüntü formatı desteği. HEIF Görüntüleme bölümüne bakın.
- Gizlilik iyileştirmeleri. İstemcinin
CameraCharacteristicsalınabilmesi için
CAMERAizinlerine sahip olması için belirli anahtarlar gerekir.
getKeysNeedingPermissionbakın.
kamera HAL
Aşağıdaki Camera HAL sürümleri, Android 10'da güncellenmiştir.
3.5
ICameraDevice
-
getPhysicalCameraCharacteristics: Mantıksal bir kamera cihazını destekleyen fiziksel kamera kimliği için statik kamera bilgileri. Bkz. Çoklu Kamera Desteği .
-
isStreamCombinationSupported: Bu yöntem, istemcilerin bir oturum yapılandırmasının desteklenip desteklenmediğini sorgulamasına yardımcı olan genel bir API'yi destekler. Akış kombinasyonlarını sorgulamak için API'ye bakın.
ICameraDeviceSession
-
isReconfigurationNeeded: Olası yeni oturum parametre değerleri için tam akış yeniden yapılandırmasının gerekli olup olmadığını kamera çerçevesine söyleyen yöntem. Bu, gereksiz kamera yeniden yapılandırma gecikmelerini önlemeye yardımcı olur. Bkz. Oturum yeniden yapılandırma sorgusu .
- HAL arabellek yönetimi API'leri : Bu API'ler, her bir yakalama isteğini kamera hattı boyunca ilişkili arabelleklerle birleştirmek yerine, kamera HAL'ının yalnızca gerektiğinde kamera çerçevesinden arabellekler istemesine izin vererek önemli ölçüde bellek tasarrufu sağlar.
-
signalStreamFlush: HAL'a, kamera hizmetinin
configureStreams_3_5gerçekleştirmek üzere olduğunu ve HAL'nin belirlenen akışların tüm arabelleklerini döndürmesi gerektiğini bildirir.
-
configureStreams_3_5:
ICameraDevice3.4.configureStreamsbenzer, ancak buna ek olarak,
configureStreams_3_5ve
signalStreamFlushçağrıları arasında bir yarış durumunu kontrol etmek için
streamConfigCountersayacı sağlanır.
-
ICameraDeviceCallback için güncellemeler:
-
requestStreamBuffers: Kamera HAL'ının kamera sunucusundan arabellek istemek için çağırdığı senkronize geri arama.
requestStreamBuffersbakın.
-
returnStreamBuffers: Çıkış arabelleklerini kamera sunucusuna döndürmek için kamera HAL'si için senkronize geri arama. Bkz.
returnStreamBuffers.
3.4
Android 10'da kamera meta verilerine aşağıdaki tuşlar eklenir.
- Görüntü biçimleri
-
ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
-
ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
-
ANDROID_SCALER_AVAILABLE_FORMATS_Y8
-
- Kamera meta veri etiketleri
-
ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
-
ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
-
ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
-
ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
-
ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
-
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
-
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
-
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
-
ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
-
ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
-
ANDROID_HEIC_INFO_SUPPORTED
-
ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
-
- yetenekler
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
-
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENTanahtarının değerleri
-
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
-
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
-
- Mevcut dinamik derinlik akışı yapılandırmaları
-
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
-
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
-
- Kullanılabilir HEIC akış yapılandırmaları
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT
-
Kamera modülü
Aşağıdaki kamera modülü sürümleri Android 10'da güncellenmiştir.
2.5
- Cihazların katlama gibi fiziksel değişiklikler kamerayı ve yönlendirmeyi etkilediğinde kamera HAL'sini bilgilendirmesi için
notifyDeviceStateChangeyöntemini ekler.
2.4
- API düzeyi 29 veya üzeri ile başlatılan cihazlar isTorchModeSupported için
truerapor
isTorchModeSupported.
Android 9
Android 9 sürümü, kamera API2 ve HAL arayüzü için aşağıdaki güncellemeleri sunar.
Kamera API'sı
- Aynı yöne bakan birden fazla kameraya sahip cihazları daha iyi desteklemek için çoklu kamera API'sini sunar ve bokeh ve kusursuz yakınlaştırma gibi özellikleri etkinleştirir. Bu, uygulamaların bir cihazdaki birden fazla kamerayı tek bir mantıksal birim (mantıksal kamera) olarak görüntülemesine olanak tanır. Yakalama istekleri, tek bir mantıksal kamera tarafından kapsanan ayrı kamera cihazlarına da gönderilebilir. Bkz. Çoklu Kamera Desteği .
- Oturum parametrelerini tanıtır. Oturum parametreleri, değiştirildiğinde ciddi işleme gecikmelerine neden olabilen mevcut yakalama parametrelerinin bir alt kümesidir. İstemciler, yakalama oturumu başlatma sırasında başlangıç değerlerini geçerse, bu maliyetler azaltılabilir. Oturum Parametrelerine bakın.
- Uygulama düzeyinde stabilizasyon ve efektler için optik stabilizasyon (OIS) veri anahtarları ekler.
STATISTICS_OIS_SAMPLESbakın.
- Harici flaş desteği ekler.
CONTROL_AE_MODE_ON_EXTERNAL_FLASHbakın.
-
CAPTURE_INTENTiçinde bir hareket izleme amacı ekler.
CONTROL_CAPTURE_INTENT_MOTION_TRACKINGbakın.
-
LENS_RADIAL_DISTORTIONve yerine
LENS_DISTORTIONekler.
-
CaptureRequestbozulma düzeltme modları ekler.
DISTORTION_CORRECTION_MODEbakın.
- Desteklenen cihazlarda harici USB/UVC kameralar için destek ekler.
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNALbakın.
kamera HAL
3.4
ICameraDeviceSession güncellemeleri
-
configureStreams_3_4:
sessionParametersve mantıksal kameralar için destek ekler.
-
processCaptureRequest_3_4: Akış yapısına fiziksel kamera kimliklerini dahil etmek için destek ekler.
ICameraDeviceCallback için güncellemeler
-
processCaptureResult_3_4: Yakalama sonuçlarına fiziksel kamera meta verileri ekler.
3.3
Android 9'da kamera meta verilerine aşağıdaki tuşlar eklenir.
- yetenekler
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
-
- Kamera meta veri etiketleri
-
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
-
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
-
ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
-
ANDROID_LENS_POSE_REFERENCE
-
ANDROID_LENS_DISTORTION
-
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
-
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
-
ANDROID_STATISTICS_OIS_DATA_MODE
-
ANDROID_STATISTICS_OIS_TIMESTAMPS
-
ANDROID_STATISTICS_OIS_X_SHIFTS
-
ANDROID_STATISTICS_OIS_Y_SHIFTS
-
Android 8.0
Android 8.0 sürümü Treble'ı sunar. Treble ile, satıcının Camera HAL uygulamalarının ciltlenmesi gerekir. Android 8.0, Kamera hizmetinde şu önemli geliştirmeleri de içerir:
- Paylaşılan yüzeyler: Aynı
OutputConfigurationpaylaşan birden çok yüzeyi etkinleştirin
- Özel kamera modları için sistem API'si
-
onCaptureQueueEmpty
Bu özellikler hakkında daha fazla bilgi için aşağıdaki bölümlere bakın.
Paylaşılan yüzeyler
Bu özellik, güç ve bellek tüketimini azaltan, önizleme ve video kodlama gibi iki çıkışı çalıştırmak için yalnızca bir arabellek kümesi sağlar. Bu özelliği desteklemek için cihaz üreticilerinin, kamera HAL ve gralloc HAL uygulamalarının tek bir tüketici yerine birden çok farklı tüketici (donanım oluşturucu/GPU ve video kodlayıcı gibi) tarafından kullanılan gralloc arabellekleri oluşturabildiğinden emin olmaları gerekir. Kamera hizmeti, tüketici kullanım bayraklarını kamera HAL'ına ve gralloc HAL'a iletir; ya doğru türde arabellekleri ayırmaları gerekir ya da kamera HAL'ının bu tüketici kombinasyonunun desteklenmediğine dair bir hata döndürmesi gerekir.
Ek ayrıntılar için
enableSurfaceSharing geliştirici belgelerine bakın.
Özel kamera modları için sistem API'si
Genel kamera API'si iki çalışma modu tanımlar: normal ve kısıtlı yüksek hızlı kayıt. Oldukça farklı anlambilimleri vardır; örneğin, yüksek hız modu, aynı anda en fazla iki belirli çıkışla sınırlıdır. Çeşitli OEM'ler, donanıma özel yetenekler için diğer özel modları tanımlamaya ilgi duyduklarını ifade ettiler. Başlık altında, mod yalnızca
configure_streams öğesine iletilen bir tamsayıdır. Bakınız:
hardware/camera/device/3.2/ICameraDeviceSession#configurestreams .
Bu özellik, OEM kamera uygulamalarının özel bir modu etkinleştirmek için kullanabileceği bir sistem API çağrısını içerir. Genel API'ye eklenecek gelecekteki modlarla çakışmayı önlemek için bu modlar 0x8000 tamsayı değerinde başlamalıdır.
Bu özelliği desteklemek için OEM'lerin yalnızca HAL'lerine, configure_streams üzerinde HAL'e iletilen bu tamsayı tarafından tetiklenen yeni modu eklemeleri ve ardından özel kamera uygulamalarının sistem API'sini kullanmaları gerekir.
onCaptureQueueBoş
Bu API'nin amacı, istek kuyruğunu olabildiğince boş tutarak yakınlaştırma gibi kontrol değişikliklerinin gecikmesini azaltmaktır.
onCaptureQueueEmpty , HAL çalışması gerektirmez; tamamen çerçeve tarafında bir eklemeydi. Bundan yararlanmak isteyen uygulamalar, bu geri aramaya bir dinleyici eklemeli ve uygun şekilde yanıt vermelidir. Genellikle bu, kamera cihazına başka bir yakalama isteği göndererek olur.
Kamera HIDL arayüzü
Camera HIDL arabirimi, kararlı HIDL tanımlı API'ler kullanan Camera HAL arabiriminin eksiksiz bir revizyonudur. En son eski sürüm 3.4 ve 2.4'te (kamera modülü için) sunulan tüm özellikler ve kamera yetenekleri de HIDL tanımlarının bir parçasıdır.
3.4
Desteklenen meta verilere küçük eklemeler ve data_space desteğinde yapılan değişiklikler:
-
RAW_OPAQUEbiçimi destekleniyorsa,
ANDROID_SENSOR_OPAQUE_RAW_SIZEstatik meta verilerini zorunlu olarak ekleyin.
- Herhangi bir RAW biçimi destekleniyorsa,
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGEstatik meta verilerini zorunlu olarak ekleyin.
- Veri alanı kodlamasının sürüm 0 tanımını kullanarak
camera3_stream_t data_spacealanını daha esnek bir tanıma geçirin.
- HALv3.2 veya daha yenisi için kullanılabilen genel meta veri eklemeleri:
-
ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
-
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
-
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
-
ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
-
ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
-
ANDROID_SENSOR_OPAQUE_RAW_SIZE
-
ANDROID_SENSOR_OPTICAL_BLACK_REGIONS
-
3.3
Genişletilmiş yetenekli HAL'nin küçük revizyonu:
- OPAQUE ve YUV yeniden işleme API güncellemeleri.
- Derinlik çıktı tamponları için temel destek.
-
data_spacealanının
camera3_stream_t.
-
camera3_stream_tiçin döndürme alanının eklenmesi.
- camera3_stream_configuration_t öğesine camera3 akış yapılandırma çalışma modunun
camera3_stream_configuration_t.
3.2
Genişletilmiş yetenekli HAL'nin küçük revizyonu:
-
get_metadata_vendor_tag_ops. Bunun yerine
get_vendor_tag_ops
camera_common.hkullanın.
-
register_stream_buffersöğesini kullanımdan kaldırır. Process_capture_request içinde çerçeve tarafından HAL'a sağlanan tüm
process_capture_requestarabellekleri herhangi bir zamanda yeni olabilir.
- Kısmi sonuç desteği ekleyin.
process_capture_result, tam sonuç mevcut olmadan önce mevcut sonuçların bir alt kümesiyle birden çok kez çağrılabilir.
-
camera3_request_templatemanuel şablon ekleyin. Uygulamalar, yakalama ayarlarını doğrudan kontrol etmek için bu şablonu kullanabilir.
- Çift yönlü ve giriş akışı özelliklerini yeniden işleyin.
- Giriş arabelleği dönüş yolunu değiştirin. Tampon,
process_capture_resultyerine
process_capture_requestiçinde döndürülür.
3.1
Genişletilmiş yetenekli HAL'nin küçük revizyonu:
-
configure_streams, tüketici kullanım bayraklarını HAL'a iletir.
- tüm uçuş sırasındaki istekleri/arabellekleri olabildiğince hızlı bırakmak için aramayı boşaltın.
3.0
Genişletilmiş yetenekli HAL'nin ilk revizyonu:
- ABI tamamen farklı olduğundan büyük sürüm değişikliği. 2.0'dan itibaren gerekli donanım yeteneklerinde veya operasyonel modelde değişiklik yok.
- Yeniden çalışılan giriş isteği ve akış sırası arabirimleri: Sonraki istek ve akış arabellekleri zaten kuyruğundan kaldırılmış olarak HAL'a çerçeve çağrıları. Verimli uygulamalar için gerekli olan senkronizasyon çerçevesi desteği dahildir.
- Tetikleyiciler isteklere, çoğu bildirim sonuçlara taşındı.
- Tüm geri aramaları tek bir yapıda ve tüm kurulum yöntemlerini tek bir
initialize()çağrısında bir araya getirdi.
- Akış yönetimini basitleştirmek için akış yapılandırmasını tek bir çağrıya dönüştürdü. Çift yönlü akışlar,
STREAM_FROM_STREAMyapısının yerini alır.
- Daha eski/sınırlı donanım aygıtları için sınırlı mod semantiği.
2.0
Genişletilmiş özellikli HAL (Android 4.2) [camera2.h]'nin ilk sürümü:
- Mevcut
android.hardware.CameraAPI'sini uygulamak için yeterlidir.
- Kamera hizmet katmanında ZSL kuyruğuna izin verir.
- Manuel yakalama kontrolü, Bayer RAW yakalama, RAW verilerinin yeniden işlenmesi vb. gibi yeni özellikler için test edilmemiştir.
1.0
İlk Android kamera HAL (Android 4.0) [camera.h]:
- C++ CameraHardwareInterface soyutlama katmanından dönüştürülmüş.
-
android.hardware.CameraAPI'sini destekler.
Kamera modülü sürüm geçmişi
Bu bölüm,
camera_module_t.common.module_api_version temelinde Kamera donanım modülü için modül sürüm oluşturma bilgilerini içerir. En önemli iki onaltılık basamak ana sürümü temsil eder ve en az anlamlı iki rakam küçük sürümü temsil eder.
2.4
Bu kamera modülü sürümü, aşağıdaki API değişikliklerini ekler:
- Torç modu desteği. Çerçeve, flaş ünitesine sahip herhangi bir kamera cihazı için bir kamera cihazı açmadan meşale modunu açabilir. Kamera cihazının flaş ünitesine erişme önceliği kamera modülünden daha yüksektir; modül arabirimi aracılığıyla etkinleştirildiyse, bir kamera cihazının açılması torcu kapatır. Bir kamera cihazını açmak için
open()çağrıldığı gibi herhangi bir kaynak çakışması olduğunda, kamera HAL modülü, meşale modu durum geri çağrısı aracılığıyla çerçeveye meşale modunun kapatıldığını bildirmelidir.
- Harici kamera (örneğin, USB çalışırken takılabilir kamera) desteği. API güncellemeleri, kamera statik bilgilerinin yalnızca kamera bağlı olduğunda ve harici çalışırken takılabilir kameralar için kullanıma hazır olduğunda kullanılabileceğini belirtir. Statik bilgi almak için yapılan çağrılar, kamera durumu
CAMERA_DEVICE_STATUS_PRESENTolmadığında geçersiz çağrılardır. Çerçeve, mevcut harici kamera listesini yönetmek için yalnızca cihaz durumu değişikliği geri aramalarına güvenir.
- Kamera tahkim ipuçları. Aynı anda açılıp kullanılabilen kamera cihazlarının sayısını açıkça belirtmek için destek ekler. Geçerli cihaz kombinasyonlarını belirtmek için,
resource_costve
conflicting_devicesalanları her zaman
get_camera_infoçağrısı tarafından döndürülen
camera_infoyapısında ayarlanmalıdır.
- Modül başlatma yöntemi. HAL'ın bir kerelik başlatılmasına izin vermek için HAL modülü yüklendikten sonra kamera hizmeti tarafından çağrılır. Diğer modül yöntemleri çağrılmadan önce çağrılır.
2.3
Bu kamera modülü sürümü, açık eski kamera HAL cihazı desteği ekler. Aynı cihaz birden fazla cihaz API sürümünü destekleyebiliyorsa, çerçeve bunu kamera cihazını daha düşük cihaz HAL sürümü HAL cihazı olarak açmak için kullanabilir. Standart donanım modülü açık çağrısı (
common.methods->open ), kamera cihazını desteklenen en son sürümle açmaya devam eder, bu aynı zamanda
camera_info_t.device_version içinde listelenen sürümdür.
2.2
Bu kamera modülü sürümü, modülden satıcı etiketi desteği ekler ve daha önce yalnızca bir cihaz açıkken erişilebilen eski
vendor_tag_query_ops kullanımdan kaldırır.
2.1
Bu kamera modülü sürümü, çerçeveyi kamera modülü durumundaki değişiklikler hakkında bilgilendirmek için kullanılan kamera HAL modülünden çerçeveye eşzamansız geri aramalar için destek ekler. Geçerli bir
set_callbacks() yöntemi sağlayan modüller en azından bu sürüm numarasını bildirmelidir.
2.0
Bu sürüm numarasını bildiren kamera modülleri, kamera modülü HAL arabiriminin ikinci sürümünü uygular. Bu modül aracılığıyla açılabilen kamera cihazları, kamera cihazı HAL arayüzünün 1.0 veya 2.0 sürümünü destekleyebilir.
device_version alanı her zaman geçerlidir; camera_info'nun
static_camera_characteristics alanı,
camera_info alanı 2.0 veya daha
device_version geçerlidir.
1.0
Bu sürüm numaralarını bildiren kamera modülleri, ilk kamera modülü HAL arabirimini uygular. Bu modül aracılığıyla açılabilen tüm kamera cihazları, kamera cihazı HAL'nin yalnızca 1. sürümünü destekler.
camera_info
device_version ve
static_camera_characteristics alanları geçerli değil. Bu modül ve aygıtları yalnızca
android.hardware.Camera API'sini destekleyebilir.