Android 15 memperkenalkan proses standar untuk mengintegrasikan konfigurasi pengguna region minat (RoI) ke dalam video Android encoding. Fitur ini memungkinkan kualitas kompresi yang lebih baik untuk RoI dengan menawarkan API publik untuk mengintegrasikan dan menganalisis konfigurasi pengguna ke dalam video arsitektur
Implementasi
Vendor SoC dan OEM dapat mengontrol dukungan RoI untuk encoding video dengan
FEATURE_Roi
penanda. Jika FEATURE_Roi
tidak diaktifkan, tidak ada perubahan pada perilaku encoder video.
Perubahan dalam framework video
Bagian ini menjelaskan perubahan dalam framework video yang diperlukan untuk menerapkan ini aplikasi baru.
Kunci dalam Codec2
Di Android 15, parameter kuantisasi memetakan
(QP_map
) dan konfigurasi persegi panjang (rect
) ditentukan sebagai RoI
jenis konfigurasi. Selain itu, dua tombol diperkenalkan
dalam Codec2 (C2) untuk
mendukung jenis-jenis baru ini. Penggunaan untuk kedua kunci sama dengan API publik.
Dalam loop frame encoder, konfigurasinya disesuaikan secara dinamis
selama tahap lari, sebelum buffer input diantrekan, dijelaskan sebagai
berikut ini:
Dalam skenario melekat, jika tidak ada konfigurasi RoI yang disediakan untuk encoder menggunakan konfigurasi yang sama dengan frame sebelumnya.
Dalam skenario dinamis, jenis konfigurasi RoI dapat berubah secara dinamis.
Kunci baru di C2 dijelaskan di bagian berikut.
kParamIndexQpOffsetMapBuffer
kParamIndexQpOffsetMapBuffer
sinyal utama peta qp-offset
untuk sebuah frame. Nilainya diatur menggunakan input
parameter PARAMETER_KEY_QP_OFFSET_MAP
dari setParameters
.
kParamIndexQpOffsetMapBuffer
adalah array byte dalam
C2InfoBuffer
,
dengan atribut berikut:
Panjang: Jumlah blok 16x16 dalam satu bingkai.
Nilai: Setiap nilai array adalah offset QP dari blok 16x16, di region -51~51. QP unit coding terbesar target (LCU) dihitung oleh kontrol kecepatan encoder dan offset. Jika hasil yang dihitung melebihi 0~51 , nilainya akan dipotong menjadi 0~51.
- Jika 0: Tidak ada offset QP, QP ditentukan oleh kontrol tarif asli.
- Jika bukan nol: QP adalah kontrol tarif asli ditambah offset.
- Jika negatif: Kualitas video ditingkatkan di LCU target.
- Jika positif: Kualitas video menurun di LCU target.
Penggunaan: Pengguna harus mengonfigurasi kunci ini sebagai blok 16x16. Encoder akan menyesuaikan konfigurasi ke ukuran LCU sebenarnya dengan rata-rata nilai 16x16 blok di LCU.
C2_PARAMKEY_QP_OFFSET_RECTS
C2_PARAMKEY_QP_OFFSET_RECTS
tombol (disetel ke coding.qp-offset-rects
menetapkan RoI sebagai QpOffset-Rects
. Nilainya ditetapkan menggunakan parameter input PARAMETER_KEY_QP_OFFSET_RECTS
dari setParameters
.
Untuk mendukung kunci ini, struktur berikut C2QpOffsetRectStruct
diperkenalkan:
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")
}
Dalam hal ini:
top
danleft
: Koordinat RoI, dalam bentuk persegi panjang. RoI adalah direntangkan untuk menyelaraskan dengan batas LCU. Nilainya mewakili sudut kiri atas setiap piksel, sedemikian rupa sehingga ((0,0), (16, 16)) mendefinisikan blok berukuran 16x16 penuh.qpOffset
: Setiap nilai array mewakili offset QP targetrect
area. Definisi dan penggunaannya sama dengan pada NilaikParamIndexQpOffsetMapBuffer
.
Algoritma pemetaan
Tabel berikut menampilkan pemetaan dari kunci publik ke video kerangka kerja:
Kunci publik atau API | Pemetaan dalam framework video |
---|---|
PARAMETER_KEY_QP_OFFSET_MAP |
Nilai diteruskan ke kParamIndexQpOffsetMapBuffer sebagai
Instance C2InfoBuffer . |
PARAMETER_KEY_QP_OFFSET_RECTS |
Nilai dikonversi dari String menjadi
Struct C2QpOffsetRectStruct dan diteruskan ke
C2_PARAMKEY_QP_OFFSET_RECTS . |
Penanganan error
Implementasi OEM harus menangani kasus error berikut:
Kasus error | Contoh | Penanganan |
---|---|---|
Kunci vendor dan kunci standar digunakan untuk mengaktifkan RoI. | Pengguna memanggil setFeatureEnabled(FEATURE_ROI) DAN
untuk mengaktifkan RoI. |
RoI harus diaktifkan. |
Offset QP berada dalam rentang, tetapi tidak didukung oleh vendor SoC. | Pengguna menetapkan offset QP sebagai 12, tetapi SoC hanya mendukung offset QP hingga 10. | Rentang offset QP yang didukung dibiarkan sebagai upaya terbaik. Nilainya adalah dikunci ke rentang yang didukung SoC. |
Beberapa konfigurasi RoI (baik kunci standar maupun kunci khusus vendor) ditetapkan ke satu {i>frame<i}. | Pengguna menggunakan kunci standar dan kunci vendor untuk frame 1. | Jika tersedia, framework akan mempertahankan rect standar pertama
konfigurasi standar pertama, yaitu QP_map .
atau keduanya. Di setiap kategori, framework hanya mengirimkan satu
ke SoC dan jika konfigurasi
standar tersedia,
implementasi SoC harus mengabaikan
konfigurasi vendor. Jika
beberapa konfigurasi dikirim ke SoC, vendor SoC harus mempertahankan
hanya satu konfigurasi RoI dan
mengabaikan konfigurasi lainnya.Konfigurasi dipertahankan dalam urutan prioritas ini:
|