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'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 android.hardware.Camera sınıfı aracılığıyla sunulan uygulama düzeyinde kamera çerçevesi.
Camera API2
Android 5.0 ve sonraki sürümleri çalıştıran cihazlarda android.hardware.camera2 paketi aracılığıyla sunulan uygulama düzeyinde kamera çerçevesi.
Kamera HAL'i
SoC tedarikçileri tarafından uygulanan kamera modülü katmanı. Uygulama düzeyindeki herkese açık çerçeveler, kamera HAL'i üzerine kuruludur.
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ı (silisyum üreticileri tarafından yazılan cihaza özel, alt düzey yazılım), yeni bir tedarikçi firma arayüzü aracılığıyla Android OS çerçevesinden ayırır.
HIDL
Treble ile kullanıma 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'de 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 eski 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 içerir.

Camera API2

Kamera API2 çerçevesi, uygulamaya daha düşük düzeyde kamera kontrolü sunar. Bu kontroller arasında verimli sıfır kopyalama ardışık/akış akışları ve pozlama, kazanç, beyaz denge kazançları, renk dönüşümü, gürültü giderme, keskinleştirme ve daha fazlası için kare başına kontroller bulunur. Ayrıntılı bilgi 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ı kavramsal olarak Camera API1 çağrılarına çevirir. Eski cihazlar, kare başına kontroller gibi Camera API2 özelliklerini desteklemez.
  • LIMITED: Bu cihazlar Camera API2'nin bazı özelliklerini (tümünü değil) destekler ve Camera HAL 3.2 veya 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ı için MANUAL_SENSOR ve MANUAL_POST_PROCESSING gibi özellikler gerekir. 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 izin vermek 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 bu tür hatalar, Camera API2 CTS testlerini geçebilmek için düzeltilmelidir).

VTS koşulları

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çevesinin güçlendirilmesi

Android 7.0, medya ve kamera çerçevesinin güvenliğini artırmak için kamera hizmetini mediaserver'dan çıkarır. Android 8.0'dan itibaren, her bağlayıcılı kamera HAL'i kamera hizmetinden ayrı bir işlemde çalışır. Tedarikçi firmaların, kullanılan API ve HAL sürümlerine bağlı olarak kamera HAL'inde 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'de Android 7.0 kamera ve medya yığını

    Şekil 1. HAL3'te 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 sürümlerde API2 için Android 7.0 mimarisi:

  • HAL1, cameraservice taşıma işleminden etkilenmez ve tedarikçi 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'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 koşulları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, android.hardware.camera2.cts.PerformanceTest'ü ve Google Kamera uygulamasını 120/240 FPS yüksek hızlı video kaydı için ç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 ile kamera ve medya çerçeveleri, yerel imleçleri düzgün şekilde serileştirip seri dışı hale getirerek video arabelleklerini işlemler arasında aktarabilir.
  • Arabellek tutamaç 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 tutamacını depolayan A arabellek tutamaç adresini alır. HAL, A arabellek tutamacını döndürdükten sonra A arabellek tutamaç adresi, HAL'ın bir sonraki seferde alacağı 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'da yalnızca kamera işlevlerini gerçekleştirmek için gereken izinler bulunmalıdır. Mediaserver'daki kamerayla ilgili gereksiz izinler kaldırılmalıdır.
  • Kamera HAL'i ile kamera sunucusu arasında ayrım 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

Aşağıdaki Kamera HAL sürümleri Android 10'da 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 kamera çerçevesine tam akış yeniden yapılandırmasının gerekip gerekmediğini bildiren yöntem. Bu, gereksiz kamera yeniden yapılandırma gecikmelerinin ö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'e, kamera hizmetinin configureStreams_3_5 işlemini gerçekleştirmek üzere olduğunu ve HAL'in belirlenen tüm akışların arabelleklerini döndürmesi gerektiğini bildirir.
    • configureStreams_3_5: ICameraDevice3.4.configureStreams'e benzer ancak configureStreams_3_5 ve signalStreamFlush çağrıları arasında yarış koşulu olup olmadığını 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'ini 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 için çoklu kamera API'sini kullanıma sunar. Bu API, bulanıklık ve sorunsuz yakınlaştırma gibi özellikleri etkinleştirir. Bu sayede uygulamalar, bir cihazdaki birden fazla kamerayı tek bir mantıksal birim (mantıksal kamera) olarak görüntüleyebilir. 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'te 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

Android 8.0 sürümünde Treble kullanıma sunulmuştur. 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 arabellek 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 arabellekler 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

Herkese açık kamera API'si iki çalışma modu tanımlar: normal ve sınırlı 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.

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

Kamera HIDL arayüzü

Kamera HIDL arayüzü, kararlı HIDL tanımlı API'ler 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 yapılan 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 daha yeni sürümlerde 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ş ö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 içinde get_vendor_tag_ops kullanın.
  • register_stream_buffers öğesini kullanımdan kaldırır. 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'in ilk düzeltmesi:

  • ABI tamamen farklı olduğundan ana sürüm değişikliği. 2.0 sürümüne kıyasla gerekli donanım özelliklerinde veya işletim modelinde herhangi bir değişiklik yoktur.
  • Yeniden tasarlanmış giriş isteği ve akış kuyruğu arayüzleri: Framework, sonraki istek ve akış arabelleklerinin kuyruktan kaldırıldığı HAL'i çağırır. 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ıda, tüm kurulum yöntemlerini ise tek bir initialize() çağrısında 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 semantikleri.

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. El feneri 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şme önceliği kamera modülünden daha yüksektir. Bir kamera cihazı açıldığında, modül arayüzü üzerinden etkinleştirilmişse el feneri kapatılı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 alma çağrıları geçersizdir. Çerçeve, kullanılabilir harici kamera listesini yönetmek için yalnızca cihaz durumu değişikliği geri çağırma işlevlerini kullanır.
  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 ilk kullanıma hazırlama 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ü, açık eski kamera HAL cihaz desteği ekler. Aynı cihaz birden fazla cihaz API sürümünü 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çma çağrısı (common.methods->open), kamera cihazını desteklenen en son sürümle (camera_info_t.device_version'te listelenen sürüm) açmaya devam eder.

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ı bildirmelidir.

2,0

Bu sürüm numarasını bildiren kamera modülleri, kamera modülü HAL arayüzünün ikinci sürümünü uygular. Bu modül aracılığıyla açılabilen kamera cihazları, kamera cihazı HAL arayüzünün 1.0 veya 2.0 sürümünü destekleyebilir. camera_info 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.