YG'nin uygulanmasıyla ilgili OEM kılavuzu

Android 15, ilgi alanı (ROI) kullanıcı yapılandırmalarını Android video kodlama çerçevesine entegre etmek için standartlaştırılmış bir süreç sunar. Bu özellik, YG'ler için daha iyi sıkıştırma kalitesi sağlar. Kullanıcı yapılandırmalarını videoya entegre edip analiz etmek için herkese açık API'ler sunmak kodlayıcıda bulabilirsiniz.

Uygulama

SoC tedarikçileri ve OEM'ler, FEATURE_Roi tıklayın. FEATURE_Roi etkinleştirilmemişse video kodlayıcı davranışında herhangi bir değişiklik olmaz.

Video çerçevesinde yapılan değişiklikler

Bu bölümde, bunu uygulamak için video çerçevesinde yapılması gereken değişiklikler özelliğini kullanabilirsiniz.

Codec2'deki anahtarlar

Android 15'te niceleme parametresi eşlemesi (QP_map) ve dikdörtgen yapılandırma (rect), YG olarak tanımlanır yapılandırma türleri. Ek olarak Codec2'de (C2) kullanılan iki anahtarın destekler. Her iki anahtarın kullanımı da herkese açık API'lerle aynıdır. Kodlayıcının çerçeve döngüsünde, yapılandırma dinamik olarak ayarlanır. sırasında, giriş arabelleği sıraya alınmadan önce şöyle olur:

  • Yapışkan bir senaryoda, geçerli kare için ROI yapılandırması sağlanmazsa kodlayıcı önceki kareyle aynı yapılandırmayı kullanır.

  • Dinamik bir senaryoda YG yapılandırma türleri dinamik olarak değişebilir.

C2'deki yeni anahtarlar aşağıdaki bölümlerde açıklanmıştır.

kParamIndexQpOffsetMapBuffer

kParamIndexQpOffsetMapBuffer tuşu, bir kare için qp-offset haritasını işaret eder. Bu değer, giriş kullanılarak ayarlanır PARAMETER_KEY_QP_OFFSET_MAP parametresi kalkış: setParameters.

kParamIndexQpOffsetMapBuffer, C2InfoBuffer içinde aşağıdaki özelliklere sahip bir bayt dizisidir:

  • Uzunluk: Bir karedeki 16x16 blokların sayısı.

  • Değer: Dizinin her değeri, bölgedeki 16x16 bloğunun QP ofsetidir -51~51. Hedef en büyük kodlama biriminin (LCU) QP değeri, kodlayıcı hız kontrolü ve ofset ile hesaplanır. Hesaplanan sonuç 0~51 değerini aşarsa bölge, değer 0~51 olacak şekilde kısaltılır.

    • 0 ise: QP ofseti yoksa QP'ye orijinal ücret kontrolü karar verir.
    • Sıfır değilse: QP, orijinal ücret kontrolü artı ofsettir.
    • Negatifse: Hedef LCU'da video kalitesi artırılır.
    • Pozitifse: Video kalitesi, hedef LCU'da düşmüştür.
  • Kullanım: Kullanıcı bu anahtarı 16x16 blok olarak yapılandırmalıdır. Kodlayıcı, LCU'daki 16x16 blokların değerlerini ortalayarak yapılandırmayı gerçek LCU boyutuna ayarlar.

C2_PARAMKEY_QP_OFFSET_RECTS

C2_PARAMKEY_QP_OFFSET_RECTS tuşu (coding.qp-offset-rects olarak ayarlandı YG'yi QpOffset-Rects olarak ayarlar. Değeri, setParameters kaynağındaki PARAMETER_KEY_QP_OFFSET_RECTS giriş parametresi kullanılarak belirlenir.

Bu anahtarı desteklemek için C2QpOffsetRectStruct yapısında mevcuttur. tanıtıldı:

struct C2QpOffsetRectStruct : C2Rect {
  int32_t qpOffset;

  DEFINE_AND_DESCRIBE_C2STRUCT(QpOffsetRect)
  C2FIELD(width, "width")
  C2FIELD(height, "height")
  C2FIELD(left, "left")
  C2FIELD(top, "top")
  C2FIELD(qpOffset, "qp-offset")
}

Nerede:

  • top ve left: RoI'nin dikdörtgen biçiminde koordinatları. Yatırım getirisi, LCU sınırlarıyla hizalanacak şekilde uzatılır. Değer, her pikselin sol üst köşesini temsil eder. Örneğin, ((0,0), (16, 16)) tam bir 16x16 blok tanımlar.

  • qpOffset: Dizideki her değer, hedef rect alanının QP ofsetini temsil eder. Tanımı ve kullanımı kParamIndexQpOffsetMapBuffer değeriyle aynıdır.

Eşleme algoritması

Aşağıdaki tabloda, herkese açık anahtarların video çerçevesine eşlenmesi gösterilmektedir:

Genel anahtarlar veya API'ler Video çerçevesinde haritalama
PARAMETER_KEY_QP_OFFSET_MAP Değer, kParamIndexQpOffsetMapBuffer örneği olarak C2InfoBuffer'e iletilir.
PARAMETER_KEY_QP_OFFSET_RECTS String değeri, şuna dönüştürülür: Struct C2QpOffsetRectStruct ve tarihinde geçti C2_PARAMKEY_QP_OFFSET_RECTS.

Hata işleme

OEM uygulaması aşağıdaki hata durumlarında işlem yapmalıdır:

Hata durumu Örnek Kullanım
YG'yi etkinleştirmek için hem tedarikçi anahtarı hem de standartlaştırılmış anahtar kullanılır. Kullanıcı, YG'yi etkinleştirmek için hem setFeatureEnabled(FEATURE_ROI) hem de tedarikçi anahtarını çağırır. YG etkinleştirilmelidir.
QP ofseti aralık dahilinde ancak SoC tedarikçi firmaları tarafından desteklenmiyor. Kullanıcı, QP ofsetini 12 olarak ayarlar, ancak SoC yalnızca 10'a kadar QP ofsetini destekler. Desteklenen QP ofset aralığı en iyi seçenek olarak bırakıldı. Değer sınırlı soC'nin desteklediği aralığa göre ayarlayın.
Birden fazla YG yapılandırması (standartlaştırılmış bir anahtar veya tedarikçiye özgü bir anahtar olabilir) tek bir çerçeveye ayarlanır. Kullanıcı, 1. kare için hem standartlaştırılmış anahtarı hem de tedarikçi anahtarını kullanır. Varsa çerçeve, standartlaştırılmış ilk rect sürümünü korur. ilk standart QP_map yapılandırması, veya her ikisini birden seçebilirsiniz. Her kategoride, çerçeve yalnızca tek bir standartlaştırılmış soC'ye yapılandırma ve standartlaştırılmış yapılandırma varsa SoC uygulaması, tedarikçi firma yapılandırmalarını yoksaymalıdır. Eğer SoC'ye birden fazla yapılandırma gönderilirse SoC'yi tedarikçinin diğer yapılandırmaları yoksayın.

Yapılandırmalar şu öncelik sırasına göre saklanır:

  1. Standart rect
  2. Standartlaştırılmış QP_map
  3. Satıcı rect
  4. Tedarikçi firma QP_map