Panduan OEM untuk penerapan RoI

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 tanda FEATURE_Roi. Jika FEATURE_Roi tidak diaktifkan, tidak ada perubahan pada perilaku encoder video.

Perubahan pada 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 tertentu. Selain itu, dua tombol diperkenalkan dalam Codec2 (C2) untuk mendukung jenis-jenis baru ini. Penggunaan untuk kedua kunci tersebut sama dengan API publik. Dalam loop frame encoder, konfigurasi disesuaikan secara dinamis selama tahap berjalan, sebelum buffering input dimasukkan ke antrean, yang dijelaskan sebagai berikut:

  • Dalam skenario melekat, jika tidak ada konfigurasi RoI yang diberikan untuk frame saat ini, encoder akan 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 di 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 kecepatan asli.
    • Jika bukan nol: QP adalah kontrol kecepatan 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 dan left: Koordinat RoI, dalam bentuk persegi panjang. RoI diperluas agar selaras dengan batas LCU. Nilai ini mewakili sudut kiri atas setiap piksel, sehingga ((0,0), (16, 16)) menentukan blok 16x16 penuh.

  • qpOffset: Setiap nilai array mewakili offset QP area rect target. Definisi dan penggunaannya sama dengan pada Nilai kParamIndexQpOffsetMapBuffer.

Algoritma pemetaan

Tabel berikut menunjukkan pemetaan dari kunci publik ke framework video:

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 kunci vendor 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. Nilai ini dibatasi ke rentang yang didukung SoC.
Beberapa konfigurasi RoI (baik kunci standar maupun kunci khusus vendor) ditetapkan ke satu frame. Pengguna menggunakan kunci standar dan kunci vendor untuk frame 1. Jika tersedia, framework akan mempertahankan konfigurasi rect standar pertama, konfigurasi QP_map standar pertama, atau keduanya. Di setiap kategori, framework hanya mengirim satu konfigurasi standar ke SoC dan jika konfigurasi standar tersedia, penerapan 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:

  1. rect standar
  2. QP_map standar
  3. Vendor rect
  4. Vendor QP_map