Kamera sürümü desteği

Bu sayfada, Kamera HAL'leri, API'ler ve ilişkili Uyumluluk Test Paketi (CTS) testlerindeki sürüm farklılıkları ayrıntılı olarak açıklanmaktadır. Ayrıca, Android 7.0'da kamera çerçevesini güçlendirmek ve güvenliğini sağlamak 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:

Camera API1
Android 4.4 ve önceki sürümleri çalıştıran cihazlarda, android.hardware.Camera sınıfı aracılığıyla kullanıma sunulan uygulama düzeyinde kamera çerçevesi.
Camera API2
Android 5.0 ve sonraki sürümlerin yüklü olduğu cihazlarda, android.hardware.camera2 paketi üzerinden kullanıma sunulan uygulama düzeyinde kamera çerçevesi.
Kamera HAL'si
SoC tedarikçileri tarafından uygulanan kamera modülü katmanı. Uygulama düzeyindeki herkese açık çerçeveler, kamera HAL'inin üzerine kurulur.
Camera HAL3.1
Android 4.4 ile yayınlanan kamera cihazı HAL'ının sürümü.
Camera HAL3.2
Android 5.0 ile yayınlanan kamera cihazı HAL'ının sürümü.
Camera API1 CTS
Camera API1 üzerinde çalışan bir dizi kamera CTS testi.
Camera API2 CTS
Camera API2 üzerinde çalışan ek bir kamera CTS testleri grubu.
Tiz
Yeni bir tedarikçi arayüzü aracılığıyla tedarikçi uygulamasını (cihaza özel, silikon üreticileri tarafından yazılan düşük seviyeli yazılım) Android OS çerçevesinden ayırır.
HIDL
HAL arayüzü tanım dili: Treble ile kullanıma sunulmuş ve bir HAL ile kullanıcıları arasındaki arayüzü belirtmek için kullanılır.
VTS
Satıcı test paketi, Treble ile birlikte kullanıma sunuldu.

Kamera API'leri

Android'de aşağıdaki kamera API'leri bulunur.

Camera API1

Android 5.0, Camera API1'in desteğini sonlandırdı. Yeni platform geliştirme çalışmaları Camera API2'ye odaklandığı için Camera API1'in desteği aşamalı olarak sonlandırılmaya devam ediyor. Ancak bu özellik kullanımdan kaldırılırken uzun bir geçiş süreci olacak ve Android sürümleri bir süre daha Camera API1 uygulamalarını desteklemeye devam edecek. Özellikle aşağıdaki özellikler desteklenmeye devam edecektir:

  • Uygulamalar için Camera API1 arayüzleri. Camera API1 üzerine kurulu kamera uygulamaları, daha düşük Android sürümünün yüklü olduğu cihazlarda olduğu gibi çalışmalıdır.
  • Kamera HAL sürümleri. Camera HAL1.0 desteği içerir.

Camera API2

Camera API2 çerçevesi, uygulamaya daha düşük düzeyde kamera kontrolü sunar. Bu kontrol; verimli sıfır kopyalı seri çekim/akış akışları ve pozlama, kazanç, beyaz dengesi kazançları, renk dönüştürme, gürültü azaltma, keskinleştirme gibi özelliklerin kare başına kontrolünü içerir. Ayrıntılar için Google I/O video özetini izleyin.

Android 5.0 ve sonraki sürümlerde Camera API2 bulunur ancak Android 5.0 ve sonraki sürümleri çalıştıran cihazlar tüm Camera API2 özelliklerini desteklemeyebilir. Uygulamaların Camera API2 arayüzleri 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 özelliklerle yaklaşık olarak aynı olan Camera API2 arayüzleri aracılığıyla uygulamalara özellikler 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 kontroller gibi Camera API2 özelliklerini desteklemez.
  • LIMITED: Bu cihazlar, Camera API2'nin bazı özelliklerini (ancak tümünü değil) destekler ve Camera HAL 3.2 veya daha yeni bir sürümü kullanmalıdır.
  • FULL: Bu cihazlar Camera API2'nin tüm temel özelliklerini destekler ve Camera HAL 3.2 veya daha yeni bir sürüm ile Android 5.0 veya daha yeni 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şleme 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 ya da daha az kararlı kare hızlarına sahip olabilir. Bu düzey, USB web kameraları gibi harici kameralar için kullanılır.

Tek tek özellikler, Camera API2 arayüzlerindeki android.request.availableCapabilities özelliği aracılığıyla kullanıma sunulur. FULL cihazlar, diğer özelliklerin yanı sıra MANUAL_SENSOR ve MANUAL_POST_PROCESSING özelliklerini gerektirir. RAW özelliği, FULL cihazlarda bile isteğe bağlıdır. LIMITED cihazlar, bu özelliklerin herhangi bir alt kümesini (hiçbiri dahil) tanıtabilir. Ancak BACKWARD_COMPATIBLE özelliği her zaman tanımlanmalıdır.

Cihazın desteklenen donanım düzeyi ve desteklediği belirli Camera API2 özellikleri, Camera API2 kamera uygulamalarının Google Play'de filtrelenmesine olanak tanımak için aşağıdaki özellik işaretleri olarak sunulur.

  • 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ümlerin yüklü olduğu cihazlar, Camera API1 CTS, Camera API2 CTS ve CTS Verifier kamera testlerini geçmelidir.

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

Eski cihazlarda çalıştırılan Camera API2 CTS testleri, yeni gereksinimler olmadan mevcut herkese açık Camera API1 arayüzlerini ve özelliklerini kullanır. Ortaya çıkan (ve Camera API2 CTS hatasına neden olan) hatalar, cihazın mevcut Kamera HAL'sinde zaten bulunan hatalardır. Bu nedenle, mevcut Camera API1 uygulamaları tarafından da bulunabilirler. Bu türden çok fazla hata olmasını beklemiyoruz (ancak Kamera API2 CTS testlerini geçmek için bu tür hataların düzeltilmesi gerekir).

VTS koşulları

Android 8.0 ve sonraki sürümlerin yüklü olduğu, bağlayıcı HAL uygulamalarına sahip cihazlar, Kamera VTS testlerini geçmelidir.

Kamera çerçevesinin güvenliğini artırma

Android 7.0, medya ve kamera çerçevesi güvenliğini artırmak için kamera hizmetini mediaserver'dan çıkarır. Android 8.0'dan itibaren, her bir bağlayıcılaştırılmış Kamera HAL'ı, kamera hizmetinden ayrı bir işlemde çalışır. Sağlayıcıların, kullanılan API ve HAL sürümlerine bağlı olarak kamera HAL'sinde değişiklik yapması gerekebilir. Aşağıdaki bölümlerde, HAL1 ve HAL3 için AP1 ile AP2'deki mimari değişikliklerin yanı sıra genel şartlar ayrıntılı olarak açıklanmaktadır.

API1'deki mimari değişiklikler

API1 video kaydı, kamera ve video kodlayıcının aynı işlemde çalıştığını varsayabilir. API1'i şu durumlarda kullanırken:

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

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

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

  • Video arabelleklerinde meta veri aktarımını destekleyen HAL1'de tedarikçiler, kMetadataBufferTypeNativeHandleSource kullanmak için HAL'yi güncellemelidir. (kMetadataBufferTypeCameraSource artık Android 7.0'da desteklenmemektedir.)

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

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

API2'deki mimari değişiklikler

HAL1 veya HAL3'teki API2 için BufferQueue, arabellekleri geçirir. Böylece bu yollar çalışmaya devam eder. API2 için Android 7.0 mimarisi:

  • HAL1, cameraservice taşınmasından etkilenmez ve tedarikçi güncellemesi yapılması gerekmez.
  • HAL3 etkilenir ancak satıcı güncellemesi gerekmez:

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

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

Diğer şartlar

Medya ve kamera çerçevesi 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. 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ın yeni işlemi oluşturmak için az miktarda ek RAM'e de ihtiyacı vardır.
  • Video arabelleklerinde meta veri iletme (yalnızca HAL1). HAL1, video arabelleklerinde gerçek YUV çerçeve verileri yerine meta verileri depoluyorsa 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 tutmaçları doğru şekilde serileştirip seri durumdan çıkararak video arabelleklerini işlemler arasında geçirebilir.
  • Arabellek işleme adresi her zaman aynı arabelleği depolamaz (Yalnızca HAL3). HAL3, her yakalama isteği için arabellek tutmaçlarının adreslerini alır. HAL, arabellek döndürdükten sonra adresler başka bir arabellek tutucuyu depolayabileceğinden arabellekleri tanımlamak için adresleri kullanamaz. Arabellekleri tanımlamak için arabellek tutmaçlarını kullanmak üzere HAL'yi güncellemeniz gerekir. Örneğin, HAL, arabellek tutma yeri A'yı depolayan bir arabellek tutma yeri adresi A alır. HAL, A arabellek tutma yerini döndürdükten sonra, HAL bir sonraki sefer B arabellek tutma yerini aldığında A arabellek tutma yeri adresi B arabellek tutma yerini saklayabilir.
  • cameraserver için SELinux politikalarını güncelleyin. Cihaza özel SELinux politikaları, kameranın çalışması için mediaserver'a izin veriyorsa SELinux politikalarını güncelleyerek cameraserver'a uygun izinleri vermeniz gerekir. Mediaserver ve cameraserver genellikle sistemde farklı kaynaklar gerektirdiğinden, mediaserver'ın SELinux politikalarının cameraserver için kopyalanmasını önermiyoruz. Cameraserver yalnızca kamera işlevlerini gerçekleştirmek için gereken izinlere sahip olmalı ve mediaserver'daki gereksiz kamera ile ilgili izinler kaldırılmalıdır.
  • Camera HAL ile cameraserver arasındaki ayrım. Android 8.0 ve sonraki sürümlerde, bağlayıcı içeren Camera HAL, cameraserver'dan farklı bir işlemde ayrıca ayrılır. IPC, HIDL tarafından tanımlanan arayüzler üzerinden gerçekleşir.

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 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 veya sonraki sürümleri çalıştıran tüm cihazlarda VTS'yi çalıştırarak satıcı uygulamasını doğrulayın.

Kamera donanım soyutlama katmanı sürüm geçmişi

Android Camera HAL'i değerlendirmek için kullanılabilen testlerin listesi için Camera HAL Testing Checklist'e (Kamera HAL Testi Kontrol Listesi) bakın.

Android 10

Android 10 aşağıdaki güncellemeleri sunar.

Kamera API'si

Kamera HAL'si

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

3.5

ICameraDevice

  • getPhysicalCameraCharacteristics: Mantıksal bir kamera cihazını destekleyen fiziksel kamera kimliğinin statik kamera bilgileri. Çoklu Kamera Desteği başlıklı makaleyi inceleyin.
  • isStreamCombinationSupported: Bu yöntem, istemcilerin bir 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 parametre değerleri için tam akışın yeniden yapılandırılmasının gerekip gerekmediğini kamera çerçevesine bildiren yöntem. Bu sayede gereksiz kamera yeniden yapılandırma gecikmeleri önlenir. Oturum yeniden yapılandırma sorgusu başlıklı makaleyi inceleyin.
  • HAL arabellek yönetimi API'leri: Bu API'ler, kamera HAL'sinin her yakalama isteğini kamera işlem hattı boyunca ilişkili arabellekleriyle eşleştirmek yerine yalnızca gerektiğinde kamera çerçevesinden arabellek istemesine olanak tanır. Bu da önemli ölçüde bellek tasarrufu sağlayabilir.
    • signalStreamFlush: Kamera hizmetinin configureStreams_3_5 işlemini gerçekleştirmek üzere olduğunu ve HAL'ın belirlenen akışların tüm arabelleklerini döndürmesi gerektiğini HAL'a bildirir.
    • configureStreams_3_5: ICameraDevice3.4.configureStreams'ye benzer ancak ek olarak configureStreams_3_5 ve signalStreamFlush çağrıları arasında yarış durumu olup olmadığını kontrol etmek için streamConfigCounter sayacı sağlanır.

ICameraDeviceCallback ile ilgili güncellemeler:

  • requestStreamBuffers: Kamera HAL'sinin, kamera sunucusundan arabellek istemek için çağırdığı senkron geri çağırma. requestStreamBuffers başlıklı makaleyi inceleyin.
  • returnStreamBuffers: Kamera HAL'ı için, çıkış arabelleklerini kamera sunucusuna döndürmek üzere eşzamanlı geri çağırma. returnStreamBuffers başlıklı makaleyi inceleyin.

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ı 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
  • Mevcut 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üncellenir.

2.5

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

2.4

  • API düzeyi 29 veya daha yüksek bir sürümle kullanıma sunulan cihazlar, true için isTorchModeSupported bildirmelidir.

Android 9

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

Kamera API'si

  • Aynı yöne bakan birden fazla kameraya sahip cihazları daha iyi desteklemek için çoklu kamera API'sini kullanıma sunar. Bu API, bokeh ve sorunsuz 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. Yakalamayla ilgili istekler, 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, değiştirildiğinde ciddi işleme gecikmelerine neden olabilecek, kullanılabilir yakalama parametrelerinin bir alt kümesidir. Müşteriler, yakalama oturumu başlatma sırasında ilk değerlerini iletirlerse bu maliyetler azaltılabilir. Oturum Parametreleri'ne bakın.
  • Uygulama düzeyinde sabitleme ve efektler için optik sabitleme (OIS) veri anahtarları ekler. STATISTICS_OIS_SAMPLES başlıklı makaleyi inceleyin.
  • Harici flaş desteği ekler. CONTROL_AE_MODE_ON_EXTERNAL_FLASH başlıklı makaleyi inceleyin.
  • CAPTURE_INTENT içinde hareket izleme amacı ekler. CONTROL_CAPTURE_INTENT_MOTION_TRACKING başlıklı makaleyi inceleyin.
  • LENS_RADIAL_DISTORTION işlevini kullanımdan kaldırır ve yerine LENS_DISTORTION işlevini ekler.
  • CaptureRequest'da distorsiyon düzeltme modları ekler. DISTORTION_CORRECTION_MODE başlıklı makaleyi inceleyin.
  • Desteklenen cihazlarda harici USB/UVC kameralar için destek eklenir. INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL başlıklı makaleyi inceleyin.

Kamera HAL'si

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 verileri 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 Camera HAL uygulamaları binderized olmalıdır. Android 8.0, Kamera hizmetinde aşağıdaki önemli iyileştirmeleri de içerir:

  • Paylaşılan yüzeyler: Aynı OutputConfiguration öğesini paylaşan birden fazla yüzeyi etkinleştirin.
  • Özel kamera modları için sistem API'si
  • onCaptureQueueEmpty

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

Paylaşılan yüzeyler

Bu özellik, yalnızca bir arabellek grubunun önizleme ve video kodlama gibi iki çıkışı yönlendirmesini sağlar. Bu sayede 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 tüketici (ör. donanım oluşturucu/GPU ve video kodlayıcı) tarafından kullanılan gralloc arabellekleri oluşturabildiğinden emin olması gerekir. Kamera hizmeti, tüketici kullanım işaretlerini kamera HAL'ına ve gralloc HAL'ına iletir. Bu işaretler, doğru türde arabellekler ayırmalıdır. Aksi takdirde kamera HAL'ı, bu tüketici kombinasyonunun desteklenmediğini belirten bir hata döndürmelidir.

Daha fazla bilgi için enableSurfaceSharing geliştirici belgelerine bakın.

Özel kamera modları için sistem API'si

Herkese açık kamera API'si iki çalışma modu tanımlar: normal ve kısıtlanmış yüksek hızlı kayıt. Anlamları oldukça farklıdır. Ö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 özel özellikler için başka özel modlar tanımlamak istediklerini belirtmiştir. Bu mod, arka planda configure_streams'a iletilen bir tam sayıdır. Şu makaleye göz atın: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams.

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

OEM'lerin bu özelliği desteklemek için HAL'lerine yeni modu eklemeleri yeterlidir. Bu mod, configure_streams'de HAL'ye iletilen bu tam sayıyla tetiklenir. Ardından, özel kamera uygulamalarının sistem API'sini kullanması gerekir.

Yöntemin adı android.hardware.camera2.CameraDevice#createCustomCaptureSession. Şu makaleye göz atın: frameworks/base/core/java/android/hardware/camera2/CameraDevice.

onCaptureQueueEmpty

Bu API'nin amacı, istek sırasını 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 yapılan bir eklemedir. Bu işlevden yararlanmak isteyen uygulamaların, geri çağırmaya bir işleyici eklemesi ve uygun şekilde yanıt vermesi gerekir. Genellikle bu, kamera cihazına başka bir yakalama isteği gönderilerek yapılır.

Kamera HIDL arayüzü

Camera HIDL arayüzü, kararlı HIDL tanımlı API'leri kullanan Camera HAL arayüzünün tamamen yenilenmiş halidir. En son eski sürümler olan 3.4 ve 2.4'te (kamera modülü için) kullanıma sunulan tüm özellikler ve kamera işlevleri 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:

  • ANDROID_SENSOR_OPAQUE_RAW_SIZE biçimi destekleniyorsa RAW_OPAQUE statik meta verilerini zorunlu olarak ekleyin.
  • Herhangi bir RAW biçimi destekleniyorsa ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE statik meta verileri zorunlu olarak ekleyin.
  • Veri alanı kodlamasının 0 sürümü tanı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'si güncellemeleri.
  • Derinlik çıkış arabellekleri için temel destek.
  • data_space alanının camera3_stream_t listesine eklenmesi.
  • camera3_stream_t'ya rotasyon alanı eklendi.
  • camera3_stream_configuration_t'ya camera3 akış yapılandırması işlem 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. Çerçeve tarafından process_capture_request içinde HAL'ye sağlanan tüm gralloc arabellekleri herhangi bir zamanda yeni olabilir.
  • Kısmi sonuç desteği ekleyin. process_capture_result, tam sonuç kullanılabilir hale gelmeden önce mevcut sonuçların bir alt kümesiyle birden fazla kez çağrılabilir.
  • camera3_request_template öğesine manuel şablon ekleyin. Uygulamalar, doğrudan çekim ayarlarını kontrol etmek için bu şablonu kullanabilir.
  • Çift yönlü ve giriş akışı spesifikasyonlarını yeniden düzenleyin.
  • Giriş arabelleği 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'ye iletir.
  • Tüm devam eden istekleri/arabellekleri mümkün olduğunca hızlı bir şekilde bırakmak için boşaltma çağrısı.

3,0

Genişletilmiş özellikli HAL'nin 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 yapılmamıştır.
  • Yeniden işlenen giriş isteği ve akış kuyruğu arayüzleri: HAL'ye sonraki istek ve akış arabellekleri zaten kuyruktan çıkarılmış şekilde çerçeve çağrıları yapılır. Verimli uygulamalar için gerekli olan senkronizasyon çerçevesi desteği dahildir.
  • Tetikleyiciler isteklere, bildirimlerin çoğu sonuçlara taşındı.
  • Tüm geri çağırmalar tek bir yapıda çerçeveye, tüm kurulum yöntemleri ise tek bir initialize() çağrısına birleştirildi.
  • Yayın yönetimini basitleştirmek için yayın yapılandırması tek bir çağrıya dönüştürüldü. Çift 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 semantiği.

2,0

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

  • Mevcut android.hardware.Camera API'sini uygulamak için yeterlidir.
  • Kamera hizmeti katmanında ZSL sırasına izin verir.
  • Manuel yakalama kontrolü, Bayer RAW yakalama, RAW verilerinin yeniden işlenmesi gibi yeni özellikler için test edilmemiştir.

1,0

İlk Android kamera HAL'ı (Android 4.0) [camera.h]:

  • C++ CameraHardwareInterface soyutlama katmanından dönüştürülmüştür.
  • android.hardware.Camera API'sini destekler.

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

Bu bölümde, camera_module_t.common.module_api_version temel alınarak Kamera donanımı modülünün modül sürümü oluşturma bilgileri yer alır. En önemli iki onaltılık rakam ana sürümü, en önemsiz iki onaltılık rakam 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, flaş birimi olan herhangi bir kamera cihazında, kamera cihazını açmadan el feneri modunu açabilir. Kamera cihazı, flaş birimine erişirken kamera modülüne göre daha yüksek önceliğe sahiptir. Bir kamera cihazı açıldığında, modül arayüzü üzerinden etkinleştirilmişse el feneri kapatılır. Kamera cihazını açmak için open() çağrıldığında olduğu gibi kaynak çakışmaları olduğunda kamera HAL modülü, meşale modunun kapatıldığını meşale modu durumu geri çağırma işlevi aracılığıyla çerçeveye bildirmelidir.
  2. Harici kamera (ör. USB tak-çıkar kamera) desteği. API güncellemelerinde, kamera statik bilgilerinin yalnızca kamera bağlıyken ve harici çalışırken takılan kameralar için kullanıma hazır olduğunda kullanılabilir olduğu belirtilir. Kamera durumu CAMERA_DEVICE_STATUS_PRESENT olmadığında statik bilgi almak için yapılan aramalar geçersizdir. Çerçeve, kullanılabilir harici kamera listesini yönetmek için yalnızca cihaz durumu değişikliği geri çağırmalarına güvenir.
  3. Kamera anlaşması ipuçları. Aynı anda açılıp kullanılabilecek kamera cihazlarının sayısını açıkça belirtme desteği eklenir. 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 modülü yüklendikten sonra HAL'ın tek seferlik başlatılmasına izin vermek için 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, kamera cihazını daha düşük bir cihaz HAL sürümü 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 sürüm, 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 cihaz açıkken erişilebilen eski vendor_tag_query_ops öğelerini kullanımdan kaldırır.

2.1

Bu kamera modülü sürümü, kamera modülü durumundaki değişiklikler hakkında çerçeveyi bilgilendirmek için kullanılan kamera HAL modülünden çerçeveye eşzamansız geri çağırma desteği ekler. 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 öğesinin device_version alanı her zaman geçerlidir. camera_info öğesinin 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ı, yalnızca kamera cihazı HAL'ının 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'sini destekleyebilir.