Kamera Versiyonu Desteği

Bu sayfa, Kamera HAL'leri, API'ler ve ilişkili Uyumluluk Test Paketi (CTS) testlerindeki sürüm farklılıklarını detaylandırır. Ayrıca, Android 7.0'da kamera çerçevesini sağlamlaştırmak ve güvence altına 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 kapsar.

terminoloji

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

Kamera API1
Android 4.4 ve altı cihazlarda android.hardware.Camera sınıfı aracılığıyla kullanıma sunulan uygulama düzeyinde kamera çerçevesi.
Kamera API2
Android 5.0 ve üzeri cihazlarda android.hardware.camera2 paketi aracılığıyla kullanıma sunulan uygulama düzeyinde kamera çerçevesi.
Kamera HAL'ı
SoC satıcıları tarafından uygulanan kamera modülü katmanı. Uygulama düzeyinde genel çerçeveler, kamera HAL'ının üzerine inşa edilmiştir.
Kamera HAL3.1
Android 4.4 ile yayınlanan HAL kamera cihazının sürümü.
Kamera HAL3.2
Android 5.0 ile piyasaya sürülen HAL kamera cihazının sürümü.
Kamera API1 CTS'si
Camera API1 üzerinde çalışan kamera CTS testleri seti.
Kamera API2 CTS'si
Camera API2 ü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ı arabirimi aracılığıyla Android işletim sistemi çerçevesinden ayırır.
HIDL
Tiz 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 sunulan satıcı test paketi .

Kamera API'leri

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

Kamera API1

Android 5.0, Camera API2'ye odaklanan yeni platform geliştirmesi nedeniyle kullanımdan kaldırılmaya devam eden Camera API1'i kullanımdan kaldırmıştır. Ancak kullanımdan kaldırma süresi uzun olacak ve Android sürümleri bir süre daha Camera API1 uygulamalarını desteklemeye devam edecek. Özellikle, destek aşağıdakiler için devam eder:

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

Kamera API2

Camera API2 çerçevesi, verimli sıfır kopyalı seri çekim/akış akışları ve pozlama, kazanç, beyaz dengesi kazanımları, renk dönüştürme, 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, Camera API2'yi içerir; ancak, Android 5.0 ve üzerini çalıştıran cihazlar tüm Camera API2 özelliklerini desteklemeyebilir. Uygulamaların Camera API2 arabirimleri aracılığıyla sorgulayabildiği android.info.supportedHardwareLevel özelliği, aşağıdaki destek düzeylerinden birini bildirir:

  • LEGACY : Bu cihazlar, Camera API1 arabirimleri aracılığıyla uygulamalara sunulanlarla yaklaşık olarak aynı yeteneklere sahip olan Camera API2 arabirimleri aracılığıyla uygulamalara yetenekler 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 denetimler 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 üzerini ve Android 5.0 veya üzerini kullanmalıdır.
  • LEVEL_3 : Bu cihazlar, ek çıkış akışı yapılandırmalarıyla birlikte 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 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 gösterilir. 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 cihaz, hiçbiri dahil olmak üzere bu yeteneklerin herhangi bir alt kümesinin reklamını yapabilir. Ancak, BACKWARD_COMPATIBLE özelliği her zaman tanımlanmalıdır.

Cihazın desteklenen donanım düzeyi ve desteklediği belirli Camera API2 yetenekleri, 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ı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 arabirimlerinin tamamını destekleyemeyen cihazların yine de Camera API2 CTS testlerini geçmesi gerekir. Ancak cihaz, Camera API2 LEGACY modunda çalışır (burada Camera API2 çağrıları kavramsal olarak Camera API1 çağrılarıyla eşlenir), bu nedenle Camera API1 dışındaki ö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. Ortaya çıkan (ve bir Camera API2 CTS hatasına neden olan) hatalar, cihazın mevcut Camera HAL'sinde zaten mevcut olan ve dolayısıyla mevcut Camera API1 uygulamaları tarafından bulunabilecek hatalardır. Bu türden çok fazla hata beklemiyoruz (ancak, Camera API2 CTS testlerini geçmek için bu tür hataların düzeltilmesi gerekir).

VTS gereklilikleri

Birleştirilmiş HAL uygulamalarına sahip Android 8.0 ve sonraki sürümleri çalıştıran cihazların Camera VTS testlerini geçmesi gerekir.

Kamera çerçevesi sertleştirme

Medya ve kamera çerçevesi güvenliğini sağlamlaştırmak için Android 7.0, kamera hizmetini medya sunucusunun dışına taşır. Android 8.0'dan başlayarak, birleştirilmiş her bir 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'ında değişiklik yapması 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ırı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'i kullanırken:

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

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

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

  • Video arabelleklerinde meta verilerin iletilmesini destekleyen HAL1, satıcıların HAL'ı kMetadataBufferTypeNativeHandleSource kullanacak şekilde güncellemesi 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'teki API2 için BufferQueue, bu yolların çalışmaya devam etmesi için arabellekleri iletir. API2 için Android 7.0 mimarisi:

  • HAL1, cameraservice taşımasından etkilenmez ve satıcı güncellemesi gerekmez.
  • HAL3 etkilenir , ancak satıcı güncellemesi gerekli değildir :

    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çeve güvenliğinin güçlendirilmesi 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ı etkileyebilen 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.
  • Meta verileri video arabelleklerinde 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 arabelleklerinde VideoNativeHandleMetadata iletmelidir. ( kMetadataBufferTypeCameraSource artık Android 7.0'da desteklenmemektedir.) VideoNativeHandleMetadata ile kamera ve medya çerçeveleri, yerel tutamaçları düzgün bir şekilde seri hale getirerek ve serisini kaldırarak video arabelleklerini işlemler arasında geçirebilir.
  • Arabellek işleyici adresi her zaman aynı arabelleği depolamaz ( yalnızca HAL3 ). HAL3, her yakalama isteği için arabellek tutamaçlarının adreslerini alır. HAL, arabelleği döndürdükten sonra adresler başka bir arabellek tanıtıcısı saklayabileceğinden, HAL, arabellekleri tanımlamak için adresleri kullanamaz. Arabellekleri tanımlamak üzere arabellek tutamaçlarını kullanmak için HAL'ı güncellemeniz gerekir. Örneğin, HAL, tampon tanıtıcısı A'yı saklayan bir tampon tanıtıcısı A adresini alır. HAL, tampon tanıtıcısı A'yı döndürdükten sonra, tampon tanıtıcısı A adresi, HAL'ın bir sonraki alımında tampon tanıtıcısı B'yi depolayabilir.
  • cameraserver için SELinux politikalarını güncelleyin. Cihaza özgü SELinux ilkeleri, medya sunucusuna kamerayı çalıştırmak için izinler veriyorsa, cameraserver'a uygun izinleri vermek için SELinux ilkelerini güncellemeniz gerekir. Mediaserver'ın cameraserver için SELinux politikalarının çoğaltılmasını önermiyoruz (çünkü mediaserver ve cameraserver genellikle sistemde farklı kaynaklar gerektirir). Cameraserver, yalnızca kamera işlevlerini gerçekleştirmek için gereken izinlere sahip olmalı ve mediaserver'daki kamerayla ilgili gereksiz tüm izinler kaldırılmalıdır.
  • Camera HAL ve cameraserver arasındaki ayrım. Android 8.0 ve sonraki sürümler ayrıca, birleştirilmiş Kamera HAL'ını cameraserver'dan farklı bir süreçte 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'ını değerlendirmek için kullanılabilen 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'sı

Kamera HAL'ı

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

3.5

ICameraDevice

  • getPhysicalCameraCharacteristics : Mantıksal bir kamera cihazını destekleyen fiziksel bir kamera kimliği için statik kamera bilgisi. 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 : Kamera çerçevesine, olası yeni oturum parametre değerleri için tam akış yeniden yapılandırmasının gerekip gerekmediğini söyleyen yöntem. Bu, gereksiz kamera yeniden yapılandırma gecikmelerini önlemeye yardımcı olur. Bkz. Oturum yeniden yapılandırma sorgusu .
  • HAL arabellek yönetimi API'leri : Bu API'ler, kamera ardışık düzeni boyunca her bir yakalama isteğini ilgili arabelleklerle birleştirmek yerine, kamera HAL'sinin yalnızca gerektiğinde kamera çerçevesinden arabellek talep etmesine izin vererek potansiyel olarak önemli bellek tasarrufları sağlar.
    • signalStreamFlush : HAL'a, kamera hizmetinin configureStreams_3_5 gerçekleştirmek üzere olduğunu ve HAL'ın 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 bir yarış koşulunu kontrol etmek için streamConfigCounter sayacı sağlanır.

ICameraDeviceCallback Güncellemeleri:

  • 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 üzere kamera HAL'ı için senkronize geri arama. Bkz. returnStreamBuffers .

3.4

Android 10'da kamera meta verilerine aşağıdaki anahtarlar eklenir.

  • 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ı için değerler
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
  • Kullanılabilir dinamik derinlik akışı yapılandırmaları
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
  • Kullanılabilir HEIC 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'ını bilgilendirmesi için notifyDeviceStateChange yöntemini ekler.

2.4

  • API düzeyi 29 veya daha yüksek olan aygıtların isTorchModeSupported için true bildirmesi GEREKİR.

Android 9

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

Kamera API'sı

  • Birden fazla kameranın aynı yöne baktığı cihazları daha iyi desteklemek için çoklu kamera API'sini tanıtarak bokeh ve kusursuz yakınlaştırma gibi özellikleri etkinleştirir. Bu, uygulamaların bir cihazdaki birden çok 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 olabilecek mevcut yakalama parametrelerinin bir alt kümesidir. İstemciler, yakalama oturumu başlatma sırasında başlangıç ​​değerlerini iletirlerse bu maliyetler azaltılabilir. Bkz. Oturum Parametreleri .
  • 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 bir hareket izleme amacı ekler. CONTROL_CAPTURE_INTENT_MOTION_TRACKING bakın.
  • LENS_RADIAL_DISTORTION kullanımdan kaldırılmıştır ve yerine LENS_DISTORTION eklenmiştir.
  • CaptureRequest distorsiyon 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

ICameraDeviceCallback Güncellemeleri

3.3

Android 9'da kamera meta verilerine aşağıdaki anahtarlar 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ü Tiz'i sunar. Tiz ile, satıcı Kamera HAL uygulamalarının ciltlenmesi gerekir. Android 8.0 ayrıca Kamera hizmetine yönelik şu önemli geliştirmeleri 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ışı sürmek için yalnızca bir arabellek setine olanak tanır. 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 işaretlerini kamera HAL'ına ve graloc HAL'a iletir; ya doğru türde arabellek 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ı semantikleri var; ö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. Görünüşte, kip sadece configure_streams iletilen 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ını içerir. Bu modlar, genel API'ye eklenecek gelecekteki modlarla çakışmayı önlemek için 0x8000 tamsayı değerinden 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 HAL'lerine eklemeleri ve ardından özel kamera uygulamalarının sistem API'sini kullanmaları gerekir.

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

onCaptureQueueEmpty

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ı 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 yapılır.

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ğindeki 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 alanını daha esnek bir tanımla 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ş kapasiteli HAL'ın küçük revizyonu:

  • OPAQUE ve YUV yeniden işleme API güncellemeleri.
  • Derinlik çıkış arabellekleri için temel destek.
  • data_space alanının camera3_stream_t eklenmesi.
  • camera3_stream_t döndürme alanı eklendi.
  • camera3 akış yapılandırma çalışma modunun camera3_stream_configuration_t öğesine eklenmesi.

3.2

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

  • get_metadata_vendor_tag_ops kullanımdan kaldırılmıştır. Bunun yerine camera_common.h içinde get_vendor_tag_ops kullanın.
  • register_stream_buffers kullanımdan kaldırılmıştır. process_capture_request içinde çerçeve tarafından HAL'a sağlanan tüm gralloc 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 öğesine 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 içinde döndürülür.

3.1

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

  • configure_streams tüketici kullanım bayraklarını HAL'a iletir.
  • tüm uçuş sırasında istekleri/arabellekleri olabildiğince hızlı bir şekilde bırakmak için çağrıyı boşaltın.

3.0

Genişletilmiş kapasiteli HAL'ın ilk revizyonu:

  • ABI tamamen farklı olduğu için büyük sürüm değişikliği. 2.0'dan gerekli donanım yeteneklerinde veya işletim modelinde değişiklik yok.
  • Yeniden çalışılan giriş isteği ve akış kuyruğu arabirimleri: Çerçeve, sonraki istek ve akış arabellekleri zaten kuyruktan çıkarılmış olarak HAL'a çağrılır. 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 çerçeve içinde ve tüm kurulum yöntemlerini tek bir initialize() çağrısında birleştirdi.
  • 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.
  • Daha eski/sınırlı donanım aygıtları için sınırlı mod semantiği.

2.0

Genişletilmiş kapasiteli HAL'ın (Android 4.2) [camera2.h] ilk sürümü:

  • 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. 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.Camera API'yi 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 versiyonlama bilgilerini içerir. En önemli iki onaltılık basamak ana sürümü temsil eder ve en önemsiz iki rakam küçük 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 kamera cihazını 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 cihazının açılması, modül arabirimi aracılığıyla etkinleştirildiyse meşaleyi 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ü meşale modunun kapatıldığını meşale modu durum geri araması aracılığıyla çerçeveye bildirmelidir.
  2. Harici kamera (örneğin, USB çalışır durumda takılabilir kamera) desteği. API güncellemeleri, kamera statik bilgisinin 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ılabilecek kamera cihazlarının sayısını açıkça belirtmek için destek ekler. Geçerli cihaz kombinasyonlarını belirtmek için, get_camera_info çağrısı tarafından döndürülen camera_info yapısında her zaman resource_cost ve conflicting_devices alanları ayarlanmalıdır.
  4. Modül başlatma yöntemi. HAL modülü yüklendikten sonra, HAL'ın bir defalık başlatılmasına izin vermek için kamera hizmeti tarafından çağrılır. Diğer herhangi bir modül yöntemi ç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 çok cihaz API sürümünü destekleyebiliyorsa kamera cihazını daha düşük cihaz HAL versiyonu 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 içinde listelenen 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 açık bir cihazla 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 arabiriminin 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ı, HAL kamera cihazının 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ı tarafından yalnızca android.hardware.Camera API desteklenebilir.