Android 13, satıcı tarafından yapılandırılabilen bir statik
ton eşleme işlemlerini tanımlayan ve paylaşılan libtonemap
adlı kitaplık
ile nasıl başlayabileceğinizi göstereceğim.
Bu özellik, OEM'lerin görüntü ton eşlemesini tanımlamasını ve paylaşmasını sağlar.
çerçeve ile tedarikçiler arasındaki algoritmaları kullanarak ton uyuşmazlığını azaltır
yardımcı olur.
Android 13'ten önceki sürümlerde ekrana özgü ton eşleme Operasyonlar HWC, SurfaceFlinger ve uygulamalar arasında paylaşılmadı. Şuna bağlı olarak: oluşturma yolunda, bu durum HDR içeriklerde görüntü kalitesinde uyuşmazlıklara yol açıyordu. çıkış alanı ile farklı şekillerde eşlenen HDR içeriğinin nasıl eşlendiğine bakalım. Bu ekran döndürme gibi senaryolarda algılanabilirdi. GPU ve DPU arasındaki strateji değişiklikleri ve oluşturma farklılıkları iki davranış şekli arasındaki bir farktır.
Bu sayfada, API'nin arayüzü, özelleştirme ve doğrulama ayrıntıları
libtonemap
kitaplığı.
Ton eşleme kitaplığı için arayüz
libtonemap
kitaplığının CPU destekli uygulamaları ve SkSL gölgelendiricileri vardır.
GPU arka uç bileşimi için SurfaceFlinger tarafından ve
Ton eşleme arama tablosu (LUT) oluşturarak. libtonemap
ana noktasına giriş noktası
android::tonemap::getToneMapper()
;
ToneMapper
arayüzünü uygular.
ToneMapper
arayüzü aşağıdaki özellikleri destekler:
Ton eşleme LUT oluştur
ToneMapper::lookupTonemapGain
arayüzü, CPUlibtonemap_LookupTonemapGain()
içinde tanımlanan gölgelendiricinin uygulanmasına olanak tanır. Bu çerçevedeki birim testleri tarafından ve iş ortakları tarafından içinde bir ton eşleme LUT oluşturma konusunda yardım alabilirsiniz.libtonemap_LookupTonemapGain()
, renk değerlerini mutlak değer olarak alır, hem doğrusal RGB hem de XYZ'de normalleştirilmemiş doğrusal boşluk ve kayan noktalı bir değer döndürür doğrusal uzayda giriş renklerinin ne kadar çarpılacağını tanımlıyor.SkSL gölgelendirici oluştur
ToneMapper::generateTonemapGainShaderSkSL()
arayüzü, Kaynak ve hedef veri alanı verilen SkSL gölgelendirici dizesi. SkSL gölgelendirici:RenderEngine
için Skia uygulamasına entegre edildi en üst düzeye çıkarmak için güçlü birleştirme bileşenlerinden faydalanırız. Gölgelendirici delibhwui
cihazına takıldıysa Böylece,TextureView
için HDR-SDR ton eşlemenin verimli bir şekilde uygulanabilmesine izin veriliyor. Oluşturulan dize Skia tarafından kullanılan diğer SkSL gölgelendiricileriyle satır içine alındığından, gölgelendirici aşağıdaki kurallara uymalıdır:- Gölgelendirici dizesinde
float libtonemap_LookupTonemapGain(vec3 linearRGB, vec3 xyz)
imzası, buradalinearRGB
, doğrusal uzayda RGB piksellerinin mutlak nitlerinin değeridirxyz
iselinearRGB
XYZ'ye dönüştürülür. - Gölgelendirici dizesi tarafından kullanılan yardımcı yöntemlere
çerçeve gölgelendirici tanımlarının çakışmaması için
libtonemap_
dizesi ekleyin. Benzer şekilde, giriş formalarının önündein_libtonemap_
öneki bulunmalıdır.
- Gölgelendirici dizesinde
SkSL üniformaları oluştur
ToneMapper::generateShaderSkSLUniforms()
arayüzü, farklı HDR'deki meta verileri açıklayan bir meta veristruct
verilmiştir. standartlar ve görüntüleme koşulları:SkSL gölgelendiriciyle bağlı üniformaların listesi.
Tek tip değerler
in_libtonemap_displayMaxLuminance
vein_libtonemap_inputMaxLuminance
. Bu değerler çerçeve gölgelendiricileri tarafından kullanılır girişlibtonemap
hücresine ölçeklendirilir ve çıkış şu şekilde normalleştirilir: geçerlidir.
Şu anda forma üretme süreci girdilerden bağımsızdır ve çıkış veri alanıdır.
Özelleştirme
libtonemap
kitaplığının referans uygulaması kabul edilebilir sonuçlar üretir. Ancak,
GPU bileşimi tarafından kullanılan ton eşleme algoritması,
referans uygulamanın kullanılması, DPU bileşimi tarafından
titremesinden kaynaklanır. Özelleştirme
Bu tür, satıcıya özgü resim kalitesi sorunlarını çözmeniz gerekir.
OEM'lerin, libtonemap
kullanımını geçersiz kılması önemle tavsiye edilir.
getToneMapper()
tarafından döndürülen kendi ToneMapper
alt sınıfını tanımlar.
Uygulamayı özelleştirirken iş ortaklarının şu işlemlerden birini yapması beklenir:
takip etmek için:
libtonemap
uygulamasını doğrudan değiştirin.- Kendi statik kitaplıklarını tanımlayın, kitaplığı bağımsız olarak derleyin ve
libtonemap
kitaplığının.a
dosyasını, kendi özel kitaplığından oluşturulan dosyayla değiştirin kitaplığını açar.
Tedarikçi firmaların çekirdek kodunu değiştirmesi gerekmez. Birden fazla tedarikçi firmanın için DPU ton eşleme algoritmalarıyla ilgili ayrıntıları iletmek bazı ipuçları vereceğim.
Doğrulama
Uygulamanızı doğrulamak için aşağıdaki adımları izleyin:
HDR videoları, ekran sisteminizin desteklediği HDR standartlarına uygun ekranda oynatın, ör. HLG, HDR10, HDR10+ veya DolbyVision'dır.
Kullanıcı tarafından algılanabilir titreme olmaması için GPU bileşimini açın/kapatın.
GPU bileşimini değiştirmek için aşağıdaki
adb
komutunu kullanın:adb shell service call SurfaceFlinger 1008 i32 <0 to enable HWC composition, 1 to force GPU composition>
Genel sorunlar
Bu uygulamada aşağıdaki sorunlar ortaya çıkabilir:
Bantlama, GPU bileşimi tarafından kullanılan oluşturma hedefi daha düşük olduğunda ortaya çıkar daha yüksek bir hassasiyet seviyesi sağlar. Örneğin, şeritlerin oluşturulması HWC uygulaması, HDR için opak 10 bit biçimleri desteklediğinde ortaya çıkar (ör. RGBA1010102 veya P010 ancak GPU bileşiminin 8 bit biçimde yazması gerekir alfa desteği için RGBA8888 gibi.
DPU belirleniyorsa miktar belirleme farklılıklarından dolayı hafif bir renk kayması meydana gelir GPU'dan farklı bir hassasiyette çalıştığında.
Bu sorunların her biri, ilk gösterim kampanyalarının göreceli kesinlik farklılıklarıyla temel donanımdan yararlanabilirsiniz. Tipik bir geçici çözüm, bir titreme olmasını sağlamaktır. daha düşük hassasiyetli yollara geçer ve bu da hassasiyet farklılıklarının daha az insan kaynaklı olmasını sağlar fark edebilirsiniz.