Bu sayfa, Camera HAL'leri, API'leri ve ilgili 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.Camera
sınıfı aracılığıyla sunulan uygulama düzeyinde kamera çerçevesi. - Kamera API2
- Android 5.0 ve üzeri cihazlarda,
android.hardware.camera2
paketi 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'si
- 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
Yeni platform geliştirmenin Camera API2'ye odaklanmasıyla aşamalı olarak kullanımdan kaldırılmaya devam eden Android 5.0, 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 üzerine kurulu kamera uygulamaları, daha düşük Android sürüm 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, etkin 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ı olan yetenekleri, Camera API2 arayüzleri aracılığıyla uygulamalara 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ışındaLIMITED
cihazlara 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'dan itibaren, 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 gerekmez.
Şekil 1. HAL3'te API1'de Android 7.0 kamera ve medya yığını
- Video arabelleklerinde meta verilerin iletilmesini destekleyen HAL1, satıcıların
kMetadataBufferTypeNativeHandleSource
kullanmak için HAL'ı güncellemesi gerekir. (kMetadataBufferTypeCameraSource
artık Android 7.0'da desteklenmemektedir.)Şekil 2. HAL1 üzerinde API1'de Android 7.0 kamera ve medya yığını
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:
Şekil 3. HAL3'te API2'de Android 7.0 kamera ve medya yığını
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.PerformanceTest
ve 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
kMetadataBufferTypeNativeHandleSource
kullanmalı ve video arabelleklerindeVideoNativeHandleMetadata
. (kMetadataBufferTypeCameraSource
artık Android 7.0'da desteklenmemektedir.)VideoNativeHandleMetadata
ile 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. HAL, arabellekleri tanımlamak için adresleri kullanamaz, çünkü HAL arabelleği döndürdükten sonra adresler başka bir arabellek tanıtıcısı depolayabilir. Arabellekleri tanımlamak için arabellek tanıtıcı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 tüm izinler kaldırılmalıdır.
- Camera HAL ve kamera sunucusu arasındaki ayrım. Android 8.0 ve üstü, 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.
CameraDevice
bakı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.
getRecommendedStreamConfigurationMap
bakı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
CameraCharacteristics
alınabilmesi içinCAMERA
izinlerine sahip olması için belirli anahtarlar gereklidir.getKeysNeedingPermission
bakı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. Oturum yeniden yapılandırma sorgusuna bakın. - 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'inin yalnızca gerektiğinde kamera çerçevesinden arabellekler istemesine izin vererek önemli ölçüde bellek tasarrufu sağlar.
-
signalStreamFlush
: HAL'a, kamera hizmetininconfigureStreams_3_5
gerç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.configureStreams
benzer, ancak buna ek olarak,configureStreams_3_5
vesignalStreamFlush
çağrıları arasında bir yarış durumunu kontrol etmek içinstreamConfigCounter
sayacı sağlanır.
-
ICameraDeviceCallback
için güncellemeler:
-
requestStreamBuffers
: Kamera HAL'ının kamera sunucusundan arabellek istemek için çağırdığı senkronize geri arama.requestStreamBuffers
bakı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_ARRANGEMENT
anahtarı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
notifyDeviceStateChange
yöntemini ekler.
2.4
- API düzeyi 29 veya üzeri ile başlatılan cihazlar isTorchModeSupported için
true
raporisTorchModeSupported
.
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 sabitleme ve efektler için optik sabitleme (OIS) veri anahtarları ekler.
STATISTICS_OIS_SAMPLES
bakın. - Harici flaş desteği ekler.
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
bakın. -
CAPTURE_INTENT
içinde bir hareket izleme amacı ekler.CONTROL_CAPTURE_INTENT_MOTION_TRACKING
bakın. -
LENS_RADIAL_DISTORTION
ve yerineLENS_DISTORTION
ekler. -
CaptureRequest
bozulma düzeltme modları ekler.DISTORTION_CORRECTION_MODE
bakın. - Desteklenen cihazlarda harici USB/UVC kameralar için destek ekler.
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
bakın.
kamera HAL
3.4
ICameraDeviceSession
güncellemeleri
-
configureStreams_3_4
:sessionParameters
ve 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ı
OutputConfiguration
paylaş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 özgü 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.
Yöntem adı android.hardware.camera2.CameraDevice#createCustomCaptureSession
. Bakınız: frameworks/base/core/java/android/hardware/camera2/CameraDevice
.
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_OPAQUE
biçimi destekleniyorsa,ANDROID_SENSOR_OPAQUE_RAW_SIZE
statik meta verilerini zorunlu olarak ekleyin. - Herhangi bir RAW biçimi destekleniyorsa,
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
statik meta verilerini zorunlu olarak ekleyin. - Veri alanı kodlamasının sürüm 0 tanımını kullanarak
camera3_stream_t data_space
alanı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_space
alanınıncamera3_stream_t
. -
camera3_stream_t
döndürme alanı eklenmesi. - 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 yerineget_vendor_tag_ops
camera_common.h
kullanın. -
register_stream_buffers
öğesini kullanımdan kaldırır. Process_capture_request içinde çerçeve tarafından HAL'a sağlanan tümprocess_capture_request
arabellekleri 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_template
manuel ş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. Arabellek,
process_capture_result
yerineprocess_capture_request
iç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ış kuyruğu 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_STREAM
yapı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.Camera
API'sini uygulamak için yeterlidir. - Kamera servis 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.Camera
API'sini destekler.
Kamera modülü sürüm geçmişi
Bu bölüm, camera_module_t.common.module_api_version
dayalı olarak Camera 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 alt 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 arayüzü 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ğlandığında ve harici çalışırken takılabilir kameralar için kullanıma hazır olduğunda kullanılabilir olduğunu belirtir. Statik bilgi almak için yapılan çağrılar, kamera durumu
CAMERA_DEVICE_STATUS_PRESENT
olmadığı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_cost
veconflicting_devices
alanları her zamanget_camera_info
çağrısı tarafından döndürülencamera_info
yapı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ı en son desteklenen 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 cihazları yalnızca android.hardware.Camera
API'sini destekleyebilir.