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, kullanıcı yapılandırmalarını video kodlayıcıya entegre edip analiz etmek için herkese açık API'ler sunarak YG'ler için daha iyi sıkıştırma kalitesi sağlar.
Uygulama
SoC tedarikçileri ve OEM'ler, video kodlama için yatırım getirisi desteğini FEATURE_Roi
işaretiyle kontrol edebilir. 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, bu özelliğin uygulanması için video çerçevesinde yapılan değişiklikler ayrıntılı olarak açıklanmıştır.
Codec2'deki Anahtarlar
Android 15'te, niceleme parametresi eşlemesi (QP_map
) ve dikdörtgen yapılandırma (rect
), RoI yapılandırma türleri olarak tanımlanır. Ayrıca bu yeni türleri desteklemek için Codec2'de (C2) iki anahtar kullanıma sunulmuştur. Her iki anahtarın kullanımı, genel API'lerle aynıdır.
Kodlayıcının çerçeve döngüsünde yapılandırma, aşağıda açıklandığı gibi giriş arabelleği sıraya alınmadan önce çalıştırma aşamasında dinamik olarak ayarlanır:
Yapışkan senaryoda, geçerli çerçeve için RoI yapılandırması sağlanmamışsa kodlayıcı, önceki kareyle aynı yapılandırmayı kullanır.
Dinamik 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.
kParamIndexQpKapalısetHaritaBuffer
kParamIndexQpOffsetMapBuffer
tuşu, bir karenin qp-offset
haritasını işaret eder. Değeri, setParameters
kaynağından gelen PARAMETER_KEY_QP_OFFSET_MAP
giriş parametresi kullanılarak belirlenir.
kParamIndexQpOffsetMapBuffer
, C2InfoBuffer
bölgesinde aşağıdaki özelliklere sahip bir bayt dizisidir:
Uzunluk: Bir karedeki 16x16 blok sayısı.
Değer: Dizinin her değeri, -51~51 bölgesindeki 16x16 blokun QP ofsetidir. Hedef en büyük kodlama biriminin (LCU) QP'si, kodlayıcı hız kontrolü artı ofset ile hesaplanır. Hesaplanan sonuç 0~51 bölgeyi aşarsa değer, 0~51 olacak şekilde kısaltılır.
- 0 ise: QP ofseti yoksa QP'ye orijinal ücret kontrolü karar verir.
- Sıfırdan farklıysa: QP, orijinal bit hızı kontrolü artı ofsettir.
- Negatifse: Video kalitesi, hedef izleme süresinde (LCU) 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ğerlerinin ortalamasını alarak yapılandırmayı gerçek LCU boyutuna göre ayarlar.
C2_PARAMKEY_QP_OFFSET_RECTS
C2_PARAMKEY_QP_OFFSET_RECTS
anahtarı (coding.qp-offset-rects
olarak ayarlanır) 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 aşağıdaki yapı C2QpOffsetRectStruct
kullanıma sunulmuştur:
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
veleft
: YG'nin dikdörtgen şeklindeki 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
: Dizinin her değeri, hedefrect
alanının QP ofsetini temsil eder. Tanımı ve kullanımı,kParamIndexQpOffsetMapBuffer
değerinin tanımıyla aynıdır.
Eşleme algoritması
Aşağıdaki tabloda, ortak anahtarlardan video çerçevesine eşleme gösterilmektedir:
Ortak anahtarlar veya API'ler | Video çerçevesinde eşleme |
---|---|
PARAMETER_KEY_QP_OFFSET_MAP |
Değer, kParamIndexQpOffsetMapBuffer örneği olarak C2InfoBuffer 'e iletilir. |
PARAMETER_KEY_QP_OFFSET_RECTS |
Değer, String değerinden Struct C2QpOffsetRectStruct değerine dönüştürüldü ve C2_PARAMKEY_QP_OFFSET_RECTS değerine iletildi. |
Hata işleme
OEM uygulaması aşağıdaki hata durumlarını ele almalıdır:
Hata örneği | Örnek | Kullanım |
---|---|---|
YG'yi etkinleştirmek için hem tedarikçi firma anahtarı hem de standartlaştırılmış anahtar kullanılır. | Kullanıcı, RoI'yi etkinleştirmek için hem setFeatureEnabled(FEATURE_ROI) hem de tedarikçi anahtarını çağırır. |
YG açık olmalıdır. |
QP ofseti aralık içinde ancak SoC tedarikçileri tarafından desteklenmiyor. | Kullanıcı, QP ofsetini 12 olarak ayarlar ancak SoC yalnızca 10'a kadar QP ofsetini destekler. | Desteklenen QP ofset aralığı, elimizden geldiğince uygulanır. Değer, SoC'nin desteklenen aralığına kenetlenir. |
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. | Mevcutsa çerçeve, ilk standartlaştırılmış rect yapılandırmasını, ilk standartlaştırılmış QP_map yapılandırmasını veya ikisini birden korur. Çerçeve, her kategoride SoC'ye yalnızca bir standartlaştırılmış yapılandırma gönderir ve standartlaştırılmış yapılandırma mevcutsa SoC uygulaması, tedarikçi yapılandırmalarını yoksaymalıdır. SoC'ye birden fazla yapılandırma gönderilirse SoC tedarikçisinin yalnızca bir RoI yapılandırması tutması ve diğer yapılandırmaları yoksayması gerekir.Yapılandırmalar şu öncelik sırasına göre saklanır:
|