Kamera Versiyon Desteği

Bu sayfada Kamera HAL'leri, API'ler ve ilgili Uyumluluk Test Paketi (CTS) testlerindeki sürüm farklılıkları ayrıntılarıyla anlatılmaktadır. 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 Tiz'e 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 API1
android.hardware.Camera sınıfı aracılığıyla kullanıma sunulan, Android 4.4 ve daha düşük sürümlere sahip cihazlardaki uygulama düzeyinde kamera çerçevesi.
Kamera API2
android.hardware.camera2 paketi aracılığıyla kullanıma sunulan, Android 5.0 ve üzeri cihazlardaki uygulama düzeyinde kamera çerçevesi.
Kamera HAL'i
SoC satıcıları tarafından uygulanan kamera modülü katmanı. Uygulama düzeyindeki genel çerçeveler, kamera HAL'sinin üzerine inşa edilmiştir.
Kamera HAL3.1
HAL kamera cihazının Android 4.4 ile piyasaya sürülen sürümü.
Kamera HAL3.2
HAL kamera cihazının Android 5.0 sürümüyle piyasaya sürülen sürümü.
Kamera API1 CTS
Camera API1'in üzerinde çalışan bir dizi kamera CTS testi.
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, alt düzey yazılım) yeni bir satıcı arayüzü aracılığıyla Android işletim sistemi çerçevesinden ayırır.
HIDL
HAL arayüz tanımlama dili Treble ile tanıtıldı ve HAL ile kullanıcıları arasındaki arayüzü belirtmek için kullanıldı.
VTS
Treble'ın yanı sıra satıcı test paketi de tanıtıldı.

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 çalışmaları nedeniyle aşamalı olarak kullanımdan kaldırılmaya devam eden Camera API1'i kullanımdan kaldırmıştır. Ancak, aşamalı olarak kaldırma süresi uzun olacak ve Android sürümleri bir süre Camera API1 uygulamalarını desteklemeye devam edecek. Özellikle aşağıdakiler için destek devam etmektedir:

  • Uygulamalar için Kamera API1 arayüzleri. Camera API1 üzerine oluşturulan kamera uygulamaları, Android'in daha düşük sürümlerini çalıştıran cihazlarda olduğu gibi çalışmalıdır.
  • Kamera HAL versiyonları. Kamera HAL1.0 desteğini içerir.

Kamera API2

Camera API2 çerçevesi, verimli sıfır kopya seri çekim/akış akışları ve pozlama, kazanç, beyaz dengesi kazanımları, renk dönüşümü, gürültü giderme, keskinleştirme ve daha fazlasının kare başına kontrolleri dahil olmak üzere uygulamaya daha düşük düzeyde kamera kontrolü sunar. Ayrıntılar için Google I/O video genel bakışını izleyin.

Android 5.0 ve üzeri Kamera API2'yi içerir; ancak Android 5.0 ve üzerini çalıştıran cihazlar tüm Camera API2 özelliklerini desteklemeyebilir. Uygulamaların Camera API2 arayüzleri aracılığıyla sorgulayabildiği android.info.supportedHardwareLevel özelliği, aşağıdaki destek düzeylerinden birini bildirir:

  • LEGACY : Bu cihazlar, Camera API2 arayüzleri aracılığıyla uygulamalara, Camera API1 arayüzleri aracılığıyla uygulamalara sunulanlarla yaklaşık olarak aynı yeteneklere sahiptir. Eski çerçeve kodu kavramsal olarak 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 (ancak 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 üzeri ile Android 5.0 veya üzeri sürümünü kullanmalıdır.
  • LEVEL_3 : Bu cihazlar, ek çıkış akışı yapılandırmalarının yanı sıra YUV yeniden işlemeyi ve RAW görüntü yakalamayı destekler.
  • EXTERNAL : Bu cihazlar, bazı istisnalar dışında LIMITED cihazlara benzer; örneğin, bazı sensör veya lens bilgileri raporlanmayabilir veya daha az kararlı kare hızlarına sahip olabilir. Bu düzey, 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 gösterilir. FULL cihazlar, diğerlerinin yanı sıra MANUAL_SENSOR ve MANUAL_POST_PROCESSING yeteneklerini gerektirir. RAW özelliği FULL cihazlar için bile isteğe bağlıdır. LIMITED cihazlar, hiçbiri dahil olmak üzere bu yeteneklerin herhangi bir alt kümesinin reklamını yapabilir. Ancak BACKWARD_COMPATIBLE özelliğinin her zaman tanımlanması gerekir.

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 üstünü çalıştıran cihazların Camera API1 CTS, Camera API2 CTS ve CTS Verifier kamera testlerini geçmesi gerekir.

Camera HAL3.2 uygulamasına sahip olmayan ve Camera API2 arayüzlerinin tamamını destekleyemeyen cihazların yine de Camera API2 CTS testlerini geçmesi gerekir. Ancak cihaz, Camera API2 LEGACY modunda çalışır (Camera API2 çağrılarının kavramsal olarak Camera API1 çağrılarıyla eşleştirildiği), dolayısıyla 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 gereksinimler olmadan mevcut genel Camera API1 arayüzlerini ve yeteneklerini kullanır. Açığa çıkan hatalar (ve bir Camera API2 CTS hatasına neden olan), cihazın mevcut Camera HAL'inde zaten mevcut olan hatalardır ve dolayısıyla mevcut Camera API1 uygulamaları tarafından bulunabilir. Bu nitelikte çok fazla hata beklemiyoruz (ancak Camera API2 CTS testlerini geçebilmek için bu tür hataların düzeltilmesi gerekir).

VTS gereksinimleri

Bağlayıcı HAL uygulamalarına sahip Android 8.0 ve sonraki sürümlerini çalıştıran cihazların Kamera VTS testlerini geçmesi gerekir.

Kamera çerçevesi sağlamlaştırma

Medya ve kamera çerçevesi güvenliğini güçlendirmek için Android 7.0, kamera hizmetini medya sunucusunun dışına taşıyor. Android 8.0'dan başlayarak, ciltlenmiş her Kamera HAL'si, kamera hizmetinden ayrı bir süreçte çalışır. Satıcıların, kullanılan API ve HAL sürümlerine bağlı olarak 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 gereksinimler ayrıntılı olarak verilmektedir.

API1 için mimari değişiklikler

API1 video kaydında kamera ve video kodlayıcının aynı süreçte canlı olduğu varsayılabilir. API1'i aşağıdaki durumlarda kullanırken:

  • Kamera hizmetinin işlemler arasında arabellekleri geçirmek için BufferQueue'yu kullandığı HAL3'te satıcı güncellemesi gerekmez.

    HAL3'te API1'de Android 7.0 kamera ve medya yığını

    Şekil 1. HAL3'teki API1'deki Android 7.0 kamera ve medya yığını

  • Video arabelleklerinde meta veri aktarımını destekleyen HAL1, satıcıların HAL'yi kMetadataBufferTypeNativeHandleSource kullanacak şekilde güncellemesi gerekir. ( kMetadataBufferTypeCameraSource artık Android 7.0'da desteklenmemektedir.)

    HAL1'de API1'de Android 7.0 kamera ve medya yığını

    Şekil 2. HAL1'deki API1'deki Android 7.0 kamera ve medya yığını

API2 için mimari değişiklikler

HAL1 veya HAL3 üzerindeki API2 için BufferQueue arabellekleri iletir, böylece bu yollar çalışmaya devam eder. API2 için Android 7.0 mimarisi:

  • HAL1, kamera hizmeti taşıma işleminden etkilenmez ve satıcı güncellemesi gerekmez.
  • HAL3 etkilenir ancak satıcı güncellemesi gerekmez:

    HAL3'te API2'de Android 7.0 kamera ve medya yığını

    Şekil 3. HAL3'teki API2'deki Android 7.0 kamera ve medya yığını

Ek gereksinimler

Medya ve kamera çerçevesi güvenliğini güçlendirmek için yapılan mimari değişiklikler aşağıdaki ek cihaz gereksinimlerini içerir.

  • Genel. Cihazlar, IPC nedeniyle ek bant genişliği gerektirir ve bu, yüksek hızlı video kaydı gibi zamana duyarlı kamera kullanım durumlarını etkileyebilir. Satıcılar android.hardware.camera2.cts.PerformanceTest ve 120/240 FPS yüksek hızlı video kaydı için 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.
  • Meta verileri video arabelleklerine aktarın ( yalnızca HAL1 ). HAL1, video arabelleklerinde gerçek YUV çerçeve verileri yerine meta verileri saklıyorsa, HAL'nin meta veri arabellek türü olarak kMetadataBufferTypeNativeHandleSource kullanması ve video arabelleklerinde VideoNativeHandleMetadata geçirmesi gerekir. ( kMetadataBufferTypeCameraSource artık Android 7.0'da desteklenmemektedir.) VideoNativeHandleMetadata ile kamera ve medya çerçeveleri, yerel tanıtıcıları düzgün bir şekilde seri hale getirerek 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 tanıtıcı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ını depolayabilir. Arabellekleri tanımlamak amacıyla arabellek tanıtıcılarını kullanmak için HAL'yi güncellemeniz gerekir. Örneğin, HAL, arabellek tanıtıcısı A'yı saklayan bir arabellek tanıtıcısı adresi A alır. HAL, arabellek tanıtıcısı A'yı döndürdükten sonra, arabellek tanıtıcısı adresi A, HAL'in bir sonraki alışında arabellek tanıtıcısı B'yi depolayabilir.
  • Kamera sunucusu için SELinux politikalarını güncelleyin. Cihaza özel SELinux politikaları medya sunucusuna kamerayı çalıştırma izinleri veriyorsa, kamera sunucusuna uygun izinleri vermek için SELinux politikalarını güncellemelisiniz. Mediaserver'ın SELinux ilkelerinin kamera sunucusu için kopyalanmasını ö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.
  • Kamera HAL ve kamera sunucusu arasındaki ayrım. Android 8.0 ve sonraki sürümler ayrıca bağlayıcı hale getirilmiş Kamera HAL'sini kamera sunucusundan farklı bir işlemle ayırır. IPC, HIDL tanımlı arayüzlerden geçer.

Doğrulama

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.

Kamera içeren ve Android 8.0 ve üstünü ç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'sini değerlendirmeye yönelik mevcut testlerin listesi için Kamera HAL Testi Kontrol Listesi'ne bakın.

Android 10

Android 10 aşağıdaki güncellemeleri sunar.

Kamera API'si

Kamera HAL'i

Aşağıdaki Kamera HAL sürümleri Android 10'da güncellenmiştir.

3.5

ICameraDevice

  • getPhysicalCameraCharacteristics : Mantıksal bir kamera cihazını destekleyen fiziksel kamera kimliğine ilişkin 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ış birleşimlerini sorgulamak için API'ye bakın.

ICameraDeviceSession

  • isReconfigurationNeeded : Olası yeni oturum parametresi değerleri için tam akış yeniden yapılandırmasının gerekli olup olmadığını kamera çerçevesine bildiren yöntem. Bu, gereksiz kamera yeniden yapılandırma gecikmelerinin önlenmesine yardımcı olur. Bkz. Oturum yeniden yapılandırma sorgusu .
  • HAL arabellek yönetimi API'leri : Bu API'ler, kamera işlem hattı boyunca her bir yakalama isteğini ilgili arabelleklerle eşleştirmek yerine, kamera HAL'inin yalnızca gerektiğinde kamera çerçevesinden arabellekler istemesine olanak tanır ve bu da potansiyel olarak önemli miktarda bellek tasarrufu sağlar.
    • signalStreamFlush : HAL'ye, kamera hizmetinin configureStreams_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 ve signalStreamFlush çağrıları arasındaki yarış durumunu kontrol etmek için streamConfigCounter sayacı sağlanır.

ICameraDeviceCallback ile ilgili güncellemeler:

  • requestStreamBuffers : Kamera HAL'nin, kamera sunucusundan arabellek istemek için çağırdığı eşzamanlı geri arama. requestStreamBuffers bakın.
  • returnStreamBuffers : Çıkış arabelleklerini kamera sunucusuna döndürmek için kamera HAL'sine yönelik eşzamanlı geri arama. returnStreamBuffers bakın.

3.4

Android 10'da kamera meta verilerine aşağıdaki tuşlar eklenmiştir.

  • Resim formatları
    • 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ına ilişkin değerler
    • 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
  • Mevcut 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

  • Katlama gibi fiziksel değişiklikler kamerayı ve yönlendirmeyi etkilediğinde cihazların kamera HAL'sine bildirimde bulunması için notifyDeviceStateChange yöntemini ekler.

2.4

  • API düzeyi 29 veya daha yüksek bir değerle başlatılan cihazların isTorchModeSupported için true raporu vermesi GEREKİR.

Android 9

Android 9 sürümü, kamera API2 ve HAL arayüzüne yönelik aşağıdaki güncellemeleri sunar.

Kamera API'si

  • Birden fazla kameranın aynı yöne baktığı cihazları daha iyi desteklemek için çoklu kamera API'sini sunar ve bokeh ve kesintisiz 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 aynı zamanda tek bir mantıksal kameranın kapsadığı 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şlem gecikmelerine neden olabilecek mevcut yakalama parametrelerinin bir alt kümesidir. İstemcilerin, yakalama oturumu başlatma sırasında başlangıç ​​değerlerini iletmeleri durumunda bu maliyetler azaltılabilir. Bkz. Oturum Parametreleri .
  • Uygulama düzeyinde stabilizasyon ve efektler için optik stabilizasyon (OIS) veri anahtarlarını ekler. Bkz. STATISTICS_OIS_SAMPLES .
  • Harici flaş desteği ekler. Bkz. CONTROL_AE_MODE_ON_EXTERNAL_FLASH .
  • CAPTURE_INTENT içine bir hareket izleme amacı ekler. CONTROL_CAPTURE_INTENT_MOTION_TRACKING bakın.
  • LENS_RADIAL_DISTORTION kullanımdan kaldırılır ve yerine LENS_DISTORTION eklenir.
  • CaptureRequest distorsiyon düzeltme modları ekler. Bkz. DISTORTION_CORRECTION_MODE .
  • Desteklenen cihazlara harici USB/UVC kameralar için destek ekler. Bkz. INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL .

Kamera HAL'i

3.4

ICameraDeviceSession Güncellemeleri

ICameraDeviceCallback Güncellemeleri

3.3

Android 9'da kamera meta verilerine aşağıdaki tuşlar eklenmiştir.

  • 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

Android8.0

Android 8.0 sürümü Treble'ı tanıtıyor. Treble ile satıcının Kamera HAL uygulamalarının ciltlenmesi gerekir. Android 8.0 ayrıca Kamera hizmetinde şu önemli geliştirmeleri de içerir:

  • Paylaşılan yüzeyler: Aynı OutputConfiguration paylaş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, önizleme ve video kodlama gibi iki çıkışı yönlendirmek için yalnızca bir arabellek setinin kullanılmasını sağlar; bu da 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 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 işaretlerini kamera HAL'sine ve gralloc HAL'e iletir; ya doğru türde arabellekleri ayırmaları gerekir ya da kamera HAL'nin bu tüketici kombinasyonunun desteklenmediğini belirten 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 modunu tanımlar: normal ve kısıtlı yüksek hızlı kayıt. Oldukça farklı anlamlara sahiptirler; örneğin, yüksek hız modu aynı anda en fazla iki spesifik çıkışla sınırlıdır. Çeşitli OEM'ler, donanıma özgü yetenekler için diğer özel modların tanımlanmasıyla ilgilendiklerini ifade etti. Temelde mod, configure_streams iletilen bir tamsayıdan ibarettir. 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. Bu modlar, genel API'ye gelecekte eklenecek modlarla çakışmayı önlemek için 0x8000 tamsayı değerinden başlamalıdır.

Bu özelliği desteklemek için, OEM'lerin yalnızca, yeni modu HAL'lerine eklemeleri, bu tamsayıların define_streams üzerinde HAL'ye iletilmesiyle tetiklenmesi ve ardından özel kamera uygulamalarının sistem API'sini kullanmasını sağlamaları gerekir.

Yöntemin adı android.hardware.camera2.CameraDevice#createCustomCaptureSession . Bakınız: frameworks/base/core/java/android/hardware/camera2/CameraDevice .

onCaptureQueueEmpty

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 yapılan bir eklemeydi. Bundan yararlanmak isteyen uygulamaların bu geri aramaya bir dinleyici eklemesi ve uygun şekilde yanıt vermesi gerekir. Genellikle bu, kamera cihazına başka bir yakalama isteği gönderilerek yapılır.

Kamera HIDL arayüzü

Kamera HIDL arayüzü, kararlı HIDL tanımlı API'leri kullanan Kamera HAL arayüzünün tamamen yenilenmiş halidir. En son eski sürümler 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.
  • camera3_stream_t data_space 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ş kapasiteli HAL'in küçük revizyonu:

  • OPAQUE ve YUV API güncellemelerini yeniden işliyor.
  • Derinlik çıkış arabellekleri için temel destek.
  • data_space alanının camera3_stream_t dosyasına eklenmesi.
  • camera3_stream_t dönüş alanının eklenmesi.
  • camera3_stream_configuration_t dosyasına Camera3 akış yapılandırması çalışma modunun eklenmesi.

3.2

Genişletilmiş kapasiteli HAL'in küçük revizyonu:

  • get_metadata_vendor_tag_ops kullanımdan kaldırır. Bunun yerine, camera_common.h get_vendor_tag_ops kullanın.
  • register_stream_buffers kullanımdan kaldırır. process_capture_request çerçeve tarafından HAL'ye 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 dosyasına manuel şablon ekleyin. Uygulamalar, yakalama ayarlarını doğrudan kontrol etmek için bu şablonu kullanabilir.
  • Çift yönlü ve giriş akışı özelliklerini yeniden çalışın.
  • Giriş arabelleği dönüş yolunu değiştirin. Tampon, process_capture_request yerine process_capture_result dosyasında döndürülür.

3.1

Genişletilmiş kapasiteli HAL'in küçük revizyonu:

  • configure_streams tüketici kullanım işaretlerini HAL'a iletir.
  • tüm uçuş sırasındaki istekleri/tamponları mümkün olduğunca hızlı bir şekilde bırakmak için çağrıyı temizleme.

3.0

Genişletilmiş kapasiteli HAL'in 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 işlenmiş giriş isteği ve akış kuyruğu arayüzleri: Çerçeve, sonraki istekle HAL'e çağrı yapar ve akış arabellekleri zaten kuyruktan çıkarılmıştır. Verimli uygulamalar için gerekli olan senkronizasyon çerçevesi desteği dahildir.
  • Tetikleyiciler isteklere, çoğu bildirim de sonuçlara taşındı.
  • Tüm geri aramalar çerçevede tek bir yapıda ve tüm kurulum yöntemleri tek bir initialize() çağrısında birleştirildi.
  • Akış yönetimini basitleştirmek için akış yapılandırması tek bir çağrıda yapıldı. Çift yönlü akışlar STREAM_FROM_STREAM yapısının yerini alır.
  • Eski/sınırlı donanım aygıtları için sınırlı mod semantiği.

2.0

Genişletilmiş özellikli HAL'in (Android 4.2) ilk sürümü [camera2.h]:

  • Mevcut android.hardware.Camera API'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 açısından test edilmemiştir.

1.0

İlk Android kamera HAL (Android 4.0) [camera.h]:

  • C++ CameraHardwareInterface soyutlama katmanından dönüştürüldü.
  • 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 temel alınarak Kamera donanım modülü için modül sürüm oluşturma bilgilerini içerir. En önemli iki onaltılık rakam ana sürümü, en az anlamlı olan iki ise alt sürümü temsil eder.

2.4

Bu kamera modülü sürümü aşağıdaki API değişikliklerini ekler:

  1. Meşale modu desteği. Çerçeve, flaş ünitesi olan herhangi bir kamera cihazı için, bir kamera cihazını açmadan fener modunu açabilir. Kamera cihazının flaş ünitesine erişimde kamera modülünden daha yüksek önceliği vardır; Bir kamera cihazının açılması, modül arayüzü aracılığıyla etkinleştirildiyse el fenerini kapatır. Bir kamera cihazını açmak için open() çağrılması gibi herhangi bir kaynak çakışması olduğunda, kamera HAL modülü, fener modunun kapatıldığını fener modu durumu geri araması aracılığıyla çerçeveye bildirmelidir.
  2. 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ışır durumda 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_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.
  3. Kamera tahkim ipuçları. Aynı anda açılıp kullanılabilen kamera cihazlarının sayısını açıkça belirtme desteği eklendi. Geçerli cihaz kombinasyonlarını belirtmek için, resource_cost ve conflicting_devices alanları her zaman get_camera_info çağrısı tarafından döndürülen camera_info yapısında ayarlanmalıdır.
  4. Modül başlatma yöntemi. HAL modülü yüklendikten sonra, HAL'in bir kerelik 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ğini ekler. Çerçeve, aynı cihazın birden fazla cihaz API sürümünü desteklemesi durumunda, 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ı, aynı zamanda camera_info_t.device_version listelenen sürüm olan desteklenen en son sürümle açmaya devam eder.

2.2

Bu kamera modülü sürümü, modülden satıcı etiketi desteği ekler ve daha önce yalnızca 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çeveye kamera modülü durumundaki değişiklikler hakkında bilgi vermek için kullanılan kamera HAL modülünden çerçeveye eş zamanlı olmayan 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 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 sürümünü veya 2.0 sürümünü destekleyebilir. Camera_info'nun device_version alanı her zaman geçerlidir; camera_info 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ı, kamera cihazı HAL'in 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.