คำแนะนำของ OEM สำหรับการติดตั้งใช้งาน ROI

Android 15 เปิดตัวกระบวนการมาตรฐานสำหรับการผสานรวมการกำหนดค่าของผู้ใช้สำหรับพื้นที่สนใจ (RoI) เข้ากับเฟรมเวิร์กการเข้ารหัสวิดีโอของ Android ฟีเจอร์นี้ช่วยให้การบีบอัดมีคุณภาพดีขึ้นสำหรับ ROI โดยให้บริการ API สาธารณะเพื่อผสานรวมและวิเคราะห์การกำหนดค่าของผู้ใช้ลงในโปรแกรมเปลี่ยนไฟล์วิดีโอ

การใช้งาน

ผู้ให้บริการ SoC และ OEM สามารถควบคุมการรองรับ ROI สำหรับการเข้ารหัสวิดีโอได้ด้วยธง FEATURE_Roi หากไม่ได้เปิดใช้ FEATURE_Roi จะไม่มีการเปลี่ยนแปลงลักษณะการทำงานของโปรแกรมเปลี่ยนไฟล์วิดีโอ

การเปลี่ยนแปลงในเฟรมเวิร์กวิดีโอ

ส่วนนี้จะอธิบายรายละเอียดการเปลี่ยนแปลงในเฟรมเวิร์กวิดีโอที่จําเป็นในการใช้ฟีเจอร์นี้

คีย์ใน Codec2

ใน Android 15 ระบบจะกำหนดแผนที่พารามิเตอร์การแปลงค่า (QP_map) และการกำหนดค่าสี่เหลี่ยมผืนผ้า (rect) เป็นประเภทการกำหนดค่า ROI นอกจากนี้ เรายังได้เปิดตัวคีย์ 2 รายการใน Codec2 (C2) เพื่อรองรับประเภทใหม่เหล่านี้ การใช้งานคีย์ทั้ง 2 รายการจะเหมือนกับ API สาธารณะ ภายในลูปเฟรมของโปรแกรมเปลี่ยนไฟล์ จะมีการปรับเปลี่ยนการกำหนดค่าแบบไดนามิกในระหว่างระยะการทำงาน ก่อนที่บัฟเฟอร์อินพุตจะจัดคิว ดังนี้

  • ในสถานการณ์ติดหนึบ หากไม่มีการกําหนดค่า ROI สําหรับเฟรมปัจจุบัน ตัวเข้ารหัสจะใช้การกําหนดค่าเดียวกับเฟรมก่อนหน้า

  • ในสถานการณ์แบบไดนามิก ประเภทการกําหนดค่า ROI จะเปลี่ยนแปลงแบบไดนามิกได้

อธิบายคีย์ใหม่ใน C2 ไว้ในส่วนต่อไปนี้

kParamIndexQpOffsetMapBuffer

คีย์ kParamIndexQpOffsetMapBuffer จะส่งสัญญาณแผนที่ qp-offset สำหรับเฟรม ค่าของตัวแปรนี้กำหนดโดยใช้พารามิเตอร์อินพุต PARAMETER_KEY_QP_OFFSET_MAP จาก setParameters

kParamIndexQpOffsetMapBuffer คืออาร์เรย์ไบต์ใน C2InfoBuffer ซึ่งมีแอตทริบิวต์ต่อไปนี้

  • ความยาว: จำนวนบล็อก 16x16 ในเฟรมเดียว

  • ค่า: ค่าแต่ละค่าของอาร์เรย์คือออฟเซ็ต QP ของบล็อก 16x16 ในภูมิภาค -51~51 ระบบจะคำนวณ QP ของหน่วยการเข้ารหัสที่ใหญ่ที่สุด (LCU) เป้าหมายโดยการควบคุมอัตราของตัวเข้ารหัสบวกค่าออฟเซ็ต หากผลลัพธ์ที่คำนวณได้เกินช่วง 0-51 ระบบจะตัดค่าให้เหลือ 0-51

    • หากเป็น 0: ไม่มีค่าออฟเซ็ต QP QP จะกำหนดโดยการควบคุมอัตราเดิม
    • หากไม่ใช่ 0: QP คือการควบคุมอัตราเดิมบวกค่าออฟเซ็ต
    • หากเป็นลบ: คุณภาพวิดีโอจะเพิ่มขึ้นใน LCU เป้าหมาย
    • ผลลัพธ์เป็นบวก: คุณภาพวิดีโอใน LCU เป้าหมายลดลง
  • การใช้งาน: ผู้ใช้ต้องกำหนดค่าคีย์นี้เป็นบล็อกขนาด 16x16 โปรแกรมเปลี่ยนไฟล์จะปรับการกำหนดค่าให้มีขนาด LCU จริงโดยหาค่าเฉลี่ยของบล็อก 16x16 ใน LCU

C2_PARAMKEY_QP_OFFSET_RECTS

คีย์ C2_PARAMKEY_QP_OFFSET_RECTS (ตั้งค่าเป็น coding.qp-offset-rects) กำหนด ROI เป็น QpOffset-Rects ค่าของพารามิเตอร์นี้กำหนดโดยใช้พารามิเตอร์อินพุต PARAMETER_KEY_QP_OFFSET_RECTS จาก setParameters

โครงสร้าง C2QpOffsetRectStruct ต่อไปนี้จึงเปิดตัวเพื่อรองรับคีย์นี้

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")
}

สถานที่:

  • top และ left: พิกัดของ ROI เป็นรูปสี่เหลี่ยมผืนผ้า RoI จะยืดออกให้สอดคล้องกับขอบเขต LCU ค่าแสดงถึงมุมซ้ายบนของพิกเซลแต่ละพิกเซล เช่น ((0,0), (16, 16)) จะกำหนดบล็อก 16x16 เต็มรูปแบบ

  • qpOffset: ค่าแต่ละค่าของอาร์เรย์แสดงค่าออฟเซ็ต QP ของพื้นที่เป้าหมายrect คําจํากัดความและการใช้งานจะเหมือนกับค่า kParamIndexQpOffsetMapBuffer

อัลกอริทึมการแมป

ตารางต่อไปนี้แสดงการแมปจากคีย์สาธารณะกับเฟรมเวิร์กวิดีโอ

คีย์สาธารณะหรือ API การแมปในเฟรมเวิร์กวิดีโอ
PARAMETER_KEY_QP_OFFSET_MAP ระบบจะส่งค่าไปยัง kParamIndexQpOffsetMapBuffer เป็นอินสแตนซ์ C2InfoBuffer
PARAMETER_KEY_QP_OFFSET_RECTS ระบบจะแปลงค่าจาก String เป็น Struct C2QpOffsetRectStruct และส่งไปยัง C2_PARAMKEY_QP_OFFSET_RECTS

การจัดการข้อผิดพลาด

การติดตั้งใช้งาน OEM ต้องจัดการกับกรณีข้อผิดพลาดต่อไปนี้

กรณีข้อผิดพลาด ตัวอย่าง การใช้งาน
ระบบจะใช้ทั้งคีย์ของผู้ให้บริการและคีย์มาตรฐานเพื่อเปิด ROI ผู้ใช้เรียกใช้ทั้ง setFeatureEnabled(FEATURE_ROI) และคีย์ผู้ให้บริการเพื่อเปิด ROI ต้องเปิด ROI
QP offset อยู่ในช่วงแต่ผู้ให้บริการ SoC ไม่รองรับ ผู้ใช้ตั้งค่าออฟเซ็ต QP เป็น 12 แต่ SoC รองรับออฟเซ็ต QP ได้สูงสุด 10 เท่านั้น ช่วงออฟเซ็ต QP ที่รองรับจะยังคงเป็นแบบพยายามอย่างเต็มที่ ค่าจะถูกจำกัดให้อยู่ในช่วงที่ SoC รองรับ
การกำหนดค่า ROI หลายรายการ (ไม่ว่าจะเป็นคีย์มาตรฐานหรือคีย์เฉพาะของผู้ให้บริการ) ได้รับการตั้งค่าเป็นเฟรมเดียว ผู้ใช้ใช้ทั้งคีย์มาตรฐานและคีย์ของผู้ให้บริการสำหรับเฟรม 1 เฟรมเวิร์กจะเก็บการกําหนดค่า rect มาตรฐานครั้งแรก การกําหนดค่า QP_map มาตรฐานครั้งแรก หรือทั้ง 2 อย่าง (หากมี) ในแต่ละหมวดหมู่ เฟรมเวิร์กจะส่งการกำหนดค่ามาตรฐานเพียงรายการเดียวไปยัง SoC และหากมีการกำหนดค่ามาตรฐาน การติดตั้งใช้งาน SoC ต้องไม่สนใจการกำหนดค่าของผู้ให้บริการ หากมีการส่งการกําหนดค่าหลายรายการไปยัง SoC ผู้ให้บริการ SoC ต้องเก็บการกําหนดค่า RoI ไว้เพียงรายการเดียวและละเว้นการกําหนดค่าที่เหลือ

ระบบจะเก็บการกำหนดค่าตามลําดับความสําคัญดังนี้

  1. มาตรฐานrect
  2. มาตรฐานQP_map
  3. ผู้ให้บริการ rect
  4. ผู้ให้บริการ QP_map