Bu sayfada, kamera HAL'leri, API'ler ve ilişkili Compatibility Test Suite (CTS) testlerindeki sürüm farklılıkları ayrıntılı olarak açıklanmaktadır. Ayrıca, Android 7.0'daki kamera çerçevesini güçlendirmek ve güvence altına 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 yapması gereken güncellemeleri de kapsar.
Terminoloji
Bu sayfada aşağıdaki terimler kullanılmaktadır:
- Kamera API'si1
- Android 4.4 ve önceki sürümleri çalıştıran cihazlarda uygulama düzeyinde kamera çerçevesi (
android.hardware.Camera
sınıfı aracılığıyla gösterilir). - Kamera API'sı2
- Android 5.0 ve sonraki sürümleri çalıştıran cihazlarda uygulama düzeyinde kamera çerçevesi
android.hardware.camera2
paketi aracılığıyla gösteriliyor. - Kamera HAL'i
- SoC tedarikçileri tarafından uygulanan kamera modülü katmanı. Uygulama düzeyindeki herkese açık çerçeveler, kamera HAL'sinin üzerine inşa edilmiştir.
- Kamera HAL3.1
- Android 4.4 ile birlikte yayınlanan kamera cihaz HAL'inin sürümü.
- Kamera HAL3.2
- Android 5.0 ile birlikte yayınlanan kamera cihazı HAL'inin sürümü.
- Camera API1 CTS
- Camera API1'in üzerinde çalışan kamera CTS testleri grubu.
- Camera API2 CTS
- Camera API2'nin üzerinde çalışan ek kamera CTS testleri.
- Tiz
- Tedarikçi firma uygulamasını (silikon üreticileri tarafından yazılan cihaza özgü, alt seviye yazılımlar) yeni bir tedarikçi firma arayüzü aracılığıyla Android OS çerçevesinden ayırır.
- HIDL
- Treble ile sunulan ve HAL ile kullanıcıları arasındaki arayüzü belirtmek için kullanılan HAL arayüz tanımlama dili.
- VTS
- Treble ile birlikte satıcı test paketi kullanıma sunuldu.
Kamera API'leri
Android aşağıdaki kamera API'lerini içerir.
Kamera API'si1
Android 5.0'da Camera API1'in desteği sonlandırıldı. Yeni platform geliştirmeleri Camera API2'ye odaklandığından bu API'nin desteği aşamalı olarak kaldırılmaya devam ediyor. Ancak kullanımdan kaldırma süreci uzun olacak ve Android sürümleri bir süre daha Camera API1 uygulamalarını desteklemeye devam edecektir. Özellikle aşağıdakiler için destek devam eder:
- Uygulamalar için Camera API1 arayüzleri. Camera API1'in üzerine inşa edilen kamera uygulamaları, daha düşük Android sürümlerini çalıştıran cihazlarda olduğu gibi çalışmalıdır.
- Kamera HAL sürümleri. Kamera HAL1.0 desteği dahildir.
Camera API2
Kamera API2 çerçevesi, uygulamaya daha düşük düzeyde kamera kontrolü sunar. Bu kontrol, sıfır kopyalamayla etkili seri/akış akışları ve pozlama, kazanç, beyaz denge kazançları, renk dönüştürme, gürültü giderme, keskinleştirme ve daha fazlası için kare başına kontroller içerir. Ayrıntılar için Google I/O videosuna genel bakış başlıklı videoyu izleyin.
Android 5.0 ve sonraki sürümler Camera API2'yi içerir ancak Android 5.0 ve sonraki sürümleri çalıştıran cihazlar Camera API2'nin tüm özelliklerini desteklemeyebilir. Uygulamaların Camera API2 arayüzleri aracılığıyla sorgulayabileceği android.info.supportedHardwareLevel
mülkü, aşağıdaki destek düzeylerinden birini raporlar:
LEGACY
: Bu cihazlar, Camera API2 arayüzleri aracılığıyla uygulamalara Camera API1 arayüzleri aracılığıyla uygulamalara sunulanlarla yaklaşık olarak aynı özellikler sunar. Eski çerçeve kodları, Camera API2 çağrılarını 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 Kamera HAL 3.2 veya sonraki bir sürümü kullanmalıdır.FULL
: Bu cihazlar, Camera API2'nin tüm önemli özelliklerini destekler ve Camera HAL 3.2 veya sonraki bir sürüm ile Android 5.0 veya sonraki bir sürüm kullanmalıdır.LEVEL_3
: Bu cihazlar, ek çıkış akışı yapılandırmalarının yanı sıra YUV yeniden işlemeyi ve RAW resim yakalamayı destekler.EXTERNAL
: Bu cihazlar, bazı istisnalar dışındaLIMITED
cihazlarına benzer. Örneğin, bazı sensör veya lens bilgileri raporlanmayabilir ya da daha kararsız kare hızlarına sahip olabilir. Bu düzey, USB web kameraları gibi harici kameralar için kullanılır.
Ayrı ayrı özellikler, Camera API2 arayüzlerindeki android.request.availableCapabilities
mülkü aracılığıyla gösterilir. FULL
cihazlar, diğer özelliklerin 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, bu özelliklerin hiçbiri dahil olmak üzere bu özelliklerin herhangi bir alt kümesinin reklamını yapabilir. Ancak BACKWARD_COMPATIBLE
özelliği her zaman tanımlanmalıdır.
Cihazın desteklediği donanım düzeyi ve desteklediği belirli Camera2 API2 özellikleri, Google Play'in Camera2 API2 kamera uygulamalarını filtrelemesine olanak tanımak için aşağıdaki özellik işaretleri olarak kullanılabilir.
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 koşulları
Android 5.0 ve sonraki sürümleri çalıştıran cihazlar, Camera API1 CTS, Camera API2 CTS ve CTS Doğrulayıcı kamera testlerini geçmelidir.
Kamera HAL3.2 uygulaması içermeyen ve Camera API2 arayüzlerinin tamamını destekleyemeyen cihazlar, Camera API2 CTS testlerini yine de geçmelidir. Ancak cihaz, Camera API2 LEGACY
modunda çalışır (Camera API2 çağrılarının kavramsal olarak Camera API1 çağrılarıyla eşlendiği mod). Bu nedenle, Camera API1'in ötesindeki özellikler veya özelliklerle ilgili tüm Camera API2 CTS testleri otomatik olarak atlanır.
Eski cihazlarda çalıştırılan Camera API2 CTS testleri, yeni şart olmadan mevcut herkese açık Camera API1 arayüzlerini ve özelliklerini kullanır. Ortaya çıkarılan (ve Camera API2 CTS hatasına neden olan) hatalar, cihazın mevcut Camera HAL'inde zaten mevcut olan hatalar olduğundan mevcut Camera API1 uygulamaları tarafından bulunur. Bu tür çok fazla hata beklemiyoruz (ancak Camera API2 CTS testlerini geçmek için bu tür hataların düzeltilmesi gerekir).
VTS gereksinimleri
Android 8.0 ve sonraki sürümleri çalıştıran, bağlayıcı HAL uygulamalarını kullanan cihazlar Kamera VTS testlerinden geçmelidir.
Kamera çerçevesi sağlamlaştırma
Android 7.0, medya ve kamera çerçevesi güvenliğini güçlendirmek için kamera hizmetini medya sunucusunun dışına taşır. Android 8.0'dan itibaren, her bağlayıcılı kamera HAL'i kamera hizmetinden ayrı bir işlemde çalışır. Kullanılan API ve HAL sürümlerine bağlı olarak tedarikçi firmaların, kamera HAL'sinde değişiklik yapması gerekebilir. Aşağıdaki bölümlerde, HAL1 ve HAL3 için AP1 ve AP2'deki mimari değişikliklerin yanı sıra genel şartlar ayrıntılı olarak açıklanmıştır.
API1 için mimari değişiklikleri
API1 video kaydı, kamera ve video kodlayıcının aynı işlemde olduğunu varsayabilir. API1'i şu platformlarda kullanırken:
- Kamera hizmetinin, tamponları işlemler arasında iletmek için BufferQueue'ı kullandığı HAL3'te tedarikçi güncellemesi gerekmez.
- Video arabelleklerinde meta veri aktarımını destekleyen HAL1. Tedarikçi firmaların HAL'i
kMetadataBufferTypeNativeHandleSource
kullanacak şekilde güncellemesi gerekir. (kMetadataBufferTypeCameraSource
artık Android 7.0'da desteklenmiyor.)
API2 için mimari değişiklikleri
HAL1 veya HAL3'teki API2 için BufferQueue, bu yolların çalışmaya devam etmesi amacıyla arabellekleri iletir. Aşağıdaki cihazlarda API2 için Android 7.0 mimarisi:
- HAL1, kamera hizmetinin taşınmasından etkilenmez ve tedarikçinin güncellenmesi gerekmez.
- HAL3 etkilenir ancak satıcı güncellemesi gerekmez:
Diğer şartlar
Medya ve kamera çerçevesinin güvenliğini artırmak için yapılan mimari değişiklikler, aşağıdaki ek cihaz şartlarını içerir.
- Genel: Cihazlar, IPC nedeniyle ek bant genişliği gerektirir. Bu durum, yüksek hızlı video kaydı gibi zamana duyarlı kamera kullanım alanlarını etkileyebilir. Tedarikçi firmalar, 120/240 FPS yüksek hızlı video kaydı için
android.hardware.camera2.cts.PerformanceTest
ve Google Kamera uygulamasını çalıştırarak gerçek etkiyi ölçebilir. Cihazların yeni işlemi oluşturmak için az miktarda ek RAM'e de ihtiyacı vardır. - Meta verileri video arabelleklerine aktarma (yalnızca HAL1). HAL1, video arabelleklerinde gerçek YUV çerçeve verileri yerine meta verileri depoluyorsa meta veri arabellek türü olarak
kMetadataBufferTypeNativeHandleSource
'ü kullanmalı veVideoNativeHandleMetadata
'ü video arabelleklerine iletmelidir. (kMetadataBufferTypeCameraSource
artık Android 7.0'da desteklenmiyor.)VideoNativeHandleMetadata
sayesinde kamera ve medya çerçeveleri, yerel herkese açık kullanıcı adlarını düzgün bir şekilde serileştirip seri dışı bırakarak video arabelleklerini işlemler arasında geçirebilir. - Arabellek adresi adresi her zaman aynı arabelleği depolamaz (yalnızca HAL3). HAL3, her yakalama isteği için arabellek tutamaçlarının adreslerini alır. HAL, tamponu döndürdükten sonra adresler başka bir tampon tutamacını depolayabileceğinden, tamponları tanımlamak için adresleri kullanamaz. Arabellekleri tanımlamak için arabellek tutamaçlarını kullanacak şekilde HAL'i güncellemeniz gerekir. Örneğin HAL, A arabellek tutma yeri A'yı depolayan bir arabellek tutma yeri adresi alır. HAL, A arabellek tutamacını döndürdükten sonra A arabellek tutamaç adresi, HAL'ın bir sonraki sefer aldığında B arabellek tutamacını saklayabilir.
- cameraserver için SELinux politikalarını güncelleyin. Cihaza özgü SELinux politikaları, mediaserver'a kamerayı çalıştırma izni veriyorsa SELinux politikalarını, cameraserver'a uygun izinler verecek şekilde güncellemeniz gerekir. Mediaserver'ın SELinux politikalarının cameraserver için kopyalanmasını önermeyiz (mediaserver ve cameraserver genellikle sistemde farklı kaynaklar gerektirdiğinden). Cameraserver 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.
- Kamera HAL'si ile kamera sunucusu arasında ayırma. Android 8.0 ve sonraki sürümlerde, kamera sunucusundan farklı bir işlemde bağlayıcılı kamera HAL'i de ayrılır. IPC, HIDL tarafından tanımlanan arayüzlerden geçer.
Doğrulama
Kamera içeren ve Android 7.0 çalıştıran tüm cihazlarda Android 7.0 CTS'yi çalıştırarak uygulamayı doğrulayın. Android 7.0, kamera hizmetindeki değişiklikleri doğrulayan yeni CTS testleri içermese de yukarıda belirtilen güncellemeleri yapmadıysanız mevcut CTS testleri geçersiz olur.
Kamera içeren ve Android 8.0 veya sonraki sürümleri çalıştıran tüm cihazlarda VTS'yi çalıştırarak tedarikçi firma uygulamasını doğrulayın.
Kamera HAL sürümü geçmişi
Android kamera HAL'ini değerlendirmek için kullanılabilen testlerin listesi için Kamera HAL Testi Yapılacaklar Listesi'ne bakın.
Android 10
Android 10'da aşağıdaki güncellemeler sunulur.
Kamera API'si
- Fiziksel kamera kimliklerini gizleyerek fiziksel kameraların tek tek veya ilgili mantıksal kameralar aracılığıyla kullanılmasına olanak tanıyan çok kameralı iyileştirmeler. Çoklu Kamera Desteği başlıklı makaleyi inceleyin.
- Yeni oturum oluşturmanın performans yükü olmadan belirli bir oturum yapılandırmasının desteklenip desteklenmediğini kontrol etme olanağı.
CameraDevice
adresine göz atın. - İstemciyi daha güç verimli ve performanslı hale getirmek için belirli bir kullanım alanı için önerilen akış yapılandırmalarını alma olanağı.
getRecommendedStreamConfigurationMap
adresine göz atın. - Derinlik JPEG resim biçimi desteği. Ayrıntılı bilgi için Dinamik Derinlik spesifikasyonuna bakın.
- HEIC resim biçimi desteği. HEIF Görüntüleme bölümünü inceleyin.
- Gizlilik iyileştirmeleri. Belirli anahtarların
CameraCharacteristics
'den alınabilmesi için istemcininCAMERA
izinlerine sahip olması gerekir. Bkz.getKeysNeedingPermission
.
Kamera HAL'i
Android 10'da aşağıdaki Kamera HAL sürümleri güncellendi.
3,5
ICameraDevice
-
getPhysicalCameraCharacteristics
: Mantıksal kamera cihazını destekleyen fiziksel bir kamera kimliği için statik kamera bilgileri. Çoklu Kamera Desteği başlıklı makaleyi inceleyin. isStreamCombinationSupported
: Bu yöntem, istemcilerin oturum yapılandırmasının desteklenip desteklenmediğini sorgulamasına yardımcı olan herkese açık bir API'yi destekler. Akış kombinasyonlarını sorgulamak için API başlıklı makaleyi inceleyin.
ICameraDeviceSession
-
isReconfigurationNeeded
: Olası yeni oturum parametresi değerleri için tam akış yeniden yapılandırmasının gerekip gerekmediğini kamera çerçevesine bildiren yöntem. Bu, kameranın yeniden yapılandırmada gereksiz gecikmelerin önlenmesine yardımcı olur. Oturum yeniden yapılandırma sorgusu başlıklı makaleyi inceleyin. - HAL arabellek yönetimi API'leri: Bu API'ler, kamera HAL'inin her yakalama isteğini kamera ardışık düzeni boyunca ilişkili arabellekleriyle birleştirmek yerine yalnızca gerektiğinde kamera çerçevesinden arabellek istemesine olanak tanır. Bu da önemli ölçüde bellek tasarrufu sağlar.
-
signalStreamFlush
: HAL'ye, kamera hizmetininconfigureStreams_3_5
işlemini gerçekleştirmek üzere olduğunu ve HAL'nin, belirlenmiş akışların tüm arabelleklerini döndürmesi gerektiğini bildirir. -
configureStreams_3_5
:ICameraDevice3.4.configureStreams
özelliğine benzer ancak buna ek olarak,configureStreams_3_5
ilesignalStreamFlush
çağrıları arasındaki yarış durumunu kontrol etmek içinstreamConfigCounter
sayacı da sağlanır.
-
ICameraDeviceCallback
ile ilgili güncellemeler:
-
requestStreamBuffers
: Kamera HAL'inin, kamera sunucusundan arabellekler istemek için çağırdığı eşzamanlı geri çağırma işlevi. Bkz.requestStreamBuffers
. -
returnStreamBuffers
: Kamera HAL'inin çıkış arabelleklerini kamera sunucusuna döndürmesi için senkron geri çağırma işlevi. Bkz.returnStreamBuffers
.
3,4
Android 10'da kamera meta verilerine aşağıdaki anahtarlar eklenir.
- Resim 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
- Özellikler
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
anahtarının değerleriANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
- Kullanılabilir 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 yayın 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üncellendi.
2,5
- Katlama gibi fiziksel değişiklikler kamerayı ve yönlendirmeyi etkilediğinde cihazların kamera HAL'sini bilgilendirmesi için
notifyDeviceStateChange
yöntemini ekler.
2.4
- API düzeyi 29 veya sonraki sürümleri çalıştıran cihazlar,
isTorchModeSupported
içintrue
değerini bildirmelidir.
Android 9
Android 9 sürümünde, kamera API2 ve HAL arayüzünde aşağıdaki güncellemeler kullanıma sunulmuştur.
Kamera API'si
- Aynı yöne bakan birden fazla kamerası olan cihazları daha iyi desteklemek, bokeh ve kesintisiz yakınlaştırma gibi özellikleri etkinleştirmek için çoklu kamera API'sini kullanıma sundu. Bu, uygulamaların bir cihazdaki birden fazla kamerayı tek bir mantıksal birim (mantıksal kamera) olarak görüntülemesine olanak tanır. Kayıt istekleri, tek bir mantıksal kameranın kapsadığı ayrı kamera cihazlarına da gönderilebilir. Çoklu Kamera Desteği başlıklı makaleyi inceleyin.
- Oturum parametrelerini tanıtır. Oturum parametreleri, mevcut yakalama parametrelerinin bir alt kümesidir ve değiştirildiğinde ciddi işleme gecikmelerine neden olabilir. İstemciler, yakalama oturumu başlatılırken ilk değerlerini iletirse bu maliyetler azaltılabilir. Oturum Parametreleri bölümüne bakın.
- Uygulama düzeyinde sabitleme ve efektler için optik sabitleme (OIS) veri anahtarları ekler. Bkz.
STATISTICS_OIS_SAMPLES
. - Harici flaş desteği ekler. Bkz.
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
. CAPTURE_INTENT
aralığına hareket izleme amacı ekler. Bkz.CONTROL_CAPTURE_INTENT_MOTION_TRACKING
.LENS_RADIAL_DISTORTION
desteği sonlandırılır ve yerineLENS_DISTORTION
eklenir.CaptureRequest
'te distorsiyon düzeltme modları ekler. Bkz.DISTORTION_CORRECTION_MODE
.- Desteklenen cihazlarda harici USB/UVC kamera desteği eklendi. Bkz.
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
.
Kamera HAL'i
3.4
ICameraDeviceSession
ile ilgili güncellemeler
-
configureStreams_3_4
:sessionParameters
ve mantıksal kameralar için destek ekler. -
processCaptureRequest_3_4
: Akış yapısına fiziksel kamera kimlikleri ekleme desteği eklendi.
ICameraDeviceCallback
ile ilgili güncellemeler
-
processCaptureResult_3_4
: Kamera yakalama sonuçlarına fiziksel kamera meta verilerini ekler.
3,3
Android 9'da kamera meta verilerine aşağıdaki anahtarlar eklenir.
- Özellikler
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
Treble, Android 8.0 sürümünde kullanıma sunuldu. Treble ile birlikte, tedarikçi firma kamera HAL uygulamalarının bağlantılandırılmış olması gerekir. Android 8.0, Kamera hizmetinde aşağıdaki önemli iyileştirmeleri de içerir:
- Paylaşılan yüzeyler: Aynı
OutputConfiguration
- Özel kamera modları için System API
onCaptureQueueEmpty
Bu özellikler hakkında daha fazla bilgi için aşağıdaki bölümlere göz atın.
Paylaşılan yüzeyler
Bu özellik, önizleme ve video kodlama gibi iki çıkışı yalnızca bir tampon grubuyla destekler. Böylece güç ve bellek tüketimi azalır. Bu özelliği desteklemek için cihaz üreticilerinin, kamera HAL ve gralloc HAL uygulamalarının tek bir tüketici yerine birden fazla farklı tüketici (ör. donanım derleyici/GPU ve video kodlayıcı) tarafından kullanılan gralloc arabellekleri oluşturabildiğinden emin olmaları gerekir. Kamera hizmeti, tüketici kullanım işaretlerini kamera HAL'ine ve gralloc HAL'ine iletir. Bu HAL'lerin doğru türde arabellekleri ayırması veya kamera HAL'inin bu tüketici kombinasyonunun desteklenmediğine dair bir hata döndürmesi gerekir.
Ayrıntılı bilgi için
enableSurfaceSharing
geliştirici belgelerine bakın.
Özel kamera modları için System API
Genel kamera API'si, iki çalışma modu tanımlar: normal ve kısıtlı yüksek hızlı kayıt. Bunlar oldukça farklı anlamlara sahiptir. Örneğin, yüksek hızlı mod aynı anda en fazla iki belirli çıkışla sınırlıdır. Çeşitli OEM'ler, donanıma özgü özellikler için başka özel modlar tanımlamak istediklerini belirtti. Mod, configure_streams
işlevine iletilen bir tam sayıdır. Bkz.:
hardware/camera/device/3.2/ICameraDeviceSession#configurestreams
.
Bu özellik, OEM kamera uygulamalarının özel modu etkinleştirmek için kullanabileceği bir sistem API çağrısı içerir. Bu modlar, herkese açık API'ye eklenecek gelecekteki modlarla çakışma olmaması için 0x8000 tam sayı değerinden başlamalıdır.
OEM'lerin bu özelliği desteklemesi için tek yapması gereken, configure_streams üzerinde HAL'e iletilen bu tam sayı tarafından tetiklenen yeni modu HAL'lerine eklemek ve ardından özel kamera uygulamalarının sistem API'sini kullanmasını sağlamaktır.
Yöntem adı
android.hardware.camera2.CameraDevice#createCustomCaptureSession
.
Bkz.:
frameworks/base/core/java/android/hardware/camera2/CameraDevice
.
onCaptureQueueBlank
Bu API'nin amacı, istek kuyruğunu mümkün olduğunca 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 eklemedir. Bu özellikten yararlanmak isteyen uygulamaların bu geri çağırma işlevine bir dinleyici eklemesi ve uygun şekilde yanıt vermesi gerekir. Bunun için genellikle kamera cihazına başka bir yakalama isteği
gönderir.
Kamera HIDL arayüzü
Kamera HIDL arayüzü, kararlı HIDL tanımlı API'leri kullanan Kamera HAL arayüzünün tamamen yeni bir sürümüdür. En son eski sürümlerde (3.4 ve 2.4) sunulan tüm özellikler ve kamera özellikleri (kamera modülü için) de HIDL tanımlarının bir parçasıdır.
3.4
Desteklenen meta verilere küçük eklemeler ve data_space desteğinde değişiklikler:
RAW_OPAQUE
biçimi destekleniyorsa zorunlu olarakANDROID_SENSOR_OPAQUE_RAW_SIZE
statik meta verileri ekleyin.- RAW biçimi destekleniyorsa
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
statik meta verilerini zorunlu olarak ekleyin. - Veri alanı kodlamasının 0 numaralı sürümünü kullanarak
camera3_stream_t data_space
alanını daha esnek bir tanıma geçirin. - HALv3.2 veya sonraki sürümler için kullanılabilecek 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ş özellikli HAL'de küçük düzeltme:
- OPAQUE ve YUV yeniden işleme API güncellemeleri.
- Derinlik çıkış arabellekleri için temel destek.
camera3_stream_t
alanınadata_space
alanı eklendi.camera3_stream_t
alanına rotasyon alanı eklendi.camera3_stream_configuration_t
sürümüne camera3 akış yapılandırması çalışma modu eklendi.
3.2
Genişletilmiş özellikli HAL'de küçük düzeltme:
get_metadata_vendor_tag_ops
öğesini kullanımdan kaldırır. Bunun yerinecamera_common.h
uygulamasındaget_vendor_tag_ops
kullanın.register_stream_buffers
kullanımdan kaldırılacak.process_capture_request
'te çerçeve tarafından HAL'e sağlanan tüm gralloc arabellekleri herhangi bir zamanda yeni olabilir.- Kısmi sonuç desteği ekleyin.
process_capture_result
, tam sonuç elde edilmeden önce mevcut sonuçların bir alt kümesiyle birden çok kez çağrılabilir. camera3_request_template
alanına manuel şablon ekleyin. Uygulamalar, yakalama ayarlarını doğrudan kontrol etmek için bu şablonu kullanamaz.- İki yönlü ve giriş akışı özelliklerini yeniden işleyin.
- Giriş arabelleğinin dönüş yolunu değiştirin. Arabellek,
process_capture_request
yerineprocess_capture_result
içinde döndürülür.
3.1
Genişletilmiş özellikli HAL'de küçük düzeltme:
configure_streams
, tüketici kullanım işaretlerini HAL'e iletir.- Tüm yayındaki isteklerin/arabelleklerin mümkün olduğunca hızlı bir şekilde bırakılması için flush çağrısı.
3,0
Genişletilmiş özellikli HAL'nin ilk düzeltmesi:
- ABI tamamen farklı olduğu için ana sürüm değişikliği. 2.0 sürümünden bu yana gerekli donanım özelliklerinde veya işletim modelinde herhangi bir değişiklik yapılmamıştır.
- Yeniden düzenlenen giriş isteği ve akış sırası arayüzleri: HAL'ye yapılan çerçeve çağrıları, sonraki istek ve akış arabellekleri zaten sıraya alınmış. Verimli uygulamalar için gerekli olan senkronizasyon çerçevesi desteği dahildir.
- Tetikleyiciler isteklere, çoğu bildirim ise sonuçlara taşındı.
- Tüm geri çağırma işlevlerini tek bir yapıya, tüm kurulum yöntemlerini ise tek bir
initialize()
çağrısına birleştirdik. - Akış yönetimini basitleştirmek için yayın yapılandırmasını tek bir çağrıya dönüştürdük.
İki yönlü akışlar,
STREAM_FROM_STREAM
yapısının yerini alır. - Eski/sınırlı donanım cihazları için sınırlı mod anlamı.
2,0
Genişletilmiş özellikli HAL'ın ilk sürümü (Android 4.2) [camera2.h]:
- Mevcut
android.hardware.Camera
API'yi uygulamak için yeterlidir. - Kamera hizmet katmanında ZSL kuyruğuna izin verir.
- Manuel çekim kontrolü, Bayer RAW çekimi, RAW verilerinin yeniden işlenmesi gibi yeni özellikler için test edilmemiştir.
1,0
İlk Android kamera HAL'i (Android 4.0) [camera.h]:
- C++ CameraHardwareInterface soyutlama katmanından dönüştürülmüştür.
android.hardware.Camera
API'yi destekler.
Kamera modülü sürüm geçmişi
Bu bölümde, camera_module_t.common.module_api_version
'e dayalı olarak kamera donanım modülü için modül sürüm bilgileri yer almaktadır. En önemli iki onaltılık basamak ana sürümü, en az önemli iki basamak ise alt sürümü temsil eder.
2.4
Bu kamera modülü sürümü aşağıdaki API değişikliklerini ekler:
- Flaş modu desteği. Çerçeve, kamera cihazını açmadan, yanıp sönen bir birimi olan tüm kamera cihazlarında el feneri modunu açabilir. Kamera cihazının flaş birimine erişim önceliği kamera modülünden daha yüksektir. Bir kamera cihazının açılması, modül arayüzü üzerinden etkinleştirilmişse flaşı kapatır. Bir kamera cihazını açmak için
open()
çağrılması gibi kaynak çakışmaları olduğunda kamera HAL modülü, el feneri modu durum geri çağırması aracılığıyla el feneri modunun kapatıldığını çerçeveye bildirmelidir. - Harici kamera (ör.USB sıcak takma kamerası) desteği API güncellemeleri, kameranın statik bilgilerinin yalnızca kamera bağlıyken ve harici sıcak takma kameralar için kullanıma hazır olduğunda kullanılabileceğini belirtir. Kamera durumu
CAMERA_DEVICE_STATUS_PRESENT
olmadığında statik bilgi almak için yapılan çağrılar geçersizdir. Çerçeve, mevcut harici kamera listesini yönetmek için yalnızca cihaz durumu değişikliği geri çağırmalarına güvenir. - Kamera arabuluculuğuyla ilgili ipuçları. Aynı anda açılabilecek ve kullanılabilecek kamera cihazlarının sayısını açıkça belirtme desteği eklendi. Geçerli cihaz kombinasyonlarını belirtmek için
resource_cost
veconflicting_devices
alanları,get_camera_info
çağrısı tarafından döndürülencamera_info
yapısında her zaman ayarlanmalıdır. - Modül başlatma yöntemi. HAL modülü yüklendikten sonra kamera hizmeti tarafından çağrılır ve HAL'in tek seferlik başlatılmasına olanak tanır. Diğer modül yöntemleri çağrılmadan önce çağrılır.
2.3
Bu kamera modülü sürümü, eski açık kamera HAL cihazı desteğini ekler.
Aynı cihaz birden fazla cihaz API sürümü destekliyorsa çerçeve, kamera cihazını daha düşük cihaz HAL sürümü olarak açmak için bu özelliği kullanabilir.
Standart donanım modülü açık çağrısı (common.methods->open
), kamera cihazını desteklenen en son sürümle (aynı zamanda camera_info_t.device_version
içinde listelenen sürümle) açmaya devam ediyor.
2,2
Bu kamera modülü sürümü, modülden tedarikçi etiketi desteği ekler ve daha önce yalnızca cihaz açıkken erişilebilen eski vendor_tag_query_ops
için desteği sonlandırır.
2.1
Bu kamera modülü sürümü, kamera HAL modülünden çerçeveye asenkron geri çağırma desteği ekler. Bu destek, çerçeveyi kamera modülü durumundaki değişiklikler hakkında bilgilendirmek için kullanılır. Geçerli bir set_callbacks()
yöntemi sağlayan modüller en az bu sürüm numarasını rapor etmelidir.
2,0
Bu sürüm numarasını bildiren kamera modüllerinde, kamera modülü HAL arayüzünün ikinci sürümü uygulanır. 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. camera_info alanının device_version
değeri her zaman geçerlidir. device_version
alanı 2.0 veya daha yüksek bir sürümse camera_info
alanının static_camera_characteristics
değeri geçerlidir.
1,0
Bu sürüm numaralarını bildiren kamera modülleri, ilk kamera modülü HAL arayüzünü uygular. Bu modül aracılığıyla açılabilen tüm kamera cihazları, kamera cihazı HAL'inin yalnızca 1. sürümünü destekler. camera_info
öğesinin device_version
ve static_camera_characteristics
alanları geçerli değil. Bu modül ve cihazları yalnızca android.hardware.Camera
API'si destekleyebilir.