HDR Parlaklığını SDR Uyumlu Bir Aralıkla Ton Eşleme

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ü, CPU libtonemap_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 de libhwui 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ı, burada linearRGB, doğrusal uzayda RGB piksellerinin mutlak nitlerinin değeridir xyz ise linearRGB 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ünde in_libtonemap_ öneki bulunmalıdır.
  • SkSL üniformaları oluştur

    ToneMapper::generateShaderSkSLUniforms() arayüzü, farklı HDR'deki meta verileri açıklayan bir meta veri struct 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 ve in_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ı tanıtır.

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 hakkında bilgi edindiniz.

Doğrulama

Uygulamanızı doğrulamak için aşağıdaki adımları izleyin:

  1. HDR videoları, ekran sisteminizin desteklediği HDR standartlarına uygun ekranda oynatın, ör. HLG, HDR10, HDR10+ veya DolbyVision'dır.

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