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'da kamera çerçevesini güçlendirmek ve güvenliğini sağlamak 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:
- Camera API1
- Android 4.4 ve önceki sürümleri çalıştıran cihazlarda,
android.hardware.Camerasınıfı aracılığıyla kullanıma sunulan uygulama düzeyinde kamera çerçevesi. - Camera API2
- Android 5.0 ve sonraki sürümlerdeki cihazlarda,
android.hardware.camera2paketi üzerinden kullanıma sunulan uygulama düzeyinde kamera çerçevesi. - Kamera HAL'si
- SoC tedarikçileri tarafından uygulanan kamera modülü katmanı. Uygulama düzeyindeki herkese açık çerçeveler, kamera HAL'inin üzerine kurulur.
- Camera HAL3.1
- Android 4.4 ile yayınlanan kamera cihazı HAL'ının sürümü.
- Camera HAL3.2
- Android 5.0 ile yayınlanan kamera cihazı HAL sürümü.
- Camera API1 CTS
- Camera API1 üzerinde çalışan bir dizi kamera CTS testi.
- Camera API2 CTS
- Camera API2 üzerinde çalışan ek bir kamera CTS testleri grubu.
- Tiz
- Yeni bir tedarikçi arayüzü aracılığıyla tedarikçi uygulamasını (cihaza özel, silikon üreticileri tarafından yazılmış düşük düzeyli yazılım) Android OS çerçevesinden ayırır.
- HIDL
- HAL arayüzü tanım dili, Treble ile kullanıma sunulmuş ve bir HAL ile kullanıcıları arasındaki arayüzü belirtmek için kullanılır.
- VTS
- Satıcı test paketi, Treble ile birlikte kullanıma sunuldu.
Kamera API'leri
Android'de aşağıdaki kamera API'leri bulunur.
Camera API1
Android 5.0, Camera API1'in desteğini sonlandırdı. Yeni platform geliştirme çalışmaları Camera API2'ye odaklandığı için Camera API1'in desteği sonlandırılmaya devam ediyor. Ancak bu özellik kullanımdan kaldırılma sürecinde uzun bir süre boyunca desteklenmeye devam edecek ve Android sürümleri, bir süre daha Camera API1 uygulamalarını desteklemeye devam edecek. Desteklenenler:
- Uygulamalar için Camera API1 arayüzleri. Camera API1 üzerine kurulu kamera uygulamaları, daha düşük Android sürümünün yüklü olduğu cihazlarda olduğu gibi çalışmalıdır.
- Kamera HAL sürümleri. Camera HAL1.0 desteği içerir.
Camera API2
Camera API2 çerçevesi, uygulamaya daha düşük düzeyde kamera kontrolü sunar. Bu kontrol; verimli sıfır kopyalı seri çekim/akış akışları ve pozlama, kazanç, beyaz dengesi kazançları, renk dönüştürme, gürültü azaltma, keskinleştirme gibi özelliklerin kare başına kontrolünü içerir. Ayrıntılar için Google I/O video özetini izleyin.
Android 5.0 ve sonraki sürümlerde Camera API2 bulunur ancak Android 5.0 ve sonraki sürümleri çalıştıran cihazlar tüm Camera API2 özelliklerini desteklemeyebilir. Uygulamaların Camera API2 arayüzleri 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 özelliklerle yaklaşık olarak aynı olan Camera API2 arayüzleri aracılığıyla uygulamalara özellikler sunar. Eski çerçeveler kodu, Camera API2 çağrılarını kavramsal olarak Camera API1 çağrılarına çevirir. Eski cihazlar, kare başına kontroller gibi Camera API2 özelliklerini desteklemez.LIMITED: Bu cihazlar, Camera API2'nin bazı özelliklerini (tümünü değil) destekler ve Camera HAL 3.2 veya daha yeni bir sürümü kullanmalıdır.FULL: Bu cihazlar, Camera API2'nin tüm temel özelliklerini destekler ve Camera HAL 3.2 veya daha yeni bir sürüm ile Android 5.0 veya daha yeni 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şleme ve RAW görüntü yakalamayı destekler.EXTERNAL: Bu cihazlar, bazı istisnalar dışındaLIMITEDcihazlara benzer. Örneğin, bazı sensör veya lens bilgileri raporlanmayabilir ya da daha az kararlı kare hızlarına sahip olabilir. Bu düzey, USB web kameraları gibi harici kameralar için kullanılır.
Ayrı özellikler, Camera API2 arayüzlerindeki android.request.availableCapabilities özelliği aracılığıyla kullanıma sunulur. FULL cihazlar, diğer özelliklerin yanı sıra MANUAL_SENSOR ve MANUAL_POST_PROCESSING özelliklerini gerektirir. RAW özelliği, FULL cihazlarda bile isteğe bağlıdır.
LIMITED cihazlar, bu özelliklerin herhangi bir alt kümesini (hiçbiri dahil) tanıtabilir. Ancak BACKWARD_COMPATIBLE özelliği her zaman tanımlanmalıdır.
Cihazın desteklenen donanım düzeyi ve desteklediği belirli Camera API2 özellikleri, Camera API2 kamera uygulamalarının Google Play'de filtrelenmesine olanak tanımak için aşağıdaki özellik işaretleri olarak kullanılabilir.
android.hardware.camera.hardware_level.fullandroid.hardware.camera.capability.rawandroid.hardware.camera.capability.manual_sensorandroid.hardware.camera.capability.manual_post_processing
CTS koşulları
Android 5.0 ve sonraki sürümlerin yüklü olduğu cihazlar, Camera API1 CTS, Camera API2 CTS ve CTS Verifier kamera testlerini geçmelidir.
Camera HAL3.2 uygulaması içermeyen ve Camera API2'nin tüm arayüzlerini destekleyemeyen cihazlar, Camera API2 CTS testlerini yine de geçmelidir. Ancak cihaz, Camera API2
LEGACY modunda (Camera API2 çağrılarının kavramsal olarak Camera API1 çağrılarıyla eşlendiği mod) çalıştığından Camera API1'in ötesindeki özellikler veya işlevlerle ilgili tüm Camera API2 CTS testleri otomatik olarak atlanır.
Eski cihazlarda, çalıştırılan Camera API2 CTS testleri, yeni gereksinimler olmadan mevcut herkese açık Camera API1 arayüzlerini ve özelliklerini kullanır. Ortaya çıkan (ve Camera API2 CTS hatasına neden olan) hatalar, cihazın mevcut Camera HAL'sinde zaten bulunan hatalardır. Bu nedenle, mevcut Camera API1 uygulamaları tarafından da bulunurlar. Bu türden çok fazla hata olmasını beklemiyoruz (ancak Kamera API2 CTS testlerini geçmek için bu tür hataların düzeltilmesi gerekir).
VTS koşulları
Android 8.0 ve sonraki sürümlerin yüklü olduğu cihazlarda, bağlayıcı HAL uygulamalarıyla birlikte VTS testlerini geçmesi gereken kamera bulunur.
Kamera çerçevesinin güvenliğini artırma
Android 7.0, medya ve kamera çerçevesi güvenliğini artırmak için kamera hizmetini mediaserver'dan çıkarır. Android 8.0'dan itibaren, her bir bağlayıcılaştırılmış Kamera HAL'ı, kamera hizmetinden ayrı bir işlemde çalışır. Sağlayıcıların, kullanılan API ve HAL sürümlerine bağlı olarak kamera HAL'de değişiklik yapması gerekebilir. Aşağıdaki bölümlerde, HAL1 ve HAL3 için AP1 ile AP2'deki mimari değişikliklerin yanı sıra genel şartlar ayrıntılı olarak açıklanmaktadır.
API1'de yapılan mimari değişiklikler
API1 video kaydı, kamera ve video kodlayıcının aynı işlemde çalıştığını varsayabilir. API1'i kullanırken:
- Kamera hizmetinin, arabellekleri işlemler arasında aktarmak için BufferQueue'yu kullandığı HAL3'te tedarikçi güncellemesi gerekmez.

Şekil 1. HAL3'te API1'deki Android 7.0 kamera ve medya yığını
- Video arabelleklerinde meta verilerin iletilmesini destekleyen HAL1'de tedarikçiler,
kMetadataBufferTypeNativeHandleSourcekullanmak için HAL'yi güncellemelidir. (kMetadataBufferTypeCameraSourceartık Android 7.0'da desteklenmemektedir.)
Şekil 2. HAL1'de API1'deki Android 7.0 kamera ve medya yığını
API2'deki mimari değişiklikler
HAL1 veya HAL3'teki API2 için BufferQueue, arabellekleri geçirir. Bu nedenle bu yollar çalışmaya devam eder. API2 için Android 7.0 mimarisi:
- HAL1, cameraservice taşınmasından etkilenmez ve tedarikçi güncellemesi yapılması gerekmez.
- HAL3 etkilenir ancak satıcı güncellemesi gerekmez:

Şekil 3. HAL3'te API2'deki Android 7.0 kamera ve medya yığını
Diğer şartlar
Medya ve kamera çerçevesi güvenliğini sağlamlaştı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. Satıcılar, 120/240 FPS hızında 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ın yeni işlemi oluşturmak için az miktarda ek RAM'e de ihtiyacı vardır. - Video arabelleklerinde meta veri iletme (yalnızca HAL1). HAL1, video arabelleklerinde gerçek YUV çerçeve verileri yerine meta verileri depoluyorsa HAL, meta veri arabellek türü olarak
kMetadataBufferTypeNativeHandleSourcekullanmalı ve video arabelleklerindeVideoNativeHandleMetadatageçirmelidir. (kMetadataBufferTypeCameraSource, Android 7.0'da artık desteklenmemektedir.)VideoNativeHandleMetadataile kamera ve medya çerçeveleri, yerel tutmaçları doğru şekilde serileştirip seri durumundan çıkararak video arabelleklerini işlemler arasında aktarabilir. - Arabellek herkese açık kullanıcı adı adresi her zaman aynı arabelleği depolamaz (Yalnızca HAL3). HAL3, her yakalama isteği için arabellek tutmaçlarının adreslerini alır. HAL, arabellek döndürdükten sonra adresler başka bir arabellek tutma yerini depolayabileceğinden arabellekleri tanımlamak için adresleri kullanamaz. Arabellekleri tanımlamak için arabellek tutmaçlarını kullanmak üzere HAL'yi güncellemeniz gerekir. Örneğin, HAL, arabellek tutma yeri A'yı depolayan arabellek tutma yeri adresi A'yı alır. HAL, A arabellek tutamacını döndürdükten sonra, HAL bir sonraki sefer B arabellek tutamacını aldığında B arabellek tutamacı adresi A arabellek tutamacını saklayabilir.
- cameraserver için SELinux politikalarını güncelleyin. Cihaza özel SELinux politikaları, mediaserver'a kamerayı çalıştırma izni veriyorsa SELinux politikalarını, cameraserver'a uygun izinleri verecek şekilde güncellemeniz gerekir. Mediaserver ve cameraserver genellikle sistemde farklı kaynaklar gerektirdiğinden, mediaserver'ın SELinux politikalarının cameraserver için kopyalanmasını önermiyoruz. Cameraserver yalnızca kamera işlevlerini yerine getirmek için gereken izinlere sahip olmalı ve mediaserver'daki gereksiz kamera ile ilgili izinler kaldırılmalıdır.
- Camera HAL ile cameraserver arasındaki ayrım. Android 8.0 ve sonraki sürümlerde, bağlayıcı içeren Camera HAL, cameraserver'dan farklı bir işlemde ayrıca ayrılır. IPC, HIDL tarafından tanımlanan arayüzler üzerinden gerçekleşir.
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 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.
Kamera içeren ve Android 8.0 veya sonraki sürümleri çalıştıran tüm cihazlarda VTS'yi çalıştırarak satıcı uygulamasını doğrulayın.
Kamera HAL sürüm geçmişi
Android Camera HAL'i değerlendirmek için kullanılabilen testlerin listesini Camera HAL Testing Checklist (Kamera HAL Testi Kontrol Listesi) sayfasında bulabilirsiniz.
Android 10
Android 10'da aşağıdaki güncellemeler kullanıma sunuluyor.
Kamera API'si
- Fiziksel kamera kimliklerini gizleyerek fiziksel kameraların ayrı ayrı veya ilgili mantıksal kameralar aracılığıyla kullanılmasını sağlayan çok kameralı iyileştirmeler. Çoklu Kamera Desteği başlıklı makaleyi inceleyin.
- Yeni bir oturum oluşturmanın performans yükü olmadan belirli bir oturum yapılandırmasının desteklenip desteklenmediğini kontrol etme olanağı.
CameraDevicesayfasına göz atın. - İstemcinin daha az güç tüketmesi ve daha iyi performans göstermesi için belirli bir kullanım alanına yönelik önerilen akış yapılandırmalarını alma özelliği.
getRecommendedStreamConfigurationMapsayfasına göz atın. - Derinlik JPEG resim biçimi desteği. Daha fazla bilgi için Dinamik Derinlik spesifikasyonuna bakın.
- HEIC resim biçimi desteği. HEIF Görüntüleme bölümünü inceleyin.
- Gizlilikle ilgili iyileştirmeler. İstemcinin
CameraCharacteristicsuygulamasından alınabilmesi içinCAMERAizinlerine sahip olması gerekir. Şu sayfaya göz atın:getKeysNeedingPermission.
Kamera HAL'si
Android 10'da aşağıdaki Kamera HAL sürümleri güncellenir.
3,5
ICameraDevice
-
getPhysicalCameraCharacteristics: Mantıksal bir kamera cihazını destekleyen fiziksel kamera kimliğine ait statik kamera bilgileri. Çoklu Kamera Desteği başlıklı makaleyi inceleyin. isStreamCombinationSupported: Bu yöntem, istemcilerin bir 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 parametre değerleri için tam akış yeniden yapılandırmasının gerekip gerekmediğini kamera çerçevesine bildiren yöntem. Bu sayede gereksiz kamera yeniden yapılandırma gecikmeleri önlenir. Oturum yeniden yapılandırma sorgusu başlıklı makaleyi inceleyin. - HAL
arabellek yönetimi API'leri: Bu API'ler, kamera HAL'sinin her yakalama isteğini kamera ardışık düzeni boyunca ilişkili arabellekleriyle eşleştirmek yerine yalnızca gerektiğinde kamera çerçevesinden arabellek istemesine olanak tanır. Bu da önemli ölçüde bellek tasarrufu sağlayabilir.
-
signalStreamFlush: Kamera hizmetininconfigureStreams_3_5işlemini gerçekleştirmek üzere olduğunu ve HAL'ın belirlenen yayınların tüm arabelleklerini döndürmesi gerektiğini HAL'a bildirir. -
configureStreams_3_5:ICameraDevice3.4.configureStreams'ye benzer ancak ek olarakconfigureStreams_3_5vesignalStreamFlushçağrıları arasında yarış durumu olup olmadığını kontrol etmek içinstreamConfigCountersayacı sağlanır.
-
ICameraDeviceCallback ile ilgili güncellemeler:
-
requestStreamBuffers: Kamera HAL'sinin, kamera sunucusundan arabellek istemek için çağırdığı senkron geri çağırma.requestStreamBufferssayfasına göz atın. -
returnStreamBuffers: Kamera HAL'ı için, çıkış arabelleklerini kamera sunucusuna döndürmek üzere eşzamanlı geri çağırma.returnStreamBufferssayfasına göz atın.
3.4
Android 10'da kamera meta verilerine aşağıdaki anahtarlar eklenir.
- Resim biçimleri
ANDROID_SCALER_AVAILABLE_FORMATS_RAW10ANDROID_SCALER_AVAILABLE_FORMATS_RAW12ANDROID_SCALER_AVAILABLE_FORMATS_Y8
- Kamera meta veri etiketleri
ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSIONANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONSANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAPANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSIONANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONSANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONSANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONSANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_IDANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONSANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONSANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONSANDROID_HEIC_INFO_SUPPORTEDANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
- Özellikler
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENTanahtarı için değerlerANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONOANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
- Kullanılabilir dinamik derinlik akışı yapılandırmaları
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUTANDROID_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üncellenir.
2.5
- Katlama gibi fiziksel değişiklikler kamerayı ve yönlendirmeyi etkilediğinde cihazların kamera HAL'ını bilgilendirmesi için
notifyDeviceStateChangeyöntemini ekler.
2.4
- API düzeyi 29 veya daha yüksek bir sürümle kullanıma sunulan cihazlar,
isTorchModeSupportediçintruebildirmelidir.
Android 9
Android 9 sürümü, kamera API2 ve HAL arayüzünde aşağıdaki güncellemeleri sunar.
Kamera API'si
- Aynı yöne bakan birden fazla kamerası olan cihazları daha iyi desteklemek için çoklu kamera API'sini kullanıma sunar. Bu API, bokeh ve sorunsuz 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. Yakalamayla ilgili istekler, 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, değiştirildiğinde ciddi işleme gecikmelerine neden olabilecek, kullanılabilir yakalama parametrelerinin bir alt kümesidir. Müşteriler, yakalama oturumu başlatma sırasında ilk değerlerini iletirlerse 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. Şu sayfaya göz atın:
STATISTICS_OIS_SAMPLES. - Harici flaş desteği eklendi.
CONTROL_AE_MODE_ON_EXTERNAL_FLASHsayfasına göz atın. CAPTURE_INTENTiçinde hareket izleme amacı ekler. Şu sayfaya göz atın:CONTROL_CAPTURE_INTENT_MOTION_TRACKING.LENS_RADIAL_DISTORTIONyönteminin desteği sonlandırıldı ve yerineLENS_DISTORTIONyöntemi eklendi.CaptureRequest'da distorsiyon düzeltme modları eklendi. Şu sayfaya göz atın:DISTORTION_CORRECTION_MODE.- Desteklenen cihazlarda harici USB/UVC kameralar için destek eklenir. Şu sayfaya göz atın:
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL.
Kamera HAL'si
3.4
ICameraDeviceSession ile ilgili güncellemeler
-
configureStreams_3_4:sessionParametersve mantıksal kameralar için destek eklenir. -
processCaptureRequest_3_4: Akış yapısına fiziksel kamera kimliklerinin dahil edilmesi için destek ekler.
ICameraDeviceCallback ile ilgili güncellemeler
-
processCaptureResult_3_4: Çekim 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_CAMERAANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKINGANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
- Kamera meta verileri etiketleri
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDSANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPEANDROID_DISTORTION_CORRECTION_AVAILABLE_MODESANDROID_LENS_POSE_REFERENCE-
ANDROID_LENS_DISTORTION ANDROID_REQUEST_AVAILABLE_SESSION_KEYSANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYSANDROID_STATISTICS_OIS_DATA_MODEANDROID_STATISTICS_OIS_TIMESTAMPSANDROID_STATISTICS_OIS_X_SHIFTSANDROID_STATISTICS_OIS_Y_SHIFTS
Android 8.0
Android 8.0 sürümüyle Treble kullanıma sunulmuştur. Treble ile birlikte, tedarikçi Camera HAL uygulamalarının binderized olması gerekir. Android 8.0, Kamera hizmetinde aşağıdaki önemli geliştirmeleri de içerir:
- Paylaşılan yüzeyler: Aynı
OutputConfigurationpaylaşan birden fazla 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, yalnızca bir arabellek grubunun önizleme ve video kodlama gibi iki çıkışı yönlendirmesini sağlayarak güç ve bellek tüketimini azaltır. Bu özelliği desteklemek için cihaz üreticilerinin, kamera HAL ve gralloc HAL uygulamalarının tek bir tüketici yerine birden fazla tüketici (ör. donanım oluşturucu/GPU ve video kodlayıcı) tarafından kullanılan gralloc arabellekleri oluşturabildiğinden emin olması gerekir. Kamera hizmeti, tüketici kullanım işaretlerini kamera HAL'sine ve gralloc HAL'sine iletir. Bu işaretler, doğru türde arabellekler ayırmalıdır veya kamera HAL'si, bu tüketici kombinasyonunun desteklenmediğini belirten bir hata döndürmelidir.
Daha fazla bilgi için
enableSurfaceSharing
geliştirici belgelerine bakın.
Özel kamera modları için sistem API'si
Herkese açık kamera API'si iki çalışma modu tanımlar: normal ve kısıtlanmış yüksek hızlı kayıt. Bu iki modun anlamsal yapısı oldukça farklıdır. Ö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 özel özellikler için başka özel modlar tanımlamak istediklerini belirtmiştir. Bu mod, arka planda configure_streams'ya iletilen bir tam sayıdır. Şu makaleye göz atın:
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ı içerir. Bu modlar, genel API'ye eklenen gelecekteki modlarla çakışmayı önlemek için 0x8000 tam sayı değeriyle başlamalıdır.
OEM'lerin bu özelliği desteklemek için HAL'lerine yeni modu eklemeleri yeterlidir. Bu mod, configure_streams'de HAL'ye iletilen bu tam sayıyla tetiklenir. Ardından, özel kamera uygulamalarının sistem API'sini kullanması gerekir.
Yöntemin adı
android.hardware.camera2.CameraDevice#createCustomCaptureSession.
Şu makaleye göz atın:
frameworks/base/core/java/android/hardware/camera2/CameraDevice.
onCaptureQueueEmpty
Bu API'nin amacı, istek sırasını 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 yapılan bir eklemedir. Bu işlevden yararlanmak isteyen uygulamaların, geri çağırmaya bir işleyici eklemesi ve uygun şekilde yanıt vermesi gerekir. Genellikle bu işlem, kamera cihazına başka bir yakalama isteği gönderilerek yapılır.
Kamera HIDL arayüzü
Camera HIDL arayüzü, kararlı HIDL tanımlı API'leri kullanan Camera HAL arayüzünün tamamen yenilenmiş halidir. En son eski sürümler olan 3.4 ve 2.4'te (kamera modülü için) kullanıma sunulan tüm özellikler ve kamera işlevleri 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:
ANDROID_SENSOR_OPAQUE_RAW_SIZEbiçimi destekleniyorsaRAW_OPAQUEstatik meta verilerini zorunlu olarak ekleyin.- Herhangi bir RAW biçimi destekleniyorsa
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGEstatik meta verileri zorunlu olarak ekleyin. - Veri alanı kodlamasının 0 sürümü tanımını kullanarak
camera3_stream_t data_spacealanını daha esnek bir tanıma geçirin. - HALv3.2 veya daha yeni sürümlerde kullanılabilen genel meta veri eklemeleri:
-
ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3 ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOSTANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGEANDROID_SENSOR_DYNAMIC_BLACK_LEVELANDROID_SENSOR_DYNAMIC_WHITE_LEVELANDROID_SENSOR_OPAQUE_RAW_SIZEANDROID_SENSOR_OPTICAL_BLACK_REGIONS
-
3.3
Genişletilmiş özellikli HAL'de küçük düzeltme:
- OPAQUE ve YUV yeniden işleme API'si güncellemeleri.
- Derinlik çıkış arabellekleri için temel destek.
camera3_stream_töğesinedata_spacealanı eklendi.camera3_stream_töğesine rotasyon alanı eklendi.camera3_stream_configuration_tiçin camera3 akış yapılandırması işlem modu eklendi.
3.2
Genişletilmiş özellikli HAL'de küçük düzeltme:
get_metadata_vendor_tag_opsdesteği sonlandırıldı. Bunun yerinecamera_common.hiçindeget_vendor_tag_opskullanın.register_stream_buffersdesteği sonlandırıldı. Çerçeve tarafındanprocess_capture_requestiçinde HAL'ye sağlanan tüm gralloc arabellekleri herhangi bir zamanda yeni olabilir.- Kısmi sonuç desteği ekleyin.
process_capture_result, tam sonuç kullanıma sunulmadan önce mevcut sonuçların bir alt kümesiyle birden fazla kez çağrılabilir. camera3_request_templateöğesine manuel şablon ekleyin. Uygulamalar, çekim ayarlarını doğrudan kontrol etmek için bu şablonu kullanabilir.- Çift yönlü ve giriş akışı spesifikasyonlarını yeniden düzenleyin.
- Giriş arabelleği dönüş yolunu değiştirin. Arabellek,
process_capture_requestyerineprocess_capture_resultiç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'ye iletir.- Tüm devam eden istekleri/arabellekleri mümkün olduğunca hızlı bir şekilde bırakmak için flush çağrısı.
3,0
Genişletilmiş özellikli HAL'nin ilk düzeltmesi:
- ABI tamamen farklı olduğundan ana sürüm değişikliği. 2.0 sürümüne kıyasla gerekli donanım özelliklerinde veya işletim modelinde herhangi bir değişiklik yapılmamıştır.
- Yeniden işlenen giriş isteği ve akış kuyruğu arayüzleri: HAL'ye yapılan çerçeve çağrıları, sonraki istek ve akış arabellekleri zaten kuyruktan çıkarılmış şekilde yapılır. Verimli uygulamalar için gerekli olan senkronizasyon çerçevesi desteği dahildir.
- Tetikleyiciler istekler bölümüne, bildirimlerin çoğu ise sonuçlar bölümüne taşındı.
- Tüm geri çağırmalar tek bir yapıda çerçeveye, tüm kurulum yöntemleri ise tek bir
initialize()çağrısına birleştirildi. - Akış yönetimini basitleştirmek için akış yapılandırmasını tek bir çağrı haline getirdik.
Çift yönlü akışlar,
STREAM_FROM_STREAMyapısının yerini alır. - Eski/sınırlı donanım cihazlar için sınırlı mod semantiği.
2,0
Genişletilmiş özellikli HAL'ın (Android 4.2) ilk sürümü [camera2.h]:
- Mevcut
android.hardware.CameraAPI'sini uygulamak için yeterlidir. - Kamera hizmeti katmanında ZSL kuyruğuna izin verir.
- Manuel yakalama kontrolü, Bayer RAW yakalama, RAW verilerinin yeniden işlenmesi 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üştür.
android.hardware.CameraAPI'sini destekler.
Kamera modülü sürüm geçmişi
Bu bölümde, camera_module_t.common.module_api_version temel alınarak Kamera donanım modülünün modül sürümü oluşturma bilgileri yer alır. En önemli iki onaltılık rakam ana sürümü, en önemsiz iki onaltılık rakam ise alt sürümü temsil eder.
2,4
Bu kamera modülü sürümü aşağıdaki API değişikliklerini ekler:
- El feneri modu desteği. Çerçeve, flaş birimi olan herhangi bir kamera cihazında, kamera cihazını açmadan el feneri modunu etkinleştirebilir. Kamera cihazı, flaş birimine erişirken kamera modülüne göre daha yüksek önceliğe sahiptir. Bir kamera cihazı açıldığında, modül arayüzü üzerinden etkinleştirilmişse el feneri kapatılır. Kaynak çakışması olduğunda (ör.
open()kamera cihazını açmak için çağrıldığında) kamera HAL modülü, meşale modunun kapatıldığını meşale modu durumu geri çağırma işlevi aracılığıyla çerçeveye bildirmelidir. - Harici kamera (ör. USB tak-çıkar kamera) desteği. API güncellemelerinde, kamera statik bilgilerinin yalnızca kamera bağlıyken ve harici çalışırken takılan kameralar için kullanıma hazır olduğunda kullanılabilir olduğu belirtilir. Kamera durumu
CAMERA_DEVICE_STATUS_PRESENTolmadığında statik bilgi almak için yapılan aramalar geçersizdir. Çerçeve, kullanılabilir harici kamera listesini yönetmek için yalnızca cihaz durumu değişikliği geri çağırmalarına güvenir. - Kamera anlaşması ipuçları. Aynı anda açılıp kullanılabilen kamera cihazlarının sayısını açıkça belirtme desteği eklenir. Geçerli cihaz kombinasyonlarını belirtmek için
resource_costveconflicting_devicesalanları her zamanget_camera_infoçağrısı tarafından döndürülencamera_infoyapısında ayarlanmalıdır. - Modül başlatma yöntemi. HAL modülü yüklendikten sonra HAL'ın tek seferlik başlatılmasına izin vermek için 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, kamera cihazını daha düşük bir cihaz HAL sürümü 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 sürüm, camera_info_t.device_version içinde listelenen sürümdür.
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 öğelerini kullanımdan kaldırır.
2.1
Bu kamera modülü sürümü, kamera modülü durumundaki değişiklikler hakkında çerçeveyi bilgilendirmek için kullanılan kamera HAL modülünden çerçeveye eşzamansız geri çağırma desteği ekler. Geçerli bir set_callbacks() yöntemi sağlayan modüller, en az bu sürüm numarasını bildirmelidir.
2,0
Bu sürüm numarasını bildiren kamera modülleri, kamera modülü HAL arayüzünün 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. camera_info öğesinin device_version alanı her zaman geçerlidir. camera_info öğesinin static_camera_characteristics alanı, device_version alanı 2.0 veya daha yüksekse 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ı, yalnızca kamera cihazı donanım soyutlama katmanının 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'sini destekleyebilir.