Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Kamera Sürümü Desteği

Bu sayfada, Kamera HAL'leri, API'ler ve ilişkili Uyumluluk Test Paketi (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ü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 kapsıyor.

Terminoloji

Bu sayfada aşağıdaki terimler kullanılmaktadır:

Kamera API1
Android 4.4 ve daha düşük cihazlarda android.hardware.Camera sınıfıyla gösterilen uygulama düzeyinde kamera çerçevesi.
Kamera API2
Android 5.0 ve sonraki android.hardware.camera2 cihazlardaki uygulama düzeyinde kamera çerçevesi, android.hardware.camera2 paketiyle gösterilir.
Kamera HAL
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ı sürümü Android 4.4 ile piyasaya sürüldü.
Kamera HAL3.2
HAL kamera cihazı sürümü Android 5.0 ile piyasaya sürüldü.
Kamera API1 CTS
Camera API1'in üzerinde çalışan kamera CTS testleri seti.
Kamera API2 CTS
Camera API2'nin üzerinde çalışan ek kamera CTS testleri seti.
Tiz
Satıcı uygulamasını (silikon üreticileri tarafından yazılan cihaza özgü, 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 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 tanıtıldı.

Kamera API'leri

Android, aşağıdaki kamera API'lerini içerir.

Kamera API1

Android 5.0, yeni platform geliştirme Camera API2'ye odaklandıkça aşamalı olarak kaldırılmaya devam eden Camera API1'i kullanımdan kaldırmıştır. Ancak, kullanımdan kaldırılma süresi uzun olacak ve Android sürümleri, bir süre için Camera API1 uygulamalarını desteklemeye devam edecek. Özellikle şu konularda destek devam ediyor:

  • Uygulamalar için Camera API1 arayüzleri. Camera API1'in üzerine oluşturulan 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 versiyonları. Kamera HAL1.0 desteği içerir.

Kamera API2

Camera API2 çerçevesi, verimli sıfır kopya patlama / akış akışları ve pozlama, kazanç, beyaz dengesi kazançları, renk dönüştürme, gürültü azaltma, keskinleştirme ve daha fazlasının kare başına kontrolleri dahil olmak üzere uygulamaya alt düzey kamera kontrolünü sunar. Ayrıntılar için Google I / O videosuna genel bakışı 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 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 maruz kalanlarla yaklaşık olarak aynı yeteneklere sahip olan Camera API2 arayüzleri aracılığıyla uygulamalara yetenekler sunar. Eski çerçevelerin 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 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 temel özelliklerini destekler ve Camera HAL 3.2 veya üstünü ve Android 5.0 veya üstünü kullanmalıdır.
  • LEVEL_3 : Bu cihazlar, ek çıktı akışı yapılandırmalarıyla birlikte YUV yeniden LEVEL_3 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 rapor edilmeyebilir 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 arabirimlerindeki android.request.availableCapabilities özelliği aracılığıyla sunulur. FULL cihazlar, diğerleri arasında 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üzeyinin yanı sıra desteklediği belirli Camera API2 özellikleri, Camera API2 kamera uygulamalarının Google Play filtrelemesine izin vermek için aşağıdaki özellik bayrakları 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ın Camera API1 CTS, Camera API2 CTS ve CTS Verifier kamera testlerini geçmesi gerekir.

Kamera HAL3.2 uygulamasına sahip olmayan ve tüm Camera API2 arayüzlerini destekleyemeyen cihazlar, yine de Camera API2 CTS testlerini geçmelidir. Ancak cihaz, Camera API2 LEGACY modunda çalışır (burada Camera API2 çağrıları kavramsal olarak Camera API1 çağrılarına eşlenir), 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 gereksinimler olmaksızın mevcut genel Camera API1 arayüzlerini ve yeteneklerini kullanır. Açığa çıkan (ve bir Camera API2 CTS arızasına neden olan) hatalar, cihazın mevcut Camera HAL'ında zaten mevcut olan hatalardır ve bu nedenle, mevcut Camera API1 uygulamaları tarafından bulunabilir. Bu türden çok fazla hata beklemiyoruz (ancak, bu tür hataların Kamera API2 CTS testlerini geçmek için düzeltilmesi gerekir).

VTS gereksinimleri

Bağlayıcı HAL uygulamalarıyla Android 8.0 ve sonraki sürümleri ç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 ortam sunucusunun dışına taşır. Android 8.0'dan başlayarak, her ciltlenmiş Kamera 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'sinde değişiklik yapması gerekebilir. Aşağıdaki bölümler, HAL1 ve HAL3 için AP1 ve AP2'deki mimari değişiklikleri ve genel gereksinimleri detaylandırmaktadır.

API1 için mimari değişiklikler

API1 video kaydı, kamera ve video kodlayıcının aynı işlemde canlı olduğunu varsayabilir. API1 açıkken:

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

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

    Şekil 1. HAL3'te API1'de Android 7.0 kamera ve ortam yığını

  • Video arabelleklerinde meta verilerin aktarılmasını destekleyen HAL1, satıcıların kMetadataBufferTypeNativeHandleSource kullanmak için kMetadataBufferTypeNativeHandleSource güncellemeleri gerekir. ( kMetadataBufferTypeCameraSource artık Android 7.0'da desteklenmemektedir.)

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

    Şekil 2. HAL1'de API1'de Android 7.0 kamera ve ortam 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 etkilenen, ama hiçbir satıcı güncelleme gereklidir:

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

    Şekil 3. HAL3'te API2'de Android 7.0 kamera ve ortam yığını

Ek gereksinimler

Ortam 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, 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. Aygıtlar ayrıca yeni işlemi oluşturmak için az miktarda ek RAM gerektirir.
  • Meta verileri video arabelleklerinde geçirin ( 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 arabelleklerinde VideoNativeHandleMetadata . ( 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 VideoNativeHandleMetadata video arabelleklerini işlemler arasında geçirebilir.
  • Arabellek tanıtıcısı 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 arabelleği döndürdükten sonra adresler başka bir arabellek tutamacını depolayabileceğinden, HAL arabellekleri tanımlamak için adresleri kullanamaz. Arabellekleri tanımlamak için arabellek tutamaçlarını kullanmak için HAL'yi güncellemelisiniz. Örneğin, HAL, arabellek tutacağı A'yı saklayan bir arabellek tutacağı adresi A alır. HAL, arabellek tutamacı A'ya döndükten sonra, arabellek tutamaç adresi A, HAL bir sonraki sefer aldığında arabellek tutamacını B depolayabilir.
  • Kamera için SELinux politikalarını güncelleyin. Cihaza özgü SELinux politikaları, medya sunucusuna kamerayı çalıştırmak için izinler veriyorsa, kamera sunucusuna uygun izinler vermek için SELinux politikalarını güncellemeniz gerekir. Mediaerver'ın SELinux politikalarının cameraserver için kopyalanmasını önermiyoruz (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 ortam sunucusundaki kamera ile ilgili gereksiz izinler kaldırılmalıdır.
  • Kamera HAL ile kamera sunucusu arasında ayrım. Android 8.0 ve sonraki sürümler ayrıca, bağlayıcı hale getirilmiş Kamera HAL'ı kameralı kameradan farklı bir işlemle ayırır. IPC, HIDL tanımlı arayüzlerden geçer.

Doğrulama

Bir kamera içerir ve Android 7.0 çalıştıran tüm cihazlar için, Android 7.0 CTS çalıştırarak uygulanmasını doğrulamak. 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 üstünü çalıştıran tüm cihazlar için, VTS çalıştırarak satıcı uygulamasını doğrulayın.

Kamera HAL sürüm geçmişi

Android Kamera HAL'ı değerlendirmek için mevcut testlerin bir 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

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 bir kamera kimliği için statik kamera bilgisi. Çoklu Kamera Desteği'ne bakın.
  • isStreamCombinationSupported : Bu yöntem, bir oturum yapılandırması destekleniyorsa istemcilerin sorgulamasına yardımcı olan genel bir API'yi destekler. Akış kombinasyonlarını sorgulamak için API'ye bakın.

ICameraDeviceSession

  • isReconfigurationNeeded : Kamera çerçevesine olası yeni oturum parametresi değerleri için eksiksiz akış yeniden yapılandırmasının gerekip gerekmediğini söyleyen yöntem. Bu, gereksiz kamera yeniden yapılandırma gecikmelerinin önlenmesine 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 ardışık düzeni boyunca ilişkili arabellekleriyle birleştirmek yerine, kamera HAL'sinin yalnızca kamera çerçevesinden arabellek talep etmesine olanak tanır ve bu da potansiyel olarak önemli bellek tasarrufu sağlar.
    • signalStreamFlush : signalStreamFlush , kamera hizmetinin configureStreams_3_5 gerçekleştirmek üzere olduğunu ve signalStreamFlush belirlenen akışların tüm arabelleklerini döndürmesi gerektiğini belirtir.
    • configureStreams_3_5 : ICameraDevice3.4.configureStreams benzer, ancak ek olarak, configureStreams_3_5 ve signalStreamFlush çağrıları arasındaki yarış koşulunu kontrol etmek için streamConfigCounter sayacı sağlanmıştır.

ICameraDeviceCallback için ICameraDeviceCallback :

  • requestStreamBuffers : Kamera sunucusundan arabellek istemek için kamera requestStreamBuffers eşzamanlı geri arama.requestStreamBuffers bakın.
  • returnStreamBuffers : Çıkış arabelleklerini kamera sunucusuna döndürmek için kamera returnStreamBuffers eşzamanlı geri arama. returnStreamBuffers bakın.

3.4

Aşağıdaki tuşlar, Android 10'da kamera meta verilerine eklenir.

  • Görüntü 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ı için değerler
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
  • Mevcut dinamik derinlik akış konfigürasyonları
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
  • Mevcut HEIC akış konfigürasyonları
    • 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 kamera ve yönlendirmeyi etkilediğinde cihazların kamera HAL'sini bilgilendirmesi için notifyDeviceStateChange yöntemini ekler.

2.4

  • API seviyesi 29 veya üzeri ile başlatılan cihazlar, isTorchModeSupported için true bildirmelidir * ZORUNLU isTorchModeSupported .

Android 9

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

Kamera API'si

  • Aynı yöne bakan birden çok kameralı cihazları daha iyi desteklemek için çoklu kamera API'sini tanıtır 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ülemesini sağlar. Çekim istekleri, tek bir mantıksal kamera tarafından çevrelenen ayrı kamera cihazlarına da gönderilebilir. Çoklu Kamera Desteği'ne bakın.
  • 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 ilk değerlerini geçerse bu maliyetler azaltılabilir. Oturum Parametrelerine bakın.
  • Uygulama düzeyinde stabilizasyon ve efektler için optik stabilizasyon (OIS) veri anahtarları ekler. STATISTICS_OIS_SAMPLES bakın.
  • Harici flaş desteği ekler. Bkz. CONTROL_AE_MODE_ON_EXTERNAL_FLASH .
  • CAPTURE_INTENT içinde bir hareket izleme amacı ekler. Bkz. CONTROL_CAPTURE_INTENT_MOTION_TRACKING .
  • LENS_RADIAL_DISTORTION ve yerine LENS_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 bölümüne bakın.

Kamera HAL

3.4

ICameraDeviceSession güncellemeleri

ICameraDeviceCallback için ICameraDeviceCallback

3.3

Aşağıdaki tuşlar, Android 9'da kamera meta verilerine 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ı Kamera HAL uygulamaları birleştirilmelidir . Android 8.0 ayrıca Kamera hizmetine yönelik şu önemli geliştirmeleri 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 güç ve bellek tüketimini azaltan yalnızca bir tampon setinin iki çıkışı sürmesini 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şturabilmesini sağlamaları gerekir. Kamera hizmeti, tüketici kullanım bayraklarını kamera HAL ve gralloc HAL'a iletir; ya doğru türde arabellekleri tahsis etmeleri gerekir ya da kamera HAL'ın 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 modu tanımlar: normal ve kısıtlı yüksek hızlı kayıt. Oldukça farklı anlamlara sahipler; ö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ımlama ilgisini dile getirdi. Başlık altında, mod sadece configure_streams aktarılan bir tam sayı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ı içerir. Bu modlar, genel API'ye eklenecek gelecekteki modlarla çakışmayı önlemek için 0x8000 tamsayı değerinde başlamalıdır.

Bu özelliği desteklemek için, OEM'lerin yalnızca, configure_streams üzerinde HAL'ye iletilen bu tamsayı tarafından tetiklenen yeni modu kendi HAL'lerine eklemesi ve ardından özel kamera uygulamalarının sistem API'sini kullanmasını sağlamaları gerekir.

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

onCaptureQueueEmpty

Bu API'nin amacı, istek sırasını 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ı 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öndererek.

Kamera HIDL arayüzü

Kamera HIDL arayüzü, kararlı HIDL tanımlı API'ler kullanan Kamera HAL arayüzünün tam bir revizyonudur. En son 3.4 ve 2.4 sürümlerinde (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ğindeki değişiklikler:

  • RAW_OPAQUE biçimi destekleniyorsa, zorunlu olarak ANDROID_SENSOR_OPAQUE_RAW_SIZE statik meta verileri ekleyin.
  • Herhangi bir RAW biçimi destekleniyorsa zorunlu olarak ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE statik meta verileri ekleyin.
  • camera3_stream_t data_space alanını, camera3_stream_t data_space alanı kodlamasının sürüm 0 tanımını kullanarak daha esnek bir tanıma değiştirin.
  • 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'ın küçük revizyonu:

  • OPAQUE ve YUV API güncellemelerini yeniden işleme.
  • Derinlik çıktı arabellekleri için temel destek.
  • data_space alanının camera3_stream_t .
  • camera3_stream_t döndürme alanının camera3_stream_t .
  • Camera3_stream_configuration_t'ye camera3 akış yapılandırma işlem modunun camera3_stream_configuration_t .

3.2

Genişletilmiş yetenekli HAL'ın küçük revizyonu:

  • get_metadata_vendor_tag_ops . camera_common.h yerine get_vendor_tag_ops camera_common.h kullanın.
  • register_stream_buffers kaldırır. İçinde HAL çerçevesi tarafından verilen tüm gralloc tampon process_capture_request her zaman 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 manuel şablon camera3_request_template . Uygulamalar, yakalama ayarlarını doğrudan kontrol etmek için bu şablonu kullanabilir.
  • Çift yönlü ve giriş akışı özelliklerini yeniden çalışın.
  • Giriş tamponu dönüş yolunu değiştirin. Tampon, process_capture_result yerine process_capture_request içinde döndürülür.

3.1

Genişletilmiş yetenekli HAL'ın küçük revizyonu:

  • configure_streams tüketici kullanım bayraklarını HAL'a iletir.
  • tüm uçuştaki istekleri / tamponları olabildiğince hızlı bir şekilde bırakmak için çağrıyı temizleyin.

3.0

Genişletilmiş yetenekli HAL'in ilk revizyonu:

  • ABI tamamen farklı olduğu için büyük sürüm değişikliği. 2.0'dan itibaren gerekli donanım yeteneklerinde veya işletim modelinde değişiklik yok.
  • Yeniden çalışan giriş isteği ve akış kuyruğu arabirimleri: Çerçeve, sonraki istek ve akış arabellekleri zaten kuyruğa alınmış akışla HAL'a çağrı yapar. Etkili uygulamalar için gerekli olan eşitleme çerçevesi desteği dahildir.
  • Tetikleyiciler isteklere, çoğu bildirim sonuçlara taşındı.
  • Tüm geri aramaları tek bir yapıda çerçevede ve tüm kurulum yöntemlerini tek bir initialize() çağrısında birleştirildi.
  • Akış yönetimini basitleştirmek için tek bir çağrıya akış yapılandırması yapıldı. Ç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ş yetenekli HAL'ın (Android 4.2) [camera2.h] ilk sürümü:

  • Mevcut android.hardware.Camera API'sini uygulamak için yeterli.
  • Kamera servis 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üldü.
  • android.hardware.Camera API'yi destekler.

Kamera modülü sürüm geçmişi

Bu bölüm, camera_module_t.common.module_api_version dayalı olarak, Kamera donanım modülü için modül versiyonlama bilgilerini içerir. En önemli iki onaltılık rakam ana sürümü temsil eder ve en az önemli olan iki rakam ikincil sürümü temsil eder.

2.4

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

  1. Torç modu desteği. Çerçeve, flaş ünitesi olan herhangi bir kamera cihazı için bir kamera cihazı açmadan meşale modunu açabilir. Kamera cihazının flaş ünitesine erişimde kamera modülünden daha yüksek önceliği vardır; bir kamera aygıtını açmak, modül arabirimi aracılığıyla etkinleştirildiyse fener 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ığına dair torç modu durum geri araması yoluyla çerçeveyi bilgilendirmelidir.
  2. Harici kamera (örneğin, USB çalışırken takılabilir kamera) desteği. API güncellemeleri, kamera statik bilgilerinin yalnızca kamera bağlıyken ve çalışırken takılabilir harici kameralar için kullanıma hazır olduğunda kullanılabilir olduğunu belirtir. Kamera durumu CAMERA_DEVICE_STATUS_PRESENT değilse, statik bilgi almaya yönelik çağrılar geçersiz çağrılardır. Çerçeve, kullanılabilir harici kamera listesini yönetmek için yalnızca cihaz durumu değişikliği geri aramalarına dayanır.
  3. Kamera tahkim ipuçları. Eşzamanlı olarak açılabilen ve kullanılabilen kamera cihazlarının sayısını açıkça belirtmek için destek ekler. Cihazların geçerli kombinasyonlarını belirtmek için, resource_cost ve conflicting_devices alanları her zaman set olmalıdır camera_info tarafından döndürülen yapıya get_camera_info çağrısı.
  4. Modül başlatma yöntemi. HAL'nin bir defalık başlatılmasına izin vermek için HAL modülü yüklendikten sonra kamera servisi 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. Çerçeve, aynı cihaz birden fazla cihaz API sürümünü destekleyebiliyorsa, 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 listelenen camera_info_t.device_version .

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 vendor_tag_query_ops .

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 asenkron 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 veya 2.0 sürümünü destekleyebilir. 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ı, HAL kamera cihazının yalnızca 1. sürümünü destekler. device_version ve static_camera_characteristics alanları camera_info geçerli değildir. Bu modül ve cihazları tarafından yalnızca android.hardware.Camera API desteklenebilir.