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ışındaLIMITED
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.
Ş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.)Ş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:
Ş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 arabelleklerindeVideoNativeHandleMetadata
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
- Fiziksel kamera kimliklerini gizleyerek fiziksel kameraların ayrı ayrı veya ilgili mantıksal kameralar aracılığıyla kullanılmasını sağlayan çoklu kamera iyileştirmeleri. Çoklu Kamera Desteği başlıklı makaleyi inceleyin.
- Yeni bir oturum oluşturmanın performans yükü olmadan belirli bir oturum yapılandırmasının desteklenip desteklenmediğini kontrol etme olanağı.
CameraDevice
sayfasına göz atın. - İstemcinin daha az güç tüketmesi ve daha iyi performans göstermesi için belirli bir kullanım alanıyla ilgili önerilen yayın yapılandırmalarını alma özelliği.
getRecommendedStreamConfigurationMap
sayfasına göz atın. - Derinlik JPEG resim biçimi desteği. Daha ayrıntılı bilgi için Dinamik Derinlik spesifikasyonu bölümüne bakın.
- HEIC resim biçimi desteği. HEIF Görüntüleme başlıklı makaleyi inceleyin.
- Gizlilikle ilgili iyileştirmeler. İstemcinin
CameraCharacteristics
uygulamasından alınabilmesi içinCAMERA
izinlerine sahip olması gerekir.getKeysNeedingPermission
başlıklı makaleyi inceleyin.
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 hizmetininconfigureStreams_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 olarakconfigureStreams_3_5
vesignalStreamFlush
çağrıları arasında yarış durumu olup olmadığını kontrol etmek içinstreamConfigCounter
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ğerlerANDROID_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çinisTorchModeSupported
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 yerineLENS_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
-
configureStreams_3_4
:sessionParameters
ve mantıksal kameralar için destek eklenir. -
processCaptureRequest_3_4
: Akış yapısına fiziksel kamera kimliklerinin dahil edilmesi için destek ekler.
ICameraDeviceCallback
ile ilgili güncellemeler
-
processCaptureResult_3_4
: Çekim sonuçlarına fiziksel kamera meta verilerini ekler.
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 destekleniyorsaRAW_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ıncamera3_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 yerinecamera_common.h
içindeget_vendor_tag_ops
kullanın.register_stream_buffers
öğesini kullanımdan kaldırır. Çerçeve tarafındanprocess_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
yerineprocess_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:
- 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. - 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. - 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
veconflicting_devices
alanları her zamanget_camera_info
çağrısı tarafından döndürülencamera_info
yapısında ayarlanmalıdır. - 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.