Kamera Versiyonu Desteği

Bu sayfa, Camera HAL'leri, API'leri ve ilişkili Uyumluluk Testi Paketi (CTS) testlerindeki sürüm farklılıklarını ayrıntılı olarak açıklar. Ayrıca, Android 7.0'da kamera çerçevesini sağlamlaştırmak ve güvenceye almak için yapılan çeşitli mimari değişiklikleri, Android 8.0'da Treble'a geçişi ve satıcıların kamera uygulamalarında bu değişiklikleri desteklemek için yapmaları gereken güncellemeleri kapsar.

terminoloji

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

Kamera API1
Android 4.4 ve önceki sürümlerdeki cihazlarda, android.hardware.Camera sınıfı aracılığıyla sunulan uygulama düzeyinde kamera çerçevesi.
kamera API2
Android 5.0 ve üzeri cihazlarda, android.hardware.camera2 paketi aracılığıyla sunulan uygulama düzeyinde kamera çerçevesi.
kamera HAL
SoC satıcıları tarafından uygulanan kamera modülü katmanı. Uygulama düzeyindeki genel çerçeveler, HAL kamerasının üzerine inşa edilmiştir.
Kamera HAL3.1
Android 4.4 ile piyasaya sürülen kamera cihazı HAL sürümü.
Kamera HAL3.2
Android 5.0 ile piyasaya sürülen kamera cihazı HAL'ın sürümü.
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 özel, 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 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 tanıtılan 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ştirme nedeniyle aşamalı olarak kullanımdan kaldırılmaya devam eden Camera API1'i kullanımdan kaldırdı. Ancak, aşamalı olarak kullanımdan kaldırma süresi uzun olacak ve Android sürümleri, bir süreliğine Camera API1 uygulamalarını desteklemeye devam edecek. Spesifik olarak, aşağıdakiler için destek devam eder:

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

kamera API2

Camera API2 çerçevesi, verimli sıfır kopyalı seri çekim/akış akışları ve kare başına pozlama, kazanç, beyaz dengesi kazanımları, renk dönüştürme, gürültü giderme, keskinleştirme ve daha fazlasını içeren daha düşük seviyeli kamera kontrolünü uygulamaya sunar. Ayrıntılar için Google I/O videosuna genel bakışı izleyin .

Android 5.0 ve sonraki sürümleri, 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 sunulan yeteneklerle yaklaşık olarak aynı yeteneklere sahip olan kamera API2 arayüzleri aracılığıyla uygulamalara yetenekler sunar. Eski çerçeve kodu, Camera API2 çağrılarını kavramsal olarak 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 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 sonraki sürümleri ve Android 5.0 veya sonraki sürümleri kullanmalıdır.
  • LEVEL_3 : Bu cihazlar, ek çıktı 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 arayüzlerindeki android.request.availableCapabilities özelliği aracılığıyla ortaya çıkar. 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 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üzeyi ve desteklediği belirli Camera API2 özellikleri, Google Play'in Camera API2 kamera uygulamalarını filtrelemesine izin vermek için aşağıdaki özellik işaretleri olarak mevcuttur.

  • android.hardware.camera.hardware_level.full
  • android.hardware.camera.capability.raw
  • android.hardware.camera.capability.manual_sensor
  • android.hardware.camera.capability.manual_post_processing

CTS gereksinimleri

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

Camera HAL3.2 uygulamasına sahip olmayan ve tam Camera API2 arabirimlerini destekleyemeyen cihazlar yine de Camera API2 CTS testlerini geçmelidir. Ancak cihaz, Camera API2 LEGACY modunda (Kamera API2 çağrılarının kavramsal olarak Camera API1 çağrılarıyla eşlendiği) çalışır, 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 gereksinim olmaksızın mevcut genel Camera API1 arayüzlerini ve özelliklerini kullanır. Ortaya çıkan (ve bir Camera API2 CTS hatasına neden olan) hatalar, cihazın mevcut Camera HAL'inde zaten mevcut olan hatalardır ve bu nedenle mevcut Camera API1 uygulamaları tarafından bulunabilir. Bu türden pek çok hata beklemiyoruz (ancak, Camera API2 CTS testlerini geçmek için bu tür hataların düzeltilmesi gerekir).

VTS gereksinimleri

Birleştirilmiş HAL uygulamalarıyla Android 8.0 ve sonraki sürümleri çalıştıran cihazlar, Camera VTS testlerini geçmelidir.

Kamera çerçevesi sertleştirme

Medya ve kamera çerçevesi güvenliğini güçlendirmek için Android 7.0, kamera hizmetini medya sunucusundan çıkarır. Android 8.0 ile başlayarak, her bir ciltlenmiş Camera 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'inde değişiklik yapmaları 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ırmaktadı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 kullanırken:

  • Kamera hizmetinin işlemler arasında arabellekleri iletmek için BufferQueue kullandığı HAL3, satıcı güncellemesi gerekli değildir.

    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 verilerin iletilmesini destekleyen HAL1, satıcıların kMetadataBufferTypeNativeHandleSource kullanmak için HAL'ı güncellemesi gerekir. ( kMetadataBufferTypeCameraSource artık Android 7.0'da desteklenmemektedir.)

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

    Şekil 2. HAL1 üzerinde API1'de Android 7.0 kamera ve medya 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 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ı

Ek gereksinimler

Sertleştirme ortamı ve kamera çerçevesi güvenliği 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ı etkileyebilecek olan 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.
  • Video arabelleklerinde meta verileri 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 . ( 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 durumdan çıkararak video arabelleklerini işlemler arasında geçirebilir.
  • Arabellek tanıtıcı adresi her zaman aynı arabelleği saklamaz ( yalnızca HAL3 ). Her yakalama isteği için HAL3, arabellek tutamaçlarının adreslerini alır. Adresler, HAL arabelleği döndürdükten sonra başka bir arabellek tanıtıcısı depolayabileceğinden, HAL, arabellekleri tanımlamak için adresleri kullanamaz. Arabellekleri tanımlamak için arabellek tutamaçlarını kullanmak için HAL'ı güncellemeniz gerekir. Örneğin, HAL, arabellek tanıtıcısı A'yı depolayan bir arabellek tanıtıcı adresi A alır. HAL, arabellek tanıtıcı A'yı döndürdükten sonra, arabellek tanıtıcı adresi A, HAL'in bir sonraki aldığında arabellek tanıtıcısı B'yi depolayabilir.
  • Cameraserver için SELinux politikalarını güncelleyin. Cihaza özel SELinux politikaları medya sunucusuna kamerayı çalıştırma izinleri veriyorsa, kamera sunucusuna uygun izinler vermek için SELinux politikalarını güncellemeniz gerekir. Medya sunucusunun SELinux ilkelerini kamera sunucusu için kopyalamayı önermiyoruz (medya sunucusu ve kamera sunucusu genellikle sistemde farklı kaynaklar gerektirdiğinden). Kamera sunucusu yalnızca kamera işlevlerini gerçekleştirmek için gereken izinlere sahip olmalı ve medya sunucusundaki kamerayla ilgili gereksiz izinler kaldırılmalıdır.
  • Camera HAL ve kamera sunucusu arasındaki ayrım. Android 8.0 ve sonraki sürümler ayrıca, kamera sunucusundan farklı bir işlemde ciltlenmiş Camera HAL'ı ayırır. IPC, HIDL tanımlı arayüzlerden geçer.

doğrulama

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

Bir kamera içeren ve Android 8.0 ve sonraki sürümlerini ç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ılabilecek testlerin 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 Camera HAL sürümleri, Android 10'da güncellenmiştir.

3.5

ICameraDevice

  • getPhysicalCameraCharacteristics : Mantıksal bir kamera cihazını destekleyen fiziksel kamera kimliği için statik kamera bilgileri. Bkz. Çoklu Kamera Desteği .
  • isStreamCombinationSupported : Bu yöntem, istemcilerin bir oturum yapılandırmasının desteklenip desteklenmediğini sorgulamasına yardımcı olan genel bir API'yi destekler. Akış kombinasyonlarını sorgulamak için API'ye bakın.

ICameraDeviceSession

  • isReconfigurationNeeded : Olası yeni oturum parametre değerleri için tam akış yeniden yapılandırmasının gerekli olup olmadığını kamera çerçevesine 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, her bir yakalama isteğini kamera hattı boyunca ilişkili arabelleklerle birleştirmek yerine, kamera HAL'ının yalnızca gerektiğinde kamera çerçevesinden arabellekler istemesine izin vererek önemli ölçüde bellek tasarrufu sağlar.
    • signalStreamFlush : HAL'a, kamera hizmetinin configureStreams_3_5 gerçekleştirmek üzere olduğunu ve HAL'nin belirlenen akışların tüm arabelleklerini döndürmesi gerektiğini bildirir.
    • configureStreams_3_5 : ICameraDevice3.4.configureStreams benzer, ancak buna ek olarak, configureStreams_3_5 ve signalStreamFlush çağrıları arasında bir yarış durumunu kontrol etmek için streamConfigCounter sayacı sağlanır.

ICameraDeviceCallback için güncellemeler:

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

3.4

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

  • Görüntü 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
  • yetenekler
    • 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
  • Mevcut 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

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

2.4

  • API düzeyi 29 veya üzeri ile başlatılan cihazlar isTorchModeSupported için true rapor isTorchModeSupported .

Android 9

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

Kamera API'sı

  • Aynı yöne bakan birden fazla kameraya sahip cihazları daha iyi desteklemek için çoklu kamera API'sini sunar 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ü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 olabilen mevcut yakalama parametrelerinin bir alt kümesidir. İstemciler, yakalama oturumu başlatma sırasında başlangıç ​​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. CONTROL_AE_MODE_ON_EXTERNAL_FLASH bakın.
  • CAPTURE_INTENT içinde bir hareket izleme amacı ekler. CONTROL_CAPTURE_INTENT_MOTION_TRACKING bakın.
  • 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 bakın.

kamera HAL

3.4

ICameraDeviceSession güncellemeleri

ICameraDeviceCallback için güncellemeler

3.3

Android 9'da kamera meta verilerine aşağıdaki tuşlar 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ının Camera HAL uygulamalarının ciltlenmesi gerekir. Android 8.0, Kamera hizmetinde şu önemli geliştirmeleri de 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ışı çalıştırmak için yalnızca bir arabellek kümesi 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şturabildiğinden emin olmaları gerekir. Kamera hizmeti, tüketici kullanım bayraklarını kamera HAL'ına ve gralloc HAL'a iletir; ya doğru türde arabellekleri 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ı anlambilimleri vardır; ö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 özel yetenekler için diğer özel modları tanımlamaya ilgi duyduklarını ifade ettiler. Başlık altında, mod yalnızca configure_streams öğesine iletilen bir tamsayı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. Genel API'ye eklenecek gelecekteki modlarla çakışmayı önlemek için bu modlar 0x8000 tamsayı değerinde başlamalıdır.

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

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

onCaptureQueueBoş

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ında bir eklemeydi. Bundan yararlanmak isteyen uygulamalar, bu geri aramaya bir dinleyici eklemeli ve uygun şekilde yanıt vermelidir. Genellikle bu, kamera cihazına başka bir yakalama isteği göndererek olur.

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ğinde yapılan değişiklikler:

  • RAW_OPAQUE biçimi destekleniyorsa, ANDROID_SENSOR_OPAQUE_RAW_SIZE statik meta verilerini zorunlu olarak ekleyin.
  • Herhangi bir RAW biçimi destekleniyorsa, ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE statik meta verilerini zorunlu olarak ekleyin.
  • Veri alanı kodlamasının sürüm 0 tanımını kullanarak camera3_stream_t data_space alanını daha esnek bir tanıma geçirin.
  • HALv3.2 veya daha yenisi için kullanılabilen genel meta veri eklemeleri:
    • ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
    • ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
    • ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
    • ANDROID_SENSOR_OPAQUE_RAW_SIZE
    • ANDROID_SENSOR_OPTICAL_BLACK_REGIONS

3.3

Genişletilmiş yetenekli HAL'nin küçük revizyonu:

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

3.2

Genişletilmiş yetenekli HAL'nin küçük revizyonu:

  • get_metadata_vendor_tag_ops . Bunun yerine get_vendor_tag_ops camera_common.h kullanın.
  • register_stream_buffers öğesini kullanımdan kaldırır. Process_capture_request içinde çerçeve tarafından HAL'a sağlanan tüm process_capture_request 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 manuel şablon ekleyin. Uygulamalar, yakalama ayarlarını doğrudan kontrol etmek için bu şablonu kullanabilir.
  • Çift yönlü ve giriş akışı özelliklerini yeniden işleyin.
  • Giriş arabelleği 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'nin küçük revizyonu:

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

3.0

Genişletilmiş yetenekli HAL'nin ilk revizyonu:

  • ABI tamamen farklı olduğundan büyük sürüm değişikliği. 2.0'dan itibaren gerekli donanım yeteneklerinde veya operasyonel modelde değişiklik yok.
  • Yeniden çalışılan giriş isteği ve akış sırası arabirimleri: Sonraki istek ve akış arabellekleri zaten kuyruğundan kaldırılmış olarak HAL'a çerçeve çağrıları. 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 ve tüm kurulum yöntemlerini tek bir initialize() çağrısında bir araya getirdi.
  • Akış yönetimini basitleştirmek için akış yapılandırmasını tek bir çağrıya dönüştürdü. Ç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ş özellikli HAL (Android 4.2) [camera2.h]'nin 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. 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ülmüş.
  • android.hardware.Camera API'sini destekler.

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

Bu bölüm, camera_module_t.common.module_api_version temelinde Kamera donanım modülü için modül sürüm oluşturma bilgilerini içerir. En önemli iki onaltılık basamak ana sürümü temsil eder ve en az anlamlı 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. Torç modu desteği. Çerçeve, flaş ünitesine sahip herhangi bir kamera cihazı için bir kamera cihazı açmadan meşale modunu açabilir. Kamera cihazının flaş ünitesine erişme önceliği kamera modülünden daha yüksektir; modül arabirimi aracılığıyla etkinleştirildiyse, bir kamera cihazının açılması torcu kapatır. Bir kamera cihazını açmak için open() çağrıldığı gibi herhangi bir kaynak çakışması olduğunda, kamera HAL modülü, meşale modu durum geri çağrısı aracılığıyla çerçeveye meşale modunun kapatıldığını bildirmelidir.
  2. Harici kamera (örneğin, USB çalışırken takılabilir kamera) desteği. API güncellemeleri, kamera statik bilgilerinin yalnızca kamera bağlı olduğunda ve harici çalışırken takılabilir kameralar için kullanıma hazır olduğunda kullanılabileceğini belirtir. Statik bilgi almak için yapılan çağrılar, kamera durumu CAMERA_DEVICE_STATUS_PRESENT olmadığında geçersiz çağrılardır. Çerçeve, mevcut harici kamera listesini yönetmek için yalnızca cihaz durumu değişikliği geri aramalarına güvenir.
  3. Kamera tahkim ipuçları. Aynı anda açılıp kullanılabilen kamera cihazlarının sayısını açıkça belirtmek için destek ekler. Geçerli cihaz kombinasyonlarını belirtmek için, resource_cost ve conflicting_devices alanları her zaman get_camera_info çağrısı tarafından döndürülen camera_info yapısında ayarlanmalıdır.
  4. Modül başlatma yöntemi. HAL'ın bir kerelik başlatılmasına izin vermek için HAL modülü yüklendikten sonra kamera hizmeti tarafından çağrılır. Diğer modül yöntemleri çağrılmadan önce çağrılır.

2.3

Bu kamera modülü sürümü, açık eski kamera HAL cihazı desteği ekler. Aynı cihaz birden fazla cihaz API sürümünü destekleyebiliyorsa, çerçeve bunu 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ı desteklenen en son sürümle açmaya devam eder, bu aynı zamanda camera_info_t.device_version içinde listelenen sürümdür.

2.2

Bu kamera modülü sürümü, modülden satıcı etiketi desteği ekler ve daha önce yalnızca bir cihaz açıkken erişilebilen eski vendor_tag_query_ops kullanımdan kaldırır.

2.1

Bu kamera modülü sürümü, çerç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 arayüzünün 1.0 veya 2.0 sürümünü destekleyebilir. device_version alanı her zaman geçerlidir; camera_info'nun static_camera_characteristics alanı, camera_info alanı 2.0 veya daha device_version geçerlidir.

1.0

Bu sürüm numaralarını bildiren kamera modülleri, ilk kamera modülü HAL arabirimini uygular. Bu modül aracılığıyla açılabilen tüm kamera cihazları, kamera cihazı HAL'nin 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 aygıtları yalnızca android.hardware.Camera API'sini destekleyebilir.