Kamera sürümü desteği

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'daki 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 kapsar.

Terminoloji

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

Kamera API'si1
Android 4.4 ve önceki sürümleri çalıştıran cihazlarda uygulama düzeyinde kamera çerçevesi (android.hardware.Camera sınıfı aracılığıyla gösterilir).
Kamera API'sı2
Android 5.0 ve sonraki sürümleri çalıştıran cihazlarda uygulama düzeyinde kamera çerçevesi android.hardware.camera2 paketi aracılığıyla gösteriliyor.
Kamera HAL'i
SoC tedarikçileri tarafından uygulanan kamera modülü katmanı. Uygulama düzeyindeki herkese açık çerçeveler, kamera HAL'sinin üzerine inşa edilmiştir.
Kamera HAL3.1
Android 4.4 ile birlikte yayınlanan kamera cihaz HAL'inin sürümü.
Kamera HAL3.2
Android 5.0 ile birlikte yayınlanan kamera cihazı HAL'inin sürümü.
Camera API1 CTS
Camera API1'in üzerinde çalışan kamera CTS testleri grubu.
Camera API2 CTS
Camera API2'nin üzerinde çalışan ek kamera CTS testleri.
Tiz
Tedarikçi firma uygulamasını (silikon üreticileri tarafından yazılan cihaza özgü, alt seviye yazılımlar) yeni bir tedarikçi firma arayüzü aracılığıyla Android OS ç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 kullanıma sunuldu.

Kamera API'leri

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

Kamera API'si1

Android 5.0'da Camera API1'in desteği sonlandırıldı. Yeni platform geliştirmeleri Camera API2'ye odaklandığından bu API'nin desteği aşamalı olarak kaldırılmaya devam ediyor. Ancak kullanımdan kaldırma süreci uzun olacak ve Android sürümleri bir süre daha Camera API1 uygulamalarını desteklemeye devam edecektir. Özellikle aşağıdakiler için destek devam eder:

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

Camera API2

Kamera API2 çerçevesi, uygulamaya daha düşük düzeyde kamera kontrolü sunar. Bu kontrol, sıfır kopyalamayla etkili seri/akış akışları ve pozlama, kazanç, beyaz denge kazançları, renk dönüştürme, gürültü giderme, keskinleştirme ve daha fazlası için kare başına kontroller içerir. Ayrıntılar için Google I/O videosuna genel bakış başlıklı videoyu 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 Camera API2'nin tüm özelliklerini desteklemeyebilir. Uygulamaların Camera API2 arayüzleri aracılığıyla sorgulayabileceği android.info.supportedHardwareLevel mülkü, aşağıdaki destek düzeylerinden birini raporlar:

  • LEGACY: Bu cihazlar, Camera API2 arayüzleri aracılığıyla uygulamalara Camera API1 arayüzleri aracılığıyla uygulamalara sunulanlarla yaklaşık olarak aynı özellikler sunar. Eski çerçeve kodları, 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 (hepsini değil) ve Kamera HAL 3.2 veya sonraki bir sürümü kullanmalıdır.
  • FULL: Bu cihazlar, Camera API2'nin tüm önemli özelliklerini destekler ve Camera HAL 3.2 veya sonraki bir sürüm ile Android 5.0 veya sonraki 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şlemeyi ve RAW resim yakalamayı destekler.
  • EXTERNAL: Bu cihazlar, bazı istisnalar dışında LIMITED cihazlarına benzer. Örneğin, bazı sensör veya lens bilgileri raporlanmayabilir ya da daha kararsız kare hızlarına sahip olabilir. Bu düzey, USB web kameraları gibi harici kameralar için kullanılır.

Ayrı ayrı özellikler, Camera API2 arayüzlerindeki android.request.availableCapabilities mülkü aracılığıyla gösterilir. FULL cihazlar, diğer özelliklerin yanı sıra MANUAL_SENSOR ve MANUAL_POST_PROCESSING özelliklerini gerektirir. RAW özelliği, FULL cihazlar için bile isteğe bağlıdır. LIMITED cihazlar, bu özelliklerin hiçbiri dahil olmak üzere bu özelliklerin herhangi bir alt kümesinin reklamını yapabilir. Ancak BACKWARD_COMPATIBLE özelliği her zaman tanımlanmalıdır.

Cihazın desteklediği donanım düzeyi ve desteklediği belirli Camera2 API2 özellikleri, Google Play'in Camera2 API2 kamera uygulamalarını filtrelemesine olanak tanımak için aşağıdaki özellik işaretleri olarak kullanılabilir.

  • 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 koşulları

Android 5.0 ve sonraki sürümleri çalıştıran cihazlar, Camera API1 CTS, Camera API2 CTS ve CTS Doğrulayıcı kamera testlerini geçmelidir.

Kamera HAL3.2 uygulaması içermeyen ve Camera API2 arayüzlerinin tamamını destekleyemeyen cihazlar, Camera API2 CTS testlerini yine de geçmelidir. Ancak cihaz, Camera API2 LEGACY modunda çalışır (Camera API2 çağrılarının kavramsal olarak Camera API1 çağrılarıyla eşlendiği mod). Bu nedenle, Camera API1'in ötesindeki özellikler veya özelliklerle ilgili tüm Camera API2 CTS testleri otomatik olarak atlanır.

Eski cihazlarda çalıştırılan Camera API2 CTS testleri, yeni şart olmadan mevcut herkese açık Camera API1 arayüzlerini ve özelliklerini kullanır. Ortaya çıkarılan (ve Camera API2 CTS hatasına neden olan) hatalar, cihazın mevcut Camera HAL'inde zaten mevcut olan hatalar olduğundan mevcut Camera API1 uygulamaları tarafından bulunur. Bu tür çok fazla hata beklemiyoruz (ancak Camera API2 CTS testlerini geçmek için bu tür hataların düzeltilmesi gerekir).

VTS gereksinimleri

Android 8.0 ve sonraki sürümleri çalıştıran, bağlayıcı HAL uygulamalarını kullanan cihazlar Kamera VTS testlerinden geçmelidir.

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

Android 7.0, medya ve kamera çerçevesi güvenliğini güçlendirmek için kamera hizmetini medya sunucusunun dışına taşır. Android 8.0'dan itibaren, her bağlayıcılı kamera HAL'i kamera hizmetinden ayrı bir işlemde çalışır. Kullanılan API ve HAL sürümlerine bağlı olarak tedarikçi firmaların, 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 şartlar ayrıntılı olarak açıklanmıştır.

API1 için mimari değişiklikleri

API1 video kaydı, kamera ve video kodlayıcının aynı işlemde olduğunu varsayabilir. API1'i şu platformlarda kullanırken:

  • Kamera hizmetinin, tamponları işlemler arasında iletmek için BufferQueue'ı kullandığı HAL3'te tedarikçi güncellemesi gerekmez.

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

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

  • Video arabelleklerinde meta veri aktarımını destekleyen HAL1. Tedarikçi firmaların HAL'i kMetadataBufferTypeNativeHandleSource kullanacak şekilde güncellemesi gerekir. (kMetadataBufferTypeCameraSource artık Android 7.0'da desteklenmiyor.)

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

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

API2 için mimari değişiklikleri

HAL1 veya HAL3'teki API2 için BufferQueue, bu yolların çalışmaya devam etmesi amacıyla arabellekleri iletir. Aşağıdaki cihazlarda API2 için Android 7.0 mimarisi:

  • HAL1, kamera hizmetinin taşınmasından etkilenmez ve tedarikçinin güncellenmesi gerekmez.
  • HAL3 etkilenir ancak satıcı güncellemesi gerekmez:

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

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

Diğer şartlar

Medya ve kamera çerçevesinin güvenliğini artı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. Tedarikçi firmalar, 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ın yeni işlemi oluşturmak için az miktarda ek RAM'e de ihtiyacı vardır.
  • Meta verileri video arabelleklerine aktarma (yalnızca HAL1). HAL1, video arabelleklerinde gerçek YUV çerçeve verileri yerine meta verileri depoluyorsa meta veri arabellek türü olarak kMetadataBufferTypeNativeHandleSource'ü kullanmalı ve VideoNativeHandleMetadata'ü video arabelleklerine iletmelidir. (kMetadataBufferTypeCameraSource artık Android 7.0'da desteklenmiyor.) VideoNativeHandleMetadata sayesinde kamera ve medya çerçeveleri, yerel herkese açık kullanıcı adlarını düzgün bir şekilde serileştirip seri dışı bırakarak video arabelleklerini işlemler arasında geçirebilir.
  • Arabellek adresi 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, tamponu döndürdükten sonra adresler başka bir tampon tutamacını depolayabileceğinden, tamponları tanımlamak için adresleri kullanamaz. Arabellekleri tanımlamak için arabellek tutamaçlarını kullanacak şekilde HAL'i güncellemeniz gerekir. Örneğin HAL, A arabellek tutma yeri A'yı depolayan bir arabellek tutma yeri adresi alır. HAL, A arabellek tutamacını döndürdükten sonra A arabellek tutamaç adresi, HAL'ın bir sonraki sefer aldığında B arabellek tutamacını saklayabilir.
  • cameraserver için SELinux politikalarını güncelleyin. Cihaza özgü SELinux politikaları, mediaserver'a kamerayı çalıştırma izni veriyorsa SELinux politikalarını, cameraserver'a uygun izinler verecek şekilde güncellemeniz gerekir. Mediaserver'ın SELinux politikalarının cameraserver için kopyalanmasını önermeyiz (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 medya sunucusundaki kamerayla ilgili gereksiz izinler kaldırılmalıdır.
  • Kamera HAL'si ile kamera sunucusu arasında ayırma. Android 8.0 ve sonraki sürümlerde, kamera sunucusundan farklı bir işlemde bağlayıcılı kamera HAL'i de ayrılır. IPC, HIDL tarafından tanımlanan arayüzlerden geçer.

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 hizmetindeki değişiklikleri doğrulayan yeni CTS testleri içermese de yukarıda belirtilen güncellemeleri yapmadıysanız mevcut CTS testleri geçersiz olur.

Kamera içeren ve Android 8.0 veya sonraki sürümleri çalıştıran tüm cihazlarda VTS'yi çalıştırarak tedarikçi firma uygulamasını doğrulayın.

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

Android kamera HAL'ini değerlendirmek için kullanılabilen testlerin listesi için Kamera HAL Testi Yapılacaklar Listesi'ne bakın.

Android 10

Android 10'da aşağıdaki güncellemeler sunulur.

Kamera API'si

Kamera HAL'i

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

3,5

ICameraDevice

  • getPhysicalCameraCharacteristics: Mantıksal kamera cihazını destekleyen fiziksel bir kamera kimliği için statik kamera bilgileri. Çoklu Kamera Desteği başlıklı makaleyi inceleyin.
  • isStreamCombinationSupported: Bu yöntem, istemcilerin 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 parametresi değerleri için tam akış yeniden yapılandırmasının gerekip gerekmediğini kamera çerçevesine bildiren yöntem. Bu, kameranın yeniden yapılandırmada gereksiz gecikmelerin önlenmesine yardımcı olur. Oturum yeniden yapılandırma sorgusu başlıklı makaleyi inceleyin.
  • HAL arabellek yönetimi API'leri: Bu API'ler, kamera HAL'inin her yakalama isteğini kamera ardışık düzeni boyunca ilişkili arabellekleriyle birleştirmek yerine yalnızca gerektiğinde kamera çerçevesinden arabellek istemesine olanak tanır. Bu da önemli ölçüde bellek tasarrufu sağlar.
    • signalStreamFlush: HAL'ye, kamera hizmetinin configureStreams_3_5 işlemini gerçekleştirmek üzere olduğunu ve HAL'nin, belirlenmiş akışların tüm arabelleklerini döndürmesi gerektiğini bildirir.
    • configureStreams_3_5: ICameraDevice3.4.configureStreams özelliğine benzer ancak buna ek olarak, configureStreams_3_5 ile signalStreamFlush çağrıları arasındaki yarış durumunu kontrol etmek için streamConfigCounter sayacı da sağlanır.

ICameraDeviceCallback ile ilgili güncellemeler:

  • requestStreamBuffers: Kamera HAL'inin, kamera sunucusundan arabellekler istemek için çağırdığı eşzamanlı geri çağırma işlevi. Bkz. requestStreamBuffers.
  • returnStreamBuffers: Kamera HAL'inin çıkış arabelleklerini kamera sunucusuna döndürmesi için senkron geri çağırma işlevi. Bkz. returnStreamBuffers.

3,4

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

  • Resim biçimleri
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
    • ANDROID_SCALER_AVAILABLE_FORMATS_Y8
  • Kamera meta veri etiketleri
    • ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
    • ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
    • ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
    • ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
    • ANDROID_HEIC_INFO_SUPPORTED
    • ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
  • Özellikler
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
  • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT anahtarının değerleri
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
  • 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 yayın 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üncellendi.

2,5

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

2.4

  • API düzeyi 29 veya sonraki sürümleri çalıştıran cihazlar, isTorchModeSupported için true değerini bildirmelidir.

Android 9

Android 9 sürümünde, kamera API2 ve HAL arayüzünde aşağıdaki güncellemeler kullanıma sunulmuştur.

Kamera API'si

  • Aynı yöne bakan birden fazla kamerası olan cihazları daha iyi desteklemek, bokeh ve kesintisiz yakınlaştırma gibi özellikleri etkinleştirmek için çoklu kamera API'sini kullanıma sundu. Bu, uygulamaların bir cihazdaki birden fazla kamerayı tek bir mantıksal birim (mantıksal kamera) olarak görüntülemesine olanak tanır. Kayıt istekleri, 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, mevcut yakalama parametrelerinin bir alt kümesidir ve değiştirildiğinde ciddi işleme gecikmelerine neden olabilir. İstemciler, yakalama oturumu başlatılırken ilk değerlerini iletirse 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. Bkz. STATISTICS_OIS_SAMPLES.
  • Harici flaş desteği ekler. Bkz. CONTROL_AE_MODE_ON_EXTERNAL_FLASH.
  • CAPTURE_INTENT aralığına hareket izleme amacı ekler. Bkz. CONTROL_CAPTURE_INTENT_MOTION_TRACKING.
  • LENS_RADIAL_DISTORTION desteği sonlandırılır ve yerine LENS_DISTORTION eklenir.
  • CaptureRequest'te distorsiyon düzeltme modları ekler. Bkz. DISTORTION_CORRECTION_MODE.
  • Desteklenen cihazlarda harici USB/UVC kamera desteği eklendi. Bkz. INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL.

Kamera HAL'i

3.4

ICameraDeviceSession ile ilgili güncellemeler

ICameraDeviceCallback ile ilgili güncellemeler

3,3

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

  • Özellikler
    • 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

Treble, Android 8.0 sürümünde kullanıma sunuldu. Treble ile birlikte, tedarikçi firma kamera HAL uygulamalarının bağlantılandırılmış olması gerekir. Android 8.0, Kamera hizmetinde aşağıdaki önemli iyileştirmeleri de içerir:

  • Paylaşılan yüzeyler: Aynı OutputConfiguration
  • Özel kamera modları için System API
  • onCaptureQueueEmpty

Bu özellikler hakkında daha fazla bilgi için aşağıdaki bölümlere göz atın.

Paylaşılan yüzeyler

Bu özellik, önizleme ve video kodlama gibi iki çıkışı yalnızca bir tampon grubuyla destekler. Böylece güç ve bellek tüketimi azalı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 (ör. donanım derleyici/GPU ve video kodlayıcı) tarafından kullanılan gralloc arabellekleri oluşturabildiğinden emin olmaları gerekir. Kamera hizmeti, tüketici kullanım işaretlerini kamera HAL'ine ve gralloc HAL'ine iletir. Bu HAL'lerin doğru türde arabellekleri ayırması veya kamera HAL'inin bu tüketici kombinasyonunun desteklenmediğine dair bir hata döndürmesi gerekir.

Ayrıntılı bilgi için enableSurfaceSharing geliştirici belgelerine bakın.

Özel kamera modları için System API

Genel kamera API'si, iki çalışma modu tanımlar: normal ve kısıtlı yüksek hızlı kayıt. Bunlar oldukça farklı anlamlara sahiptir. Ö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 özgü özellikler için başka özel modlar tanımlamak istediklerini belirtti. Mod, configure_streams işlevine iletilen bir tam sayıdır. Bkz.: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams.

Bu özellik, OEM kamera uygulamalarının özel modu etkinleştirmek için kullanabileceği bir sistem API çağrısı içerir. Bu modlar, herkese açık API'ye eklenecek gelecekteki modlarla çakışma olmaması için 0x8000 tam sayı değerinden başlamalıdır.

OEM'lerin bu özelliği desteklemesi için tek yapması gereken, configure_streams üzerinde HAL'e iletilen bu tam sayı tarafından tetiklenen yeni modu HAL'lerine eklemek ve ardından özel kamera uygulamalarının sistem API'sini kullanmasını sağlamaktır.

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

onCaptureQueueBlank

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 bir eklemedir. Bu özellikten yararlanmak isteyen uygulamaların bu geri çağırma işlevine bir dinleyici eklemesi ve uygun şekilde yanıt vermesi gerekir. Bunun için genellikle kamera cihazına başka bir yakalama isteği gönderir.

Kamera HIDL arayüzü

Kamera HIDL arayüzü, kararlı HIDL tanımlı API'leri kullanan Kamera HAL arayüzünün tamamen yeni bir sürümüdür. En son eski sürümlerde (3.4 ve 2.4) sunulan tüm özellikler ve kamera özellikleri (kamera modülü için) 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:

  • RAW_OPAQUE biçimi destekleniyorsa zorunlu olarak ANDROID_SENSOR_OPAQUE_RAW_SIZE statik meta verileri ekleyin.
  • RAW biçimi destekleniyorsa ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE statik meta verilerini zorunlu olarak ekleyin.
  • Veri alanı kodlamasının 0 numaralı sürümünü kullanarak camera3_stream_t data_space alanını daha esnek bir tanıma geçirin.
  • HALv3.2 veya sonraki sürümler için kullanılabilecek 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ş özellikli HAL'de küçük düzeltme:

  • OPAQUE ve YUV yeniden işleme API güncellemeleri.
  • Derinlik çıkış arabellekleri için temel destek.
  • camera3_stream_t alanına data_space alanı eklendi.
  • camera3_stream_t alanına rotasyon alanı eklendi.
  • camera3_stream_configuration_t sürümüne camera3 akış yapılandırması çalışma modu eklendi.

3.2

Genişletilmiş özellikli HAL'de küçük düzeltme:

  • get_metadata_vendor_tag_ops öğesini kullanımdan kaldırır. Bunun yerine camera_common.h uygulamasında get_vendor_tag_ops kullanın.
  • register_stream_buffers kullanımdan kaldırılacak. process_capture_request'te çerçeve tarafından HAL'e 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 alanına manuel şablon ekleyin. Uygulamalar, yakalama ayarlarını doğrudan kontrol etmek için bu şablonu kullanamaz.
  • İki yönlü ve giriş akışı özelliklerini yeniden işleyin.
  • Giriş arabelleğinin dönüş yolunu değiştirin. Arabellek, process_capture_request yerine process_capture_result iç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'e iletir.
  • Tüm yayındaki isteklerin/arabelleklerin mümkün olduğunca hızlı bir şekilde bırakılması için flush çağrısı.

3,0

Genişletilmiş özellikli HAL'nin ilk düzeltmesi:

  • ABI tamamen farklı olduğu için ana sürüm değişikliği. 2.0 sürümünden bu yana gerekli donanım özelliklerinde veya işletim modelinde herhangi bir değişiklik yapılmamıştır.
  • Yeniden düzenlenen giriş isteği ve akış sırası arayüzleri: HAL'ye yapılan çerçeve çağrıları, sonraki istek ve akış arabellekleri zaten sıraya alınmış. Verimli uygulamalar için gerekli olan senkronizasyon çerçevesi desteği dahildir.
  • Tetikleyiciler isteklere, çoğu bildirim ise sonuçlara taşındı.
  • Tüm geri çağırma işlevlerini tek bir yapıya, tüm kurulum yöntemlerini ise tek bir initialize() çağrısına birleştirdik.
  • Akış yönetimini basitleştirmek için yayın yapılandırmasını tek bir çağrıya dönüştürdük. İki yönlü akışlar, STREAM_FROM_STREAM yapısının yerini alır.
  • Eski/sınırlı donanım cihazları için sınırlı mod anlamı.

2,0

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

  • Mevcut android.hardware.Camera API'yi uygulamak için yeterlidir.
  • Kamera hizmet katmanında ZSL kuyruğuna izin verir.
  • Manuel çekim kontrolü, Bayer RAW çekimi, RAW verilerinin yeniden işlenmesi gibi yeni özellikler için test edilmemiştir.

1,0

İlk Android kamera HAL'i (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ümde, camera_module_t.common.module_api_version'e dayalı olarak kamera donanım modülü için modül sürüm bilgileri yer almaktadır. En önemli iki onaltılık basamak ana sürümü, en az önemli iki basamak 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. Flaş modu desteği. Çerçeve, kamera cihazını açmadan, yanıp sönen bir birimi olan tüm kamera cihazlarında el feneri modunu açabilir. Kamera cihazının flaş birimine erişim önceliği kamera modülünden daha yüksektir. Bir kamera cihazının açılması, modül arayüzü üzerinden etkinleştirilmişse flaşı kapatır. Bir kamera cihazını açmak için open() çağrılması gibi kaynak çakışmaları olduğunda kamera HAL modülü, el feneri modu durum geri çağırması aracılığıyla el feneri modunun kapatıldığını çerçeveye bildirmelidir.
  2. Harici kamera (ör.USB sıcak takma kamerası) desteği API güncellemeleri, kameranın statik bilgilerinin yalnızca kamera bağlıyken ve harici sıcak takma kameralar için kullanıma hazır olduğunda kullanılabileceğini belirtir. Kamera durumu CAMERA_DEVICE_STATUS_PRESENT olmadığında statik bilgi almak için yapılan çağrılar geçersizdir. Çerçeve, mevcut harici kamera listesini yönetmek için yalnızca cihaz durumu değişikliği geri çağırmalarına güvenir.
  3. Kamera arabuluculuğuyla ilgili ipuçları. Aynı anda açılabilecek ve kullanılabilecek 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ı, get_camera_info çağrısı tarafından döndürülen camera_info yapısında her zaman ayarlanmalıdır.
  4. Modül başlatma yöntemi. HAL modülü yüklendikten sonra kamera hizmeti tarafından çağrılır ve HAL'in tek seferlik başlatılmasına olanak tanır. Diğer modül yöntemleri çağrılmadan önce çağrılır.

2.3

Bu kamera modülü sürümü, eski açık kamera HAL cihazı desteğini ekler. Aynı cihaz birden fazla cihaz API sürümü destekliyorsa çerçeve, kamera cihazını daha düşük cihaz HAL sürümü olarak açmak için bu özelliği kullanabilir. Standart donanım modülü açık çağrısı (common.methods->open), kamera cihazını desteklenen en son sürümle (aynı zamanda camera_info_t.device_version içinde listelenen sürümle) açmaya devam ediyor.

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 için desteği sonlandırır.

2.1

Bu kamera modülü sürümü, kamera HAL modülünden çerçeveye asenkron geri çağırma desteği ekler. Bu destek, çerçeveyi kamera modülü durumundaki değişiklikler hakkında bilgilendirmek için kullanılır. Geçerli bir set_callbacks() yöntemi sağlayan modüller en az bu sürüm numarasını rapor etmelidir.

2,0

Bu sürüm numarasını bildiren kamera modüllerinde, kamera modülü HAL arayüzünün ikinci sürümü uygulanır. 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 alanının device_version değeri her zaman geçerlidir. device_version alanı 2.0 veya daha yüksek bir sürümse camera_info alanının static_camera_characteristics değeri 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'inin yalnızca 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'si destekleyebilir.